Withdrawals
Withdraw funds from a merchant's balance to an on-chain address.
Authorization is by API key — no email verification code is required:
- Merchant (self) — use your own API key and pass your own
{mid}. - Reseller — use your reseller API key and pass the managed merchant's
{mid}. The reseller must have an active connection with withdraw access granted.
If the merchant has configured a default approval process that applies to the amount, the withdrawal is held for approval instead of executing immediately. With no approval process, it executes right away.
Flow
- Call
GET /v1/merchant/{mid}/withdrawto get the merchant's current balances and available chains, tokens, and network fee for each. - Call
POST /v1/merchant/{mid}/withdrawwith the chain, token, amount, and destination.
The merchant's balance is debited by amount + fee. No commission is charged — only the fixed network fee.
GET /v1/merchant/{mid}/withdraw
Returns the merchant's current balances and all chains/tokens available for withdrawal with fee info.
GET /v1/merchant/{mid}/withdraw
Authorization: Bearer dptb_your_keyResponse
{
"balances": [
{ "currency": "USDC", "amount": 150000000, "available": 150000000 },
{ "currency": "USDT", "amount": 50000000, "available": 50000000 }
],
"chains": [
{
"chain": "tron",
"tokens": [
{ "name": "USDC", "fee": 1000000, "min": 10000000, "max": 0 },
{ "name": "USDT", "fee": 1000000, "min": 10000000, "max": 0 }
]
},
{
"chain": "ethereum",
"tokens": [
{ "name": "USDC", "fee": 5000000, "min": 10000000, "max": 0 }
]
}
]
}balances[] — one entry per currency with a non-zero balance:
| Field | Description |
|---|---|
currency | Token symbol (e.g. USDC, USDT) |
amount | Total balance in 6dp micro-units |
available | Amount currently withdrawable in 6dp |
chains[] — one entry per supported withdrawal chain:
| Field | Description |
|---|---|
chain | Chain identifier (e.g. tron, ethereum, polygon, bsc) |
tokens[].name | Token symbol (e.g. USDC, USDT) |
tokens[].fee | Fixed network fee in 6dp micro-units deducted from the merchant's balance |
tokens[].min | Minimum withdrawal amount in 6dp. 0 = no minimum |
tokens[].max | Maximum withdrawal amount in 6dp. 0 = no maximum |
All amounts are in 6dp micro-units (1 USDC = 1,000,000). Divide by 1,000,000 for display.
POST /v1/merchant/{mid}/withdraw
Execute the withdrawal.
POST /v1/merchant/{mid}/withdraw
Authorization: Bearer dptb_your_key
Content-Type: application/jsonRequest Body
{
"chain": "tron",
"currency": "USDC",
"receiver": "TXyZ...abc",
"amount": 100000000
}| Field | Type | Required | Description |
|---|---|---|---|
chain | string | ✓ | Chain to withdraw on (from GET /v1/withdraw/chains) |
currency | string | ✓ | Token to withdraw (e.g. USDC, USDT) |
receiver | string | ✓ | Destination on-chain address |
amount | integer | ✓ | Amount to send in 6dp micro-units (excluding fee) |
The merchant's balance is debited amount + fee. Use GET /v1/withdraw/chains to look up the fee before submitting.
Response
{
"id": "a1b2c3d4-...",
"merchant_id": "...",
"type": "crypto",
"currency": "USDC",
"amount": 100000000,
"fee": 1000000,
"chain": "tron",
"receiver": "TXyZ...abc",
"status": "pending",
"created_at": "2026-05-21T10:00:00Z"
}Errors
| Status | Message | Cause |
|---|---|---|
400 | Insufficient USDC balance | Merchant balance < amount + fee |
400 | This withdrawal amount requires an approval process. Please select one. | A default approval process applies at this amount |
403 | — | Caller is not the merchant and has no active reseller connection with withdraw access |
