Skip to main content
POST
Pay out from a virtual account
Provider sandbox on this deployment. Our backend targets the bank provider’s sandbox: bank details are test details, no real transfer settles, and settlement lands on a testnet (read network from GET /v1/config). Known limits: only the EUR/IBAN rail is wired for the simulated pay-in, and identity checks run on test-mode applicants. Every response says which environment answered in its environment field.
Currently being connected, docs updating. This endpoint answers mock: true: ids, shapes and statuses are real and deterministic from your input, every money figure is the placeholder 1234567.89, and nothing is sent to a provider. Integrate against the shape; do not compute anything from the figures.

Authorizations

Authorization
string
header
required

Your API key, issued by us and shown once at creation.

Path Parameters

id
string
required

The virtual account id.

Example:

"va_1"

Body

application/json
chain
integer
required

Chain id the user's wallet sends the stablecoins from. Must be one your key may pay FROM and one the catalogue lists.

Required range: x <= 9007199254740991
Example:

42161

fiatCurrency
string
required

ISO 4217 code the beneficiary is credited in. It does not have to match the currency the virtual account receives.

Pattern: ^[A-Za-z]{3}$
Example:

"BRL"

beneficiary
object
required

Always name and schema; the rest of the fields follow the schema.

fiatAmount
string

What must arrive, decimal string in major units of fiatCurrency, solved backwards. Send this OR cryptoAmount, never both.

Pattern: ^\d+(\.\d+)?$
Example:

"100"

cryptoAmount
string

What the user gives up, decimal string in major units of cryptoCurrency. Send this OR fiatAmount, never both.

Pattern: ^\d+(\.\d+)?$
Example:

"1000.00"

reference
string

Your idempotency key, up to 64 characters. A retry carrying the same value answers the original object instead of creating a second one.

Maximum string length: 64
Example:

"payout-2026-09-02-115"

Response

The payout and where to send.

environment
enum<string>
required

Which environment answered. sandbox: at least one money upstream is the provider's sandbox - no real money moves there, and the card corridor is the sandbox's asset (read GET /v1/config), not the documented production one. production: every configured upstream is real. Derived from the configured upstream hosts at boot, never a flag.

Available options:
sandbox,
production
Example:

"sandbox"

mock
boolean
required

Always true on this endpoint: the provider behind it is currently being connected, docs updating. Ids, shapes and statuses are real and deterministic from your input; every money figure is the placeholder 1234567.89; nothing is sent to a provider. The field disappears the day the provider is wired, so branch on its presence, not its value.

Example:

true

id
string
required

The payout id. Poll it on POST /v1/bank/payout/status - virtual account payouts share that endpoint and vocabulary.

Example:

"bpo_9f0c4e2a18b7d3c6"

depositAddress
string
required

Where the user sends the stablecoins. While the payout providers are being connected this is the zero address and nothing must be sent to it; wired, it is a single-use address derived per payout.

Pattern: ^0x[0-9a-fA-F]{40}$
Example:

"0x0000000000000000000000000000000000000000"

depositAmount
string
required

Placeholder while the provider is being connected: always 1234567.89, never a price. Do not compute anything from it. When the provider is wired this becomes a decimal string in major units.

Allowed value: "1234567.89"
Example:

"1234567.89"

chain
integer
required

The chain depositAddress lives on - the one the request named.

Required range: x <= 9007199254740991
Example:

42161

fiatAmount
string
required

Placeholder while the provider is being connected: always 1234567.89, never a price. Do not compute anything from it. When the provider is wired this becomes a decimal string in major units.

Allowed value: "1234567.89"
Example:

"1234567.89"

rail
string
required

The fastest published payout rail for fiatCurrency, as GET /v1/limits names it.

Example:

"pix"

status
enum<string>
required

pending: created, waiting for the user's stablecoin at the deposit address. converting: the stablecoin landed and is being converted. sent: left the provider, NOT arrived. settled: reached the card or bank account - the one state to tell the user about. rejected: the provider refused it. returned: sent and came back. While the payout providers are being connected every payout answers pending.

Available options:
pending,
converting,
sent,
settled,
rejected,
returned
Example:

"pending"