Seamless
Use this when you control the checkout UI and want to drive payments through the API.
-
Create the order
POST /api/pay/v1/orders {"merchant_order_reference": "order-10002", "order_amount": { "value": 300, "currency": "SGD" }, "integration_mode": "SEAMLESS"}
Returns data.order_id. -
Create a payment
For a QR payment:
POST /api/pay/v1/orders/{order_id}/payments {"payments": [{
"merchant_payment_reference": "pay-qr-0001",
"payment_method": "QR",
"payment_amount": { "value": 300, "currency": "SGD" },
"payment_option": { "qr_details": { "qr_format": "base64" } }
}]}
The response returns qr_data (a base64 image) to render for the shopper to scan. For wallets, use payment_option.wallet_details.wallet_code instead.
For GrabPay QR, use "qr_format": "Grab". For cards, send payment_option.card_details plus a device_info block (browser headers, screen size, timezone, device_channel: "browser") for 3-D Secure; the response returns a challenge_url.
In this portal, card numbers are accepted only if they are on the UAT test-card list.
- Poll for the final status
GET /api/pay/v1/orders/{order_id}
Poll until status reaches a final value (PROCESSED, FAILED, CANCELLED).
Updated 5 days ago