가이드
속도 제한
요청 한도, 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 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 배치는 50번이 아니라 속도 제한에서 1요청입니다.