限流规则
请求受两层独立限流约束,更严的一层生效:
- 按 API Key —— 当前 Key 的额度,请以此规划调用量。
- 按 IP 地址 —— 同一网络出口下所有 Key 共享的粗粒度上限。
IP 层用于兜住滥用。除非你把大量流量集中在单一出口 IP,否则真正先触顶的一定是按 Key 的额度。
| 接口 | 限额 |
|---|---|
GET /v1/products · GET /v1/balance · GET /v1/api-key · GET /v1/tasks/{token} · GET /v1/tasks/{token}/result · GET /v1/tasks/{token}/download | 每个 API Key 60 次 / 分钟(每 IP 120 次 / 分钟) |
POST /v1/detect · POST /v1/detect/file | 每个 API Key 10 次 / 分钟(每 IP 30 次 / 分钟) |
POST /v1/realtime/check/{series} · POST /v1/realtime/detect | 令牌桶 —— 按 API Key:容量 60,每秒回填 1 个(持续约 60 次 / 分钟) 按账号:容量 120,每秒回填 2 个 · IP 层:180 次 / 分钟 |
实时检测不是固定的每分钟计数器,而是令牌桶:可以一次打满 60 个令牌,随后每秒回填 1 个。因此稳定吞吐约为每 Key 60 次 / 分钟,短时突发由桶容量吸收。
每个被限流的响应,以及每个成功的实时检测响应,都会告诉你当前状态:
| 响应头 | 含义 |
|---|---|
X-RateLimit-Limit | 本次生效的上限 |
X-RateLimit-Remaining | 当前窗口剩余次数(或令牌数) |
Retry-After | 建议等待秒数,出现在 429 上 |
X-RateLimit-Reset | 窗口重置的 Unix 时间戳,出现在 429 上 |
触发 429 之后
Section titled “触发 429 之后”按 Retry-After 给出的秒数停止请求,之后采用指数退避恢复。响应体能告诉你撞的是哪一层:
{ "message": "Too many requests. Limit: 60/min." }| 触顶层 | 状态码 | 响应体 |
|---|---|---|
| 按 Key —— 通用 | 429 | {"message":"Too many requests. Limit: 60/min."} |
| 按 Key —— 检测 | 429 | {"message":"Too many detection requests. Limit: 10/min."} |
| 按 Key —— 实时 | 429 | {"code":"realtime_rate_limited","message":"Realtime detection rate limit exceeded.","retry_after":12} |
| 按 IP | 429 | {"message":"Too many requests from this network."} |
只有实时检测的拒绝带机器可读的 code;其余是明文提示,文本里写明了生效的限额。请以 HTTP 状态码和 Retry-After 作为分支依据,把 message 用于排查。