Z Zise Developers 简体中文

Member list (cursor pagination)

GET /v1/members scope: members:read
Merchant account

Keyset pagination, strictly descending by (created_at, id). No OFFSET: new members are continuously inserted at the front, so offset pagination could return the same row twice when new records arrive between pages.

kyc_level is fetched in batches using two SQL queries, not N+1, so large pages are safe.

Query Parameters

FieldTypeRequiredDescription
limit integer Optional Items per page, default 20, maximum 100. Invalid values silently fall back to 20 without an error.
cursor string Optional The previous page's next_cursor. An opaque string; do not construct it yourself. An undecodable cursor restarts from the beginning instead of returning an error.

Response

200OK
{
  "data": [
    {
      "id": "mem_9f1c0c8e-6f2a-4c1d-9d0b-2a7e5b3f8c41",
      "external_member_id": "u-10086",
      "uid": "80031427",
      "email": "alice@example.com",
      "nickname": "Alice",
      "status": "normal",
      "kyc_level": 2,
      "created_at": "2026-08-12T09:30:00.000Z"
    }
  ],
  "next_cursor": "MjAyNi0wOC0xMlQwOTozMDowMC4wMDBafDlmMWMwYzhl",
  "has_more": true
}
403insufficient_scope: missing members:read.
Request
curl -X GET 'https://api.zinfra.vip/v1/members' \
  -H 'x-auth-token: Bearer $TOKEN'
const res = await fetch("https://api.zinfra.vip/v1/members", {
  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/members",
    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/members",
    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/members"))
    .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/members');
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": "mem_9f1c0c8e-6f2a-4c1d-9d0b-2a7e5b3f8c41",
      "external_member_id": "u-10086",
      "uid": "80031427",
      "email": "alice@example.com",
      "nickname": "Alice",
      "status": "normal",
      "kyc_level": 2,
      "created_at": "2026-08-12T09:30:00.000Z"
    }
  ],
  "next_cursor": "MjAyNi0wOC0xMlQwOTozMDowMC4wMDBafDlmMWMwYzhl",
  "has_more": true
}