Z Zise Developers
稳定币账户 › 指南

流水是账本的投影 —— 每一条都对应一次真实的资金变动。这一页给全部字段取值。

交易流水


GET /v1/transactions?external_member_id=…&cursor=…

游标分页,见分页

字段

字段说明
idtxn_ + 数字。按 id 精确查时带不带前缀都认
type业务类型,见下表。开放枚举
status各业务线的状态原文,见下面那条警告。开放枚举
status_version单调递增。合并状态时的判据,见下
directionin / out这个是封闭枚举,传别的值回 400
asset资产代号
amount字符串定点,位数由 amount_scale 决定。恒为正 —— 方向看 direction
occurred_at这件事什么时候发生的(充值取检测到的时刻)
created_at这行流水什么时候落库的排序与筛选都锚在它上面

type 的当前取值

方向是什么
deposit_cryptoin链上充值到账
withdrawalout链上提现
remittanceout汇款
qrpayout扫码付
exchangein / out站内兑换(一单两条,见下)
internal_transferin / out站内转账
card_issue_feeout开卡费(含实体卡邮费)
card_refundin开卡失败退费
card_penaltyout拒付罚金
card_topupin / out充值到卡(一单两条,见下)
card_withdrawin卡内资金转出(USD 退回钱包)
card_txnin / out卡消费流水
earn_subscribeout理财申购
earn_redeemin理财赎回
earn_interestin理财派息
balance_adjustin / out我方后台的资金调整与冲正

withdrawal(链上提现)与 card_withdraw(卡内转出)是两门生意

中文都叫「提现」而已。前者的钱离开我方账本,后者的钱从卡回到钱包。

这是开放枚举,不是封闭的。 我方上一条新业务线会加一个新 type

不发版、不通知。所以:

- 你的 switch 必须有 default,且 default 是「按 direction

amount 照常记账 + 原样显示」,不是丢弃、不是报错。

- ?type= 传一个不存在的值得到空列表,不是 400 ——

这是开放枚举上唯一诚实的行为。


status 是原文,不是归一化的三档

status 直接来自那条业务线自己的明细表:充值有充值的状态串,理财有理财的。没有被压成 success / pending / failed

这是刻意的 —— 压成三档之后「人工审核中」与「上游确认中」会变成同一个值,而那两件事该给用户看的话不一样。

所以:


一单两条的两个类型

兑换exchange)与充值到卡card_topup)在流水里各有两条:付出腿(direction: out)与到账腿(direction: in)。

它们讲的是同一笔交易

统计时不要把它们当两笔。 「这个会员这个月转出了多少」

如果不排除兑换的付出腿,一次 100 USDT → USD 的兑换会同时算进

「转出 100」与「转入 99.x」,而他一分钱都没离开你的体系。

我方的 App 在全局流水里把到账腿藏起来了;开放 API 两条都给

—— 你要的是完整投影,不是给人看的列表。


status_version:合并状态的唯一判据

同一笔单你可能从三个地方拿到状态:webhook、这个列表、产品线详情。它们到达的顺序没有保证。

合并时只许向前


if (incoming.status_version > stored.status_version) apply(incoming)

⚠ 少了这一句,一个慢响应会把「已到账」打回「处理中」——

而这类 bug 在测试环境几乎不复现(本地够快)。


增量同步:锚在 created_at


GET /v1/transactions?from=<上一轮见过的最大 created_at>

from / to 与游标都锚在 created_at,不是 occurred_at

⚠ 别拿 occurred_at 做增量水位线。一条 occurred_at 早、

created_at 晚的行(补记的历史流水就是这一类)会被永久跳过


对账用流水,不用余额

余额是当下的数,流水是过程。要回答「这个月他一共花了多少」必须走流水;拿两个时点的余额相减会漏掉同期的入金。

相关端点