Globale grænser
Brevo begrænser API-forespørgsler pr. endepunkt. Hver grænse er et antal forespørgsler pr. sekund (RPS), pr. time (RPH) eller begge dele. Tallene nedenfor stammer fra Brevos side om rate limits, kontrolleret den 7. oktober 2026. Tjek den side, før du dimensionerer en stor opgave.
Niveauer for rate limits
| Niveau | Tilgængeligt på |
|---|---|
| Generelt | Free, Starter, Standard, Professional og Enterprise |
| Avanceret | Professional og Enterprise |
| Udvidet | Enterprise |
Grænser pr. niveau
| Endepunkt | Generelt | Avanceret | Udvidet |
|---|---|---|---|
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-grænse, skal du holde dig under begge.
Headers for rate limits
Endepunkter med rate limit returnerer disse headers:
HTTP/1.1 200 OKx-sib-ratelimit-limit: 1000x-sib-ratelimit-remaining: 750x-sib-ratelimit-reset: 1Beskrivelse af headerne
x-sib-ratelimit-limit: tilladte forespørgsler i det aktuelle vinduex-sib-ratelimit-remaining: resterende forespørgsler i det aktuelle vinduex-sib-ratelimit-reset: tid til vinduet nulstilles, normalt i sekunder
Brevo dokumenterer disse headers på sin side om rate limit-headers.
Overvågning af forbrug
Tjek aktuelt forbrug
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åndtering af rate limits
Eksponentiel 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 bliver ved med at ramme grænserne
- Spred forespørgsler jævnt: en grænse på 1.000 RPS tillader kun op til 60.000 forespørgsler i minuttet, når de er spredt jævnt.
- Batch og cache: brug bulk-endepunkter, og undgå at læse data igen, som du allerede har.
- Brug webhooks til statistik: modtag hændelser i stedet for at polle statistik-endepunkter.
- Overvej et højere niveau: det avancerede og det udvidede niveau følger med Professional- og Enterprise-abonnementer.