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

# Límites de tasa

> Cuántas solicitudes puedes enviar y cómo gestionar las respuestas 429.

> [!NOTE]
>
> La API de GetQR está en beta y solo está disponible para algunos espacios de trabajo. Los detalles pueden cambiar antes del lanzamiento general.

La API de GetQR limita cuántas solicitudes puede enviar cada clave de API, para que una sola integración no ralentice la API para todos.

## Límites

| Límite | Valor |
| - | - |
| Solicitudes por clave de API | 600 por minuto |

El límite se cuenta en una ventana deslizante de un minuto y se aplica a todos los endpoints en conjunto. La [comprobación de estado](https://docs.getqr.com/es/api/endpoints/health.md) no necesita clave y no cuenta.

## Cabeceras de límite de tasa

Las respuestas a solicitudes con una clave de API válida incluyen estas cabeceras, también las respuestas de error:

| Cabecera | Descripción |
| - | - |
| `X-RateLimit-Limit` | Número máximo de solicitudes por ventana. |
| `X-RateLimit-Remaining` | Solicitudes que quedan en la ventana actual. |
| `X-RateLimit-Reset` | Cuándo se reinicia la ventana, como marca de tiempo Unix en milisegundos. |
| `Retry-After` | Segundos que faltan para que se reinicie la ventana, redondeados hacia arriba. Espera ese tiempo antes de reintentar. |

## Si superas el límite

Por encima del límite, la API responde `429` con el código `rate_limit_exceeded` y las mismas cabeceras:

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

{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Too many requests.",
    "doc_url": "https://getqr.com/account/api-docs#error-rate_limit_exceeded"
  }
}
```

Espera hasta el momento del reinicio antes de enviar más solicitudes. Añade una variación aleatoria (jitter) para que varios procesos no reintenten a la vez, y aplica una espera exponencial ante errores `5xx`:

```javascript theme={null}
async function getqrFetch(url, options = {}, maxRetries = 5) {
  for (let attempt = 0; ; attempt++) {
    const res = await fetch(url, {
      ...options,
      headers: {
        Authorization: `Bearer ${process.env.GETQR_API_KEY}`,
        ...options.headers,
      },
    });

    const retryable = res.status === 429 || res.status >= 500;
    if (!retryable || attempt >= maxRetries) return res;

    // On 429, wait for Retry-After (seconds). Otherwise back off: 1s, 2s, 4s…
    const retryAfter = Number(res.headers.get("Retry-After"));
    const wait =
      res.status === 429 && retryAfter > 0
        ? retryAfter * 1000
        : 1000 * 2 ** attempt;
    const jitter = Math.random() * 250;

    await new Promise((r) => setTimeout(r, wait + jitter));
  }
}
```

> [!TIP]
>
> Reintenta `POST /api/v1/qrs` solo con una cabecera `Idempotency-Key`. Así, un reintento nunca crea un segundo código QR. Consulta [Idempotencia](https://docs.getqr.com/es/api/introduction.md#idempotencia).

## No superes el límite

* Vigila `X-RateLimit-Remaining` y reduce el ritmo antes de que llegue a 0.
* Usa la [creación masiva de QR](https://docs.getqr.com/es/api/endpoints/bulk-qr-creations.md) en lugar de una solicitud por código QR.
* Obtén hasta 100 resultados por página con `pageSize=100`. Consulta [Paginación](https://docs.getqr.com/es/api/introduction.md#paginación).
* Guarda en caché las imágenes de QR: las descargas devuelven un `ETag`, así que puedes enviar `If-None-Match` y recibir `304 Not Modified` si nada ha cambiado.

## Siguientes pasos

> [card] [Errores](https://docs.getqr.com/es/api/errors.md)

> [card] [Códigos QR](https://docs.getqr.com/es/api/endpoints/qr-codes.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.