POST /api/withdrawals

Creates a withdrawal and reserves balance (pending) while the payout is processed.

Body (JSON): amount — decimal string; currency (required) — USDT | USDC; network (required) — chain to pay out on (TRX, ETH, BNB, POL, SOL, or a testnet symbol); destination — payout address; optional description, referenceId.

Per-chain rules: the (currency, network) pair must be enabled for withdrawals (USDT on TRX today; BNB and POL pairs open after their first production deposits) or the request fails with 400 listing the enabled pairs. Balances are per-chain — funds on other networks cannot cover the withdrawal. Total debited = amount + commission + per-chain networkFee (quoted at submission from the asset fee matrix).

Payout: the response is sent once the amount and fees are reserved and the withdrawal is recorded (status: "PENDING"); the on-chain payout follows. A payout that cannot be sent is reported by the withdrawal.failed webhook (status FAILED, full reserve returned, referenceId released), not by this response.

Idempotency: referenceId is unique per merchant and never creates a second payout. Retrying the same request (same referenceId, amount, currency, network and destination) returns 200 with the original withdrawal, its current status and "replayed": true. Reusing the referenceId for a different request returns 409 Duplicate referenceId with the existing withdrawalId. A reference left behind by a FAILED/CANCELLED attempt is released automatically.

Errors: insufficient available balance (including fees) → 400 with available / feeInfo; inactive/suspended merchant account → 403 Merchant account is not active; validation failures → 400 with field details. Reseller-initiated withdrawals are pinned to the reseller's registered withdrawal address and require admin approval before submission to the chain.

Authentication: Authorization: <API key> — send the raw key (no Bearer prefix required). Bearer <API key> is still accepted for compatibility.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Responses

400

Bad request — validation error or business rule failure.

401

Unauthorized — missing or invalid API key.

403

Forbidden — insufficient permissions for this operation.

500

Internal server error

Language
Credentials
Header
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json