Globální limity
Brevo vynucuje globální limity počtu požadavků napříč všemi endpointy API, aby zajistilo férové využití a optimální výkon.
Úrovně limitů
Plán Free
- Denní limit: 300 požadavků
- Hodinový limit: 50 požadavků
- Špičkový limit: 10 požadavků za minutu
- E-mailové kredity: 300 měsíčně
Plán Starter
- Denní limit: 20 000 požadavků
- Hodinový limit: 1 000 požadavků
- Špičkový limit: 100 požadavků za minutu
- E-mailové kredity: neomezené
Plán Business
- Denní limit: 50 000 požadavků
- Hodinový limit: 3 000 požadavků
- Špičkový limit: 300 požadavků za minutu
- E-mailové kredity: neomezené
Plán Enterprise
- Denní limit: individuální (100 000 a více)
- Hodinový limit: individuální (10 000 a více)
- Špičkový limit: individuální (1 000 a více za minutu)
- E-mailové kredity: neomezené
Hlavičky s limity
Každá odpověď API obsahuje informace o limitech:
HTTP/1.1 200 OKX-RateLimit-Limit: 1000X-RateLimit-Remaining: 999X-RateLimit-Reset: 1640995200X-RateLimit-Retry-After: 3600Popis hlaviček
X-RateLimit-Limit: celkový počet požadavků povolený v aktuálním okněX-RateLimit-Remaining: počet zbývajících požadavků v aktuálním okněX-RateLimit-Reset: unixové časové razítko, kdy se limit resetujeX-RateLimit-Retry-After: počet sekund, které je třeba počkat před dalším pokusem
Sledování spotřeby
Kontrola aktuální spotřeby
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) });};Sledování v dashboardu
- Přihlaste se do svého dashboardu Brevo
- Přejděte do Settings → API Keys
- Zobrazte spotřebu pro každý API klíč
- Nastavte upozornění na blížící se limity
Okna pro reset limitů
- Denní limity: resetují se v 00:00 UTC
- Hodinové limity: resetují se každou hodinu v :00 minut
- Špičkové limity: klouzavé okno (posledních 60 sekund)
Práce s limity
Exponenciální 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; } }};Přechod na vyšší plán
Když limity narážíte opakovaně:
- Analyzujte spotřebu: projděte si, které endpointy používáte nejčastěji
- Optimalizujte kód: zaveďte cachování a dávkování
- Zvažte vyšší plán: v případě potřeby přejděte na vyšší úroveň
- Kontaktujte obchod: pro podnikové požadavky
Výjimky z limitů
Webhookové endpointy
- Nepodléhají standardním limitům
- Platí pro ně samostatné limity doručování webhooků
Endpoint pro kontrolu stavu
/v3/pingmá uvolněné limity- Je určen pro monitoring a kontroly dostupnosti
Dávkové operace
- Počítají se jako jeden požadavek, mohou však mít limity velikosti payloadu
- Jsou efektivnější než více jednotlivých požadavků