Un rate limit fija cuántas peticiones puedes enviar en un intervalo de tiempo. En la API oficial de X cada endpoint tiene su propio límite cada 15 minutos, contado por separado para tu app y para cada token de usuario. Si lo superas, recibes HTTP 429 hasta que se reinicia la ventana. Las API de terceros también limitan las peticiones, normalmente por segundo o por minuto y para todos los endpoints juntos.
Este artículo recoge los límites oficiales de los endpoints más usados, explica las cabeceras y la respuesta 429 y pone al lado los límites publicados de algunas alternativas. Todo se comprobó el 2026-10-10. Operamos TwittrAPI, una de las alternativas, así que lee esa parte teniéndolo en cuenta.
Cómo funcionan los rate limits de la API de X
La página de rate limits de X describe tres reglas:
- Ventanas. Los límites se reinician cada 15 minutos o cada 24 horas. Las tablas de esa página muestran límites de 15 minutos salvo que indiquen otra cosa.
- Por endpoint. Cada endpoint tiene su propio límite. Agotar el límite de búsqueda no afecta al de consulta de usuarios.
- Por app o por usuario. Las peticiones hechas con un Bearer Token de solo app cuentan para el límite de la app. Las hechas con el token OAuth 1.0a u OAuth 2.0 de un usuario cuentan para el límite de ese usuario.
Los clientes Enterprise tienen límites personalizados.
Límites de los endpoints más usados
Estos son los límites de 15 minutos de esa misma página:
| Endpoint | Qué hace | Por app | Por usuario |
|---|---|---|---|
GET /2/tweets | Consultar posts por ID | 3,500 | 5,000 |
GET /2/tweets/:id | Consultar un post | 450 | 900 |
GET /2/users/:id | Consultar un usuario por ID | 300 | 900 |
GET /2/users/by/username/:username | Consultar un usuario por nombre de usuario | 300 | 900 |
GET /2/tweets/search/recent | Buscar posts recientes | 450 | 300 |
GET /2/users/:id/tweets | Posts de un usuario | 10,000 | 900 |
GET /2/users/:id/followers | Seguidores de un usuario | 300 | 300 |
Destacan dos cosas. Las consultas de usuarios están limitadas a 300 peticiones cada 15 minutos con un token de app, es decir, 20 por minuto. Las listas de seguidores tienen el mismo límite de 300 para apps y para usuarios, así que sacar los seguidores de muchas cuentas grandes lleva mucho tiempo aunque puedas pagarlo.
Los rate limits y la factura van por separado
Desde 2026 la API de X es de pago por uso: compras créditos, y cada post leído cuesta US$0.005 y cada usuario leído US$0.010, según la página de precios de la API de X. Los rate limits no cambian según lo que gastes. Un saldo mayor no te da más peticiones por ventana.
Además de los rate limits hay un tope de uso. El pago por uso se detiene en 3 millones de lecturas de posts por ciclo de facturación mensual y, por encima, necesitas Enterprise. La página de precios también dice que un recurso que obtienes más de una vez en el mismo día UTC solo se cobra una vez.
Los dos límites se combinan. La búsqueda reciente devuelve como máximo 100 posts por petición, así que 450 peticiones en una ventana pueden devolver hasta 45,000 posts, que cuestan hasta US$225 a la tarifa de lectura de posts. Si lo repites cada 15 minutos, llegas al tope de 3 millones en mucho menos de un día. El precio de la API de X en 2026 tiene más ejemplos con números.
Cabeceras y la respuesta 429
Cada respuesta de la API de X incluye tres cabeceras:
| Cabecera | Significado |
|---|---|
x-rate-limit-limit | Peticiones permitidas en la ventana |
x-rate-limit-remaining | Peticiones que quedan en la ventana actual |
x-rate-limit-reset | Hora Unix en que se reinicia la ventana |
Cuando te quedas sin peticiones, la API devuelve HTTP 429 con el código de error 88 y el mensaje "Rate limit exceeded". La solución que recomienda X es leer x-rate-limit-reset y esperar hasta esa hora. Si no tienes hora de reinicio, aplica backoff exponencial. El código de ejemplo de X espera al menos 60 segundos antes de reintentar.
Un pequeño helper en Python que hace esto:
import random
import time
import requests
def get_with_backoff(url, headers, max_tries=5):
for attempt in range(max_tries):
resp = requests.get(url, headers=headers, timeout=30)
if resp.status_code != 429:
return resp
reset = resp.headers.get("x-rate-limit-reset")
retry_after = resp.headers.get("retry-after")
if reset:
wait = max(int(reset) - time.time(), 1)
elif retry_after:
wait = int(retry_after)
else:
wait = min(60 * 2**attempt, 900)
time.sleep(wait + random.uniform(0, 1))
raise RuntimeError("still rate limited after retries")También tiene en cuenta Retry-After, que varias API de terceros envían en lugar de una marca de tiempo de reinicio. El pequeño retraso aleatorio evita que varios workers reintenten en el mismo instante.
Límites publicados de las alternativas
Las API de terceros para datos públicos de X fijan sus propios límites. Normalmente se cuentan por cuenta y para todos los endpoints, no por endpoint. Estas son las cifras que publica cada proveedor.
twitterapi.io: según el estado de la cuenta
La página de límites QPS de twitterapi.io dice que las cuentas que nunca han pagado están limitadas a 0.2 peticiones por segundo, una cada 5 segundos. Una compra única de créditos lo sube a 20 peticiones por segundo. Las suscripciones van de 20 por segundo en los planes bajos a 500 por segundo en Business. Si te pasas, recibes 429 con una cabecera Retry-After, y la página dice que la cuenta no se bloquea.
Otras páginas de twitterapi.io dan cifras distintas. La introducción de su documentación menciona hasta 200 QPS por cliente. Citamos la página dedicada a los límites y te sugerimos confirmarlo con ellos.
SocialData: 120 peticiones por minuto
La página de rate limits de SocialData fija 120 peticiones por minuto por usuario, compartidas entre todos los endpoints, y dice que se pueden pedir límites más altos gratis por correo. Su página de errores dice que un 429 significa que te pasaste y recomienda backoff exponencial. Un 402 significa que tu saldo es demasiado bajo, que es un problema distinto de un rate limit.
RapidAPI: cuota del plan más una ventana por minuto
Cualquier API que se venda en RapidAPI, incluida la nuestra, puede tener dos tipos de límite. La documentación de cabeceras de respuesta de RapidAPI los describe:
x-ratelimit-requests-limityx-ratelimit-requests-remainingsiguen la cuota de tu plan, que se reinicia cada día o cada mes según el plan.x-ratelimit-limityx-ratelimit-remainingsiguen una ventana de 60 segundos. Cuando se agota, recibes 429. Solo aparecen si la API tiene ese límite.
La cuota es lo que pagaste. La ventana por minuto es lo que devuelve 429 cuando envías demasiado rápido.
TwittrAPI
En RapidAPI y JojAPI, los límites de cada plan aparecen en la ficha del marketplace. En las cuentas directas, los límites dependen de la cuenta; pregunta a soporte si necesitas más capacidad. Si te pasas, recibes HTTP 429. Nuestra documentación sobre rate limits (en inglés) explica el backoff, y los SDK oficiales de Python y Node.js reintentan las respuestas 429 por ti. Las cuentas directas pueden contratar niveles más altos, hasta 1,000 peticiones por segundo por su cuenta, en la página de precios; TwittrAPI for teams (en inglés) cubre más que eso.
Cobramos por llamada, desde US$0.065 por 1,000 llamadas con los precios directos. Las llamadas que fallan con 400, 407, 408, 409 o 5xx se reembolsan.
Comparativa
| API oficial de X | twitterapi.io | SocialData | TwittrAPI | |
|---|---|---|---|---|
| Unidad del límite | Peticiones por endpoint cada 15 min (o 24 h) | Peticiones por segundo, por cuenta | Peticiones por minuto, por usuario | Por plan en marketplaces, por cuenta en directo |
| Ejemplo | 300 consultas de usuario / 15 min por app | 20/s tras cualquier compra | 120/min | Ver la ficha o preguntar a soporte |
| Al superar el límite | 429, código 88 | 429 con Retry-After | 429 | 429 |
| Tope mensual | 3 M de lecturas de posts con pago por uso | No se indica en la página de límites | No se indica | Cuota del plan en marketplaces; saldo prepago en directo |
Cómo no pasarte de los límites
La mayoría de los 429 vienen de unos pocos hábitos. Esto ayuda en todas las API de arriba:
- Guarda en caché lo que no cambia. Los perfiles y los posts antiguos cambian poco. Guárdalos y vuelve a pedirlos según un calendario.
- Usa endpoints por lotes.
GET /2/tweetsacepta muchos ID y tiene el límite de consulta más alto de la tabla. Algunas API de terceros tienen consultas masivas parecidas. - Reparte las peticiones. Un ritmo constante por debajo del límite es mejor que ráfagas seguidas de esperas.
- Lee las cabeceras. Baja el ritmo cuando quedan pocas peticiones en vez de esperar al 429.
- Ante un 429, espera y luego sigue. Nunca reintentes en un bucle cerrado. Eso te mantiene limitado más tiempo.
Si piensas hacer scraping de x.com directamente para saltarte los límites de la API, X también tiene límites ahí. How to scrape Twitter (X) data in 2026 (en inglés) explica con qué te vas a encontrar.
Preguntas frecuentes
¿Cuál es el rate limit de la API de X?
No hay un único número. Cada endpoint tiene su propio límite por ventana de 15 minutos, contado por separado por app y por usuario. Por ejemplo, la consulta de usuario por nombre de usuario permite 300 peticiones cada 15 minutos por app y 900 por usuario.
¿Cuánto dura un rate limit de la API de X?
Hasta que se reinicia la ventana actual, a los 15 minutos o a las 24 horas según el endpoint. La cabecera x-rate-limit-reset te da la hora exacta.
¿Qué significa el error 429 con código 88?
Enviaste más peticiones de las que el endpoint permite en la ventana actual. Espera hasta la hora de x-rate-limit-reset y continúa.
¿Pagar más sube los rate limits de la API de X?
No con el pago por uso. Tu saldo paga las peticiones, pero los límites por ventana son los mismos. Los clientes Enterprise tienen límites personalizados.
¿Las API de Twitter de terceros tienen rate limits?
Sí. Normalmente se fijan por cuenta y por segundo o por minuto. twitterapi.io, SocialData y los planes de RapidAPI publican los suyos. Para una clave de TwittrAPI, mira la ficha del marketplace o pregunta a soporte si es una cuenta directa. La API de Twitter más barata en 2026 compara sus precios, y puedes probar la nuestra con US$0.50 de crédito de prueba desde /start.




