Skip to main content
Sends a bank transfer for a user who already holds a virtual account. The money comes from the stablecoins their wallet sends, exactly as in a bank payout - what the virtual account adds is the user’s existing identity, corridor and settlement setup, so nothing is collected twice.
The virtual account never holds a fiat balance, so this is not a withdrawal. Money that arrives on the account is converted and settled the moment it lands. Paying out means the user’s wallet sends stablecoins back and we transfer fiat to the beneficiary you name - the account itself has nothing to draw on.
Needs the virtual-accounts permission on your API key. See Authentication.

Path parameter

string
required
The virtual account id from POST /v1/virtual-accounts.

Request

string
required
ISO 4217 code the beneficiary is credited in. It does not have to match the currency the virtual account receives - a user funded in AED can pay out in BRL.
string
The amount that must arrive. Send this or cryptoAmount.
string
The stablecoin the user gives up, if you would rather pin that side.
object
required
Who gets paid - the user themselves or a third party. Same shape as bank payouts: name plus the fields the rail needs.
string
Your idempotency key, up to 64 characters. Send one - a retry without it is a second transfer.

Response

string
The payout id. Poll with POST /v1/bank/payout/status - virtual account payouts share that endpoint and vocabulary.
string
Where the user’s wallet sends the stablecoins. Single-use, derived per payout.
string
The exact amount to send.
number
The chain depositAddress lives on - the network the account settles on.
string
What the beneficiary receives, after fees.
string
The rail chosen for the destination country and currency.
string
pending on creation.
The corridor a virtual account was opened with governs what arrives, not what leaves. A payout to a country or currency outside your account’s agreed corridors is refused with 422 no_route rather than routed anyway.

Errors