Malaysia
Online banking, e-wallets and DuitNow QR in MYR
Before you start
Authorization
How to sign your requests with the API token.
Create payment
The base order request that this page extends.
This payment method is not enabled for all merchants. Check availability with your manager.
Overview
| Currency | Payment method |
|---|---|
MYR | Online banking, e-wallets, DuitNow QR |
The payer is redirected to paymentLink and completes the payment in their bank's online banking, in an e-wallet app, or by scanning a DuitNow QR code, depending on the method enabled on your terminal.
amount is in Malaysian ringgit with up to two decimal places, for example 150.00.
Payment methods
The bank or wallet is set in your terminal settings and is not passed in the request. Ask your manager to enable the method you need.
| Type | Available options |
|---|---|
| Online banking | Affin Bank, AGRO Bank, Alliance Bank, AmBank, Bank Islam, Bank Rakyat, Bank Muamalat, Bank Simpanan Nasional, CIMB Clicks, Hong Leong Bank, HSBC Bank, Kuwait Finance House, Maybank2U, OCBC Bank, Public Bank, RHB Bank, Standard Chartered Bank, UOB Bank, Bank of China |
| E-wallets | ShopeePay, Boost, Touch 'n Go eWallet, GrabPay |
| QR code | DuitNow QR |
What is different from a regular order
The order is created through the standard POST /v1/orders endpoint. The base fields (amount, currency, successUrl, failUrl, callbackUrl, etc.) are the same as for a regular order; on top of them you pass the customer object with payer details.
| Field | Type | Description |
|---|---|---|
customer | object | Payer details. The required set is listed below |
The externalUserId field is required for this payment method.
Customer fields
| Field | Type | Required | Description |
|---|---|---|---|
phone | string | ✅ Yes | Malaysian mobile number: 10–11 digits starting with 01 (e.g. 0123456789). The +60 country code is accepted and removed automatically |
email | string | ✅ Yes | Payer email |
firstName | string | ✅ Yes | First name, must match the bank account or wallet owner |
lastName | string | ✅ Yes | Last name, must match the bank account or wallet owner |
Pass the payer's real data. The name and phone number are checked against the actual payer on the provider side; mismatches lead to declined payments.
Request example
{
"purpose": "Payment for order #1234",
"amount": "150.00",
"currency": "MYR",
"externalId": "23456789",
"externalUserId": "437568",
"successUrl": "https://example.com/success",
"failUrl": "https://example.com/fail",
"callbackUrl": "https://example.com/webhooks/payments",
"customer": {
"lastName": "Rahman",
"firstName": "Amir",
"email": "amir.rahman@example.com",
"phone": "0123456789"
}
}Response
The response is a standard order object. The order is created with the CREATED status; redirect the payer to paymentLink to complete the payment.
Order object fields
If the payer pays less than the order amount, the order still moves to COMPLETED and amount in the order object is updated to the amount actually received. Compare it with the expected amount before fulfilling the order.