---
title: "Create a dynamic PayNow payment"
method: POST
path: "/payments/paynow"
---

# Create a dynamic PayNow payment

`POST /payments/paynow`

## Request

- Base URL: `https://api-sandbox.straitsx.com/v1`
- URL: `https://api-sandbox.straitsx.com/v1/payments/paynow`
- Auth: API key in header `X-XFERS-APP-API-KEY`

[Available in Production/Sandbox environment] Create a dynamic (one-off) PayNow to accept payments from your customers.

## Headers

- `X-XFERS-APP-API-KEY` string, required
- `X-PUBLIC-KEY-ID` string
- `X-TIMESTAMP` string
- `X-NONCE` string
- `X-SIGNATURE` string

## Request body

- object
  - `data` object
    - `attributes` object
      - `referenceId` string, required: Your internal reference ID, e.g. customer ID or invoice ID. Please note that it has to be unique for each request.<br>Regex: `/^\s*.{1,191}\s*$/`
      - `amount` number, float, required: Transaction amount for this PayNow payment(Must be a positive float with max 2 decimal place)<br>Regex: `/^(?=.*[1-9])\d+(\.\d{1,2})?$/`
      - `expiresAt` string, required: ISO8601 format in UTC e.g. `2024-03-27T10:59:53Z`. Expiry must be between 5 minutes and 30 days.<br>Regex: `/^(\d{4})(-(0[1-9]|1[0-2])(-(0[1-9]|[12]\d|3[01])(T([01]\d|2[0-3]):([0-5]\d):([0-5]\d)(\.\d+)?(Z|([+-]([01]\d|2[0-3]):([0-5]\d)))?)?)?)?$/i`
      - `uploadQrImage` boolean: When `true`, requests the QR code image to be uploaded to S3. The response will include a `qrCodeImageUrl` field with a presigned URL once the upload completes. Only available for merchants with QR optimization enabled.
    - `relationships` object
      - `customerProfile` object
        - `data` object
          - `id` string, required: Customer Profile ID is retrieved from the response ID of Create Customer Profile API<br>Regex: `/^\s*.{1,191}\s*$/`
      - `subprofile` object
        - `data` object
          - `id` string, required: Subprofile ID is retrieved from the response id of Create Subprofile API.<br><br><strong>Optional.</strong> If provided, payment is created under the specified subprofile. If omitted, uses CP's default subprofile - existing behavior.

## Response `200`

200

- object
  - `data` object
    - `id` string: PayNow contract ID.
    - `type` string: Request type.
    - `attributes` object
      - `status` string: Transaction status.
      - `currency` string: Transaction currency.
      - `amount` string: Transaction amount for this PayNow payment.
      - `createdAt` string: Timestamp when the transaction was created.
      - `expiresAt` string: Timestamp when the transaction QR expires.
      - `referenceId` string: Your internal reference ID, e.g. customer ID or invoice ID.
      - `fees` string: Additional transaction fees charged.
      - `paymentMethod` object: PayNow payment method details.
        - `id` string: PayNow payment method ID.
        - `type` string: Payment method type.
        - `base64EncodedImage` string: Base64-encoded QR code image. Returns `null` for merchants with QR optimization enabled (use `qrCodeImageUrl` or `qrCodeData` instead).
        - `qrCodeData` string, nullable: Raw QR code data string for client-side QR generation. Populated for merchants with QR optimization enabled; `null` otherwise.
        - `qrCodeImageUrl` string, nullable: Presigned S3 URL to the QR code image (PNG). Available for merchants with QR optimization enabled. May be `null` initially on create if image upload is still processing. Poll the GET endpoint to retrieve once ready. URL expires after 5 minutes — re-fetch via GET for a fresh URL.
        - `referenceId` string: Reference ID of the PayNow QR code.
        - `externalReference` string: External reference identifier from the payment provider.
        - `expiresAt` string: Timestamp when the dynamic PayNow QR code expires.
        - `virtualPaymentAddress` unknown
      - `customerProfile` object: Customer profile details.
        - `id` string: Associated customer profile ID.

## Changes

- **2026-11-03** `d17239d67150`: 1 warning, 4 info
  - removed the optional property `data/attributes/senderInformation` from the response with the `200` status
  - api operation id `create-dynamic-paynow-payment` removed and replaced with `create-a-dynamic-paynow-payment`
  - added the new optional request property `data/attributes/uploadQrImage`
  - added the new optional request property `data/relationships`
  - …1 more

[Operation history](https://skmtc.dev/straitsx/apis/straitsx-sandbox-base-url/changes/payments/paynow/post.md)

---

[API](https://skmtc.dev/straitsx/apis/straitsx-sandbox-base-url.md) - [All operations](https://skmtc.dev/straitsx/apis/straitsx-sandbox-base-url/llms.txt) - [OpenAPI document](https://skmtc.dev/straitsx/apis/straitsx-sandbox-base-url/revisions/d17239d67150?raw)
