Business debit records (final prepayment debit per order)
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
| Field | Type | Required | Description |
|---|---|---|---|
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
{
"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
}insufficient_scope: missing merchant:read.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.
{
"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
}