Test mode
/v1/test/depositsWrites an inbound transfer to the customer's address on chain exactly as the watcher would have: a detected movement with deposit.detected, then (with confirm: true, the default) the asset's real confirmation threshold, the ledger credit and deposit.confirmed. The customer's balance moves; a payout can be requested against it.
decimals must be echoed, as on POST /v1/payouts — rehearse the mismatch here rather than in production.
confirm: false leaves the deposit detected so you can rehearse a pending state, then drive it with /confirm, /fail or /orphan.
Test wallet keys only (403 test_mode_only otherwise). Needs wallets:create.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/test/deposits" \ -H "Content-Type: application/json" \ -d '{ "customer_id": "160c0c4b-9966-4dc1-a916-8407eb10d74e", "chain": "ethereum", "asset": "BNB", "decimals": 0, "amount": "string" }'{ "object": "deposit", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "customer_id": "160c0c4b-9966-4dc1-a916-8407eb10d74e", "wallet_id": "d9a8fbfc-848f-43a2-9168-911ed3a04a48", "chain": "ethereum", "asset": { "chain": "ethereum", "symbol": "USDT", "decimals": 6, "contract": "string" }, "amount": "1500000000000000000", "amount_decimal": "string", "tx_hash": "string", "log_index": 0, "from_address": "string", "confirmations": 0, "required_confirmations": 0, "status": "detected", "block_time": "2019-08-24T14:15:22Z", "explorer_url": "string", "ledger_tx_id": "0b1a05ef-3576-45c3-b8af-b818b0138be4", "created_at": "2019-08-24T14:15:22Z"}/v1/test/deposits/{id}/confirmAuthorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Path Parameters
uuidResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/test/deposits/497f6eca-6276-4993-bfeb-53cbbbba6f08/confirm"{ "object": "deposit", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "customer_id": "160c0c4b-9966-4dc1-a916-8407eb10d74e", "wallet_id": "d9a8fbfc-848f-43a2-9168-911ed3a04a48", "chain": "ethereum", "asset": { "chain": "ethereum", "symbol": "USDT", "decimals": 6, "contract": "string" }, "amount": "1500000000000000000", "amount_decimal": "string", "tx_hash": "string", "log_index": 0, "from_address": "string", "confirmations": 0, "required_confirmations": 0, "status": "detected", "block_time": "2019-08-24T14:15:22Z", "explorer_url": "string", "ledger_tx_id": "0b1a05ef-3576-45c3-b8af-b818b0138be4", "created_at": "2019-08-24T14:15:22Z"}/v1/test/deposits/{id}/failCloses a detected deposit as failed and emits deposit.failed, as the watcher does for a reverted transaction.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Path Parameters
uuidResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/test/deposits/497f6eca-6276-4993-bfeb-53cbbbba6f08/fail"{ "object": "deposit", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "customer_id": "160c0c4b-9966-4dc1-a916-8407eb10d74e", "wallet_id": "d9a8fbfc-848f-43a2-9168-911ed3a04a48", "chain": "ethereum", "asset": { "chain": "ethereum", "symbol": "USDT", "decimals": 6, "contract": "string" }, "amount": "1500000000000000000", "amount_decimal": "string", "tx_hash": "string", "log_index": 0, "from_address": "string", "confirmations": 0, "required_confirmations": 0, "status": "detected", "block_time": "2019-08-24T14:15:22Z", "explorer_url": "string", "ledger_tx_id": "0b1a05ef-3576-45c3-b8af-b818b0138be4", "created_at": "2019-08-24T14:15:22Z"}/v1/test/deposits/{id}/orphanReverses the credit of a confirmed deposit and emits deposit.orphaned — the event your integration must handle by reversing its own credit. This is the only way to rehearse a reorg; rehearse it.
Authorization
apiKey Authorization: Bearer mp<64 hex> for live, mptest<64 hex> for test.
The token is the prefix plus 64 lowercase hex characters (32 CSPRNG bytes) and nothing else — no separators, no embedded fields — so nothing in it needs quoting, escaping or encoding.
Send it in the Authorization header and nowhere else. Never put it in a query string: URLs reach access logs, proxy logs, browser history and Referer headers, and a key that lands in any of those is a leaked key.
A key's KIND (checkout, payout or wallet) is a property of the key, not of the string: it is chosen at creation, returned by GET /v1/ping, and decides which routes the key may reach.
The full key is shown exactly once, at creation. No endpoint can return it afterwards. Moving funds additionally requires signing to be enabled globally, for your project, and for that key — so a read-only key is a supported configuration.
In: header
Path Parameters
uuidResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/test/deposits/497f6eca-6276-4993-bfeb-53cbbbba6f08/orphan"{ "object": "deposit", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "customer_id": "160c0c4b-9966-4dc1-a916-8407eb10d74e", "wallet_id": "d9a8fbfc-848f-43a2-9168-911ed3a04a48", "chain": "ethereum", "asset": { "chain": "ethereum", "symbol": "USDT", "decimals": 6, "contract": "string" }, "amount": "1500000000000000000", "amount_decimal": "string", "tx_hash": "string", "log_index": 0, "from_address": "string", "confirmations": 0, "required_confirmations": 0, "status": "detected", "block_time": "2019-08-24T14:15:22Z", "explorer_url": "string", "ledger_tx_id": "0b1a05ef-3576-45c3-b8af-b818b0138be4", "created_at": "2019-08-24T14:15:22Z"}