Z Zise Developers 简体中文

Business debit records (final prepayment debit per order)

GET /v1/merchant/statements scope: merchant:read
Merchant account

One row per order × asset. merchant_paid is the final net amount debited from your prepayment for that order after refunds have been netted out. An order later fully refunded appears as 0, not as two rows.

Only the leg representing what you paid is returned. Our fee income and upstream costs are excluded; they follow different accounting perspectives and would prevent your statement from reconciling.

⚠ merchant_paid is a fixed-point integer string; precision comes from ledger_scale on the same row. ledger_scale may be null if the asset was delisted or has not been registered. Do not default to 6: that silently produces a factor-of-100 error for 8-decimal assets. If precision is unavailable, display the amount as Indeterminate.

The cursor is based on aggregated values, so the two legs of an order are not split across pages. from / to filter by ledger-entry time.

Query Parameters

FieldTypeRequiredDescription
from string Optional Start time, inclusive; ISO-8601 string compared lexicographically.
to string Optional End time, inclusive; ISO-8601 string.
asset string Optional Filter by asset, case-insensitive; the server converts it to uppercase.
limit integer Optional Defaults to 20, maximum 100.
cursor string Optional The previous page's next_cursor, an opaque string.

Response

200OK
{
  "data": [
    {
      "posted_at": "2026-08-12T09:31:02.441Z",
      "business": "remit_lock",
      "ref_table": "remit_orders",
      "ref_id": "rmt_01J8Z6M2K9QF3H7V0",
      "merchant_paid": "1350000",
      "asset": "USDT",
      "ledger_scale": 6,
      "display_scale": 2
    }
  ],
  "next_cursor": "MjAyNi0wOC0xMlQwOTozMTowMi40NDFafHJtdF8wMUo4",
  "has_more": true
}
403insufficient_scope: missing merchant:read.
Request
curl -X GET 'https://api.zinfra.vip/v1/merchant/statements' \
  -H 'x-auth-token: Bearer $TOKEN'
const res = await fetch("https://api.zinfra.vip/v1/merchant/statements", {
  method: "GET",
  headers: {
    "x-auth-token": "Bearer $TOKEN",
  },
});
// Keep monetary amounts as strings, never numbers.
const data = await res.json();
import requests

res = requests.get(
    "https://api.zinfra.vip/v1/merchant/statements",
    headers={
        "x-auth-token": "Bearer $TOKEN",
    },
)
# Use Decimal(str(...)) for amounts, not float.
data = res.json()
req, _ := http.NewRequest("GET", "https://api.zinfra.vip/v1/merchant/statements",
    nil)
req.Header.Set("x-auth-token", "Bearer $TOKEN")
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/merchant/statements"))
    .header("x-auth-token", "Bearer $TOKEN")
    .method("GET", HttpRequest.BodyPublishers.noBody())
    .build();
// Use String / BigDecimal for amounts, not double.
$ch = curl_init('https://api.zinfra.vip/v1/merchant/statements');
curl_setopt_array($ch, [
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    'x-auth-token: Bearer $TOKEN',
  ],
]);
$res = curl_exec($ch);
// Use bcmath / strings for amounts, not floatval.
200
{
  "data": [
    {
      "posted_at": "2026-08-12T09:31:02.441Z",
      "business": "remit_lock",
      "ref_table": "remit_orders",
      "ref_id": "rmt_01J8Z6M2K9QF3H7V0",
      "merchant_paid": "1350000",
      "asset": "USDT",
      "ledger_scale": 6,
      "display_scale": 2
    }
  ],
  "next_cursor": "MjAyNi0wOC0xMlQwOTozMTowMi40NDFafHJtdF8wMUo4",
  "has_more": true
}