Globale limieten
Brevo hanteert globale rate limits voor alle API-endpoints om eerlijk gebruik en optimale prestaties te garanderen.
Niveaus van rate limits
Gratis abonnement
- Daglimiet: 300 verzoeken
- Uurlimiet: 50 verzoeken
- Burstlimiet: 10 verzoeken/minuut
- E-mailcredits: 300/maand
Starter-abonnement
- Daglimiet: 20.000 verzoeken
- Uurlimiet: 1.000 verzoeken
- Burstlimiet: 100 verzoeken/minuut
- E-mailcredits: onbeperkt
Business-abonnement
- Daglimiet: 50.000 verzoeken
- Uurlimiet: 3.000 verzoeken
- Burstlimiet: 300 verzoeken/minuut
- E-mailcredits: onbeperkt
Enterprise-abonnement
- Daglimiet: op maat (100.000+)
- Uurlimiet: op maat (10.000+)
- Burstlimiet: op maat (1.000+/minuut)
- E-mailcredits: onbeperkt
Headers voor rate limits
Elke API-respons bevat informatie over de rate limits:
HTTP/1.1 200 OKX-RateLimit-Limit: 1000X-RateLimit-Remaining: 999X-RateLimit-Reset: 1640995200X-RateLimit-Retry-After: 3600Beschrijving van de headers
X-RateLimit-Limit: totaal aantal toegestane verzoeken in het huidige vensterX-RateLimit-Remaining: resterende verzoeken in het huidige vensterX-RateLimit-Reset: Unix-timestamp waarop de limiet wordt geresetX-RateLimit-Retry-After: aantal seconden dat je moet wachten voor een nieuwe poging
Gebruik monitoren
Huidig gebruik controleren
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-RateLimit-Limit'), remaining: response.headers.get('X-RateLimit-Remaining'), reset: new Date(response.headers.get('X-RateLimit-Reset') * 1000) });};Monitoren via het dashboard
- Log in op je Brevo-dashboard
- Ga naar Instellingen → API-sleutels
- Bekijk het gebruik per API-sleutel
- Stel meldingen in voor limieten die je bijna bereikt
Resetvensters van de limieten
- Daglimieten: worden gereset om 00:00 UTC
- Uurlimieten: worden elk uur gereset op :00 minuten
- Burstlimieten: schuivend venster (laatste 60 seconden)
Omgaan met rate limits
Exponentiële backoff
const makeRequestWithBackoff = async (url, options, maxRetries = 3) => { for (let i = 0; i < maxRetries; i++) { try { const response = await fetch(url, options);
if (response.status === 429) { const retryAfter = response.headers.get('X-RateLimit-Retry-After') || 60; const delay = Math.min(1000 * Math.pow(2, i), retryAfter * 1000);
console.log(`Rate limited. Waiting ${delay}ms before retry ${i + 1}`); await new Promise(resolve => setTimeout(resolve, delay)); continue; }
return response; } catch (error) { if (i === maxRetries - 1) throw error; } }};Abonnement upgraden
Als je structureel tegen de rate limits aanloopt:
- Analyseer je gebruik: bekijk welke endpoints je het meest gebruikt
- Optimaliseer je code: gebruik caching en batching
- Overweeg een upgrade: stap over naar een hoger niveau als dat nodig is
- Neem contact op met sales: voor enterprise-vereisten
Uitzonderingen op de rate limits
Webhook-endpoints
- Vallen niet onder de standaard rate limits
- Er gelden aparte limieten voor de bezorging van webhooks
Health check-endpoint
/v3/pingheeft ruimere limieten- Bedoeld voor monitoring en uptimecontroles
Batchbewerkingen
- Tellen als één verzoek, maar er kunnen limieten gelden voor de payload
- Efficiënter dan meerdere afzonderlijke verzoeken