Skip to main content

Límite actual

La API permite 120 requests por minuto por cuenta (tenant). El límite es compartido entre todas las API keys de la misma cuenta.

Headers de respuesta

Cada respuesta incluye headers con el estado del límite:
HeaderDescripciónEjemplo
X-RateLimit-LimitMáximo de requests por ventana120
X-RateLimit-RemainingRequests restantes en esta ventana87
X-RateLimit-ResetSegundos hasta que se reinicia34

Qué pasa cuando superás el límite

Recibís un 429 con un header Retry-After:
HTTP/1.1 429 Too Many Requests
Retry-After: 12
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 12
{
  "error": {
    "code": "RATE_LIMITED",
    "message": "Too many requests. Retry after 12 seconds",
    "status": 429
  },
  "meta": { "requestId": "..." }
}

Cómo reintentar

  1. Leé el header Retry-After (en segundos).
  2. Esperá ese tiempo antes de reintentar.
  3. No hagas polling agresivo — va a empeorar la situación.

Ejemplo con backoff exponencial

async function fetchWithRetry(url, options, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    const res = await fetch(url, options);

    if (res.status === 429) {
      const retryAfter = parseInt(res.headers.get('Retry-After') || '5');
      await new Promise(r => setTimeout(r, retryAfter * 1000));
      continue;
    }

    return res;
  }
  throw new Error('Rate limit exceeded after retries');
}

Buenas prácticas

  • No hagas requests innecesarias. Cacheá respuestas que no cambian frecuentemente (templates, account info).
  • Procesá en lotes. Si necesitás enviar muchos mensajes, usá campañas desde el panel en vez de la API.
  • Monitoreá X-RateLimit-Remaining. Si está bajo, reducí la frecuencia.
  • No hagas retry inmediato en 429. Siempre respetá Retry-After.