Skip to content
Last updated

What is the Virtual Account Solution?

The Virtual Accounts Solution (VAS) lets a corporate client hold customer funds in dedicated sub accounts while keeping money movement inside a controlled hierarchy.

Every VAS setup is built around three account layers:

  • Settlement Account: external-facing account for inbound and outbound cash movement
  • Parent Account: internal routing layer for VAS controls and reconciliation
  • Sub Account / Virtual Account: customer-specific account used for fund segregation

Start here

If you are implementing VAS for the first time, read these pages in order:

  1. First Successful VAS Integration in UAT
  2. API Flows
  3. Troubleshooting
  4. UAT Limitations & Known Issues
  5. Supported Currencies

Critical setup rule: provisioning is per currency

You can only create virtual accounts in currencies where your client already has both:

  • a Settlement Account
  • a Parent Account

If a currency is not provisioned, the create request may still be accepted as a background job, but the item result can fail with an error such as No parent account with matching currency found.

Supported currencies

Currency availability is a key onboarding and operating dependency for business teams, especially when planning inbound collections and outbound payouts.

For customer deposits into the Virtual Account Solution, use BIC BEOEBMH2 so funds are converted correctly.

View the full supported currency lists here:

Allowed fund flows

These are the supported VAS flow patterns:

FlowSupportedNotes
External bank -> Sub AccountYesCustomer deposits into their dedicated virtual account
Settlement -> Parent -> SubYesApproved credit flow into a customer account
Sub -> Parent -> SettlementYesApproved debit or consolidation flow
Sub -> same-name external beneficiaryYesUse the external withdrawal flow and enforce same-name controls
Settlement -> external counterpartyYesSettlement transfer on behalf of the customer or platform

Prohibited fund flows

These flows are not supported in VAS:

FlowSupportedWhy
Sub -> SubNoVAS is not a peer-to-peer transfer model between customer sub accounts
Settlement -> Sub direct bypassing ParentNoThe VAS hierarchy must be preserved
Sub -> Settlement direct bypassing ParentNoThe VAS hierarchy must be preserved
Third-party or joint-account funding that fails same-name controlsNoSame-name and source-of-funds controls still apply

Core API tasks

  • Create accounts with POST /v1/virtual-accounts
  • Monitor create jobs with GET /v1/jobs/{jobId}
  • Read item outcomes with GET /v1/jobs/{jobId}/results
  • List provisioned VAS accounts with GET /v1/virtual-accounts
  • Update your own identifier with PATCH /v1/virtual-accounts/{virtualAccountNumber}
  • Verify activity with:
    • GET /v1/virtual-accounts/{virtualAccountNumber}
    • GET /v1/virtual-accounts/{virtualAccountNumber}/transactions
    • GET /v1/virtual-accounts/{virtualAccountNumber}/deposits

clientReference

clientReference is the field you should use to store your own customer, wallet, or reconciliation identifier.

  • You can set it during create.
  • You can update it later with PATCH /v1/virtual-accounts/{virtualAccountNumber}.
  • You do not need to recreate the virtual account just to change clientReference.

Same-name controls

If you display account numbers to end customers, you must take reasonable steps to ensure deposits and withdrawals are consistent with same-name requirements.

Read the full guidance here:

UAT note

If the portal UI and API disagree in UAT, use the API as the source of truth and verify the account state with direct GET calls.