API 参考 / 错误码
所有错误响应共用一个统一形状(业务错误体,不是框架默认校验体):
{
"error": "机器可读码,如 auth_required",
"message": "人读文案(可空)",
"recoverable": true
}recoverable=true 可退避重试;false(如 invariant_violation,500)代表系统内部状态异常、交易已暂停,不要重试。
带有 minCursor 的查询(以及订单状态查询)返回 404 时,可能是「投影还没追上你传的 cursor」或「资源真的不存在」——响应体逐字节相同(固定字面量 market_not_found,结构性保证)。拿到 202 之后立刻查大概率先 404:带同一个 cursor 轮询,不要把第一个 404 当终态。
失败时真正要回答的是「能不能重发」,不是「这个码叫什么」。最后两列就是答案:重试策略 和 重发是否幂等。
| 状态 | error | 场景 | 重试 | 重发幂等性 |
|---|---|---|---|---|
| 400 | invalid_request | 通用请求非法;撤单时 orderId/clientOrderId 都没传也归此 | 改正后重发 | 读操作,重发无副作用 |
| 400 | malformed_order_bytes | 带链上签名(auth)的下单:orderBytes 解不开或签名非法 | 改正后重发 | 读操作,重发无副作用 |
| 400 | expiration_required / expiration_mismatch / expired_envelope / envelope_exceeded | 签名订单的 expiration 缺失/与字节不一致/已过期/超过撮合截止 | 改正后重发 | 读操作,重发无副作用 |
| 400 | signature_required | 链上模式市场拒绝无签名订单(迁移开关控制,默认关) | 改正后重发 | 读操作,重发无副作用 |
| 400 | comment_rejected | 评论命中封禁词 | 改正后重发 | 读操作,重发无副作用 |
| 400 | invalid_address / invalid_email | 地址/邮箱格式非法 | 改正后重发 | 读操作,重发无副作用 |
| 401 | auth_required / auth_failed | 缺会话或验签失败。一律合并不区分(反枚举);会话受 24h 空闲 + 7d 绝对上限双闸门 | 改正后重发 | 读操作,重发无副作用 |
| 403 | login_method_disabled | 对应登录方式未启用(google/email 默认关) | 不要重试 | 读操作,重发无副作用 |
| 409 | display_name_taken | 展示名全局唯一,撞名 | 改正后重发 | 读操作,重发无副作用 |
| 409 | chain_binding_not_active | 链上绑定存在但不可用(status 给原态:FAILED/PENDING 处置不同) | 可退避重试 | 读操作,重发无副作用 |
| 423 | user_blocked | 账户被手动态/辖区策略硬停(冻结类准入) | 不要重试 | 读操作,重发无副作用 |
| 429 | code_cooldown / email_rate_limited | 邮箱验证码冷却/发码限流,message 带可重试秒数 | 可退避重试 | 读操作,重发无副作用 |
| 501 | heartbeat_disabled | 该部署未启用心跳——请求没错,是能力没开 | 不要重试 | 读操作,重发无副作用 |
| 503 | command_log_unavailable / seq_unavailable / duplicate_in_flight | 写接口可恢复故障:命令日志不可写/序号签发不可用/同 clientOrderId 在途;均可退避重试 | 可退避重试 | 必须带 clientOrderId,否则重发可能成两笔 |
| 503 | chain_binding_source_unavailable | clearing 不可达——不是「这个市场不能下单」 | 可退避重试 | 读操作,重发无副作用 |