Z Zise Developers 简体中文

QR payment order details

GET /v1/qrpay/orders/{id} scope: qrpay:read
On behalf of a member · x-on-behalf-of required

Merge forward by status_version, accepting only newer updates. Without it, a slow response can regress “received” to “processing”.

⚠ Store unknown status values unchanged and alert; never default to “processing”. completed is not absolutely terminal: a refund can advance it to refunded.

⚠ Amounts here are integer strings in minor units, not fixed-point decimals. Insert the decimal point using ledger_scale yourself. GET /v1/qrpay/orders, the list endpoint for the same business, instead returns fixed-point strings; do not reuse its parser.

Path Parameters

FieldTypeRequiredDescription
id string Required Order ID, accepted with or without qrp_; the server strips the prefix.
FieldTypeRequiredDescription
x-on-behalf-of string Required Member on whose behalf the call is made. Accepts your external_member_id or our public mem_<uuid>.

Response

200OK
{
  "id": "qrp_9f2c1b40-0e2a-4d7c-9d21-6f0c1c3e5a11",
  "status": "completed",
  "status_version": 3,
  "source_asset": "USDT",
  "locked_amount": "128500000",
  "source_amount": "128500000",
  "ledger_scale": 6,
  "pay_currency": "THB",
  "pay_amount": "4500.00",
  "created_at": "2026-08-12T09:30:00Z"
}
400member_context_required: missing x-on-behalf-of. · member_not_found: member nonexistent, not yours, or suspended; all three share one response.
403insufficient_scope: this key lacks qrpay:read
404not_found: order not associated with this member or nonexistent. Both use the same response, avoiding an order-ID discovery endpoint.
Request
curl -X GET 'https://api.zinfra.vip/v1/qrpay/orders/{id}' \
  -H 'x-auth-token: Bearer $TOKEN' \
  -H 'x-on-behalf-of: $MEMBER_ID'
const res = await fetch("https://api.zinfra.vip/v1/qrpay/orders/{id}", {
  method: "GET",
  headers: {
    "x-auth-token": "Bearer $TOKEN",
    "x-on-behalf-of": "$MEMBER_ID",
  },
});
// Keep monetary amounts as strings, never numbers.
const data = await res.json();
import requests

res = requests.get(
    "https://api.zinfra.vip/v1/qrpay/orders/{id}",
    headers={
        "x-auth-token": "Bearer $TOKEN",
        "x-on-behalf-of": "$MEMBER_ID",
    },
)
# Use Decimal(str(...)) for amounts, not float.
data = res.json()
req, _ := http.NewRequest("GET", "https://api.zinfra.vip/v1/qrpay/orders/{id}",
    nil)
req.Header.Set("x-auth-token", "Bearer $TOKEN")
req.Header.Set("x-on-behalf-of", "$MEMBER_ID")
res, err := http.DefaultClient.Do(req)
// Decode amount fields as string, not float64.
HttpRequest req = HttpRequest.newBuilder()
    .uri(URI.create("https://api.zinfra.vip/v1/qrpay/orders/{id}"))
    .header("x-auth-token", "Bearer $TOKEN")
    .header("x-on-behalf-of", "$MEMBER_ID")
    .method("GET", HttpRequest.BodyPublishers.noBody())
    .build();
// Use String / BigDecimal for amounts, not double.
$ch = curl_init('https://api.zinfra.vip/v1/qrpay/orders/{id}');
curl_setopt_array($ch, [
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    'x-auth-token: Bearer $TOKEN',
    'x-on-behalf-of: $MEMBER_ID',
  ],
]);
$res = curl_exec($ch);
// Use bcmath / strings for amounts, not floatval.
200
{
  "id": "qrp_9f2c1b40-0e2a-4d7c-9d21-6f0c1c3e5a11",
  "status": "completed",
  "status_version": 3,
  "source_asset": "USDT",
  "locked_amount": "128500000",
  "source_amount": "128500000",
  "ledger_scale": 6,
  "pay_currency": "THB",
  "pay_amount": "4500.00",
  "created_at": "2026-08-12T09:30:00Z"
}