Globale grenser
Brevo håndhever globale hastighetsgrenser på tvers av alle API-endepunkter for å sikre rettferdig bruk og best mulig ytelse.
Nivåer for hastighetsgrenser
Free-plan
- Daglig grense: 300 forespørsler
- Timesgrense: 50 forespørsler
- Burst-grense: 10 forespørsler per minutt
- E-postkreditter: 300 per måned
Starter-plan
- Daglig grense: 20 000 forespørsler
- Timesgrense: 1 000 forespørsler
- Burst-grense: 100 forespørsler per minutt
- E-postkreditter: Ubegrenset
Business-plan
- Daglig grense: 50 000 forespørsler
- Timesgrense: 3 000 forespørsler
- Burst-grense: 300 forespørsler per minutt
- E-postkreditter: Ubegrenset
Enterprise-plan
- Daglig grense: Tilpasset (100 000+)
- Timesgrense: Tilpasset (10 000+)
- Burst-grense: Tilpasset (1 000+ per minutt)
- E-postkreditter: Ubegrenset
Headere for hastighetsgrenser
Hvert API-svar inneholder informasjon om hastighetsgrensen:
HTTP/1.1 200 OKX-RateLimit-Limit: 1000X-RateLimit-Remaining: 999X-RateLimit-Reset: 1640995200X-RateLimit-Retry-After: 3600Beskrivelse av headerne
X-RateLimit-Limit: Totalt antall forespørsler som er tillatt i gjeldende vinduX-RateLimit-Remaining: Forespørsler som gjenstår i gjeldende vinduX-RateLimit-Reset: Unix-tidsstempel for når grensen nullstillesX-RateLimit-Retry-After: Antall sekunder du må vente før nytt forsøk
Overvåk forbruket
Sjekk gjeldende forbruk
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) });};Overvåking i dashboardet
- Logg inn på Brevo-dashboardet ditt
- Naviger til Settings → API Keys
- Se forbruket for hver API-nøkkel
- Sett opp varsler for når du nærmer deg grensene
Nullstillingsvinduer for hastighetsgrenser
- Daglige grenser: Nullstilles kl. 00.00 UTC
- Timesgrenser: Nullstilles hver time på :00 minutter
- Burst-grenser: Glidende vindu (siste 60 sekunder)
Slik håndterer du hastighetsgrenser
Eksponentiell 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; } }};Oppgradering av plan
Når du treffer hastighetsgrensene gang på gang:
- Analyser forbruket: Se hvilke endepunkter du bruker mest
- Optimaliser koden: Ta i bruk mellomlagring og satsvise kall
- Vurder oppgradering: Gå opp et nivå hvis du trenger det
- Kontakt salg: For behov på Enterprise-nivå
Unntak fra hastighetsgrensene
Webhook-endepunkter
- Omfattes ikke av de vanlige hastighetsgrensene
- Egne grenser for webhook-leveranser gjelder
Endepunkt for helsesjekk
/v3/pinghar mildere grenser- Laget for overvåking og oppetidssjekker
Satsvise operasjoner
- Teller som én forespørsel, men kan ha grenser for nyttelasten
- Mer effektivt enn mange enkeltforespørsler