速率限制
了解速率限制如何运作、基于套餐的数据访问,以及如何处理 429 响应。
速率限制因套餐而异。使用
GET /api/v1/limits 端点,以编程方式查看你当前的档位和限制。每个密钥的速率限制
| 档位 | 请求数 / 分钟 | 突发 / 秒 |
|---|---|---|
| Builder(含 3 天免费试用) | 250 | 12 |
| Pro | 750 | 40 |
| Enterprise | 定制 | 定制 |
每分钟限制使用滑动窗口。突发限制使用令牌桶。
基于套餐的数据访问
在 Builder 套餐(包括完整等同于 Builder 的 3 天免费试用)中,只能访问最近的市场。Pro 和 Enterprise 档位可无限制访问所有市场和快照。
| 市场类型 | Builder | Pro / Enterprise |
|---|---|---|
| 5m | 4,100 | 无限 |
| 15m | 1,400 | 无限 |
| 1hr | 350 | 无限 |
| 4hr | 85 | 无限 |
| 24hr | 14 | 无限 |
当列表查询超出你的档位上限时,响应的 limit 会被截断,并附带一个 warning 字段。
API 密钥上限
你可以持有的有效 API 密钥数量取决于你的套餐。已撤销或已过期的密钥不计入上限。
3
Builder(含 3 天免费试用)
10
Pro
无限
Enterprise
速率限制响应头
每个响应都包含速率限制响应头,方便你实时跟踪用量。
X-RateLimit-Limit: 250
X-RateLimit-Remaining: 237
X-RateLimit-Reset: 1740800060处理 429 响应
当你超出速率限制时,API 会返回 429 状态码,并附带 Retry-After 响应头,指示需要等待多少秒。响应主体包含 error、message 和 retry_after 字段。
import time
import requests
def fetch_with_retry(url, headers, max_retries=3):
for attempt in range(max_retries):
response = requests.get(url, headers=headers)
if response.status_code == 429:
wait = int(response.headers.get("Retry-After", 2 ** attempt))
time.sleep(wait)
continue
return response
raise Exception("Rate limit exceeded after retries")403 Forbidden:数据访问
如果你尝试访问超出你档位数据窗口的市场或其快照,API 会返回 403 Forbidden。请升级套餐,或访问更近期的市场。
{
"error": "Forbidden",
"message": "Your builder plan only includes the most recent markets for this type. Upgrade for full access.",
"tier": "builder"
}