Skip to content

Init deposit ​

Create a deposit and get a hosted transaction_link to send your customer to.

POST/api/v2/transaction/initBearer token + signature

Signed endpoint

The fields below are the inner payload. JSON-encode them, base64 them into {"data": "…"} and sign the request — see Request signing.

Payload ​

FieldTypeRequiredDescription
amountstringrequiredAmount to pay, as a decimal string, e.g. "10.00". See limits
user_idstringrequiredCustomer's full name or your player ID (max 255 chars)
invoice_nostringrequiredYour reference for this deposit (max 100 chars). Must be unique per vendor
currencystringoptionalOnly MYR is supported. Defaults to MYR
gatewaystringoptionalPayment method — see values. Omit to let the customer choose
redirect_urlstringoptionalWhere to send the customer after payment. Defaults to the redirect URL on your account
json
{
  "amount": "10.00",
  "currency": "MYR",
  "gateway": "MAYBANK",
  "user_id": "HELLO WORLD",
  "invoice_no": "ABC1234",
  "redirect_url": "https://your-site.com/deposit/done"
}

Gateway values ​

Values are case-sensitive.

ValueMethod
(omitted)Hosted checkout — customer picks a method
MAYBANKMaybank
CIMBCIMB Bank
RHBRHB Bank
PUBLIC_BANKPublic Bank
HLBHong Leong Bank
AFFIN_BANKAffin Bank
BANK_ISLAMBank Islam
BANK_MUAMALATBank Muamalat
FPXFPX
QRDuitNow QR
TNGTouch 'n Go
TNG_EWALLETTouch 'n Go eWallet
USDTUSDT

Amount limits ​

MethodMin (MYR)Max (MYR)
QR15,000
TNG, TNG_EWALLET15,000
All others105,000

Limits can differ per account — ask your account manager if you need different limits.

Response ​

200 OK
json
{
  "code": "success",
  "data": {
    "transaction_id": "d174ef5c-cb57-42bb-9623-184726ee39e0",
    "transaction_link": "https://fpxv2.dmcpay.net/maybank?token=v4.local.vPEE_FH_rjApzx09…",
    "expires_at": "2026-06-20T17:54:22.264176+08:00",
    "amount": "10.00",
    "currency": "MYR",
    "created_at": "2026-06-20T09:51:22.217192Z"
  }
}
FieldTypeDescription
data.transaction_idstringOur ID for this deposit (matches id in the postback)
data.transaction_linkstringRedirect your customer here to complete payment
data.expires_atstringThe link stops working after this time (about 5 minutes; 90 seconds for QR)
data.amountstringAmount, 2 decimal places
data.currencystringCurrency, echoed back
data.created_atstringCreation time (RFC 3339)

The final result is delivered to your deposit postback URL.

Errors ​

HTTPWhen
400Body can't be parsed, or amount is below the minimum / above the maximum
401Access token or signature problem — see error codes
409invoice_no already used
422A field failed validation (e.g. unknown gateway, non-numeric amount)
503Deposits are temporarily unavailable
json
{
  "error": "amount should at least be 10.00",
  "code": "unknown_error",
  "message": "amount should at least be 10.00"
}

Branch on the HTTP status (and code for 401s). The error / message text is for humans and may change.

Need help? Contact your DMC Pay account manager.