curl --request POST \
--url https://api-sandbox.uqpaytech.com/api/v2/payment/static_qrs \
--header 'Content-Type: application/json' \
--header 'x-auth-token: <api-key>' \
--header 'x-client-id: <x-client-id>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--data '
{
"payment_methods": [
"ALIPAY"
],
"currency": "SGD",
"amount_mode": "DYNAMIC",
"code_no": "D5610f5e1",
"store_name": "Docs Test",
"extension": "no payment test"
}
'{
"status": "INITIATED",
"code_no": "D5610f5e1",
"create_time": "2026-10-28T10:18:44+08:00",
"payment_methods": [
"ALIPAY"
],
"currency": "SGD",
"amount_mode": "DYNAMIC",
"amount": null,
"store_name": "Docs Test",
"city": "Singapore",
"extension": "no payment test"
}Create a static QR code
Create a reusable payment code. HTTP 200 with INITIATED acknowledges creation; it does not establish readiness or payment success. Use the returned code_no to retrieve the code and its details. Reuse the same idempotency key and request after an uncertain response.
curl --request POST \
--url https://api-sandbox.uqpaytech.com/api/v2/payment/static_qrs \
--header 'Content-Type: application/json' \
--header 'x-auth-token: <api-key>' \
--header 'x-client-id: <x-client-id>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--data '
{
"payment_methods": [
"ALIPAY"
],
"currency": "SGD",
"amount_mode": "DYNAMIC",
"code_no": "D5610f5e1",
"store_name": "Docs Test",
"extension": "no payment test"
}
'{
"status": "INITIATED",
"code_no": "D5610f5e1",
"create_time": "2026-10-28T10:18:44+08:00",
"payment_methods": [
"ALIPAY"
],
"currency": "SGD",
"amount_mode": "DYNAMIC",
"amount": null,
"store_name": "Docs Test",
"city": "Singapore",
"extension": "no payment test"
}Authorizations
The API token for login provided by UQPAY.
Headers
The API client id generated by UQPAY
The authorized connected sub-account to manage. Omit or send an empty value to use the credential account. Use the same target account for all operations on a code. Do not send the credential account ID as an explicit sub-account.
Use a new key for each new creation. Retry the same request with the same key after an uncertain response. Reusing a key with different request parameters returns a conflict. Send this header only once.
Body
Select methods enabled for the target account. Check account and channel readiness through the options endpoint. In payment notifications, data.payment_method.type identifies the single method used for that transaction, not this array.
1 - 4 elementsALIPAY, WECHAT, PAYNOW, UNIONPAY Use an uppercase currency returned by the options endpoint. Payment notifications report the transaction currency in data.currency.
FIXED uses the specified amount; DYNAMIC lets the payer enter the amount.
FIXED, DYNAMIC Required for FIXED: a positive decimal string in major currency units with exactly two decimal places. For DYNAMIC, omit this field entirely; null, an empty string, and zero are not accepted. For reconciliation, read the transaction amount from data.amount in payment notifications, not the null amount of a DYNAMIC code.
^[0-9]+\.[0-9]{2}$Maximum 25 bytes. Omit or send an empty string to use the target account name. null is not accepted.
Custom code identifier. Omit or send an empty string to generate one. Keep it as a string to preserve leading zeros. Use only ASCII letters and digits. The values options and requests are reserved. null is not accepted. Static QR payment notifications identify this code in data.payment_method.<method>.static_qrcode_number_plate; one code can be used for multiple payments. See payment notification field mapping.
10^[A-Za-z0-9]{0,10}$Your reference information; defaults to an empty string when omitted. It is not encoded into the QR payment parameters. null is not accepted. The corresponding field in static QR payment notifications is data.payment_method.<method>.static_qrcode_extension; it is not data.metadata or a merchant order ID. See payment notification field mapping.
512Response
Request completed. Interpret the resource status separately.
Code identifier. Preserve case and leading zeros. Static QR payment notifications identify this code in data.payment_method.<method>.static_qrcode_number_plate; one code can be used for multiple payments. See payment notification field mapping.
Code creation status, not payment status. INITIATED means creation has started; SUCCEEDED means the code has been created.
Payment methods associated with this code. In payment notifications, data.payment_method.type identifies the single method used for that transaction, not this array.
ALIPAY, WECHAT, PAYNOW, UNIONPAY Currency used for payments with this code. Payment notifications report the transaction currency in data.currency.
FIXED uses the specified amount; DYNAMIC lets the payer enter the amount.
FIXED, DYNAMIC Fixed payment amount in major currency units; null for DYNAMIC codes. Response decimal precision may differ from the create request. For reconciliation, read the transaction amount from data.amount in payment notifications, not the null amount of a DYNAMIC code.
Store name associated with the code.
City associated with the code.
Your reference information. It is not encoded in the QR payment parameters. The corresponding field in static QR payment notifications is data.payment_method.<method>.static_qrcode_extension; it is not data.metadata or a merchant order ID. See payment notification field mapping.
Creation timestamp with a timezone offset.

