PayNow for Payment Setup API
Last updated: April 30, 2026
To accept PayNow payments, you must:
- Create a payment setup.
- Confirm the payment.
- Redirect the customer to PayNow.
Call the Create a payment setup endpoint.
Information
Your base URL's {prefix} value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox and production environments, see API endpoints.
post
https://{prefix}.api.checkout.com/payments/setups
1{2"amount": 1000,3"currency": "SGD",4"processing_channel_id": "pc_wzjki6hw5puepb5fnvqlizj2e4",5"reference": "ORD-5023-4E89",6"settings": {7"success_url": "https://example.com/payments/success",8"failure_url": "https://example.com/payments/failure"9}10}
In the request body, provide the following:
| Field | Description |
|---|---|
number | The payment amount, in the minor currency unit. |
string | Three-letter ISO 4217 currency code. |
string | The processing channel's unique identifier. |
string | The URL to redirect the customer to if the payment fails. |
string | The URL to redirect the customer to after a successful payment. |
string | The country calling code for the customer's phone number. |
string | The customer's phone number. |
string | A description of the payment. |
string | A unique reference for the payment. |
1{2"id": "set_rcmepwrchqab2wsergcafvijfy",3"processing_channel_id": "pc_wzjki6hw5puepb5fnvqlizj2e4",4"amount": 1000,5"currency": "SGD",6"payment_type": "Regular",7"reference": "ORD-5023-4E89",8"payment_methods": {9"paynow": {10"status": "ready",11"flags": []12}13},14"available_payment_methods": [15"paynow"16],17"settings": {18"success_url": "https://example.com/payments/success",19"failure_url": "https://example.com/payments/failure"20}21}
The response returns a payment_methods object, which contains the payment methods enabled on your account.
Providing all required fields sets the payment_methods.paynow object to a ready status.
Confirm the payment by calling the Confirm a payment setup endpoint and provide:
- The payment setup
idas the{id}path parameter. paynowas the{payment_method_name}path parameter.
post
https://{prefix}.api.checkout.com/payments/setups/{id}/confirm/paynow
If you receive a 202 Accepted response with a payment id value and the status field set to Pending, your request was successful.
1{2"id": "pay_wwfb2jkxfwvu7ebiincw3ibbmi",3"status": "Pending",4"payment_type": "Regular",5"_links": {6"self": {7"href": "https://{prefix}.api.sandbox.checkout.com/payments/pay_wwfb2jkxfwvu7ebiincw3ibbmi"8},9"redirect": {10"qr_code": {11"image": "",12"text": "00020126570009SG.PAYNOW01012000Singapore62200116pn_71f6dfc1763b4"13}14}15}16}
Take the _links.redirect.qr_code.text value from the confirm response and convert it into a QR code using a third-party QR code generator tool. Display the QR code to the customer.
The customer must scan the QR code using their online banking app and confirm the transaction. After the customer completes the payment, Checkout.com redirects them to your settings.success_url or settings.failure_url.
Information
The QR code is valid for five minutes. The payment expires if the customer does not authorize the payment within this time.
Checkout.com communicates the capture of the payment using webhooks. When you receive a payment_captured webhook, it indicates that the transaction has been successfully completed.
PayNow only supports auto-capture payments.
Information
You cannot void an auto-captured payment. To reverse a payment in progress, wait for the payment to be captured, and then process a refund.