# Límites de frecuencia

> Presets de límites de frecuencia por formulario con los números exactos, cómo se recargan y cómo es un 429.

Los límites de frecuencia impiden que un visitante, o un script, inunde un formulario. Cada formulario tiene un preset, y cada límite se cuenta con exactitud antes de leer el cuerpo. Un envío rechazado no consume margen.

## Presets

| Preset | Por visitante y formulario | Ideal para |
| --- | --- | --- |
| Standard (por defecto) | 5 por minuto, como máximo 3 en 10 segundos | La mayoría de los formularios |
| Relaxed | 20 por minuto | Formularios tras un login, herramientas internas, eventos con Wi-Fi compartido |
| Strict | 2 cada 10 minutos | Formularios de contacto y de ventas, donde una repetición es un doble clic o un bot |
| Custom | De 1 a 1000 cada 10 segundos, minuto, 10 minutos, hora o día | Una entrada por persona, kioscos y otros casos especiales |

## Comparativa de presets

Un visitante que pulsa Enviar una vez por segundo durante dos minutos consigue que pasen estos envíos, simulados con el mismo algoritmo que ejecuta Ikiform:

| Preset | Aceptados de 120 | Aceptados en el segundo |
| --- | --- | --- |
| Standard | 14 | 0, 1, 2, 4, 7, 12, 24, 36, 48, 60, 72, 84, ... |
| Relaxed | 59 | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... |
| Strict | 2 | 0, 1 |

## Cómo se recargan los límites

Los límites son un margen que se recarga de forma continua, no una ventana de reloj fija. Un visitante tranquilo empieza con el margen completo y puede usarlo de golpe. Después, se permite un envío más cada ventana dividida entre el límite: cada 12 segundos en Standard, cada 3 segundos en Relaxed y cada 5 minutos en Strict. Tras una ventana completa sin actividad, el margen vuelve a estar completo.

Standard también tiene una regla de ráfaga de 3 envíos cada 10 segundos, así que su primera ráfaga es de 3, no de 5. Relaxed, Strict y Custom no tienen una regla de ráfaga aparte.

## Límites que siempre se aplican

| Regla | Límite | Se cuenta por |
| --- | --- | --- |
| Protección contra floods, antes de buscar el formulario | 600 por minuto | IP, sumando todos los formularios |
| Entre formularios | 30 por minuto, o la tasa por minuto de Custom si es mayor | IP, sumando todos los formularios |
| Todo el formulario | 300 por minuto, o un tope Custom de 1 a 10 000 | Formulario, sumando todos los visitantes |
| `GET /f/<formId>/schema` | 60 por minuto | IP y formulario |
| El frame de verificación de Ikiform | 60 por minuto | IP y formulario |
| API REST | 100 por minuto | Clave de API |

Las tasas Custom más rápidas que la protección contra floods se rechazan al guardar; por ejemplo, una ventana de 10 segundos permite como máximo 100. Cargar el esquema de un formulario o la verificación humana nunca consume el margen de envíos.

## Custom

- **Envíos por visitante:** un número entero de 1 a 1000, y una ventana de 10 segundos, un minuto, 10 minutos, una hora o un día.
- **Tope por minuto para todo el formulario:** opcional, de 1 a 10 000. Sustituye el valor por defecto de 300 por minuto para todo el formulario.
- Una ventana de una hora o un día sirve para formularios de una entrada por persona, como sorteos o confirmaciones de asistencia. Recuerda que muchas personas pueden compartir una IP, por ejemplo en una oficina o un evento.

## Cuando se alcanza un límite

El envío se rechaza con `429 rate_limited` y una cabecera `Retry-After` con los segundos enteros que faltan para que se permita el siguiente envío. Los envíos de formularios del navegador ven una página alojada "Slow down". El código con `fetch` puede leer `Retry-After`, porque Ikiform la expone mediante CORS.

`429 Too Many Requests`:

```http
HTTP/1.1 429 Too Many Requests
Retry-After: 12
X-Request-Id: req_01k7v2c9t3e8m5q4x6z0a1b2c3
Content-Type: application/json; charset=utf-8

{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Please slow down."},"request_id":"req_01k7v2c9t3e8m5q4x6z0a1b2c3"}
```

1. Espera los segundos de `Retry-After` antes de volver a enviar.
2. Si los visitantes legítimos alcanzan el límite, cambia el formulario a Relaxed o Custom.
3. Si tu servidor envía en nombre de los visitantes, todos los envíos comparten la IP de tu servidor. Consulta [Desde un servidor](https://ikiform.com/es/docs/guides/server.md#what-changes).

> Los ajustes de límites de frecuencia son privados. Nunca los expone el endpoint del esquema ni la API REST.
