Error 429 Too Many Requests: qué significa y cómo solucionarlo

Punto clave

El error 429 Too Many Requests significa que el servidor te está limitando la velocidad: tú, tu dirección IP o tu aplicación habéis enviado más solicitudes de las que permite en un intervalo de tiempo. Como visitante, deja de actualizar la página y espera (el encabezado Retry-After, si existe, indica cuánto), o prueba sin VPN. Como desarrollador, respeta Retry-After y reintenta con retroceso exponencial y jitter. Como dueño del sitio, averigua qué capa responde 429 (CDN, WAF o servidor web) y sube sus límites para los usuarios reales.

Compruébelo ahora

Guía para corregir el error HTTP 429 Too Many Requests, con un diagrama del límite de peticiones y soluciones paso a paso
Guía para corregir el error HTTP 429 Too Many Requests, con un diagrama del límite de peticiones y soluciones paso a paso
Empiece a leer
  1. ¿Qué es el error HTTP 429?
  2. ¿Cómo se ve el error 429?
  3. Cómo funciona la limitación de velocidad (rate limiting)
  4. Causas comunes del error HTTP 429
  5. Cómo solucionar el error 429 (para visitantes)
  6. 1. Espera e inténtalo de nuevo
  7. 2. Borra las cookies del sitio
  8. 3. Desconecta la VPN o el proxy
  9. 4. Desactiva las extensiones del navegador
  10. 5. Comprueba si tu dirección IP es compartida
  11. Cómo solucionar el error 429 (para desarrolladores)
  12. 1. Implementa retroceso exponencial
  13. 2. Respeta el encabezado Retry-After
  14. 3. Almacena en caché las respuestas de la API
  15. 4. Usa webhooks en lugar de polling
  16. 5. Solicita límites más altos
  17. Cómo solucionar el error 429 (para administradores web)
  18. 1. Ajusta tus límites de velocidad
  19. 2. Añade IPs de confianza a la lista blanca
  20. 3. Revisa la configuración del WAF y CDN
  21. 4. Optimiza el rendimiento del servidor
  22. Error 429 vs otros errores HTTP
  23. Cómo prevenir los errores 429
  24. Preguntas frecuentes

¿Qué es el error HTTP 429?

HTTP 429 Too Many Requests significa que el servidor te está limitando la velocidad: tú, tu dirección IP o tu aplicación habéis enviado más solicitudes de las que permite en un período de tiempo. Es temporal. El servidor funciona; simplemente decide no responderte por ahora.

El código se añadió en la RFC 6585 (2012) precisamente para este caso, y la respuesta puede incluir un encabezado Retry-After que indica cuánto esperar. Lo verás al navegar por sitios con mucho tráfico, al llamar a APIs, al descargar en masa o al usar una VPN cuya IP comparten muchas personas.

Se diferencia de sus vecinos: un 401 significa que no has iniciado sesión, un 403 que no tienes permiso, y un 429 que tienes permiso, pero vas demasiado rápido.

Consulta los encabezados de límite de un servidor (Retry-After, RateLimit)

¿Cómo se ve el error 429?

El mensaje depende de quién responda. Estos son los que más se buscan:

Dónde lo vesQué dice
Chrome / Edge (el servidor no envió página)Esta página no funciona · Si el problema persiste, ponte en contacto con el propietario del sitio web. · HTTP ERROR 429
nginx429 Too Many Requests (con "nginx" debajo)
Límite de peticiones de CloudflareError 1015: You are being rate limited
JavaScript (Axios)Request failed with status code 429
Python (requests)429 Client Error: Too Many Requests for url: …
curlHTTP/2 429 (o HTTP/1.1 429 Too Many Requests)
Una APIUn cuerpo JSON como {"error": "rate_limit_exceeded"}, a menudo con Retry-After

A diferencia de un error 500, que indica que algo falló en el servidor, un 429 es un error del cliente en términos de HTTP: el servidor se protege de recibir demasiadas solicitudes.

Cómo funciona la limitación de velocidad (rate limiting)

