> ## Documentation Index
> Fetch the complete documentation index at: https://docs.waspytech.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Rate limits

> Límites de requests, headers de respuesta y cómo manejar 429.

## 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:

| Header                  | Descripción                        | Ejemplo |
| ----------------------- | ---------------------------------- | ------- |
| `X-RateLimit-Limit`     | Máximo de requests por ventana     | `120`   |
| `X-RateLimit-Remaining` | Requests restantes en esta ventana | `87`    |
| `X-RateLimit-Reset`     | Segundos hasta que se reinicia     | `34`    |

***

## Qué pasa cuando superás el límite

Recibís un `429` con un header `Retry-After`:

```http theme={null}
HTTP/1.1 429 Too Many Requests
Retry-After: 12
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 12
```

```json theme={null}
{
  "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

```javascript theme={null}
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`.
