요청 한도
키별 요금제 한도, 응답 헤더, 안전한 재시도 동작에 맞게 설계합니다.
키별 요금제 한도, 응답 헤더, 안전한 재시도 동작에 맞게 설계합니다.
공개 API는 각 API 키 또는 OAuth 액세스 토큰에 1분 단위 요청 버킷을 적용합니다. 한도를 우회하기 위해 키를 더 만드는 것은 지원되지 않으며 자격 증명 또는 계정 제한으로 이어질 수 있습니다.
요금제 한도#
| 활성 요금제 | 키당 분당 요청 수 |
|---|---|
| Launch | 120 |
| Operate | 600 |
| Scale | 1,800 |
계정에 활성 유료 요금제가 없는 자격 증명은 요청 한도 용량을 받기 전에 403 subscription_required를 반환합니다. 비용이 매우 큰 작업에는 더 낮은 엔드포인트별 한도가 생길 수 있으며, 그런 경우 엔드포인트 레퍼런스에서 명시합니다.
요청 한도 응답#
버킷이 소진되면 API는 다음 헤더와 함께 429 rate_limit_exceeded를 반환합니다.
HTTP/1.1 429 Too Many Requests
Retry-After: 17
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 0
X-Request-Id: 6c0b2f2e-...
Content-Type: application/jsonRetry-After는 기다려야 하는 최소 초입니다. 성공 응답에는 현재 남은 할당량 카운터가 포함되지 않으므로 반복적인 429를 통해 한도를 알아내려 하지 말고 애플리케이션이 자체 동시성을 제어해야 합니다.
재시도 구현#
무작위 지터가 있는 지수 백오프를 사용하고, 더 큰 Retry-After 값을 지키며, 전체 시도 횟수를 제한합니다.
async function requestWithRetry(url: string, init: RequestInit, attempts = 4) {
for (let attempt = 0; attempt < attempts; attempt += 1) {
const response = await fetch(url, init);
if (response.status !== 429 && response.status < 500) return response;
if (attempt === attempts - 1) return response;
const retryAfter = Number(response.headers.get("retry-after") ?? 0) * 1_000;
const exponential = 500 * 2 ** attempt;
const jitter = Math.random() * 250;
await new Promise((resolve) =>
setTimeout(resolve, Math.max(retryAfter, exponential + jitter)),
);
}
throw new Error("unreachable");
}POST, PATCH, DELETE에서는 모든 네트워크 또는 서버 재시도에 동일한 유효 Idempotency-Key를 유지하세요. 새로운 멱등성 키는 이미 완료된 부작용을 반복할 수 있습니다.
요청량 줄이기#
- 실시간 최신성이 필요하지 않은 계정, 사이트, 설정 읽기를 캐시합니다.
- 매우 작은 페이지를 반복 요청하지 말고 페이지당 최대
100개 레코드를 요청합니다. - 대화, 리드, 도메인 상태 또는 브로드캐스트를 폴링하는 대신 웹훅 이벤트를 처리합니다.
- API 키별 워커 동시성을 제한합니다. 여러 서버리스 호출의 버스트는 같은 버킷을 공유합니다.
- 서로 다른 서비스에는 격리와 감사를 위해 별도 키를 사용하되 한 작업의 용량을 늘리는 용도로 사용하지 않습니다.
재시도 판단표#
| 응답 | 재시도? | 조건 |
|---|---|---|
429 | 예 | Retry-After를 기다리고 지터를 추가하며 시도 횟수 제한 |
500 | 경우에 따라 | 안전한 읽기 또는 같은 멱등성 키로 보호한 변경 |
처리 중 409 충돌 | 예 | Retry-After: 2 후 같은 멱등성 키 유지 |
기타 409 | 즉시 하지 않음 | 현재 리소스 상태를 읽고 충돌 해결 |
400, 401, 403, 404, 415 | 아니요 | 입력, 자격 증명, 권한, 경로, 콘텐츠 유형을 먼저 수정 |
지속적인 작업량이 실제로 요금제 버킷을 초과한다면 무제한 재시도 루프를 추가하지 말고 폴링을 줄이고 작업을 묶거나 대표 요청 ID와 예상 트래픽을 포함해 지원팀에 문의하세요.