Límites globales
Brevo aplica límites globales de peticiones en todos los endpoints de la API para garantizar un uso justo y un rendimiento óptimo.
Niveles de límites de peticiones
Plan Gratis
- Límite diario: 300 peticiones
- Límite por hora: 50 peticiones
- Límite de ráfaga: 10 peticiones/minuto
- Créditos de email: 300/mes
Plan Starter
- Límite diario: 20.000 peticiones
- Límite por hora: 1.000 peticiones
- Límite de ráfaga: 100 peticiones/minuto
- Créditos de email: ilimitados
Plan Business
- Límite diario: 50.000 peticiones
- Límite por hora: 3.000 peticiones
- Límite de ráfaga: 300 peticiones/minuto
- Créditos de email: ilimitados
Plan Enterprise
- Límite diario: personalizado (más de 100.000)
- Límite por hora: personalizado (más de 10.000)
- Límite de ráfaga: personalizado (más de 1.000/minuto)
- Créditos de email: ilimitados
Cabeceras de límite de peticiones
Todas las respuestas de la API incluyen información sobre los límites:
HTTP/1.1 200 OKX-RateLimit-Limit: 1000X-RateLimit-Remaining: 999X-RateLimit-Reset: 1640995200X-RateLimit-Retry-After: 3600Descripción de las cabeceras
X-RateLimit-Limit: total de peticiones permitidas en la ventana actualX-RateLimit-Remaining: peticiones que te quedan en la ventana actualX-RateLimit-Reset: marca de tiempo Unix en la que se reinicia el límiteX-RateLimit-Retry-After: segundos que debes esperar antes de reintentar
Monitorizar tu consumo
Consultar el consumo actual
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) });};Monitorización desde el panel de control
- Inicia sesión en tu panel de control de Brevo
- Ve a Configuración → API Keys
- Consulta el consumo de cada clave de API
- Configura alertas para cuando te acerques a los límites
Ventanas de reinicio de los límites
- Límites diarios: se reinician a las 00:00 UTC
- Límites por hora: se reinician cada hora en el minuto :00
- Límites de ráfaga: ventana deslizante (últimos 60 segundos)
Gestionar los límites de peticiones
Retroceso exponencial
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; } }};Subir de plan
Si alcanzas los límites de forma habitual:
- Analiza tu consumo: revisa qué endpoints usas más
- Optimiza tu código: implementa caché y agrupación de peticiones
- Valora subir de plan: pasa a un nivel superior si lo necesitas
- Contacta con ventas: para requisitos de tipo enterprise
Excepciones a los límites de peticiones
Endpoints de webhook
- No están sujetos a los límites estándar
- Se aplican límites de entrega de webhooks independientes
Endpoint de health check
/v3/pingtiene límites más flexibles- Está pensado para monitorización y comprobaciones de disponibilidad
Operaciones por lotes
- Cuentan como una sola petición, pero pueden tener límites de tamaño de payload
- Son más eficientes que varias peticiones individuales