Z Zise Developers

这单在等用户做什么(重新确认 / 补件 / 无)

GET /v1/remittances/{id}/pending-action scope: remittances:read
代会员调用 · 必带 x-on-behalf-of

没有这个端点,你只能轮询订单详情去猜。 而「等重新确认」

有 4 小时时效,过期就自动退款 —— 商户完全不知道自己错过了什么,

用户只看到一笔莫名其妙退回来的钱。

actionnull = 此刻不需要用户做任何事(正常处理中、

或已终态、或算不出来)。null 不是错误,别渲染成异常。

先看 waiting_on,再看 action

action 回答的是「要终端用户做什么」。但「材料交完了、等我方或

上游判」那一档在 action 上恒为 null(催他重传只会覆盖上一次的

文件,见下面那条 ⚠),于是它与「一切正常、处理中」在出参上长得

一模一样waiting_on 就是把这两者分开的那一位:

  • member 等终端用户做事。此时 action 必然非 null;
  • review 材料已交,等我方或上游判。actionnull

别催用户;要渲染「审核中」那一屏,读订单详情的 supplement

(它在这期间照常有值,source 会告诉你是我方还是上游在判);

  • none 不等任何人为动作。

⚠ 它不是第二套语义:action 仍然是「要做什么」的唯一事实源。

别照着 waiting_on 去猜要补什么,也别把分支写在它上面 ——

分支写在 action.kind 上(新增一档时 kind 会变,这一位不会)。

action 非 null 时action.kind 分支,目前两档。

新增一档时老档的形状不会变,所以请写成 switch

认不出的 kind 原样露出,别落进「重新确认」那一支。

── kind: "slippage" 等用户接受新价 ──

old_totalnew_total 的差额(extra_charge)摆给用户,

倒计时用 deadline,用户同意就把 new_total 原样发给

POST /v1/remittances/{id}/reconfirm

── kind: "supplement" 等用户补材料 ──

字段与 GET /v1/remittances/{id}supplement逐字相同

round / status / source / message / items[] /

submit_url / created_at / submitted_at),语义见那一页。

submit_url 丢给终端用户即可 —— 提交、校验、状态推进、

转发回上游都在我方那一侧完成,你不需要接收文件。

这一档的 deadline 恒为 null,而且这是对的。 审核与补件

不会因为超时被自动取消(合规审查与上游 RFI 本来就会跨天甚至

跨周,24 小时到期就退款等于系统替审核员做了「拒绝」这个决定)。

别在你那一侧编一个倒计时。

⚠ 只有待用户交的那一轮会出现在这里。用户交完之后

supplement.status: SUBMITTED)这个端点回 action: null +

waiting_on: "review" —— 此刻要做事的是我方或上游,不是他。

想渲染「审核中」那一屏,读订单详情的 supplement 块,

它在 SUBMITTED 期间照常有值。

别在 SUBMITTED 期间催用户重传:每传一次都会覆盖上一次,

而托管页会直接告诉他「这一轮已经处理过了」。

can_accept: false不要显示确认按钮,看 reject_reason

  • insufficient_balance 会员余额不够补冻 —— 让他先充值;
  • too_many_rounds 轮数用尽 —— 只剩取消或等过期。

extra_chargeextra_locked 是两个数:前者是他要多付的钱,

后者是要多冻的(含滑点预留,所以 ≥ 前者)。给用户看前者

余额够不够按后者判。

⚠ 这里的价来自上一次分发时上游要多少,不是一次新报价 ——

我方不会为了渲染这一屏去问上游(报价只活 75 秒,用户看到时必然

已过期,而每问一次都是一次带幂等键的上游写调用)。它是决策依据,

不是承诺;真正的成交价在放行那一刻定,用户原来设的滑点上限仍然罩着它。

路径参数

字段类型必填说明
id string 必填 订单号。rmt_ 前缀可带可不带。
字段类型必填说明
x-on-behalf-of string 必填 代哪个会员调用。

响应

200有待办时 action 非 null;无待办时 {"id": "...", "waiting_on": "none"|"review", "action": null}。 下面的示例是 kind: "slippage";补件那一档长这样: `` { "id": "rmt_9c1f0a7e-3b2d-4f81-9a55-1d2e3f4a5b6c", "waiting_on": "member", "action": { "kind": "supplement", "round": 1, "status": "PENDING", "source": "upstream", "message": "Please provide proof of the source of funds.", "items": [ { "field_key": "proof_of_funds", "label": "资金来源证明", "type": "file", "required": true, "submitted": false } ], "submit_url": "https://api.zise.com/remit/supplement/6f1c2b9d4a8e47f0b3d5c1a2e9f80b7c", "created_at": "2026-08-12T10:05:00Z", "submitted_at": "", "deadline": null } } ``
{
  "id": "rmt_9c1f0a7e-3b2d-4f81-9a55-1d2e3f4a5b6c",
  "waiting_on": "member",
  "action": {
    "kind": "slippage",
    "moved_bps": 137,
    "slippage_bps": 100,
    "old_total": "499.980000",
    "new_total": "512.340000",
    "extra_charge": "12.360000",
    "extra_locked": "12.483600",
    "available": "820.500000",
    "can_accept": true,
    "reject_reason": "",
    "deadline": "2026-08-12T13:30:00Z"
  }
}
404not_found 订单不在这个会员名下,或不属于你。
请求
curl -X GET 'https://api.zise.com/v1/remittances/{id}/pending-action' \
  -H 'x-auth-token: Bearer $TOKEN' \
  -H 'x-on-behalf-of: $MEMBER_ID'
const res = await fetch("https://api.zise.com/v1/remittances/{id}/pending-action", {
  method: "GET",
  headers: {
    "x-auth-token": "Bearer $TOKEN",
    "x-on-behalf-of": "$MEMBER_ID",
  },
});
// 金额按字符串读,别让它变成 number
const data = await res.json();
import requests

res = requests.get(
    "https://api.zise.com/v1/remittances/{id}/pending-action",
    headers={
        "x-auth-token": "Bearer $TOKEN",
        "x-on-behalf-of": "$MEMBER_ID",
    },
)
# 金额用 Decimal(str(...)),不要 float
data = res.json()
req, _ := http.NewRequest("GET", "https://api.zise.com/v1/remittances/{id}/pending-action",
    nil)
req.Header.Set("x-auth-token", "Bearer $TOKEN")
req.Header.Set("x-on-behalf-of", "$MEMBER_ID")
res, err := http.DefaultClient.Do(req)
// 金额字段用 string 接,不要 float64
HttpRequest req = HttpRequest.newBuilder()
    .uri(URI.create("https://api.zise.com/v1/remittances/{id}/pending-action"))
    .header("x-auth-token", "Bearer $TOKEN")
    .header("x-on-behalf-of", "$MEMBER_ID")
    .method("GET", HttpRequest.BodyPublishers.noBody())
    .build();
// 金额字段用 String / BigDecimal,不要 double
$ch = curl_init('https://api.zise.com/v1/remittances/{id}/pending-action');
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);
// 金额用 bcmath / 字符串,不要 floatval
200
{
  "id": "rmt_9c1f0a7e-3b2d-4f81-9a55-1d2e3f4a5b6c",
  "waiting_on": "member",
  "action": {
    "kind": "slippage",
    "moved_bps": 137,
    "slippage_bps": 100,
    "old_total": "499.980000",
    "new_total": "512.340000",
    "extra_charge": "12.360000",
    "extra_locked": "12.483600",
    "available": "820.500000",
    "can_accept": true,
    "reject_reason": "",
    "deadline": "2026-08-12T13:30:00Z"
  }
}