MolnPayDocs
API reference

Test mode

POST/v1/test/deposits

Writes 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.

AuthorizationBearer <token>

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"}
POST/v1/test/deposits/{id}/confirm
AuthorizationBearer <token>

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

id*string
Formatuuid

Response 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"}
POST/v1/test/deposits/{id}/fail

Closes a detected deposit as failed and emits deposit.failed, as the watcher does for a reverted transaction.

AuthorizationBearer <token>

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

id*string
Formatuuid

Response 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"}
POST/v1/test/deposits/{id}/orphan

Reverses 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.

AuthorizationBearer <token>

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

id*string
Formatuuid

Response 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"}