Saltar al contenido principal

Rate limits

Hay dos sistemas distintos y se aplican de forma independiente:

  • uno protege el login contra brute force y credential stuffing
  • otro protege los endpoints autenticados contra uso desmedido

Rate limit del login

Por usuario

Se cuentan los fallos de las últimas 24 horas y el cooldown sube progresivamente.

Fallos en 24hCooldownMensaje
1-3Sin cooldownCredenciales inválidas
4-530 segundosDemasiados intentos (X). Espere 30 segundos
6-105 minutosDemasiados intentos (X). Espere 5 minutos
11-2015 minutosDemasiados intentos (X). Espere 15 minutos
21-491 horaDemasiados intentos (X). Espere 1 hora
50+24 horasCuenta bloqueada por 24 horas

Por IP

La IP solo se evalúa si el usuario no está en cooldown.

VentanaLímiteCooldown al exceder
1 minuto10 intentos60 segundos
15 minutos30 intentos15 minutos
1 hora60 intentos1 hora
24 horas150 intentos24 horas

Jerarquía:

  1. evaluá usuario
  2. si no bloquea, evaluá IP
  3. si ambos pasan, seguí con el login

Rate limit de endpoints autenticados

Además del login, la API aplica límites sobre requests autenticadas. Hay dos niveles simultáneos:

NivelQué mideLímite
Por usuarioRequests del mismo usuario autenticadoConfigurable por código
Por IPRequests desde la misma dirección IPConfigurable por código

Si cualquiera se excede, la solicitud se rechaza con HTTP 429. Algunas IPs y usuarios pueden entrar en whitelist para casos especiales.

Cada request queda registrado con usuario, IP, endpoint y método HTTP.

Respuestas HTTP

Rate limit por usuario

{
"error": "Demasiados intentos fallidos (8 intentos). Espere 5 minutos antes de reintentar.",
"error_code": "RATE_LIMIT_USER",
"retry_after": 300
}

Rate limit por IP

{
"error": "Demasiados intentos desde su IP. Intente nuevamente en 60 segundos.",
"error_code": "RATE_LIMIT_IP",
"retry_after": 60
}

Cuenta bloqueada

{
"error": "Cuenta bloqueada por seguridad durante 24 horas. Contacte al administrador o espere.",
"error_code": "ACCOUNT_LOCKED",
"retry_after": 86400
}

Endpoints autenticados

{
"success": false,
"message": "Too Many Requests. User rate limit exceeded",
"identifier": 821,
"limit": 100,
"current": 101
}
{
"success": false,
"message": "Too Many Requests. IP rate limit exceeded",
"identifier": "172.19.0.1",
"limit": 200,
"current": 201
}

Cómo manejar 429 desde el cliente

Leé el header Retry-After, esperá el tiempo indicado y recién ahí reintentá. No hagas retries agresivos ni loops cortos.

Ver también Autenticación para el rate limit del login y Errores para el formato general de las respuestas.