Creating virtual accounts needs the virtual-accounts permission on your API
key. It is granted separately from the rest of your key’s setup - ask us. A key
without it gets
403 permission_denied from every endpoint in this section. See
Authentication.Request
The account is opened for a user you have already onboarded, and it inherits the corridor agreed on your account: which rail and currency it accepts, which asset the incoming money is converted into, and which network it settles on. Those are not passed per request, so a browser cannot redirect where money lands.string
required
The id returned when the user was onboarded and their identity result shared with
the banking partner. See Bank transfers.
string
required
The id of the wallet registered for that user at onboarding. It is the wallet the
settled stablecoin is delivered to.
Response
string
The virtual account id. Keep it - see the note on reading accounts back below.
object
The bank details to display, plus the reference that ties a transfer to this
account. The fields depend on the rail: an IBAN with a SWIFT code for SEPA, an
account number with a routing number for ACH, an account number with a sort code
for UK rails, a CLABE for SPEI. Render what comes back rather than assuming a
shape, and show the reference exactly as returned - a transfer without it has to
be attributed by hand.
number
Your fee on this account, in basis points (100 bps = 1%), taken from money
arriving on it.
Some currencies provision asynchronously (USD, AED, COP): the details arrive
moments after the account is created rather than with it. Until read-back exists,
retry creation for the same user rather than polling - it is idempotent per user
and wallet.