One balance, many addresses — eventually.A spend account credits a single balance no matter which address the money arrives at. The VAN data model is built to support more than one active virtual account number per spend account, with exactly one marked primary, so that senders could eventually be separated — payroll versus a specific customer — without splitting the funds.Today, every spend account is provisioned with exactly one VAN, and it is always the primary. There is no API, dashboard, or account-manager path to a second one yet. See Multiple Virtual Account Numbers.
How It Fits Together
Money in arrives through a VAN. Money out still leaves the spend account the same way it always has — gift card and virtual card funding, internal transfers, and withdrawals to a linked external account.Provisioning
Virtual account numbers are provisioned by Fluz. There is no mutation to create one, and no control in the dashboard to request one. Provisioning happens on Fluz’s side once a spend account becomes eligible; your integration’s job is to read the result, not to trigger it.Eligibility
A spend account is eligible for a virtual account number when all of the following are true:Trigger and timing
Provisioning is automatic and asynchronous. Fluz initiates it once the conditions above are met; the VAN is issued by the sponsor bank and written back to the spend account when the bank returns it. The VAN is not available in the same request that creates the spend account. Treat availability as eventual, and read the VAN at the point the user needs it rather than at account creation. Until the VAN is written back,getSpendAccountVirtualAccountNumbers returns an empty array. It does not error, and it does not return null.
Pending — VAN not yet provisioned
Recommended integration pattern
1
Create the spend account
Proceed with your normal flow. Do not block the user on VAN availability.
2
Read the VAN lazily
Call
getSpendAccountVirtualAccountNumbers when the user navigates to a deposit, direct deposit, or account details screen — not eagerly at account creation.3
Handle the empty case explicitly
Render a “deposit details are being set up” state rather than an error or a blank field. Re-check on next view.
4
Cache by ID, not by position
Store
virtualAccountNumberId as the stable key. Never key off array index.API and dashboard behave the same way
Both surfaces read the same underlying object, and neither can create, modify, or remove one.
If the API returns an empty array for a spend account, the dashboard will show no deposit details for that same account. There is no dashboard-only path to a VAN.
Supported Rails
Credits sent to a virtual account number are accepted over four rails:What a Credit Looks Like
When funds arrive at a virtual account number, Fluz records a standard deposit against the destination spend account. The deposit’s funding source is the virtual account — not a bank card, bank account, or PayPal — because the money originated outside Fluz and was pushed in rather than pulled from a linked payment method. This means:- The credit appears in the same transaction and deposit history as any other deposit.
- There is no linked funding source object to reconcile against, and no backup card hold, because nothing was debited from the user.
- The deposit is attributable to the specific VAN that received it, so you can distinguish a payroll credit from a customer payment when a spend account has multiple VANs.
Retrieve a User’s Virtual Account Numbers
UsegetSpendAccountVirtualAccountNumbers to list the active VANs on a spend account. It returns every active VAN, one of which is flagged as primary.
Scope required: LIST_PAYMENT
Variables
Returns
[SpendAccountVirtualAccountNumber!]!. See the type reference for the full field list.
Displaying account numbers.A VAN’s full account number is sensitive. Mask it in list views and reveal the full value only on an explicit user action, the same way you would treat a card PAN. When a user needs to hand the details to a third party, prefer the generated PDF artifacts described in Virtual Account Documents over free-form copy.
Multiple Virtual Account Numbers
The query returns a list, and the type carries anisPrimary flag, because the underlying VAN data model is built to support more than one active virtual account number per spend account — for example, a dedicated payroll address and a per-customer address, all crediting the same balance.
This is not available today. Every spend account is currently limited to exactly one VAN, and there is no API mutation, dashboard flow, or account-manager request that creates, views, or manages a second one. For Austin Capital Bank (Fluz’s current VAN sponsor), the one-VAN-per-spend-account cap is a global setting on ACB’s side, not a per-program one — so it isn’t something Fluz can configure or enable for an individual integration.
Read-only today, for every program.The read query above (
getSpendAccountVirtualAccountNumbers) is the only VAN operation exposed, to every integration, with no exceptions. Support for additional VANs is a future capability, not something you can request or turn on today.Build for the list anyway
Every spend account has exactly one VAN today, but code against the list shape rather than a single object. The API is already structured this way so that support for additional VANs, if it ships later, won’t be a breaking change for you.- Never index into the array. Do not read
result[0]. Select the VAN whereisPrimaryistrue. - Handle
0explicitly (see Provisioning), even though the non-zero case today is always length1. - Pass
virtualAccountNumberIdexplicitly to the document queries rather than relying on the primary-VAN default, so your integration won’t need a code change if additional VANs are supported down the line.
Handing the Details to a Third Party
Rather than asking a user to transcribe a routing and account number into a payroll portal or send it to a counterparty by email, Fluz generates PDF artifacts on demand:
All three default to the spend account’s primary VAN when
virtualAccountNumberId is omitted, and all three require the LIST_PAYMENT scope.
See Virtual Account Documents for the full reference.
Requirements
- The user must have at least one active spend account whose accountholder has cleared CIP.
- Your program must be entitled to VANs at the sponsor bank. This is agreed during onboarding and is not something the API can enable.
- Reading virtual account numbers and generating documents both require the
LIST_PAYMENTscope on the user access token. - Virtual account numbers are provisioned by Fluz, asynchronously, and cannot be created, modified, or deleted through the API or the dashboard. See Provisioning.
- Assume a spend account may have zero or one VAN at read time today. Code against the list shape (don’t index into it) since additional VANs may be supported in the future.
Related
Spend Accounts
The account that actually holds the balance.
Virtual Account Documents
Payment instructions, deposit forms, and status letters.
Deposit Funds
Pull funds in from a linked bank account or card.
Funding Sources
How Fluz classifies the money moving in.
Want to learn more? Speak with our experts for more info or to request a demo.