Globale grenser
Brevo begrenser API-forespørsler per endepunkt. Hver grense er et antall forespørsler per sekund (RPS), per time (RPH) eller begge deler. Tallene nedenfor kommer fra Brevos side om rate limits, kontrollert 7. oktober 2026. Sjekk den siden før du dimensjonerer en stor jobb.
Nivåer for rate limits
| Nivå | Tilgjengelig på |
|---|---|
| Generelt | Free, Starter, Standard, Professional og Enterprise |
| Avansert | Professional og Enterprise |
| Utvidet | Enterprise |
Grenser per nivå
| Endepunkt | Generelt | Avansert | Utvidet |
|---|---|---|---|
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 |
Andre endepunkter under /v3/smtp | 300 RPH | 600 RPH | 1 800 RPH |
Alle endepunkter under /v3/contacts | 10 RPS, 36 000 RPH | 20 RPS, 72 000 RPH | 60 RPS |
Alle endepunkter under /v3/loyalty | 600 RPH | 1 200 RPH | 100 000 RPH |
| Alle andre endepunkter | 100 RPH | 200 RPH | 600 RPH |
Når et endepunkt har både en RPS- og en RPH-grense, må du holde deg under begge.
Headere for rate limits
Endepunkter med rate limit returnerer disse headerne:
HTTP/1.1 200 OKx-sib-ratelimit-limit: 1000x-sib-ratelimit-remaining: 750x-sib-ratelimit-reset: 1Beskrivelse av headerne
x-sib-ratelimit-limit: tillatte forespørsler i det gjeldende vinduetx-sib-ratelimit-remaining: gjenværende forespørsler i det gjeldende vinduetx-sib-ratelimit-reset: tid til vinduet nullstilles, vanligvis i sekunder
Brevo dokumenterer disse headerne på sin side om rate limit-headere.
Overvåke bruk
Sjekke gjeldende bruk
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')) });};Håndtere rate limits
Eksponentiell backoff
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');};Når du stadig treffer grensene
- Spre forespørslene jevnt: en grense på 1 000 RPS tillater opptil 60 000 forespørsler i minuttet bare når de er jevnt spredt.
- Batch og cache: bruk bulk-endepunkter, og unngå å lese data på nytt som du allerede har.
- Bruk webhooks for statistikk: motta hendelser i stedet for å polle statistikk-endepunkter.
- Vurder et høyere nivå: det avanserte og det utvidede nivået følger med Professional- og Enterprise-abonnementer.