What is a virtual account?

Virtual account

A virtual account is a unique account number that still settles into one real bank account. Payers send to that number. You use it to know which customer or invoice the credit belongs to. The virtual number does not hold money. The ledger does.

How does a virtual account work?

The bank issues numbers that route to your settlement account. Each number is a label. When a credit arrives, the bank tells you which virtual number was used. You credit the wallet you mapped to that number. If you have no map, the money sits in suspense until you do.

Virtual account vs wallet

A wallet is a ledger balance. A virtual account is a routing alias for the bank pot. One wallet can have one number. Many numbers can point at one wallet if you want. The number is not a second book.

What if two payers reuse a number?

You will mix their money unless you also match amount, name, or reference. Virtual accounts reduce guesswork. They do not replace reconciliation. Close unused numbers.

How it works with Blnk

Store the virtual number on the identity or in metadata on the wallet. When the bank webhook arrives, look up that number and post to the wallet.

The source is still the pot, such as @OmnibusUSD_Bank. The destination is the wallet you resolved. If you cannot resolve it, credit a suspense balance and fix it with a second post.

match-virtual-account.ts
await blnk.Transactions.create({
  precise_amount: 25000,
  precision: 100,
  reference: 'va_in_20260816_001',
  currency: 'USD',
  source: '@OmnibusUSD_Bank',
  destination: 'customer_wallet_id',
  description: 'Inbound to virtual account',
  meta_data: {
    virtual_account: '900123456789',
    bank_txn_id: '20260816DDA001',
    customer_id: 'cus_8f21a4',
  },
});