ガイド

レート制限

リクエスト上限、Header、429 バックオフ

プラン別の上限

プランリクエスト上限並列数適した用途
Free10 リクエスト/分同時 2テスト & プロトタイピング
Pro100 リクエスト/分同時 10本番アプリケーション
Enterprise1000 リクエスト/分同時 50大規模オペレーション

レスポンス Header

すべてのレスポンスにレート制限 Header が含まれます:

X-RateLimit-Limit:     100
X-RateLimit-Remaining: 87
X-RateLimit-Reset:     1714137600

X-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 ではありません。