전역 제한
Brevo는 엔드포인트별로 API 요청을 제한합니다. 각 제한은 초당 요청 수(RPS), 시간당 요청 수(RPH) 또는 둘 다로 표시됩니다. 아래 수치는 Brevo의 요청 한도 페이지에서 가져온 것이며 2026년 10월 7일에 확인했습니다. 대규모 작업의 규모를 정하기 전에 해당 페이지를 확인하세요.
속도 제한 등급
| 등급 | 이용 가능한 요금제 |
|---|---|
| General | Free, Starter, Standard, Professional, Enterprise |
| Advanced | Professional, Enterprise |
| Extended | Enterprise |
등급별 제한
| 엔드포인트 | General | Advanced | Extended |
|---|---|---|---|
POST /v3/smtp/email, GET /v3/smtp/blockedContacts | 1,000 RPS, 3,600,000 RPH | 2,000 RPS, 7,200,000 RPH | 6,000 RPS |
GET /v3/smtp/emails | 2 RPS, 7,200 RPH | 3 RPS, 10,800 RPH | 18,000 RPH |
POST /v3/transactionalSMS/send | 150 RPS, 540,000 RPH | 200 RPS, 720,000 RPH | 250 RPS |
POST /v3/events | 10 RPS, 36,000 RPH | 20 RPS, 72,000 RPH | 60 RPS |
POST /v3/orders/status | 5 RPS, 18,000 RPH | 10 RPS, 36,000 RPH | 15 RPS |
POST /v3/products | 2 RPS, 7,200 RPH | 4 RPS, 14,400 RPH | 21,600 RPH |
/v3/smtp 아래의 기타 엔드포인트 | 300 RPH | 600 RPH | 1,800 RPH |
/v3/contacts 아래의 모든 엔드포인트 | 10 RPS, 36,000 RPH | 20 RPS, 72,000 RPH | 60 RPS |
/v3/loyalty 아래의 모든 엔드포인트 | 600 RPH | 1,200 RPH | 100,000 RPH |
| 그 밖의 모든 엔드포인트 | 100 RPH | 200 RPH | 600 RPH |
엔드포인트에 RPS와 RPH 제한이 모두 있는 경우 두 제한을 모두 지켜야 합니다.
속도 제한 헤더
요청 한도가 적용되는 엔드포인트는 다음 헤더를 반환합니다:
HTTP/1.1 200 OKx-sib-ratelimit-limit: 1000x-sib-ratelimit-remaining: 750x-sib-ratelimit-reset: 1헤더 설명
x-sib-ratelimit-limit: 현재 윈도우에서 허용되는 요청 수x-sib-ratelimit-remaining: 현재 윈도우에서 남은 요청 수x-sib-ratelimit-reset: 윈도우가 초기화되기까지의 시간 (보통 초 단위)
Brevo는 이 헤더를 요청 한도 헤더 페이지에 문서화하고 있습니다.
사용량 모니터링
현재 사용량 확인
const checkRateLimit = async () => { const response = await fetch('https://api.brevo.com/v3/account', { headers: { 'api-key': process.env.BREVO_API_KEY } });
console.log({ limit: response.headers.get('x-sib-ratelimit-limit'), remaining: response.headers.get('x-sib-ratelimit-remaining'), resetInSeconds: Number(response.headers.get('x-sib-ratelimit-reset')) });};속도 제한 처리
지수 백오프
const makeRequestWithBackoff = async (url, options, maxRetries = 3) => { for (let i = 0; i < maxRetries; i++) { const response = await fetch(url, options);
if (response.status !== 429) return response;
const resetSeconds = Number(response.headers.get('x-sib-ratelimit-reset') || 1); const delay = Math.max(resetSeconds * 1000, 1000 * Math.pow(2, i));
console.log(`Rate limited. Waiting ${delay}ms before retry ${i + 1}`); await new Promise(resolve => setTimeout(resolve, delay)); } throw new Error('Rate limit retries exhausted');};제한에 계속 걸릴 때
- 요청을 고르게 분산하세요: 1,000 RPS 제한은 요청이 고르게 분산될 때만 분당 최대 60,000건을 허용합니다.
- 일괄 처리와 캐싱: 대량 처리 엔드포인트를 사용하고 이미 가진 데이터를 다시 읽지 마세요.
- 통계에는 웹훅을 사용하세요: 통계 엔드포인트를 폴링하는 대신 이벤트를 수신하세요.
- 상위 등급을 고려하세요: Advanced 및 Extended 등급은 Professional 및 Enterprise 요금제에 포함됩니다.