PayNow Transfer Payments Guide
Learn how to use the Payment API to enable Singapore PayNow transfer deposits from your user.
Overview
Each connected user on your platform will be assigned a unique QR code for PayNow transfers. Sender name screening is performed as part of our compliance checks on incoming payments.
This creates a secure and seamless experience for your users and makes it easy for your team to reconcile these transactions.
StraitsX supports two types of PayNow QR codes:
| Type | Use Case | Reusable? | Amount Fixed? |
|---|---|---|---|
| Persistent PayNow | Top-up wallets, recurring deposits | Yes — one QR per user | No — payer enters any amount |
| Dynamic PayNow | Checkout, one-time invoices | No — single use, expires | Yes — amount is pre-set |
Step 1 — Create a PayNow QR Code
Choose the type that fits your use case.
Option A: Persistent PayNow
Create a persistent PayNow payment method to provide a reusable QR code. Users can make multiple payments to the same QR. Each user can have only one persistent PayNow payment method.
curl --request POST \
--url https://api-sandbox.straitsx.com/v1/payment_methods/paynow \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'X-XFERS-APP-API-KEY: {{X-XFERS-APP-API-KEY}}' \
--data '{
"data": {
"attributes": {
"referenceId": "user_wallet_john_doe"
},
"relationships": {
"customerProfile": {
"data": {
"id": "customer_profile_6972bb6a-2a5f-48dd-8ea7-2e07c50e94b3"
}
}
}
}
}'Option B: Dynamic PayNow
Create a dynamic PayNow payment to generate a unique QR code for a specific transaction. You specify the amount and expiry. Once paid, the QR cannot be reused.
curl --request POST \
--url https://api-sandbox.straitsx.com/v1/payment_methods/paynow \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'X-XFERS-APP-API-KEY: {{X-XFERS-APP-API-KEY}}' \
--data '{
"data": {
"attributes": {
"referenceId": "order_12345",
"amount": "50.00",
"expiresAt": "2025-12-31T23:59:59+08:00"
},
"relationships": {
"customerProfile": {
"data": {
"id": "customer_profile_6972bb6a-2a5f-48dd-8ea7-2e07c50e94b3"
}
}
}
}
}'Step 2 — Display PayNow QR code
Display the returned QR code to your user so they can scan it with their bank app.

Sample PayNow QR Code
| Payment Type | From | To |
|---|---|---|
| PayNow transfer | User's bank account | StraitsX Business Account |
Note:
When users scan the PayNow QR code, their bank app will auto-populate the payment details. Users should not modify these details, as the payment may fail to reach the correct account.
Step 3 — Add callback URL
On a successful completion of a deposit transaction, StraitsX will send a callback notification to you via a callback URL indicated on the StraitsX Business Dashboard.
Add the callback URL on the StraitsX dashboard > Platform Tools > Callback URL section to receive a callback when the transaction has been completed.
Step 4 — Make a PayNow Transfer
Step 4a: Sandbox environment
In the sandbox environment, you can initiate a mock PayNow transfer payment to test the transfer.
- Input a name under
sourceBankAccountHolderNameto simulate the sender's bank account name for testing.
curl --request POST \
--url https://api-sandbox.straitsx.com/v1/sandbox/paynow_simulations \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'X-XFERS-APP-API-KEY: {{X-XFERS-APP-API-KEY}}' \
--data '{
"data": {
"attributes": {
"id": "paynow_5f46adf0-cd33-4a0a-b27a-be0bf61850fe",
"amount": 50,
"sourceBankAccountHolderName": "JOHN DOE",
"endToEndRef": "paynow-ref-12345"
},
"relationships": {
"customerProfile": {
"data": {
"id": "customer_profile_6972bb6a-2a5f-48dd-8ea7-2e07c50e94b3"
}
}
}
}
}'Step 4b: Production environment
To make a PayNow transfer payment, your users can deposit funds via their bank app by scanning the QR code generated in step 1.
Scanning QR Code example

Bank Account Verification
Upon the first successful deposit, the sender's bank account will be automatically added and verified on the customer profile. This enables first party withdrawals to that bank account.
Step 5 — Confirm deposit has been received
When the payment is received, we will send a paymentStatusUpdated event callback to the URL indicated on the StraitsX Business Dashboard.
For sample payloads and detailed field descriptions, see Payment Callbacks.
Securing your callback
The callback can be verified using the HMAC-SHA256 algorithm.
Learn more about how to secure your callback →
Try it out!
Getting started with StraitsX APIs is easy. Our business development and integration teams will be with you every step of the way. If you have any questions or would like to connect with our team, please do so via Support!
Updated 2 months ago

