Z Zise Developers 简体中文

Member withdrawal address book (addresses still cooling have usable=false)

GET /v1/withdraw-addresses scope: withdrawals:read
On behalf of a member · x-on-behalf-of required

On-chain addresses registered by members themselves. Addresses belong to members, not merchants. Under merchant_hosted, you hold funds but do not control member identity and security.

⚠ Addresses in the cooling period are listed with usable false. Do not filter them out: users who cannot see an address they just added may assume failure and add it again. Show it disabled, together with usable_at.

Returns all nondeleted addresses, including those still cooling, ordered by creation time descending. Not paginated: next_cursor is always null and has_more always false, so a generic paginator needs no special case.

upstream_valid has three values: 1 means the upstream confirmed validity; -1 means it could not respond at the time and we allowed the address while recording the result, because transient upstream failure should not prevent adding an address; 0 means the upstream rejected it, which is not stored and therefore never appears here.

Query Parameters

FieldTypeRequiredDescription
asset string Optional Filter by asset, converted to uppercase. Omit for all assets.
network string Optional Filter by network using an exact, case-sensitive match; the database stores uppercase machine-readable codes such as BSC. Omit for all networks.
FieldTypeRequiredDescription
x-on-behalf-of string Required Whose address book to query.

Response

200OK
{
  "data": [
    {
      "id": "wad_3c81f0d2-9a44-4d17-8e0b-2f6a1c9d4e77",
      "asset": "USDT",
      "network": "BSC",
      "address": "0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed",
      "label": "我的冷钱包",
      "usable_at": "2026-08-13T09:20:00Z",
      "usable": false,
      "upstream_valid": 1,
      "created_at": "2026-08-12T09:20:00Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}
404member_not_found: member does not exist, belongs to another merchant, or is suspended.
Request
curl -X GET 'https://api.zinfra.vip/v1/withdraw-addresses' \
  -H 'x-auth-token: Bearer $TOKEN' \
  -H 'x-on-behalf-of: $MEMBER_ID'
const res = await fetch("https://api.zinfra.vip/v1/withdraw-addresses", {
  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/withdraw-addresses",
    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/withdraw-addresses",
    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/withdraw-addresses"))
    .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/withdraw-addresses');
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
{
  "data": [
    {
      "id": "wad_3c81f0d2-9a44-4d17-8e0b-2f6a1c9d4e77",
      "asset": "USDT",
      "network": "BSC",
      "address": "0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed",
      "label": "我的冷钱包",
      "usable_at": "2026-08-13T09:20:00Z",
      "usable": false,
      "upstream_valid": 1,
      "created_at": "2026-08-12T09:20:00Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}