指南

速率限制

請求上限、Header 與 429 退避

各方案上限

方案請求上限併發適用
Free10 requests/min2 併發測試與原型
Pro100 requests/min10 併發正式應用
Enterprise1000 requests/min50 併發大規模運作

回應 Header

每個回應都會包含速率限制 Header:

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

X-RateLimit-Reset 是 Unix epoch 時間戳。

處理 429

當你撞到 429 RATE_LIMIT_EXCEEDED,請退避到 X-RateLimit-Reset 那個 epoch —— 別盲目重試。針對暫時性錯誤再搭配指數退避:

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 的批次只佔一個請求額度,不是五十個。