Skip to main content

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

Payment Flow

Step 1: Create a Charge

Endpoint: POST v1/charges

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
Make sure to clearly show the exact amount if you are using a closed/exact VA.

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.
The bank / VA provider will notify Monxa once funds are received.

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 successfully
    • charge.expired → VA expired without payment
Your system should always rely on Monxa webhooks for final confirmation, then update the order / payment status shown to the customer.

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.
Important: Always inform customers clearly that payments made via Virtual Accounts are non-reversible. If you wish to offer refunds, set up an offline/manual refund policy (e.g., customer provides bank details and you process a transfer).