ガイド
レート制限
リクエスト上限、Header、429 バックオフ
プラン別の上限
| プラン | リクエスト上限 | 並列数 | 適した用途 |
|---|---|---|---|
| Free | 10 リクエスト/分 | 同時 2 | テスト & プロトタイピング |
| Pro | 100 リクエスト/分 | 同時 10 | 本番アプリケーション |
| Enterprise | 1000 リクエスト/分 | 同時 50 | 大規模オペレーション |
レスポンス Header
すべてのレスポンスにレート制限 Header が含まれます:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1714137600X-RateLimit-Reset は Unix エポックタイムスタンプです。
429 のハンドリング
429 RATE_LIMIT_EXCEEDED を受け取ったら、X-RateLimit-Reset のエポックまでバックオフしてください —— 闇雲にリトライしないでください。一時的なエラーには指数バックオフと組み合わせてください:
import httpx, time
def call(url: str, headers: dict, body: dict, max_attempts: int = 5):
for attempt in range(max_attempts):
r = httpx.post(url, headers=headers, json=body, timeout=60.0)
if r.status_code != 429:
r.raise_for_status()
return r.json()
reset = int(r.headers.get("X-RateLimit-Reset", "0"))
wait = max(reset - int(time.time()), 2 ** attempt)
time.sleep(wait)
raise RuntimeError("rate-limited after retries")バッチジョブでは、多数の小さなバッチよりも少数の大きなバッチを優先してください —— 50 URL のバッチはレート制限に対して 1 リクエストであり、50 ではありません。