Z Zise Developers 简体中文

Your payout requests (read-only; no initiation endpoint)

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

⚠ There is also no POST, for the same reason as the address book: machine APIs cannot ensure human step-up authentication. Initiate payouts through the merchant portal. This page lets your finance system determine the review stage of a requested payout. Reading it creates no new withdrawal destination.

Query Parameters

FieldTypeRequiredDescription
limit integer Optional Defaults to 20, maximum 100.
cursor string Optional The previous page's next_cursor, an opaque string.

Response

200OK
{
  "data": [
    {
      "id": "91b0f5c2-1d4a-4f77-8f01-6a2e9b3c7d10",
      "asset": "USDT",
      "amount_text": "20000",
      "amount": "20000000000",
      "ledger_scale": 6,
      "address": "0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed",
      "status": "dispatching",
      "review_note": "",
      "tx_hash": "",
      "created_at": "2026-08-12T08:00:11.021Z",
      "updated_at": "2026-08-12T09:14:53.700Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}
403insufficient_scope: missing merchant:read.

Additional Details

Seven statuses; display unknown values unchanged

statusMeaning
pending_reviewNot yet reviewed by us
approvedApproved, awaiting dispatch
rejectedRejected; reason in review_note
dispatchingSent to custodian, awaiting on-chain confirmation
dispatch_unknownOutcome unknown; see below
paidPaid; transaction hash in tx_hash
failedFinal failure

⚠ dispatch_unknown means neither success nor failure: the request was sent, but its outcome is unknown and money may already have left. It is an isolated state: all our paths that could move the funds again reject it. Only manual investigation can finalize it. Do not submit another payout because of this state.

⚠ We may add states at any time. Display unknown values unchanged; do not default to processing, which would hide a new state in your interface.

Two amount fields with different formats

  • amount_text: the original requested amount entered in the portal, as decimal text.
  • amount: the approved settlement amount, parsed using the asset's precision as a fixed-point integer string, without a decimal point; see ledger_scale on the same row.

⚠ For unapproved requests, amount is "0". This means the settlement amount has not yet been parsed, not that the requested amount is zero. Both the entered amount and the amount used for payout must be traceable, hence the separate fields.

address is a snapshot taken at order creation, not the current address-book value. Changing a label or revoking an address does not alter any character of the destination on historical orders.

Keyset pagination, strictly descending by (created_at, id).

Request
curl -X GET 'https://api.zinfra.vip/v1/merchant/payouts' \
  -H 'x-auth-token: Bearer $TOKEN'
const res = await fetch("https://api.zinfra.vip/v1/merchant/payouts", {
  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/payouts",
    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/payouts",
    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/payouts"))
    .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/payouts');
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": [
    {
      "id": "91b0f5c2-1d4a-4f77-8f01-6a2e9b3c7d10",
      "asset": "USDT",
      "amount_text": "20000",
      "amount": "20000000000",
      "ledger_scale": 6,
      "address": "0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed",
      "status": "dispatching",
      "review_note": "",
      "tx_hash": "",
      "created_at": "2026-08-12T08:00:11.021Z",
      "updated_at": "2026-08-12T09:14:53.700Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}