La limitación de velocidad (rate limiting) es una técnica que usan los servidores para controlar cuántas solicitudes puede hacer un cliente en un intervalo de tiempo. Al superar el límite, el servidor suele responder 429 (algunos responden 403 o 503).

Existen varios algoritmos habituales:

  • Ventana fija — El servidor permite N solicitudes por ventana de tiempo (p. ej., 100 por minuto). El contador se reinicia a intervalos fijos.
  • Ventana deslizante — Similar a la ventana fija, pero la ventana se desplaza con cada solicitud. Evita ráfagas en los límites de la ventana.
  • Token bucket (cubo de tokens) — El servidor asigna tokens que se recargan a ritmo constante. Cada solicitud consume un token. Sin tokens, se rechazan las solicitudes.
  • Leaky bucket (cubo con fuga) — Las solicitudes se procesan a ritmo constante sin importar el tamaño de la ráfaga. Las que sobran esperan en cola o se descartan.

Muchas APIs anuncian sus límites en los encabezados de respuesta. Los de GitHub, por ejemplo, son x-ratelimit-limit (solicitudes permitidas por hora), x-ratelimit-remaining, x-ratelimit-used y x-ratelimit-reset (cuándo se reinicia la ventana, en segundos Unix). Un borrador del IETF propone encabezados estándar RateLimit y RateLimit-Policy para lo mismo.

Saber qué algoritmo y qué ventana usa un servicio te ayuda a diseñar tu cliente para mantenerlo dentro del límite.

Causas comunes del error HTTP 429

La causa depende de quién vea el error:

CausaA quién afectaDescripción
Límite de la API superadoDesarrolladoresEnviaste más solicitudes a la API de las que el servicio permite por minuto u hora
Demasiadas solicitudes de páginaVisitantesActualizaste una página demasiado rápido o abriste demasiadas pestañas a la vez
Web scraping / botsDesarrolladoresScripts automáticos que acceden a un sitio demasiado rápido activan los límites
Protección contra fuerza brutaVisitantesDemasiados intentos fallidos de inicio de sesión activaron la limitación por seguridad
Reglas de límite en CDN o WAFTodosCloudflare (Error 1015), AWS WAF u otras reglas que cuentan las solicitudes por IP y bloquean al pasar un umbral
Límite sobre una IP compartidaVisitantes / usuarios de VPNVarios usuarios tras la misma IP (VPN, proxy, red corporativa) superan juntos el límite
Límites mal configuradosDueños de sitios webLímites del servidor demasiado agresivos que bloquean tráfico legítimo
Problemas de plugins o temasDueños de sitios webPlugins de WordPress que hacen demasiadas llamadas a la API o tareas cron que se ejecutan con demasiada frecuencia
Tormentas de webhooksDesarrolladoresUn webhook mal configurado que reintenta entregas fallidas en un bucle sin pausa

Cómo solucionar el error 429 (para visitantes)

Si ves un error 429 al navegar por un sitio web, estas son las soluciones que puedes probar. Empieza por la más simple y ve avanzando.

1. Espera e inténtalo de nuevo

La solución más simple es esperar. Un 429 es temporal: el servidor te pide que bajes el ritmo, no te ha bloqueado.

Cuánto depende del límite del sitio: algunos se reinician en un minuto, otros son por hora o por día. Si la página o la API envía un encabezado Retry-After, esa es la espera exacta. Después, carga la página una sola vez.

No sigas actualizando: cada actualización es otra solicitud y cuenta contra el mismo límite.

2. Borra las cookies del sitio

Rara vez influye, pero algunos sitios cuentan las solicitudes por cookie de sesión. Borra solo las cookies de ese sitio para empezar una sesión nueva, sin cerrar sesión en todo lo demás:

  • Chrome / Edge: abre chrome://settings/content/all (Edge: edge://settings/content/all), busca el sitio y elimina sus datos
  • Firefox: haz clic en el candado de la barra de direcciones → "Clear cookies and site data…"
  • Safari: Safari → Ajustes → Privacidad → Gestionar datos de sitios web… → busca el sitio → Eliminar

