Z Zise Developers
GET /v1/balances

会员逐资产余额(八桶)

Scope balances:read 代会员调用 · 必带 x-on-behalf-of

一个资产一行,八个桶各自独立。它们不是「总额的几种切法」,

而是八个互不重叠的余额,会员的该资产总量 = 八个之和。

  • available 可用。唯一能直接花的那一桶。所有下单类端点扣的都是它。
  • pending 在途。已检测到但尚未确认到账的入金。

merchant_hosted 下它恒为 0 —— 到账判定发生在商户那一侧,

商户调 POST /v1/deposits 时已经是确认过的钱。

  • frozen 冻结。运营/风控按会员按资产冻住的部分,

解冻只能由我方后台操作,商户没有解冻入口。

  • isolated 隔离。争议、司法协助、反洗钱调查期间单独隔出来的部分。

frozen 分开是因为处置流程不同,不要合并展示。

  • locked 业务锁定。汇款等异步且可能失败的订单在下单那一刻

把钱从 available 挪进来的桶,订单终局时要么结算掉要么退回 available。

  • card 卡内资金。已经充进发卡上游的钱,物理上不在我方,

只能由发卡线的接口动它 —— 不要把它算进「用户还能花多少」

  • earn 理财。已申购进活期/定期的本金。
  • withdrawing 提现在途POST /v1/withdrawals 从 available

扣进来的那一桶,只能走 confirm(清零)或 fail(退回 available)。

运营碰不到它,商户也没有第三条路径。

返回的是「这个会员已经有账户行的资产」,不是资产目录。

一个还没收到过任何一笔钱的会员返回的是空数组,而不是一串 0。

要展示全部可选资产请另取 GET /v1/assets,两者做外连接。

⚠ 响应信封是 { balances: [...] }不是本站其余列表端点那个

{ data, next_cursor, has_more }。它不分页,也不会分页。

前置条件

  • 该会员属于这把 Key 的商户(否则一律 member_not_found,与「不存在」同一响应)
字段类型必填说明
x-on-behalf-of string 必填 查谁的余额。两种标识都收 —— 商户自己的 external_member_id, 或我方在会员出参里发的 mem_<uuid>

响应

200OK
{
  "balances": [
    {
      "asset": "USDT",
      "available": "1250.000000",
      "pending": "0.000000",
      "frozen": "0.000000",
      "isolated": "0.000000",
      "locked": "300.000000",
      "card": "0.000000",
      "earn": "5000.000000",
      "withdrawing": "0.000000",
      "ledger_scale": 6,
      "display_scale": 2
    },
    {
      "asset": "USD",
      "available": "48.750000",
      "pending": "0.000000",
      "frozen": "0.000000",
      "isolated": "0.000000",
      "locked": "0.000000",
      "card": "120.000000",
      "earn": "0.000000",
      "withdrawing": "0.000000",
      "ledger_scale": 6,
      "display_scale": 2
    }
  ]
}
400member_context_required 没带 x-on-behalf-of
404member_not_found 会员不存在 / 属于别的商户 / 已停用 —— 三种同一响应,不要据它判断会员是否存在
调用样例
curl -X GET 'https://api.zise.com/v1/balances' \
  -H 'authorization: Bearer $TOKEN' \
  -H 'x-zise-merchant: $MERCHANT_ID' \
  -H 'x-on-behalf-of: $MEMBER_ID'
const res = await fetch(
  "https://api.zise.com/v1/balances",
  {
    method: "GET",
    headers: {
      "authorization": "Bearer $TOKEN",
      "x-zise-merchant": "MERCHANT_ID",
      "x-on-behalf-of": "MEMBER_ID"
    },
  },
);
// 金额一律按字符串读,不要 JSON.parse 成 number
const data = await res.json();
import requests

res = requests.get(
    "https://api.zise.com/v1/balances",
    headers={
        "authorization": "Bearer $TOKEN",
        "x-zise-merchant": "$MERCHANT_ID",
        "x-on-behalf-of": "$MEMBER_ID"
    },
)
# 金额用 Decimal(str(...)),不要 float
data = res.json()