What is a Virtual Account?
A Virtual Account (VA) is a virtual bank account number that sits in front of your real bank account. Customers transfer money to it exactly as they would any regular bank transfer — via mobile banking, internet banking, or ATM. SingaPay instantly identifies each incoming transfer, reconciles it to the correct account and transaction, and credits the funds in real time. Because every VA number is unique, you always know exactly who paid, how much, and when — even at high volumes.VA configuration options
Every VA you create is defined along two dimensions:By lifetime
| Type | How it works | Best for |
|---|---|---|
| Permanent | The VA number never expires and can receive multiple payments indefinitely. | Recurring customers, subscription top-ups, dedicated payment addresses |
| Temporary | Expires after a set time. Can also cap the number of accepted payments (1–255) before auto-expiring. | One-time invoices, time-sensitive checkout windows |
By amount type
| Type | How it works | Best for |
|---|---|---|
| Closed | Accepts only the exact amount specified. Any other amount is rejected by the bank. | Fixed invoices, specific order totals |
| Open | Accepts any amount within a min–max range you define. | Top-ups, wallet reloads, donations |
How the payment flow works
Create a Virtual Account
Call the SingaPay API with the bank code, VA type, amount, and optional expiry. A unique VA number is returned to display to your customer.
Customer makes the transfer
The customer pays via their bank app, internet banking, or ATM — exactly like a regular bank transfer. No app download or extra setup needed.
SingaPay confirms the payment
The moment the transfer arrives, SingaPay validates the amount (for closed-type VAs), records the transaction, and credits your account balance in real time.
Supported banks — comparison
| Bank Code | Min (IDR) | Max (IDR) | Settlement | Sharia |
|---|---|---|---|---|
| BCA | 10,000 | 20,000,000* | T+1 | — |
| BNI | 10,000 | 250,000,000* | T+1 | — |
| BRI | 10,000 | 250,000,000* | T+1 | — |
| MANDIRI | 10,000 | 100,000,000* | T+1 | — |
| PERMATA | 10,000 | 50,000,000* | T+1 | — |
| MAYBANK | 10,000 | 250,000,000* | T+1 | — |
| CIMB | 10,000 | 50,000,000* | T+1 | — |
| BSI | 10,000 | 250,000,000* | T+1 | ✓ |
| MUAMALAT | 10,000 | 250,000,000* | T+1 | ✓ |
| BNC | 10,000 | 250,000,000* | T+1 | — |
| OCBC | 10,000 | 250,000,000* | T+1 | — |
| DANAMON | 10,000 | 250,000,000* | T+1 | — |
Always include your own internal reference ID in the
merchant_reff_no field when creating a VA. This ties every SingaPay transaction record back to your own order system, making reconciliation effortless.