GET /customers/:id/virtual-account-approvals
List the virtual accounts this customer can be issued — the currency each collects, the country it's domiciled in, the bank behind it, and what it costs to maintain — each with the status of its review.
Only rows with status of approved can be opened today. Use this to show a customer which collection accounts are available to them, and what each one costs, before requesting one.
The list is narrowed to the currencies your organization is approved for. Approvals are cached for up to an hour, and a currency's own virtual-account review for 45 seconds to 5 minutes depending on where it stands, so a freshly granted approval can take that long to appear.
Each row reflects a bank that would actually issue the account today; bank is omitted where it is not fixed until the account is opened. A currency with its own virtual-account review is listed once per bank it can be opened at (see below). Which of those banks a customer can choose, in the order they are offered, is on GET /customers/:id/virtual-account-banks.
Some currencies have a virtual-account review of their own, on top of the customer's verification. While one is under way or decided, the currency is listed once per bank it can be opened at, each with where that review stands there: pending while it is open, rejected when it was declined, and approved at the banks it cleared. A review that is open or declined at some banks leaves the others standing where the customer's verification does.
A row with status of not_started means one of two things:
- Not cleared at this bank by the review. The review approved the customer at other banks (or none of the banks listed). The account can't be opened at that bank until the review covers it;
POST /customers/:id/kyc/sync-approvalsdoes not change this. - Never verified for the account type. If the customer was onboarded before it became available,
POST /customers/:id/kyc/sync-approvalsstarts the missing verification.
To be told when a review changes instead of polling, subscribe to customer.virtual_account_approval.changed.
Where the virtual account has its own review, a create at a bank whose row is not approved is refused with VirtualAccountNotApproved, carrying the same status. Elsewhere, naming a bank that isn't approved returns VirtualAccountBankNotAvailable, as it always has.
In sandbox, virtual fiat accounts are available in USD, EUR, GBP, and AED. HKD, SGD, and CNY are not currently available as sandbox virtual accounts. An organization currency approval alone does not establish virtual-account availability.
AED virtual accounts may require stricter identity evidence: a non-expired passport or UAE-issued national ID, with its expiration date, for an individual, or for every beneficial owner of a business. Where this requirement applies, an otherwise approved account remains pending until verification has been submitted with identity details that meet it. Saving the profile alone is not enough: add the ID with its expiration date, then submit with ?resubmit_approved=1. A submit without that opt-in leaves an already approved verification untouched, so the new ID is not picked up. status_detail explains the missing requirement. A customer who already holds an AED virtual account is not affected. AED pay-in and payout approvals are evaluated separately and are unaffected.
Response 200
{
"virtual_accounts": [
{
"currency": "USD",
"country": "US",
"bank": "PORTAGE_BANK",
"status": "approved"
},
{
"currency": "MXN",
"country": "MX",
"bank": "EXAMPLE_BANK",
"maintenance_fee": 0.5,
"status": "approved"
}
]
}maintenance_fee is a flat fee for the account, denominated in currency. Every field except status is optional and is omitted when Seismic holds no value for it (Portage USD accounts, for example, carry no maintenance fee), so read defensively.
status and status_detail carry the same meanings as on pay-in approvals. Treat bank as an open set — new banks are added over time.
Errors
401 (missing or invalid API key), 404 (unknown customer, or a customer belonging to a different org), 503 (approvals are unavailable on this environment).
Example
curl "$SEISMIC_ORCHESTRATION_URL/v0/customers/2f10…/virtual-account-approvals" \
-H "Api-Key: $SEISMIC_ORCHESTRATION_API_KEY"