Foreshock
EN 订阅
文档

API

速率限制

按账户计的限额在每个响应上都报出来,以及为什么裁决接口上的 429 是一次挂起而不是一次延迟。

更新于
2026-08-24

响应头

每个响应都带着你当前窗口的状态。

响应头含义
RateLimit-Limit本账户在当前窗口内允许的请求数。
RateLimit-Remaining当前窗口内剩余的请求数。
RateLimit-Reset当前窗口重置前的秒数。

在成功时就读它们,不要只在失败时读。一个从 429 才第一次知道限额存在的客户端,会在故障期间撞上限额——而那正是它最撞不起的时候。

超限时

429,type: .../rate-limited,带以秒为单位的 Retry-After。至少退避这么久,加抖动;在你这一侧用令牌桶,别用重试风暴。

裁决接口上的 429 是一次挂起

POST /v1/decide/deposit 返回一个带 fail_closed_action: HOLD 的独立 429 形状。

{
  "type": "https://foreshock.org/problems/rate-limited",
  "title": "Too many requests",
  "status": 429,
  "detail": "Rate limit exceeded. No verdict was produced; treat as HOLD.",
  "request_id": "req_EXAMPLE0000000008",
  "fail_closed_action": "HOLD"
}

没有产生裁决。等待不能替代裁决:无论退避跑多久,这笔入金在收到 200 之前一直是 HOLD。

把压力压下去

筛查比裁决便宜,A 层从不计费——但两者都受速率限制。两个习惯能把压力压下去:

  • 每笔入金裁决一次,用稳定的 Idempotency-Key。重放很便宜且不再计费,但每次尝试换一个新键,会把一笔入金变成很多条裁决。
  • 暴露面游标循环按稳定节奏跑,不要紧凑轮询。next_cursor: null 表示你已追平,睡一会儿再问。