What Are Dynamic Virtual Accounts?
A dynamic virtual account is a time-bound, amount-locked bank account. When you create one, you specify:- The customer it belongs to
- The exact amount it should accept
- The lifespan in minutes before it expires
Key Features
Amount-Locked Payments
Each dynamic account is created for a specific amount. This guarantees that the exact expected amount is collected, making reconciliation straightforward with no partial or overpayments to handle.Automatic Expiry
Dynamic accounts expire after the lifespan you configure. This reduces exposure and ensures abandoned payment sessions do not leave open accounts indefinitely.Unique Reference per Session
Every generated account includes a uniquereference field, allowing you to track and correlate payment sessions in your system. This reference is sent along with a webhook when the deposit is successful.
Instant Provisioning
Accounts are created and ready to receive payments immediately. The full bank details — account number, account name, and bank name — are returned in the response and can be displayed directly to the payer.When to Use Dynamic Accounts
- Checkout flows — Generate a fresh account per order so each payment is uniquely tied to a transaction.
- Invoice collection — Issue a single-use account alongside an invoice to ensure the exact invoice amount is paid.
- Time-sensitive requests — Set a short lifespan to enforce payment deadlines (e.g., hold a booking for 20 minutes).
Generating a Dynamic Account
Response
Response Fields
| Field | Description |
|---|---|
account_name | The name on the generated account |
account_no | The bank account number to display to the payer |
amount | The exact amount the account will accept |
currency | Currency of the account (lowercase ISO code) |
bank_name | Name of the bank that issued the account |
reference | Unique reference for this payment session |
email | Email address of the customer |
expires_at | Timestamp when the account becomes inactive |
payment_session_id | Session identifier for tracking (may be empty) |
usage | Usage context identifier |
created_at | Timestamp when the account was created |
customer_id | ID of the customer this account belongs to |
Account Lifecycle
- Created — Account is provisioned instantly with full bank details.
- Active — Account is live and can receive the specified amount during the lifespan window.
- Expired — The lifespan elapses without a payment; the account becomes inactive.
- Completed — A matching payment is received; the account closes.
Best Practices
- Keep
lifespan_minutesshort (10–30 minutes) for checkout use cases to minimise open sessions. - Always display
expires_atto the payer so they know the deadline. - Use the
referencefield to link the payment to your internal order or invoice record. - If a session expires before payment, generate a new dynamic account rather than reusing the old one.
Next Steps
- See the API Reference for full request and response details.
- Learn how permanent virtual accounts work in Creating Accounts.

