Skip to main content
Webhook 会将您账户的事件推送到您自己的 HTTPS 回调地址,并附带加密签名。

创建订阅

  • event_type:下表中的事件之一,或使用 * 订阅全部事件。
  • callback_url必须为 HTTPS;localhost 和私有 IP 会被拒绝——本地开发请使用 HTTPS 隧道
  • secret:至少 16 个字符;用于对每次投递签名。加密存储,无法再次获取。
订阅接收的是您账户的事件。您可以随时列出当前有效的订阅:

停用和重新启用订阅

当某个回调不再使用时,请将其停用而不是删除(订阅永远不会被删除: 会保持 disabled 状态,您可以随时重新启用):
如需重新启用,使用 { "status": "active" } 发起同样的调用。
  • 该开关只影响未来的事件:disabled 状态的订阅停止接收新事件, 但已排队的投递仍会发出。
  • 幂等:重复当前状态会返回 200,不会有任何变化。
  • 您只能操作自己账户的订阅:其他账户的订阅会返回 404(与不存在的 订阅无法区分)。

事件

各事件的载荷

payout_status_changedcrypto_withdrawal_status_changed 中,status 可以为 completedfailed(若为 failed,在您收到该事件时扣款已完成退还)。

投递格式

每次投递都是一个 JSON POST,带有以下请求头:

验证签名

HMAC 必须基于原始请求体(收到的字节原样)计算,而不是重新序列化后的 JSON。请拒绝过旧的时间戳(超过 5 分钟),以防止重放攻击。

重试与幂等性

  • 您的端点必须在超时前返回 2xx;否则将触发重试。
  • 最多 5 次尝试,采用递增退避:
  • 使用 X-Webhook-Event-ID 去重:同一事件可能送达多次(至少一次投递语义)。
  • 如果 5 次尝试全部失败,该事件不会再次发送——请通过资源的 GET 接口恢复状态(这也是任何流程都不应只依赖 webhook 的原因)。

最佳实践

  • 立即返回 200,在后台异步处理。
  • 记录 X-Webhook-Delivery-ID 以便追溯。
  • 关键状态不要只依赖 webhook:您随时可以通过 API 查询对象(GET /v1/payouts/{id} 等)。
最后修改于 2026年8月22日