Overview
Virtual Accounts (VAs) allow customers to complete payments by making a bank transfer into a unique account number issued for their transaction.This method is widely used across Asia because it is familiar, trusted, and supports large-value payments. Monxa simplifies VA payments by:
- Issuing dynamic or static VA numbers through integrated banks and providers.
- Returning ready-to-display VA details (bank code, account number, expiry, instructions).
- Listening for provider notifications when funds are credited.
- Sending webhook events so your system always knows the real-time status.
1. Create a Charge
Create a charge with virtual account channel code. Monxa requests a VA from the provider.
2. Display VA Information
Show the customer the bank name, VA number, and expiry along with transfer instructions.
3. Customer Transfers Funds
The customer transfers the exact (or open) amount to the VA via mobile banking or ATM.
4. Handle Webhooks
Monxa confirms via webhook when funds are received and updates your system.
Supported Channels
- 🇮🇩 Indonesia
- 🇹🇭 Thailand
| Channel | Code | Currency | Refund | Settlement | Min Amount | Max Amount |
|---|---|---|---|---|---|---|
| BCA | va_bca | IDR | N/A | T+1 | 1 | 50,000,000 |
| BJB | va_bjb | IDR | N/A | T+1 | 1 | 500,000,000 |
| BNC | va_bnc | IDR | N/A | T+1 | 1 | 500,000,000 |
| BNI | va_bni | IDR | N/A | T+1 | 1 | 50,000,000 |
| BRI | va_bri | IDR | N/A | T+1 | 1 | 500,000,000 |
| BSI | va_bsi | IDR | N/A | T+1 | 1 | 500,000,000 |
| BSS | va_bss | IDR | N/A | T+1 | 1 | 500,000,000 |
| CIMB | va_cimb | IDR | N/A | T+1 | 1 | 500,000,000 |
| MANDIRI | va_mandiri | IDR | N/A | T+1 | 1 | 500,000,000 |
| MUALAMAT | va_mualamat | IDR | N/A | T+1 | 1 | 500,000,000 |
| PERMATA | va_permata | IDR | N/A | T+1 | 1 | 500,000,000 |
Payment Flow
Step 1: Create a Charge
Request Example : Dynamic VA
Request Example : Dynamic VA
Response Example
Response Example
Step 2: Display VA Information
Once the charge is created, show the returned bank name, account number, expiry date, and instructions to the customer. This allows the customer to transfer funds using their preferred channel:- ATM
- Mobile banking app
- Internet banking
Step 3: Customer Transfers Funds
The customer proceeds to their banking channel and makes a transfer to the VA account number provided.- For dynamic/exact VAs, the amount must match exactly.
- For static/open VAs, any incoming payment is accepted and must be reconciled against the customer/order.
Step 4: Handle Webhooks & Update Payment Status
When the VA provider confirms the credit, Monxa updates the charge status and sends a webhook notification to your server.- Typical webhook events:
charge.succeeded→ funds received successfullycharge.expired→ VA expired without payment
Webhook Response Parameters
Webhook Response Parameters
| Parameter | Description | Example Value |
|---|---|---|
payment_id | Unique identifier of the payment. | pay_1234567890 |
payment_request_id | Unique identifier of the payment request. | req_0987654321 |
phone | Buyer’s phone number. | +6591234567 |
amount | Amount related to the payment. | 100.00 |
currency | Currency of the payment. | SGD |
status | Payment status (completed / failed). | completed |
reference_number | Custom reference number mapped during payment request creation. | ORDER12345 |
hmac | Message Authentication Code (MAC) of this webhook request (used for validation). | a1b2c3d4e5f67890abcdef123456 |
Sample Webhook (charge.succeeded)
Sample Webhook (charge.succeeded)
Sample Webhook (charge.expired)
Sample Webhook (charge.expired)
Refunds / Reversal
Unlike cards or wallets, Virtual Account payments are bank transfers. Because they are push-based payments initiated by the customer, refunds or reversals cannot be processed automatically through Monxa.- Once a customer transfers funds into the VA, the transaction is final and irreversible via the API.
- If a refund is required (e.g., order cancellation, overpayment), the merchant must arrange a manual bank transfer back to the customer’s account outside of Monxa’s system.
- Monxa will still provide full reporting, settlement, and reconciliation data to help you identify the payment, but no automated payout or refund request is available.