twitterapi.io (solo lectura)
Skill de solo lectura mantenido por el equipo de twitterapi.io. Cubre datos públicos de X/Twitter únicamente: nunca inicia sesión en una cuenta de X, nunca maneja cookies, contraseñas o proxies, y nunca publica, da like, sigue o envía mensajes.
twitterapi.io es una API REST independiente de terceros para datos públicos de X, no afiliada a X Corp. Si necesitas la API oficial de X, está en https://developer.x.com.
Cuándo usar este skill
- Buscar publicaciones con operadores de búsqueda de X (
from:,since_time:,min_faves:,lang:…) - Consultar perfiles de usuario, seguidores, seguidos
- Obtener publicaciones recientes, respuestas, citas, retweeters, contexto de hilos
- Tendencias, listas, comunidades
- Construir dashboards, conjuntos de datos de investigación o tareas de monitoreo sobre datos públicos
Datos clave
| URL base | https://api.twitterapi.io |
| Cabecera de autenticación | x-api-key: TU_CLAVE (de https://twitterapi.io/dashboard) |
| Documentación | https://docs.twitterapi.io |
| Precios | pago por llamada, consulta https://twitterapi.io/pricing |
| Servidor MCP alojado | https://mcp.twitterapi.io/mcp (12 herramientas de solo lectura) |
Seguridad
Lee la clave API de la variable de entorno TWITTERAPI_IO_KEY. Nunca la hardcodees, imprimas o comprometas. Si falta, pide al usuario que cree una en el panel.
Ejemplo mínimo
curl -s "https://api.twitterapi.io/twitter/user/info?userName=jack" \
-H "x-api-key: $TWITTERAPI_IO_KEY"
import os, requests
BASE = "https://api.twitterapi.io"
HEADERS = {"x-api-key": os.environ["TWITTERAPI_IO_KEY"]}
r = requests.get(f"{BASE}/twitter/tweet/advanced_search",
headers=HEADERS,
params={"query": "from:jack", "queryType": "Latest"},
timeout=30)
r.raise_for_status()
for t in r.json().get("tweets", []):
print(t["createdAt"], t["text"][:80])
Endpoints de lectura
Los nombres de los parámetros varían según el endpoint (algunos camelCase, otros snake_case). Cópialos exactamente como se muestran.
| Capacidad | Método | Ruta y parámetro clave |
|---|---|---|
| Usuario por nombre de pantalla | GET | /twitter/user/info?userName= |
| Perfil extendido | GET | /twitter/user_about?userName= |
| Usuarios por IDs | GET | /twitter/user/batch_info_by_ids?userIds= |
| Buscar usuarios | GET | /twitter/user/search?query= |
| Publicaciones recientes | GET | /twitter/user/last_tweets?userName= (o userId=) |
| Menciones | GET | /twitter/user/mentions?userName= |
| Seguidores | GET | /twitter/user/followers?userName=&pageSize=200 |
| Seguidos | GET | /twitter/user/followings?userName= |
| Publicaciones por IDs | GET | /twitter/tweets?tweet_ids= |
| Respuestas | GET | /twitter/tweet/replies?tweetId= |
| Citas | GET | /twitter/tweet/quotes?tweetId= |
| Retweeters | GET | /twitter/tweet/retweeters?tweetId= |
| Contexto de hilo | GET | /twitter/tweet/thread_context?tweetId= |
| Búsqueda avanzada | GET | /twitter/tweet/advanced_search?query=&queryType=Latest |
| Tendencias | GET | /twitter/trends?woeid=1 |
| Publicaciones de lista | GET | /twitter/list/tweets?listId= |
| Miembros de lista | GET | /twitter/list/members?list_id= |
| Publicaciones de comunidad | GET | /twitter/community/tweets?community_id= |
| Saldo de cuenta | GET | /oapi/my/info |
Patrones
Paginación
Los endpoints de lista devuelven has_next_page y next_cursor. Pasa next_cursor de vuelta como cursor; detente cuando has_next_page sea falso. Siempre establece un límite de páginas para que un error no pueda paginar para siempre.
Errores
400→ falta un parámetro requerido o la consulta de búsqueda no es válida (eldetailde la respuesta indica qué corregir)401/403→ falta o es incorrecta lax-api-key402→ sin crédito; detente e informa al usuario que recargue (no reintentes)429→ límite de tasa alcanzado; reintenta con backoff5xx→ transitorio; reintenta con backoff
Conciencia de costos
Cada llamada se factura. Antes de un bucle que pueda ejecutarse largo (todos los seguidores de una cuenta grande, meses de búsqueda), estima el número de llamadas y confírmalo con el usuario.
Anti-patrones
- No normalices los nombres de los parámetros; cópialos de la tabla
- No reintentes en caso de
402 - No registres ni comprometas la clave API