CollectionsHosted PaymentsPayment QR Codes

Create a payment QR code

POST
/v1/payment-qr-code

Authorization

authorization
AuthorizationBearer <token>

Set Your Secret API Key

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

type*string

Payment QR code network.

amount*number

Amount to collect, specified in the currency's minor units (e.g. in MYR, specify 1250 for MYR 12.50).

Range1 <= value <= 20000000
currency*string

Three-letter ISO 4217 currency code in full uppercase.

expirySeconds?integer

The QR code will be valid for this duration, after which payment QR code scanning applications will reject it.

Formatint32
internalAccountId*string

ID of the Internal Account to be linked to the payment QR code as the payment recipient. Use List Internal Accounts to find the ID of the account that should receive payments.

Length1 <= length
transactionReference*string

An identifier for this payment, typically unique. The same value will appear in the corresponding transaction notification and bank statement entry, allowing you to reconcile with this payment.

Length0 <= length <= 25
type*string

Payment QR code network.

amount?number

Amount to collect, specified in the currency's minor units (e.g. in HKD, specify 1250 for $12.50). For HK FPS: if amount is omitted, the amount is editable by the payer in the bank app; if amount is provided and amountEditable is false, the amount is fixed; if amount is provided and amountEditable is true, the amount is pre-filled but editable.

Range1 <= value <= 40000000
amountEditable?boolean

Applicable when amount is specified. If set to true, the amount can be edited by the payer when scanning the QR code.

currency*string

Three-letter ISO 4217 currency code in full uppercase.

expirySeconds?integer

The QR code will be valid for this duration, after which payment QR code scanning applications will reject it. For FPS type, a value of 0 may be used to indicate a non-expiring (static) QR code, subject to bank support.

Formatint32
proxyType?string

Type of the payment recipient's proxy (e.g. mobile phone number). This determines the value in proxyValue. E.g. if you specify FPS_ID here, proxyValue should be a valid FPS ID.

Value in

  • "MOBILE"
  • "FPS_ID"
  • "EMAIL"
proxyValue?string

Payment recipient's proxy (e.g. mobile phone number, email address). The value here is determined by proxyType. For the FPS payment method, proxyValue should follow these formats:

  • EMAIL proxy type: An email address registered with the FPS system as a proxy identifier. E.g: example@email.com.
  • MOBILE proxy type: A mobile phone number registered with FPS, including the Hong Kong country code +852. Must follow the format +852XXXXXXXX, where X is a digit and the number must be 8 digits long (excluding country code). E.g: +85212345678.
  • FPS_ID proxy type: A numeric FPS proxy identifier issued by a bank or financial institution in Hong Kong. Must be 7 or 9 digits long. E.g: 123456789.
  • HKID proxy type: A Hong Kong Identity Card number registered with FPS. The value may be provided either with or without parentheses. For example, if the HKID is A123456(7), both A123456(7) and A1234567 are accepted. Note that HKID is only accepted when beneficiaryType = INDIVIDUAL.
transactionReference*string

An identifier for this payment, typically unique. The same value will appear in the corresponding transaction notification and bank statement entry, allowing you to reconcile with this payment.

Length0 <= length <= 25
type*string

Payment QR code network.

amount*number

Amount to collect, specified in the currency's minor units (e.g. in SGD, specify 1250 for $12.50).

Range1 <= value <= 20000000
amountEditable?boolean

If set to true, the amount can be edited by the payer when scanning the QR code.

currency*string

Three-letter ISO 4217 currency code in full uppercase.

expirySeconds?integer

The QR code will be valid for this duration, after which payment QR code scanning applications will reject it.

Formatint32
proxyType?string

Type of the payment recipient's proxy (e.g. mobile phone number). This determines the value in proxyValue. E.g. if you specify UEN here, proxyValue should be a valid UEN.

Value in

  • "MOBILE"
  • "UEN"
  • "VPA"
  • "NRIC"
proxyValue?string

Payment recipient's proxy (e.g. mobile phone number). The value here is determined by proxyType. For the PayNow payment method, proxyValue should follow these formats:

  • MOBILE proxy type: A valid Singapore mobile number including the country code (+65): +65XXXXXXXX. E.g: +6592345678.
  • UEN proxy type: A valid Unique Entity Number (UEN) issued by ACRA. E.g: 202303536E.
  • VPA proxy type: A valid Virtual Payment Address (VPA) issued by a non-bank Financial Institution (e.g. digital wallets). The exact format is determined by the issuer. E.g: +6592345678#ACME.
transactionReference*string

An identifier for this payment, typically unique. The same value will appear in the corresponding transaction notification and bank statement entry, allowing you to reconcile with this payment.

Length0 <= length <= 25

Response Body

*/*

application/json

application/json

curl -X POST "https://example.com/v1/payment-qr-code" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "string"
  }'

A PayNow QR code for a fixed amount. qrCodeImageUrl serves the image to embed or print.

{
  "type": "PAYNOW",
  "proxyType": "UEN",
  "proxyValue": "202303536E",
  "amount": 1250,
  "currency": "SGD",
  "expirySeconds": 900,
  "amountEditable": false,
  "transactionReference": "INV10042",
  "qrCodeImageUrl": "https://acme-paynow-qr-code.s3.ap-southeast-1.amazonaws.com/qr/INV10042.png"
}