参考
速率限制
这些限制用来保护 API 免受流量洪峰冲击,而不是针对正常的分销商。每个账户每分钟有一个随消费增长的限制,另有少量针对高负载操作的专项限制。属于单个订单的规则(例如补充等待)会返回各自的错误码,而不是 429。
三个层级
按 IP
每个 IP 地址每分钟 20,000 次请求
在 key 验证之前应用,因此对 key 的暴力枚举是有界的。同一 IP 后的所有 key 共享此限制。默认值全局设定,用户不可配置。
账户共享窗口
每 60 秒滚动窗口 120–2,400 次请求
同一账户的所有有效 API key 使用同一个计数器。除非存在直接 RPM 覆盖,否则由终身成功消费固定阶梯提供上限。
按 action
取决于 action
Services、catalog、cancel、refill 和 webhook 操作各有自己的专项限制,见下文。它们叠加在账户限制之上,不会取代它。
各操作的限制
这些限制按账户每分钟计数。其中任何一项返回 429 时,会在 X-RateLimit-DeniedBy 中报告 action。Cancel 和 refill 统计的是订单 ID 而非请求数,因此一次涉及 10 个订单的调用会用掉你每分钟配额中的 10 个 ID。超过该数量(最多 100 个)的 cancel 或 refill 调用,如果是你本分钟的第一次调用,会被接受,并用掉整分钟的配额。
| 操作 | 每分钟 | 统计内容 |
|---|---|---|
| services | 10 | 请求数 |
| catalog | 30 | 请求数 |
| cancel | 30 | 订单 ID |
| refill | 30 | 订单 ID |
| webhook.* | 10 | 请求数 |
终身成功消费阶梯
你的账户限制跟随你终身累计的成功消费;更高的层级会立即解锁更高的限制。每分钟 20,000 次请求的 IP 上限在检查密钥之前生效。管理员可以为账户设置直接限制,最高 10,000。你的账户层级见 X-RateLimit-Tier 响应头和你的 API 页面。
| 层级 | 最低终身消费 | 请求 / 分钟 |
|---|---|---|
| 0 | $0 | 120 |
| 1 | $10 | 300 |
| 2 | $50 | 600 |
| 3 | $100 | 900 |
| 4 | $500 | 1,200 |
| 5 | $1,000 | 1,800 |
| 6 | $2,500 | 2,400 |
响应头
响应头
X-RateLimit-Limit- 正常响应表示账户共享的有效每分钟请求上限;429 响应表示拒绝层报告的上限。
X-RateLimit-Remaining- 正常响应表示账户共享窗口中的剩余请求数;429 响应表示拒绝层报告的剩余值。
X-RateLimit-Reset- 距离所报告窗口重置的相对秒数;不是 Unix 时间戳。
X-RateLimit-Tier- 由终身成功消费获得的层级(0–6)。自定义 RPM 覆盖不会改变此值。
X-RateLimit-DeniedBy- 当具名限制器拒绝调用时随 429 返回:“ip”、“api_requests_per_minute”或“action”。
Retry-After- 对于可重试的 429 或 503,重试前至少等待 Retry-After 指定的秒数。对于 action=add,等待后继续使用相同的幂等键。
处理 429 响应
存在 Retry-After 时请等待它。
否则等待 X-RateLimit-Reset 秒。两个值都是相对延迟,而不是时钟时间;重试前请加入抖动。读取 X-RateLimit-DeniedBy。
它会指明拒绝调用的限制。换密钥没有帮助,因为账户、IP 和操作限制是共享的。使用 webhook 而不是轮询。
Webhook 至少送达一次,因此请让处理程序保持幂等,并用action=status核对任何重要内容。尽可能批量处理。
Status、cancel 和 refill 每次请求最多接受 100 个 ID;cancel 和 refill 仍按订单 ID 计数。