curl --request POST \
--url https://api-sandbox.uqpaytech.com/api/v2/payment/static_qrs/{code_no} \
--header 'Content-Type: application/json' \
--header 'x-auth-token: <api-key>' \
--header 'x-client-id: <x-client-id>' \
--data '
{
"extension": "without key"
}
'import requests
url = "https://api-sandbox.uqpaytech.com/api/v2/payment/static_qrs/{code_no}"
payload = { "extension": "without key" }
headers = {
"x-client-id": "<x-client-id>",
"x-auth-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-client-id': '<x-client-id>',
'x-auth-token': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({extension: 'without key'})
};
fetch('https://api-sandbox.uqpaytech.com/api/v2/payment/static_qrs/{code_no}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-sandbox.uqpaytech.com/api/v2/payment/static_qrs/{code_no}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'extension' => 'without key'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-auth-token: <api-key>",
"x-client-id: <x-client-id>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-sandbox.uqpaytech.com/api/v2/payment/static_qrs/{code_no}"
payload := strings.NewReader("{\n \"extension\": \"without key\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-client-id", "<x-client-id>")
req.Header.Add("x-auth-token", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-sandbox.uqpaytech.com/api/v2/payment/static_qrs/{code_no}")
.header("x-client-id", "<x-client-id>")
.header("x-auth-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"extension\": \"without key\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.uqpaytech.com/api/v2/payment/static_qrs/{code_no}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-client-id"] = '<x-client-id>'
request["x-auth-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"extension\": \"without key\"\n}"
response = http.request(request)
puts response.read_body{
"code_no": "D5610f5e1",
"status": "SUCCEEDED",
"payment_methods": [
"ALIPAY"
],
"currency": "SGD",
"amount_mode": "DYNAMIC",
"amount": null,
"store_name": "Docs Test",
"city": "Singapore",
"extension": "without key",
"create_time": "2026-10-28T10:18:45+08:00",
"updated_time": "2026-10-28T10:18:52+08:00"
}{
"code": "<string>",
"message": "<string>",
"type": "static_qr_error"
}{
"code": "STATIC_QR_NOT_FOUND",
"message": "The requested static QR resource or endpoint was not found.",
"type": "static_qr_error"
}Update static QR code extension
Replace extension only. Payment methods, currency, amount mode, and amount cannot be changed through this operation. An idempotency key is not required and does not replay an earlier update.
curl --request POST \
--url https://api-sandbox.uqpaytech.com/api/v2/payment/static_qrs/{code_no} \
--header 'Content-Type: application/json' \
--header 'x-auth-token: <api-key>' \
--header 'x-client-id: <x-client-id>' \
--data '
{
"extension": "without key"
}
'import requests
url = "https://api-sandbox.uqpaytech.com/api/v2/payment/static_qrs/{code_no}"
payload = { "extension": "without key" }
headers = {
"x-client-id": "<x-client-id>",
"x-auth-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-client-id': '<x-client-id>',
'x-auth-token': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({extension: 'without key'})
};
fetch('https://api-sandbox.uqpaytech.com/api/v2/payment/static_qrs/{code_no}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-sandbox.uqpaytech.com/api/v2/payment/static_qrs/{code_no}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'extension' => 'without key'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-auth-token: <api-key>",
"x-client-id: <x-client-id>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-sandbox.uqpaytech.com/api/v2/payment/static_qrs/{code_no}"
payload := strings.NewReader("{\n \"extension\": \"without key\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-client-id", "<x-client-id>")
req.Header.Add("x-auth-token", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-sandbox.uqpaytech.com/api/v2/payment/static_qrs/{code_no}")
.header("x-client-id", "<x-client-id>")
.header("x-auth-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"extension\": \"without key\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.uqpaytech.com/api/v2/payment/static_qrs/{code_no}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-client-id"] = '<x-client-id>'
request["x-auth-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"extension\": \"without key\"\n}"
response = http.request(request)
puts response.read_body{
"code_no": "D5610f5e1",
"status": "SUCCEEDED",
"payment_methods": [
"ALIPAY"
],
"currency": "SGD",
"amount_mode": "DYNAMIC",
"amount": null,
"store_name": "Docs Test",
"city": "Singapore",
"extension": "without key",
"create_time": "2026-10-28T10:18:45+08:00",
"updated_time": "2026-10-28T10:18:52+08:00"
}{
"code": "<string>",
"message": "<string>",
"type": "static_qr_error"
}{
"code": "STATIC_QR_NOT_FOUND",
"message": "The requested static QR resource or endpoint was not found.",
"type": "static_qr_error"
}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.
Path Parameters
Case-sensitive code identifier. Preserve leading zeros. Historical code numbers can be longer than the limit for creating a new code.
1 - 64^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$Body
Reference information to replace the current value. An empty string clears it; 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.
Last update timestamp, or null if no update time is available.

