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

# Límites de peticiones

> Cupos, cabeceras y cómo comportarse ante un 429.

Los límites se cuentan **por API key**, no por IP. Dos integradores detrás del
mismo proxy no se penalizan entre ellos.

| Tipo de endpoint                               | Cupo por defecto      |
| ---------------------------------------------- | --------------------- |
| Lecturas (`GET`)                               | 120 peticiones/minuto |
| Escrituras de entradas y recargas              | 20 peticiones/minuto  |
| Acreditación (`POST /tickets/{code}/check-in`) | 60 peticiones/minuto  |
| Validación de zona (`POST /access-checks`)     | 120 peticiones/minuto |

El cupo general es configurable por clave: si tu integración necesita más,
pídeselo al organizador y lo sube desde el panel.

## Cabeceras

Cada respuesta lleva:

```http theme={null}
x-ratelimit-limit: 120
x-ratelimit-remaining: 87
x-ratelimit-reset: 34
```

Al agotarse, la respuesta es `429` con `retry-after` en segundos:

```http theme={null}
HTTP/1.1 429 Too Many Requests
retry-after: 26
```

```json theme={null}
{
  "error": {
    "type": "rate_limit_error",
    "code": "rate_limit_exceeded",
    "message": "Has superado el límite de peticiones. Reinténtalo en 26 segundos.",
    "request_id": "req_9f2c1a4e7b304d51"
  }
}
```

<Tip>
  No inventes tu propia espera: usa el valor de `retry-after`. El servidor sabe
  exactamente cuándo se libera tu cupo.
</Tip>

## Cómo no chocar con el límite

<AccordionGroup>
  <Accordion title="Agrupa las altas en lotes">
    `POST /tickets` acepta hasta **500 entradas por llamada**. Cargar 5.000
    entradas son 10 llamadas, no 5.000. Con el cupo de escritura de 20 por
    minuto, la diferencia es entre medio minuto y cuatro horas.
  </Accordion>

  <Accordion title="Sube el limit en las lecturas">
    Los listados aceptan `limit=200`. Recorrer 10.000 ventas son 50 llamadas en
    lugar de 200.
  </Accordion>

  <Accordion title="Sincroniza de forma incremental">
    No vuelvas a bajar el histórico entero en cada pasada. Usa `updated_since` y
    `since` como se explica en [Paginación](/es/pagination).
  </Accordion>

  <Accordion title="No hagas polling agresivo">
    Consultar el estado de las entradas cada segundo no te da información más
    fresca de la que hay: los terminales sincronizan por lotes. Cada 30 segundos
    es más que suficiente durante el evento.
  </Accordion>
</AccordionGroup>

## Nota operativa

El contador vive en memoria del proceso que atiende la petición. En un
despliegue de una sola instancia —el caso habitual— es exacto. Si el evento se
sirve desde varias instancias, el cupo efectivo puede ser algo mayor que el
nominal. Nunca menor, así que no tienes que hacer nada al respecto.
