Error 429 Too Many Requests: Causas y cómo solucionarlo

¿Qué es el error HTTP 429?
El error HTTP 429 es un código de estado de error del cliente que significa Too Many Requests (demasiadas solicitudes). El servidor te está indicando que has enviado demasiadas peticiones en un período de tiempo determinado y se niega temporalmente a procesar más hasta que reduzcas el ritmo.
Este error está definido en RFC 6585 y forma parte del mecanismo de limitación de velocidad (rate limiting) del protocolo HTTP. Es uno de los errores más frecuentes para desarrolladores que trabajan con APIs, aunque los usuarios regulares también pueden encontrarlo al navegar por sitios web.
El código de estado 429 se diferencia de otros errores 4xx. Un error 403 significa que no tienes autorización. Un error 401 significa que no estás autenticado. Un error 429 significa que tus credenciales están bien — simplemente estás enviando solicitudes demasiado rápido.
Cuando un servidor devuelve una respuesta 429, puede incluir un encabezado Retry-After que te indica exactamente cuánto tiempo debes esperar antes de enviar la siguiente solicitud.
¿Cómo se ve el error 429?
El error 429 aparece de forma diferente según el navegador, la aplicación o el cliente API que estés utilizando. Estas son las variaciones más comunes:
| Contexto | Mensaje de error |
|---|---|
| Chrome / Edge | 429 Too Many Requests |
| Firefox | 429 Too Many Requests |
| Nginx | 429 Too Many Requests (nginx) |
| Apache | 429 Too Many Requests |
| Cloudflare | Error 429 — Rate Limited |
| Respuesta API | {"error": "rate_limit_exceeded", "retry_after": 60} |
| WordPress | 429 Too Many Requests — You have been rate limited |
| cURL | HTTP/1.1 429 Too Many Requests |
A diferencia de los errores 500 que indican un problema en el servidor, el 429 es un error del lado del cliente — el servidor funciona correctamente, pero se está protegiendo contra el exceso de solicitudes.
Cómo funciona la limitación de velocidad (rate limiting)
La limitación de velocidad es una técnica que los servidores utilizan para controlar cuántas solicitudes puede realizar un cliente dentro de una ventana de tiempo específica. Cuando se supera el límite, el servidor responde con HTTP 429.
Existen varios algoritmos comunes de limitación de velocidad:
Ventana fija (Fixed Window) — El servidor permite N solicitudes por ventana de tiempo (por ejemplo, 100 solicitudes por minuto). El contador se reinicia en intervalos fijos.
Ventana deslizante (Sliding Window) — Similar a la ventana fija, pero la ventana de tiempo se desplaza con cada solicitud. Esto evita ráfagas en los límites de la ventana.
Cubo de tokens (Token Bucket) — El servidor asigna tokens que se rellenan a un ritmo constante. Cada solicitud consume un token. Cuando se agotan los tokens, las solicitudes se rechazan.
Cubo con fugas (Leaky Bucket) — Las solicitudes se procesan a un ritmo constante independientemente del tamaño de la ráfaga. Las solicitudes excedentes se ponen en cola o se descartan.
La mayoría de las APIs comunican sus límites de velocidad a través de encabezados de respuesta. Los encabezados más comunes incluyen X-RateLimit-Limit (máximo de solicitudes permitidas), X-RateLimit-Remaining (solicitudes restantes en la ventana actual) y X-RateLimit-Reset (cuándo se reinicia la ventana).
Comprender qué algoritmo utiliza un servicio te ayuda a diseñar tu cliente para mantenerse dentro de los límites y evitar errores 429.
Causas comunes del error HTTP 429
El error 429 puede activarse por muchos escenarios diferentes. Estas son las causas más comunes, agrupadas según quién suele encontrarlas:
| Causa | A quién afecta | Descripción |
|---|---|---|
| Límite de API excedido | Desarrolladores | Enviaste más solicitudes a la API de las que permite el servicio por minuto/hora |
| Demasiadas solicitudes de página | Visitantes | Actualizaste una página demasiado rápido o abriste demasiadas pestañas a la vez |
| Web scraping / bots | Desarrolladores | Scripts automatizados que acceden a un sitio web demasiado rápido activan los límites de velocidad |
| Protección contra fuerza bruta | Visitantes | Demasiados intentos fallidos de inicio de sesión activaron la limitación de seguridad |
| Protección DDoS | Todos | Cloudflare, AWS WAF u otros servicios similares bloqueando picos de tráfico |
| IP compartida con límite de velocidad | Visitantes / usuarios de VPN | Varios usuarios detrás de la misma IP (VPN, proxy, red corporativa) superan colectivamente el límite |
| Límites de velocidad mal configurados | Administradores web | Límites del servidor configurados de forma demasiado agresiva que bloquean tráfico legítimo |
| Problemas con plugins o temas | Administradores web | Plugins de WordPress realizando llamadas excesivas a APIs o tareas cron ejecutándose con demasiada frecuencia |
| Tormentas de webhooks | Desarrolladores | Un webhook mal configurado que reintenta entregas fallidas en un bucle continuo |
Cómo solucionar el error 429 (para visitantes)
Si ves un error 429 mientras navegas por un sitio web, aquí tienes las soluciones que puedes probar. Comienza con la más sencilla y ve avanzando.
1. Espera e inténtalo de nuevo
La solución más simple es esperar. El error 429 es temporal — el servidor te pide que reduzcas la velocidad, no que dejes de acceder permanentemente.
Espera entre 30 segundos y unos minutos, luego inténtalo de nuevo. La mayoría de los límites de velocidad se reinician en 1 a 5 minutos. Si la página sigue mostrando el error 429, espera más — algunos servicios aplican límites por hora o por día.
No actualices la página repetidamente. Cada actualización envía otra solicitud y puede prolongar el período de limitación.
2. Borra la caché y las cookies del navegador
A veces, los datos en caché o las cookies pueden activar la limitación de velocidad. Borrarlos puede ayudar:
Chrome: Pulsa
Ctrl+Shift+Delete(Windows) oCmd+Shift+Delete(Mac) → selecciona "Cookies" e "Imágenes en caché" → haz clic en "Borrar datos"Firefox: Pulsa
Ctrl+Shift+Delete→ selecciona "Caché" y "Cookies" → haz clic en "Limpiar ahora"Edge: Pulsa
Ctrl+Shift+Delete→ marca "Cookies" y "Datos en caché" → haz clic en "Borrar ahora"Safari: Ve a Safari → Configuración → Privacidad → Gestionar datos de sitios web → Eliminar todo
Después de borrar los datos, cierra y vuelve a abrir el navegador antes de visitar el sitio nuevamente.
3. Desconecta la VPN o el proxy
Si estás usando una VPN o un proxy, es posible que estés compartiendo una dirección IP con cientos de otros usuarios. Cuando sus solicitudes combinadas superan el límite del servidor, todos los que usan esa IP son limitados.
Intenta desconectar tu VPN y acceder al sitio con tu conexión habitual a internet. Si el error 429 desaparece, la IP de la VPN era el problema.
Si necesitas la VPN, prueba cambiar a una ubicación de servidor diferente para obtener una nueva dirección IP.
4. Desactiva las extensiones del navegador
Algunas extensiones del navegador envían solicitudes en segundo plano sin que lo sepas. Los bloqueadores de anuncios, herramientas de comparación de precios, extensiones SEO y plugins de actualización automática pueden generar solicitudes adicionales que activan la limitación de velocidad.
Para comprobarlo, abre el sitio en una ventana de incógnito/privada (que desactiva la mayoría de las extensiones por defecto). Si el error 429 desaparece, una de tus extensiones es la causante.
Desactiva las extensiones una por una para encontrar la problemática. En Chrome, ve a chrome://extensions/ y desactívalas individualmente.
5. Prueba con una red diferente
Si nada más funciona, es posible que el servidor esté limitando específicamente tu dirección IP. Prueba lo siguiente:
Cambia de Wi-Fi a datos móviles (esto te da una IP diferente). Intenta acceder al sitio desde una red completamente diferente. Si estás en una red corporativa o escolar, prueba desde casa — las redes grandes comparten una única IP pública.
Puedes verificar tu dirección IP actual usando nuestra herramienta ¿Cuál es mi IP? para confirmar que ha cambiado.
Cómo solucionar el error 429 (para desarrolladores)
Si estás desarrollando una aplicación que consume APIs, el error 429 significa que tu código está enviando solicitudes demasiado rápido. Así es como debes manejarlo correctamente.
1. Implementa retroceso exponencial
El retroceso exponencial (exponential backoff) es la estrategia estándar de la industria para reintentos. En lugar de reintentar inmediatamente después de un 429, incrementas progresivamente el tiempo de espera entre cada reintento:
Primer reintento: espera 1 segundo. Segundo reintento: espera 2 segundos. Tercer reintento: espera 4 segundos. Cuarto reintento: espera 8 segundos. Y así sucesivamente.
Aquí tienes una implementación básica en JavaScript:
async function fetchWithBackoff(url, options = {}, maxRetries = 5) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const response = await fetch(url, options);
if (response.status !== 429) return response;
// Check Retry-After header first
const retryAfter = response.headers.get('Retry-After');
const delay = retryAfter
? parseInt(retryAfter) * 1000
: Math.pow(2, attempt) * 1000; // Exponential backoff
console.log(`Rate limited. Retrying in ${delay / 1000}s...`);
await new Promise(resolve => setTimeout(resolve, delay));
}
throw new Error('Max retries exceeded');
}Añade jitter (variación aleatoria) al tiempo de espera para evitar que varios clientes reintenten exactamente al mismo tiempo. Sustituye el cálculo del delay con Math.pow(2, attempt) * 1000 + Math.random() * 1000.
2. Respeta el encabezado Retry-After
Cuando un servidor devuelve una respuesta 429, a menudo incluye un encabezado Retry-After que te indica exactamente cuánto tiempo debes esperar. Este encabezado puede contener un número de segundos o una fecha HTTP:
Retry-After: 60 significa esperar 60 segundos. Retry-After: Thu, 06 Mar 2026 12:00:00 GMT significa esperar hasta esa hora específica.
Comprueba siempre este encabezado antes de aplicar tu propia lógica de retroceso. El servidor sabe mejor que tu código cuánto tiempo debes esperar.
import requests
import time
def make_request(url):
response = requests.get(url)
if response.status_code == 429:
retry_after = response.headers.get('Retry-After', '5')
wait_time = int(retry_after)
print(f"Rate limited. Waiting {wait_time} seconds...")
time.sleep(wait_time)
return make_request(url) # Retry after waiting
return response3. Almacena en caché las respuestas de la API
Si tu aplicación realiza la misma llamada a una API varias veces, almacena en caché la respuesta en lugar de consultar la API cada vez. Esto reduce drásticamente el número de solicitudes.
Utiliza una caché en memoria (como Redis o un simple Map) para datos de acceso frecuente. Establece un TTL (tiempo de vida) razonable según la frecuencia con la que cambian los datos.
Por ejemplo, si estás consultando registros DNS de un dominio, los resultados probablemente no cambiarán en los próximos 5 minutos — almacénalos en caché.
const cache = new Map();
const CACHE_TTL = 5 * 60 * 1000; // 5 minutes
async function cachedFetch(url) {
const cached = cache.get(url);
if (cached && Date.now() - cached.time < CACHE_TTL) {
return cached.data;
}
const response = await fetch(url);
const data = await response.json();
cache.set(url, { data, time: Date.now() });
return data;
}4. Usa webhooks en lugar de polling
Si estás consultando una API repetidamente para verificar cambios (por ejemplo, comprobando el estado de un pedido cada 10 segundos), cambia a webhooks si el servicio los admite.
Con webhooks, el servidor envía actualizaciones a tu aplicación cuando algo cambia — sin necesidad de consultas constantes. Esto puede reducir tus llamadas a la API de miles por hora a solo un puñado.
La mayoría de las APIs modernas (Stripe, GitHub, Twilio, Shopify) admiten webhooks. Consulta la documentación de la API para configurarlos.
5. Solicita límites más altos
Si legítimamente necesitas más llamadas a la API, contacta con el proveedor del servicio. Muchas APIs ofrecen límites más altos en planes de pago o para aplicaciones verificadas.
Al solicitar límites más altos, explica tu caso de uso y proporciona estimaciones del volumen de solicitudes esperado. Servicios como Google APIs, Twitter API y GitHub API tienen procesos para solicitar límites elevados.
Algunas APIs también ofrecen endpoints masivos que permiten obtener múltiples recursos en una sola solicitud, reduciendo el número total de llamadas.
Cómo solucionar el error 429 (para administradores web)
Si tus visitantes o consumidores de API están recibiendo errores 429, el problema está en la configuración de tu servidor. Así es como puedes diagnosticarlo y solucionarlo.
1. Ajusta tus límites de velocidad
Si usuarios legítimos están recibiendo errores 429, tus límites de velocidad pueden ser demasiado estrictos. Revísalos y ajústalos.
En Nginx, el módulo de limitación de velocidad (ngx_http_limit_req_module) controla las tasas de solicitudes:
# Define rate limit zone: 10 requests per second per IP
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
server {
location /api/ {
# Allow bursts of 20, no delay for first 10
limit_req zone=api burst=20 nodelay;
limit_req_status 429;
}
}El parámetro burst es crucial — permite picos de tráfico breves sin activar el error 429. Sin él, incluso patrones de navegación normales pueden alcanzar el límite.
En Apache, usa mod_ratelimit o mod_evasive. En Node.js, usa paquetes como express-rate-limit.
2. Añade IPs de confianza a la lista blanca
Si ciertos clientes (servicios de monitorización, procesadores de pago, tus propios microservicios) están siendo limitados, añade sus direcciones IP a la lista blanca.
En Nginx, puedes usar un mapa para evitar la limitación de velocidad en IPs de confianza:
geo $rate_limit {
default 1;
192.168.0.0/16 0; # Internal network
10.0.0.0/8 0; # Internal network
203.0.113.50 0; # Payment processor
}
map $rate_limit $limit_key {
0 "";
1 $binary_remote_addr;
}
limit_req_zone $limit_key zone=api:10m rate=10r/s;También añade a la lista blanca los bots de motores de búsqueda (Googlebot, Bingbot) si están siendo limitados — bloquearlos perjudica tu SEO. Puedes verificar la identidad de los bots usando búsquedas de DNS inverso.
3. Revisa la configuración del WAF y CDN
Si usas Cloudflare, AWS WAF, Sucuri u otro servicio de seguridad, sus reglas de limitación de velocidad pueden ser la causa de los errores 429 — no tu servidor de origen.
En Cloudflare, revisa Seguridad → WAF → Reglas de limitación de velocidad. Puedes ver qué reglas se están activando y ajustar los umbrales. El modo "I'm Under Attack" de Cloudflare es particularmente agresivo.
En AWS WAF, revisa las reglas de tu web ACL para encontrar reglas basadas en tasas. El umbral mínimo es de 100 solicitudes por 5 minutos — asegúrate de que sea apropiado para tus niveles de tráfico.
Revisa los análisis de tu CDN para distinguir entre tráfico legítimo y tráfico de bots antes de ajustar los límites.
4. Optimiza el rendimiento del servidor
A veces los errores 429 aparecen porque el servidor no puede manejar la carga y la limitación de velocidad se activa como mecanismo de seguridad. Mejorar el rendimiento del servidor te permite aumentar los límites con seguridad.
Las optimizaciones clave incluyen: habilitar el almacenamiento en caché de respuestas para reducir la carga del backend, usar un CDN para recursos estáticos, añadir caché de consultas a la base de datos con Redis o Memcached, implementar connection pooling para conexiones a la base de datos, y escalar horizontalmente con balanceo de carga si el tráfico lo justifica.
Usa nuestra herramienta de encabezados HTTP para verificar que tus encabezados de caché estén configurados correctamente.
Error 429 vs otros errores HTTP
Es fácil confundir el error 429 con otros códigos de estado HTTP. Así es como se diferencian:
| Código de estado | Nombre | Significado | Diferencia clave |
|---|---|---|---|
| [401](/blog/http-401-unauthorized) | Unauthorized | Autenticación requerida | Credenciales faltantes o inválidas |
| [403](/blog/403-forbidden-error) | Forbidden | Acceso denegado permanentemente | No tienes permiso |
| **429** | **Too Many Requests** | **Limitado temporalmente por velocidad** | **Estás enviando solicitudes demasiado rápido** |
| [500](/blog/http-error-500) | Internal Server Error | El servidor falló | Error o fallo del lado del servidor |
| [502](/blog/http-error-500) | Bad Gateway | El servidor upstream falló | El proxy no pudo contactar al backend |
| [503](/blog/http-error-503) | Service Unavailable | Servidor sobrecargado o en mantenimiento | El servidor está demasiado ocupado para responder |
| [504](/blog/504-gateway-timeout) | Gateway Timeout | El servidor upstream tardó demasiado | El backend no respondió a tiempo |
La diferencia clave: el error 429 es temporal e intencional. El servidor está sano — elige activamente rechazar tu solicitud para protegerse. Otros errores 5xx indican que algo está realmente roto.
Cómo prevenir los errores 429
Prevenir es mejor que curar. Estas son las mejores prácticas para evitar errores 429 desde el principio:
Lee la documentación de la API — Conoce los límites de velocidad antes de escribir código. La mayoría de los servicios publican sus límites de forma clara.
Monitoriza tu uso — Rastrea los encabezados
X-RateLimit-Remainingpara saber cuán cerca estás del límite.Agrupa las solicitudes — Usa endpoints masivos cuando estén disponibles en lugar de hacer llamadas individuales.
Distribuye las solicitudes — Reparte las llamadas a la API de forma uniforme a lo largo del tiempo en lugar de enviar ráfagas.
Usa claves de API — Las solicitudes autenticadas generalmente obtienen límites de velocidad más altos que las anónimas.
Implementa circuit breakers — Si recibes errores 429 repetidos, deja de enviar solicitudes por completo durante un período de enfriamiento.
Prueba con simuladores de límites — Simula respuestas 429 en desarrollo para asegurar que tu manejo de errores funcione correctamente.
Registra las respuestas 429 — Lleva un seguimiento de cuándo y dónde ocurre la limitación de velocidad para optimizar tus patrones de solicitudes.
Verifica los encabezados de límite de tasa del servidor
Usa la herramienta gratuita HTTP Headers de DNS Robot para verificar los encabezados de respuesta del servidor — incluyendo Retry-After, X-RateLimit-Limit y X-RateLimit-Remaining.
Try HTTP Headers CheckerFrequently Asked Questions
El error HTTP 429 significa "Too Many Requests" (demasiadas solicitudes). El servidor te está limitando porque enviaste demasiadas solicitudes en un período corto. Es un bloqueo temporal — espera unos minutos e inténtalo de nuevo.