What is a virtual account? A plain-English guide for fintech teams
A virtual account is a unique set of bank details that routes incoming payments to one customer or purpose. How it works, who uses it, and where it fits.
A virtual account is a unique set of bank details, an account number and routing number or an IBAN, that routes incoming payments into a master account while identifying exactly who they belong to. The payer sends a normal bank transfer. The provider sees which virtual account received it and credits the right customer, invoice, or purpose automatically.
No memo field to get wrong. The account number does the matching.
Key takeaways
- A virtual account is an identifier that routes money, not a separate pot of money at a separate bank.
- Its main job is attribution: every deposit arrives already labeled with the customer or purpose it belongs to.
- Providers can issue virtual accounts through an API in seconds, at a scale where opening real bank accounts is out of reach.
- Whose name is on the account (yours, the provider's, or your customer's) changes what the payer sees and what compliance requires.
- Stablecoin providers use virtual accounts as an on-ramp: fiat comes in over bank rails and leaves as USDC or USDT in a wallet.
What is a virtual account?
A virtual account is a set of bank details linked to a master account or settlement flow, used to identify and attribute incoming payments. Payers see a normal account number. Behind it, many virtual accounts can point at the same underlying bank account.
Think of it like extension numbers on a phone system. One office line, hundreds of extensions, and every call rings the right desk.
The term covers a few different products depending on the provider and the country: virtual account numbers in the US, virtual IBANs in Europe, collection accounts, or "sub-accounts" on a bank's cash management platform. The mechanics are the same. A unique identifier routes funds and tells the receiver who they are for.
How does a virtual account work?
A virtual account works by giving each customer or purpose its own unique receiving details, then reading those details off every incoming payment to credit the right ledger entry. Three pieces make it work:
- A master account at a bank. This is where the money physically lands. It can be in the provider's name (pooled) or set up so each virtual account is titled to the end customer (named).
- A range of account identifiers. The bank lets the provider issue account numbers, or IBANs, that route into the master account.
- A ledger. The provider's system maps each identifier to a customer and records every deposit against it.
Here's how one payment moves through that setup:
- Issue the account. Your platform calls the provider's API for a customer. The provider returns account and routing details (or an IBAN) for that customer.
- Share the details. Your customer gives them to whoever pays them: a client, an employer, a marketplace buyer.
- The payer sends a transfer. ACH, wire, SWIFT, SEPA, whatever rail the account supports. From the payer's side it's an ordinary bank payment.
- The deposit is detected. The bank credits the master account and reports the receiving account number to the provider.
- The deposit is matched. The provider looks up which customer owns that number. No reference parsing, no guessing.
- The balance or settlement updates. The provider credits the customer's ledger balance, or sends the funds onward (to another account, or converted to a stablecoin and sent to a wallet).
- A webhook fires. Your system gets an event with the deposit, the account, and the amount, and updates your UI.
Step 5 is the whole point. Everything before it is plumbing.
How is a virtual account different from a traditional bank account?
A traditional bank account is opened by a bank for one account holder, holds its own balance, and takes days of paperwork. A virtual account is issued by a provider on top of an existing bank relationship, routes into a master account, and is created through an API.
| Traditional bank account | Virtual account | |
|---|---|---|
| Who holds the funds | The bank, in an account for one holder | The bank, in a master account; the provider's ledger tracks each customer's share |
| Name on the account | The account holder | The provider (pooled) or the end customer (named), depending on the setup |
| How it's opened | Branch or online application, one at a time | API call, often in bulk |
| Speed of issuance | Days to weeks | Seconds to a few business days, depending on review |
| Scale | A handful per business | Thousands or millions per platform |
| Reconciliation | Match each deposit by reference or amount | The receiving account number identifies the deposit |
| Payer can send to it? | Yes | Yes, it looks like any account number to the payer's bank |
| Typical use | Operating account, treasury | Collections, customer deposits, payouts attribution |
One thing a virtual account usually can't do: act like a full retail account. No debit card, no checks, no online banking login for your customer. It exists to receive money and attribute it.
What is a virtual account number?
A virtual account number is the account number issued for a virtual account. In the US it comes with a routing number (ABA), and the payer's bank sends ACH or wire transfers to it exactly as it would to any checking account. In Europe the equivalent is a virtual IBAN.
The number is real in the sense that matters to the payer: the payment rails route money to it. It's "virtual" only because it points into a shared master account instead of standing alone. The payer's bank can't tell the difference, and doesn't need to.
Is a sub-account the same as a virtual account?
Not quite. A sub-account is usually a ledger split inside one bank account, with no external details of its own. A virtual account has its own external account number that payers can send to. Some banks use the words interchangeably, so check whether the "sub-account" you're being offered can actually receive transfers from outside.
| Sub-account (ledger only) | Virtual account | |
|---|---|---|
| Own external account number | No | Yes |
| Can receive transfers directly | No, funds arrive at the parent and are allocated internally | Yes |
| Where the split lives | Your ledger or the bank's cash platform | The account number itself |
Who uses virtual accounts?
Virtual accounts are used by any business that receives many payments from many payers and needs to know instantly who paid. Common examples:
- Marketplaces give each seller receiving details so buyer payments land already attributed.
- Payment service providers (PSPs) issue accounts to merchants so every merchant's collections stay separate.
- Payroll and contractor platforms give each contractor or client company an account to fund or receive payroll.
- Remittance apps give each sender or recipient a dedicated account for incoming transfers.
- SaaS and B2B billing assigns one account per customer, so invoices get paid without "which company sent this?" emails.
Illustrative example. A payroll platform has 400 client companies that fund payroll by wire each month. With one shared account, finance matches 400 wires a month by reading free-text references, and the ones with a missing reference sit in a suspense queue until someone calls the client. With one virtual account per client company, each wire arrives on that client's own account number. The match happens at the bank, and the suspense queue is gone. (Numbers are illustrative.)
How do virtual accounts connect to stablecoins?
A stablecoin virtual account receives fiat over bank rails and converts every deposit into a stablecoin, like USDC or USDT, which it sends to a linked blockchain wallet. The payer sends dollars to an account number. The customer ends up with a stablecoin balance they can hold or pay out elsewhere.
That makes the virtual account an on-ramp that needs no checkout page. At BlindPay, each virtual account belongs to one customer, receives ACH, wire, and SWIFT transfers into a US account in that customer's name, and settles to one wallet. Each deposit is tracked as its own payin, so the stablecoin that lands can always be traced back to the bank transfer that funded it. A customer can hold several accounts to separate funds by purpose.
The full flow, from approval to wallet balance, is in stablecoin virtual accounts explained. For what happens after the stablecoin lands, see how a stablecoin payment works.
What should you watch out for?
Four things catch teams the first time they launch virtual accounts:
- Pooled vs named. If the account is in the provider's name, the payer sees the provider as the beneficiary. Some payers, and some compliance teams, won't accept that. Ask which you get.
- Review time. Named accounts usually need compliance and bank approval. Build onboarding around the real SLA, not the API response time.
- Whose money it is. A virtual account should hold money that belongs to the customer it was issued to. Using one customer's accounts to collect for their clients, who the provider never verified, is called nesting, and providers shut it down. BlindPay's rule is in nested payments.
- Rails. Not every virtual account receives every rail. A US account might take ACH and wire but not SWIFT, or the reverse. Confirm before you tell a foreign client how to pay.
If you're weighing whether to build this on your own bank relationships, build vs buy covers what that takes.
Where does BlindPay fit?
BlindPay issues US virtual accounts in your customer's own name through one API. Deposits over ACH, wire, and SWIFT convert automatically to USDC or USDT and settle to the customer's wallet, with the same API paying out over Pix, SPEI, ACH, RTP, SEPA, and SWIFT (POBO/COBO) to 100+ countries with no pre-funding.
What to do next
Spin up a free development instance and create one virtual account. It's approved instantly with a test routing number (110000000), so you can watch the virtualAccount.complete and payin.complete webhooks fire before any bank is involved. Start with create a virtual account.
Turning this into an app feature? How to give every neobank customer a US bank account goes from onboarding to the account details screen.
To collect bank transfers and settle them in USDC or USDT, read virtual accounts for stablecoin payins.
This article is for general information only and is not legal, tax, or financial advice.
FAQ
More payments articles
See all payments articlesCan a virtual account replace a business bank account? What each one does for cross-border companies
Usually not. A virtual account collects and settles payments; a bank account runs payroll, taxes, and credit. A job-by-job guide for cross-border teams.
POBO vs COBO: SWIFT payments and collections on behalf of, explained
POBO sends a SWIFT payment for a customer, COBO collects one for them. Whose name shows, how UETR tracking works, and where stablecoin settlement fits.
Blockchain payments explained: how stablecoins move money without correspondent banks
Blockchain payments move a stablecoin on a public ledger instead of messages between banks. How they work, what they cost, and how they compare with SWIFT.