Search...
APIJSLog inGet started
Airwallex logo
Home
Platform APIs
Connected Accounts
Accounts
Payments
Transactional FX
Payouts
Issuing
Back to home
OverviewChoose your payments solutionGet started with payments
Supported currencies
Online payments
Invoice integrations
Payment methods
Payment Methods OverviewGlobal
CardsAirwallex Pay
Apple Pay
Google Pay™
Klarna
Afterpay / Clearpay
PayPal
Bank transfer - BETA
Accept bank transfer payments
Skrill
EU & UK
APAC
North America & LATAM
Tax filing

Accept bank transfer payments

You can accept payments in three simple steps:

  1. Initialize a Payment Intent
  2. Generate Transfer Instructions
  3. Query the Payment Status

Step 1. Initialize a Payment Intent

Create a Payment Intent using the Create a Payment Intent API API.

Example request:

Shell

Step 2. Generate Transfer Instructions

JSON

The transfer instructions provided will be tailored to the currency of the payment intent.

USD

JSON

EUR

JSON

GBP

JSON

SGD

JSON

Handling virtual account availability issues

Some currencies, especially SGD, have a limit on the number of virtual bank account numbers that can be created within a short period. If this limit is reached, the system will return the following error code.

To prevent disruptions, please contact your Account Manager in advance if you anticipate high transaction volumes to request a limit increase.

JSON

Step 3. Query the Payment Status

To get the payment result, we recommend polling the status of the Payment Intent via the Retrieve a Payment Intent API API.

In addition, Airwallex will notify you of the payment result asynchronously via webhooks. Please refer to the webhook documentation to set up your webhook accordingly.

Sample webhook

JSON

Since bank transfers depend on when and how much the customer sends, the actual received_amount may differ from the expected amount. Webhook status updates are also determined based on your reconciliation preferences .

Description Event
Customer transferred the exact amount. payment_intent.succeeded
payment_attempt.capture_requested
payment_attempt.capture_amount = payment_intent.amount
Customer transferred more than the expected amount.
The extra amount is set to be returned.
payment_intent.succeeded
payment_attempt.capture_requested
payment_attempt.capture_amount = payment_intent.amount
The extra amount will be returned.
Customer transferred less than the expected amount.
The partial amount is set to be accepted after the expiry time.
payment_intent.succeeded
payment_attempt.capture_requested
payment_attempt.capture_amount = payment_attempt.received_amount
Customer transferred less than the expected amount.
The partial amount is set to be returned after the expiry time.
payment_intent.requires_payment_method
payment_attempt.expired
The received amount will be returned.
No transfer or transfer received after expiry time. payment_intent.requires_payment_method
payment_attempt.expired
The received amount will be returned.

Demo scenarios

You can simulate different payment and refund scenarios in the demo environment by adjusting the payment intent amount as below.

Payment scenarios

Description Payment intent amount
Customer transferred the exact amount. 200
Customer transferred more than the expected amount. 190 (200 received)
Customer transferred less than the expected amount. 210 (200 received)
Customer did not transfer any amount before the payment expires. Any amount other than the above.

Refund scenarios Once a payment has been successfully processed, you can initiate a refund.

Refund scenarios Refund amount
Successfully refund Any amount other than 40 and not greater than the payment amount.
Failed to refund 40
On this page