Skip to main content
Bank Redirects allow customers to complete payments by logging into their online banking system. Instead of entering card details, customers are securely redirected to their bank or a banking switch (e.g., FPX, Pay by Bank) to authorize the transaction. Once approved, they are returned to your site or app, and Monxa confirms the result via webhooks. This method is widely used across Asia for its security, customer familiarity, and high success rates, making it an effective alternative to card payments.

Capabilities & Constraints

  • Flow type: Redirect to bank or bank switch; result confirmed by webhook.
  • Capture model: Direct capture only (no separate auth/capture).
  • Customer experience: Bank login → approve payment → redirect/return.
  • Settlement: According to the connected provider/bank switch.
  • Refunds: Supported by many providers after capture (rules vary; see matrix below). No “reversal”/void once bank has posted the debit.
  • Retries: If abandoned/expired, create a new charge with a new Idempotency-Key.

Typical Use Cases

  • E-commerce checkout where card conversion is low
  • High-trust domestic bank rails (e.g., Malaysia FPX-style, SG pay-by-bank)
  • Desktop/mobile flows where redirect is acceptable

1. Create a Charge

Initiate the payment by creating a charge in your system with the transaction details.

2. Redirect the Customer

Use the return_url from Monxa to send the customer to their bank app.

3. Customer Approves at Bank App

The customer confirms the transaction by entering their PIN/OTP or using biometric authentication in their bank app.

4. Handle Webhooks

Once the e-wallet provider processes the payment, Monxa sends a webhook notification to update your system with the final status.

Supported Channels

Payment Flow

Status Lifecycle

Field Reference

Step 1: Create a Charge

Create a charge with a bank-redirect channel_code. Include a return_url (required) to bring the customer back to your site/app.
Endpoint: POST v1/charges
Why pending? The payment is not approved yet. Final state is delivered via webhook after the customer completes at their bank.

Step 2: Redirect the Customer

Send the customer to actions.redirect_url.
  • Web: Perform a 302 redirect or render a “Continue to your bank” button linking to redirect_url.
  • Mobile: Open in external browser or in-app webview. Handle the return_url to resume your flow.

Step 3: Customer Approves at Bank

The customer authenticates with their bank and approves the payment. The bank/switch posts the result back to Monxa.
  • If successful → funds are captured and status becomes succeeded.
  • If rejected/canceled → status becomes failed.
  • If not completed in time → status becomes expired.
Always verify by fetching the charge: GET /v1/charges/

Step 4: Handle Webhooks & Update Payment Status

Always verify the event by fetching the charge (GET /v1/charges/) before updating your system.

Implementation Tips

  • UI: Always show a “Continue to your bank” CTA and a fallback “Try another method.”
  • Timeouts: Respect actions.expires_at; show session countdowns to reduce abandonment.
  • Mobile deep-linking: Some providers return app deep links; handle gracefully with browser fallback.
  • Reconciliation: Store charge.id, reference_id, bank bank_code (if present), and webhook timestamps.

Error Handling