Tras borrarlas, cierra y vuelve a abrir el navegador antes de visitar el sitio otra vez.

3. Desconecta la VPN o el proxy

Si usas una VPN o un proxy, puede que compartas dirección IP con cientos de usuarios más. Cuando sus solicitudes juntas superan el límite del servidor, todos los de esa IP quedan limitados.

Prueba a desconectar la VPN y a entrar al sitio con tu conexión normal. Si el error 429 desaparece, el problema era la IP de la VPN.

Si necesitas la VPN, cambia a otra ubicación de servidor: su dirección puede estar compartida por menos gente.

4. Desactiva las extensiones del navegador

Algunas extensiones hacen solicitudes en segundo plano a los sitios que visitas: los rastreadores de precios, las herramientas SEO y las extensiones de actualización automática pueden sumar hasta alcanzar un límite. (Los bloqueadores de anuncios suelen hacer lo contrario y reducen las solicitudes.)

Para comprobarlo, abre el sitio en una ventana de incógnito o privada, donde la mayoría de las extensiones están desactivadas. Incógnito también empieza sin cookies, así que si el 429 desaparece, hay una extensión o un límite por sesión implicado.

Desactiva las extensiones una por una para encontrar la culpable. En Chrome, ve a chrome://extensions/ y desactívalas individualmente.

5. Comprueba si tu dirección IP es compartida

Mucha gente puede compartir una misma dirección IP pública: la red de una oficina o un colegio, la red de un operador móvil (CGNAT) o un servidor VPN. Sus solicitudes cuentan contra el mismo límite que las tuyas.

Si estás en una red así, cargar el sitio desde tu conexión de casa o con datos móviles te dirá si la dirección compartida es el problema. Si el límite está en tu propia dirección, espera a que se reinicie en lugar de cambiar de red para saltártelo. Consulta tu IP pública actual con ¿Cuál es mi IP?.

Cómo solucionar el error 429 (para desarrolladores)

Si tu código recibe 429, está enviando solicitudes más rápido de lo que la API permite. Sigue este orden: lee Retry-After, reintenta con retroceso y jitter, y luego reduce el número de solicitudes.

1. Implementa retroceso exponencial

El retroceso exponencial es la estrategia de reintento estándar: en lugar de reintentar de inmediato tras un 429, duplica la espera cada vez (1 segundo, 2, 4, 8…) y añade jitter, un retraso aleatorio extra, para que muchos clientes no reintenten todos a la vez.

Esta versión usa Retry-After cuando el servidor envía uno válido, en cualquiera de sus dos formatos, recurre a retroceso con jitter en caso contrario y se rinde tras unos pocos intentos. (En un navegador que llama a la API de otro sitio, Retry-After solo se puede leer si la API lo expone con Access-Control-Expose-Headers.)

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 || attempt === maxRetries) return response;

    // Retry-After is either a number of seconds or an HTTP date
    const header = response.headers.get('Retry-After');
    let delay = NaN;
    if (header) {
      const seconds = Number(header);
      delay = Number.isNaN(seconds) ? Date.parse(header) - Date.now() : seconds * 1000;
    }
    if (!Number.isFinite(delay)) delay = 2 ** attempt * 1000 + Math.random() * 1000; // backoff + jitter
    await new Promise((resolve) => setTimeout(resolve, Math.max(delay, 0)));
  }
}

2. Respeta el encabezado Retry-After

Cuando un servidor envía Retry-After con un 429, indica exactamente cuánto esperar. La RFC 9110 permite dos formas: un número de segundos o una fecha HTTP.

Retry-After: 60 significa esperar 60 segundos. Retry-After: Wed, 21 Oct 2026 07:28:00 GMT significa esperar hasta esa hora. Compruébalo antes de tu propia lógica de retroceso: el servidor sabe más que tu código.

En Python, maneja ambas formas y detente tras unos pocos intentos en lugar de recurrir sin fin:

