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:

TypeUse CaseReusable?Amount Fixed?
Persistent PayNowTop-up wallets, recurring depositsYes — one QR per userNo — payer enters any amount
Dynamic PayNowCheckout, one-time invoicesNo — single use, expiresYes — 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

Sample PayNow QR Code

Payment TypeFromTo
PayNow transferUser's bank accountStraitsX 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 sourceBankAccountHolderName to 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
Scanning a QR code to make a fund transfer (Last Updated: 31 Mar 2023)
👍

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!


Did this page help you?