Merchant API
Payment Intents

Create a payment intent

Create and start one Provider-neutral Payment intent. `payment_method` and every payer field required by that method are required before persistence. Operational Configuration selects execution. Use `POST /checkouts` when Checkout should collect payer input. Once persisted, creation returns the current projection, including processing after uncertain dispatch. `Idempotency-Key` is required admission identity; `merchant_reference` is required business identity.

POST
/payment_intents

Create and start one Provider-neutral Payment intent. payment_method and every payer field required by that method are required before persistence. Operational Configuration selects execution. Use POST /checkouts when Checkout should collect payer input. Once persisted, creation returns the current projection, including processing after uncertain dispatch. Idempotency-Key is required admission identity; merchant_reference is required business identity.

AuthorizationBasic <token>

Merchant API key pair. Send as Authorization: Basic base64(publicKey:secretKey) — username is the public key (pk_live_… / pk_test_…), password is the secret key (sk_live_… / sk_test_…). The public key prefix determines the environment of every order created by the request — there is no body, query, or header override.

In: header

Header Parameters

Idempotency-Key*string

Merchant retry identity for this create request. Reuse only with the exact same request fields.

Match^[!-~]+$
Length1 <= length <= 255

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Create one Provider-neutral Payment intent. payment_method and every payer field required by the selected method must be present; Operational Configuration selects execution.

amount*string

Positive integer amount in the currency's minor units, encoded as a string to preserve precision (e.g. "10000" for MYR 100.00).

Match^[1-9]\d*$
country*string

ISO 3166-1 alpha-2 country code, e.g. "MY".

Match^[A-Z]{2}$
currency*string

ISO 4217 currency code (e.g. "MYR", "USD") or a 3–6 letter token symbol. Uppercase.

Match^[A-Z]{3,6}$
customer*

Customer identity. Required fields vary by routed payment method.

device_fingerprint?string
Length1 <= length <= 256
merchant_reference*string

Unique Merchant business reference for the Payment. Transport retries use Idempotency-Key.

Length1 <= length <= 256
metadata?
payment_method*string

Value in

  • "FPX"
  • "PROMPTPAY"
  • "TRUEMONEY"
  • "BANK_TRANSFER"
  • "TNG"
  • "BOOST"
  • "CARD"
  • "GRABPAY"
  • "ALIPAY"
  • "UMOBILE"
  • "EMONEI"
  • "DUITNOW_QR"
  • "WECHAT_PAY"
  • "UNIONPAY"
payment_method_options?

Flat canonical options for the selected payment_method. Required fields are determined by the resolved payment route; FPX accepts only an optional bank.

return_url?string

Optional Merchant final return URL after Init completes browser continuation. It is never sent to the browser as a Provider return URL.

Formaturi
Lengthlength <= 2048

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/payment_intents" \  -H "Idempotency-Key: string" \  -H "Content-Type: application/json" \  -d '{    "amount": "string",    "country": "string",    "currency": "string",    "customer": {      "property1": null,      "property2": null    },    "merchant_reference": "string",    "payment_method": "FPX"  }'
{  "amount": "10000",  "captured_amount": "0",  "completed_at": null,  "country": "MY",  "created_at": "2026-05-09T12:34:00.000Z",  "currency": "MYR",  "environment": "test",  "failure_code": null,  "expires_at": "2026-05-09T12:49:00.000Z",  "id": "dord_01HZYABCDXYZ",  "merchant_reference": "order-2026-05-09-0001",  "next_action": {    "expires_at": "2026-05-09T12:49:00.000Z",    "type": "redirect_to_url",    "url": "https://api.example.com/continue/payment_123"  },  "object": "payment_intent",  "payment_method": "FPX",  "receipt": null,  "status": "requires_action",  "updated_at": "2026-05-09T12:34:02.000Z"}