Seamless

Use this when you control the checkout UI and want to drive payments through the API.


  1. 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.

  2. 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.

  1. Poll for the final status
    GET /api/pay/v1/orders/{order_id}
    Poll until status reaches a final value (PROCESSED, FAILED, CANCELLED).

Did this page help you?