Virtual Accounts
List virtual accounts
Use limit<=100 — GET /v1/virtual-accounts?limit>100 returns a raw 500 "Internal server error" (same known cap as GET /v1/users; applies to ALL list endpoints). Note provider and currency come back null in the list view — fetch by ID if you need them.
GET
List virtual accounts
Previous
Create a virtual accountCreates a **crypto** `US_BANK` virtual account (USDT on Tron).
⚠️ **`bank` is REQUIRED for `US_BANK` VAs — including crypto.** Omitting it returns `400 "bank is required for US_BANK virtual accounts"`. (An earlier support answer that said to remove `bank` for crypto was incorrect.)
The bank value is **environment-scoped**:
- **Sandbox** (this collection): use `slovak_savings_bank` (the SWIFT/crypto rail). Sending `portage` here returns `400 "Invalid bank"` — `portage` is only authorized in production.
- **Production**: the same crypto rail is `portage`.
`bank` selects the **provider/rail**; `mode: "crypto"` + `destination` make it a crypto VA — both are needed, they are not redundant. Note: Tron (`tron`) is accepted on `slovak_savings_bank` in sandbox even though the `destination.network` enum historically documented only `solana | polygon`.
**Production variant** — change one line: `"bank": "portage"` (everything else stays the same). `slovak_savings_bank` and `portage` are both SWIFT/crypto-capable banks; the value is just environment-scoped. Precondition: the user must be `status: VERIFIED` and eligible for the product.
**Not-ready marker:** this VA type shows `account_number: null` until provisioned (the `"PENDING-ACT-ACCOUNT"` sentinel is ACT-only). Funds-ready = `account_number` non-null AND != `"PENDING-ACT-ACCOUNT"`.
Next
List virtual accounts