SET API (Platforms) · Virtual accounts
Open a virtual account
POST/v1/virtual_accounts
Bank details payers send to: a US account and routing number (ACH, wire, FedNow), a virtual IBAN (SEPA) or a UK account (Faster Payments). Each deposit is delivered as stablecoin to the wallet named (way 1) or settled on to the customer's bank through its Cash-Out Address (way 3).
Platform key
beneficiary: {"type": "platform"}(the platform's own wallet) is refused with403 platform_funds_not_allowedunless SET has allowed platform funds for that platform. Use the merchant's own wallet,{"type": "customer", …}.
Headers
Idempotency-Keystring- Optional. The same key and body run once; a replay answers with
Idempotent-Replayed: true. Kept 24 hours.
Body
customerstringrequired- An
approvedcustomer, endorsed forcurrency. currency"usd" | "eur" | "gbp"- Default
usd. assetstring- Way 1: the stablecoin and chain delivered, for example
usdc-base,usdc-solana,usdt-ethereum,eurc-base. addressstring- Way 1: the destination wallet.
beneficiaryobject- Way 1: whose wallet it is (Travel Rule).
{type: "customer", walletType: "hosted" | "self_custodied", ownershipVerifiedAt}. settleTo{ cashOutAddress }- Way 3, instead of asset/address/beneficiary: settle each deposit to this Cash-Out Address and on to the bank.
Notes
- USD account details carry the customer's name. For EUR and GBP accounts the beneficiary name is the provider's legal entity unless the account is in the customer's name: senders must use the
beneficiaryNamereturned. - Deposit instructions are read live for each answer and never stored.
Errors
400 asset_invalid400 address_invalid400 beneficiary_invalid400 wallet_type_invalid400 ownership_verified_at_invalid400 cash_out_address_invalid409 settle_route_not_supported409 endorsement_required409 verification_incomplete409 account_conflict401 api_key_required401 api_key_invalid401 api_key_wrong_mode403 scope_missing429 rate_limited