Skip to main content
Moves a balance from your master wallet, or from one of your users’ addresses, out to an external destination.
Backend only. Never call from frontend.
Before you can withdraw, the destination address needs to be on your approved list, added from Dashboard → Wallets → Settings. This can’t be done with an API key: a key that could both withdraw and approve its own destination would be able to empty a balance on its own.

Endpoint

Requires the withdraw scope. This scope defaults off on every key, including keys created before scopes existed — turn it on explicitly for a key that should be able to move money.

Body

string
required
"master" to withdraw from your master wallet, or the walletRef of the address to withdraw from.
string
required
The chain to withdraw on.
string
required
USDC or USDT.
number
required
A positive number, in the token’s units. Refused, not rounded, if it carries more decimal places than the token supports — rounding could silently send more than you asked for.
string
required
Must already be on your approved destinations list for this account.
string
Reusing the same key with the same request returns the original withdrawal instead of creating a second one. Reusing it with a different source, chain, token, amount, or destination_address is refused with 409.

Example

Response (202)

202, not 200: the withdrawal is accepted and queued, and the transfer itself happens shortly after. Poll get a withdrawal or listen for wallet.withdrawal.completed to learn the outcome. Replaying an idempotency_key returns 200 with the original withdrawal instead.
string
required
queued, sending, completed, or failed.
string
Echoes what you sent: "master", or the walletRef you withdrew from.
string
The on-chain transaction, once sent. null until then, and while failed.

Listing your withdrawals

Needs wallets:read.
number
default:"20"
Page size, max 100.
number
default:"0"
Rows to skip.
Each entry is the same shape as the response above.

Errors