python
import random
import time
from datetime import datetime, timezone
from email.utils import parsedate_to_datetime

import requests


def get_with_retry(url, max_retries=5):
    for attempt in range(max_retries + 1):
        response = requests.get(url)
        if response.status_code != 429 or attempt == max_retries:
            return response
        retry_after = response.headers.get("Retry-After", "")
        try:
            if retry_after.isdigit():
                wait = int(retry_after)
            else:  # an HTTP date
                wait = (parsedate_to_datetime(retry_after) - datetime.now(timezone.utc)).total_seconds()
        except (TypeError, ValueError):  # missing or unparseable: back off with jitter
            wait = 2 ** attempt + random.random()
        time.sleep(max(wait, 0))

3. Almacena en caché las respuestas de la API

Si tu aplicación hace la misma llamada a la API varias veces, guarda la respuesta en caché en lugar de consultar la API cada vez. Así reduces drásticamente el número de solicitudes.

Usa una caché en memoria (como Redis o un simple Map) para los datos de acceso frecuente. Fija un TTL (tiempo de vida) razonable según la frecuencia con que cambian los datos.

Por ejemplo, si consultas los registros DNS de un dominio, es probable que no cambien en los próximos 5 minutos: guárdalos en caché.

javascript
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);
  if (!response.ok) throw new Error(`HTTP ${response.status}`); // never cache errors (a 429 included)
  const data = await response.json();
  cache.set(url, { data, time: Date.now() });
  return data;
}

4. Usa webhooks en lugar de polling

Si consultas una API repetidamente para detectar cambios (p. ej., revisar el estado de un pedido cada 10 segundos), cambia a webhooks si el servicio los admite.

Con webhooks, el servidor envía las actualizaciones a tu aplicación cuando algo cambia, sin necesidad de consultar sin parar. Esto puede reducir tus llamadas a la API de miles por hora a 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 de verdad 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 pedir límites más altos, explica tu caso de uso y estima el volumen de solicitudes que esperas. Muchas APIs, entre ellas las de Google, tienen un formulario o un plan de pago para límites mayores.

Algunas APIs también ofrecen endpoints por lotes que permiten obtener varios recursos en una sola solicitud y reducir el total de llamadas.

Cómo solucionar el error 429 (para administradores web)

Si tus visitantes o consumidores de API reciben errores 429, el problema está en la configuración de tu servidor. Así se diagnostica y se corrige.

1. Ajusta tus límites de velocidad

Si usuarios reales reciben 429, averigua qué capa responde primero: tu CDN o WAF, tu servidor web o tu aplicación. Luego ajusta los límites de esa capa.

En nginx, limit_req hace el trabajo. Ten en cuenta que responde 503 por defecto: añade limit_req_status 429; para que los clientes sepan que deben reducir el ritmo en lugar de pensar que el servidor está caído:

nginx
# 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/ {
        # Up to 20 extra requests pass at once (nodelay); more than that get 429
        limit_req zone=api burst=20 nodelay;
        limit_req_status 429;
    }
}

El parámetro burst deja pasar picos cortos sin un 429; sin él, una carga de página normal con muchas solicitudes puede alcanzar el límite.

Apache no tiene un limitador de tasa de solicitudes integrado: su mod_ratelimit limita el ancho de banda, no el número de solicitudes, y el módulo de terceros mod_evasive responde 403. Usa un proxy inverso, un WAF o tu aplicación para los 429. En Node.js, express-rate-limit responde 429 por defecto.

2. Añade IPs de confianza a la lista blanca

Si ciertos clientes (servicios de monitorización, procesadores de pago, tus propios microservicios) reciben límites, añade sus direcciones IP a la lista blanca.

En nginx, geo y map dan una clave vacía a las direcciones de confianza, y nginx no cuenta las solicitudes con clave vacía. Esto sustituye la línea limit_req_zone del ejemplo anterior:

nginx
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;

No limites por accidente a los rastreadores de buscadores: Google trata un 429 como un error del servidor y reduce su ritmo de rastreo (Google Search Central). Verifica las solicitudes reales de Googlebot y Bingbot con una consulta de DNS inverso confirmada por una consulta directa de ese nombre, o exime los rangos de IP publicados de los rastreadores.

3. Revisa la configuración del WAF y CDN

Si usas Cloudflare, AWS WAF, Sucuri u otro servicio de seguridad, sus reglas de límite pueden responder antes de que tu servidor vea siquiera la solicitud.

Cloudflare muestra a los visitantes "Error 1015: You are being rate limited" cuando se activa una regla de límite de peticiones. Encuentra la regla en las reglas de seguridad del panel, revisa sus eventos y sube el umbral o reduce su alcance.

Las reglas basadas en tasa de AWS WAF cuentan las solicitudes por IP (u otra clave) en una ventana de 1, 2, 5 o 10 minutos, con un límite mínimo de 10. Una solicitud bloqueada recibe 403 por defecto; configura una respuesta personalizada 429 para que los clientes sepan que deben retroceder.

Mira las analíticas del CDN para separar visitantes reales de bots antes de cambiar nada.

4. Optimiza el rendimiento del servidor

Algunos servicios limitan con más dureza cuando están bajo carga, como válvula de seguridad. Mejorar el rendimiento del servidor te permite subir los límites con seguridad.

Las optimizaciones clave: activa la caché de respuestas para reducir la carga del backend, usa un CDN para los recursos estáticos, añade caché de consultas con Redis o Memcached, implementa pooling de conexiones a la base de datos y escala horizontalmente con balanceo de carga si el tráfico lo justifica.

Usa nuestro Verificador de encabezados HTTP para comprobar que tus encabezados de caché están bien configurados.

Error 429 vs otros errores HTTP

Es fácil confundir el error 429 con otros códigos de estado HTTP. Así se diferencian:

CódigoNombreSignificadoDiferencia clave
401UnauthorizedSe requiere autenticaciónCredenciales ausentes o no válidas
403ForbiddenEl servidor rechaza esta solicitudEl servidor rechaza esta solicitud; volver a iniciar sesión normalmente no ayuda
429Too Many RequestsLímite de velocidad, temporalTienes permiso, pero vas demasiado rápido
500Internal Server ErrorAlgo falló en el servidorError o fallo del lado del servidor
502Bad GatewayFalló el servidor upstreamEl proxy recibió una respuesta incorrecta del backend
503Service UnavailableSobrecargado o en mantenimientoEl servidor no puede atender solicitudes ahora mismo
504Gateway TimeoutEl servidor upstream tardó demasiadoEl backend no respondió a tiempo

La distinción clave: el 429 es deliberado y temporal: el servidor decide rechazarte por ahora. La mayoría de los códigos 5xx indican que algo falló en el servidor, aunque un 503 también puede ser un mantenimiento planificado o, en nginx, un límite de velocidad.

Cómo prevenir los errores 429

Más vale prevenir que curar. Estas son las buenas prácticas para evitar los errores 429 desde el principio:

  • Lee la documentación de la API — Conoce los límites antes de escribir código. La mayoría de los servicios los publican con claridad.
  • Vigila tu uso — Sigue los encabezados X-RateLimit-Remaining para saber cuánto te falta para el límite.
  • Agrupa solicitudes — Usa endpoints por lotes cuando existan en lugar de hacer llamadas individuales.
  • Distribuye las solicitudes — Reparte las llamadas a la API de forma uniforme en el tiempo en lugar de enviar ráfagas.
  • Usa claves de API — Las solicitudes autenticadas suelen tener límites más altos que las anónimas.
  • Implementa circuit breakers — Si recibes 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 asegurarte de que tu gestión de errores funciona.
  • Registra las respuestas 429 — Anota cuándo y dónde ocurre la limitación para optimizar tus patrones de solicitud.

Verifica los encabezados de límite de tasa del servidor

Revisa los encabezados de respuesta de cualquier servidor con el Verificador de encabezados HTTP gratuito de DNS Robot, incluidos RateLimit y X-RateLimit-* (Retry-After suele venir con las respuestas 429 y 503).

Fuentes

  1. RFC 6585 §4: 429 Too Many Requests, IETF
  2. RFC 9110 §10.2.3: Retry-After, IETF
  3. Rate limits for the REST API, GitHub Docs
  4. How HTTP status codes affect Google's crawlers, Google Search Central
  5. Error 1015, Cloudflare

Preguntas frecuentes

¿Qué significa el error HTTP 429?

Too Many Requests: el servidor te limita la velocidad porque tú, tu dirección IP o tu aplicación habéis enviado más solicitudes de las que permite en un período de tiempo. Es temporal; el servidor funciona y volverá a responder tras una espera.

¿Cuánto dura un error 429?

Lo que dure la ventana de límite del sitio: algunos se reinician en un minuto, otros son por hora o por día. Si la respuesta incluye un encabezado Retry-After, indica la espera exacta, en segundos o como fecha. Actualizar mientras tanto solo te mantiene por encima del límite.

¿Es el error 429 culpa mía?

No siempre. Tu navegador o tu aplicación pueden estar enviando demasiadas solicitudes, pero en una VPN, una red móvil o una red de oficina compartes dirección IP con muchos otros, y sus solicitudes también cuentan. Los dueños del sitio también pueden fijar límites demasiado bajos.

¿Cómo soluciono el error 429 too many requests en Chrome?

Deja de actualizar y espera unos minutos; luego carga la página una sola vez. Si persiste, prueba una ventana de incógnito (menos extensiones, sin cookies) y, si usas una VPN o una red compartida, comprueba desde tu propia conexión.

¿Puede una VPN causar errores 429?

Sí. Mucha gente comparte la dirección IP de cada servidor VPN, así que sus solicitudes juntas pueden alcanzar el límite de un sitio y todos los de esa dirección reciben 429. Desconecta la VPN o cambia a otro servidor.

¿Qué significa "Request failed with status code 429"?

Es el mensaje de error de Axios, una librería HTTP de JavaScript: la API que llamó tu código respondió 429. Lee el encabezado Retry-After en error.response.headers (en un navegador, solo si la API lo expone mediante CORS), espera ese tiempo y reintenta con retroceso en lugar de hacerlo de inmediato.

¿Qué es el encabezado Retry-After?

Un encabezado de respuesta que indica cuánto esperar antes de reintentar: un número de segundos (Retry-After: 60) o una fecha HTTP (Retry-After: Wed, 21 Oct 2026 07:28:00 GMT). La RFC 9110 define ambas formas, así que tu código debe manejar las dos.

¿Por qué nginx devuelve 503 en lugar de 429?

El módulo limit_req de nginx responde 503 por defecto cuando un cliente supera el límite. Añade limit_req_status 429; en el mismo contexto para que los clientes vean un error de límite de velocidad y retrocedan, en lugar de pensar que el servidor está caído.

¿Qué es el error 1015 de Cloudflare?

La página de límite de peticiones de Cloudflare: "Error 1015: You are being rate limited". El dueño del sitio configuró una regla que limita cuántas solicitudes puede hacer un visitante, y la superaste. Espera y vuelve a intentarlo; los dueños ajustan la regla en las reglas de seguridad de Cloudflare.

¿Cuál es la diferencia entre el error 429 y el 503?

Ambos son temporales. Un 429 significa que tú enviaste demasiadas solicitudes. Un 503 significa que el servidor no puede atender solicitudes ahora mismo, por ejemplo por sobrecarga o mantenimiento, aunque el limitador de nginx también responde 503 salvo que se configure como 429.

Sobre el autor

Shaik Vahid

Fundador de DNS Robot. Vahid pasó años en el soporte de alojamiento web resolviendo dominios, registros DNS, certificados SSL y la entrega de correo para clientes. Desarrolla las herramientas de DNS Robot y escribe estas guías a partir de los errores que la gente encuentra de verdad.

Verificador de encabezados HTTP

Analiza cabeceras de respuesta HTTP y clasificación de cabeceras de seguridad