Felo APIs
X Search API
Busca usuarios de X, tweets, cronologías y respuestas con metadatos de paginación.
/v2/x/tweet/searchAutenticación
Bearer API key
Tipo de contenido
application/json
Notas sobre límites
1 request per 10 seconds, 3 per minute, 10 per 10 minutes.
La X Search API proporciona acceso a los datos de X (Twitter), incluidos los perfiles de usuario, la búsqueda de tuits, los tuits de un usuario y las respuestas a tuits.
Autenticación
Todas las solicitudes requieren una clave de API en el encabezado Authorization:
Authorization: Bearer YOUR_API_KEYUso con agentes de IA
Instala el paquete completo felo-ai para dar a un agente X Search y todas las demás Felo Skills disponibles. El instalador descubre dinámicamente todos los directorios del paquete que contengan SKILL.md, en lugar de mantener una lista fija de Skills. Instala todas las Skills descubiertas en Codex ~/.codex/skills, Claude Code ~/.claude/skills, OpenClaw ~/.agents/skills o Hermes Agent ~/.hermes/skills. Consulta la guía de configuración manual de agentes de IA para obtener instrucciones de instalación, clave de API y verificación específicas de cada plataforma.
1. Obtener información de usuario
Recupera en lote perfiles de usuarios de X por nombre de usuario.
Endpoint
POST https://openapi.felo.ai/v2/x/user/infoCuerpo de la solicitud
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
usernames | array de strings | Sí | Lista de nombres de usuario de X que se van a consultar |
Ejemplo
curl -X POST 'https://openapi.felo.ai/v2/x/user/info' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"usernames": ["elonmusk", "OpenAI"]
}'Respuesta correcta (200)
{
"status": "ok",
"message": null,
"data": {
"total": 2,
"users": [
{
"user_id": "44196397",
"username": "elonmusk",
"display_name": "Elon Musk",
"description": "...",
"followers_count": 100000000,
"following_count": 500,
"tweet_count": 30000,
"verified": true,
"blue_verified": true,
"profile_image_url": "https://pbs.twimg.com/...",
"created_at": "2009-06-02T00:00:00Z",
"location": "Mars"
}
]
}
}Campos del objeto de usuario
| Campo | Tipo | Descripción |
|---|---|---|
user_id | string | ID de usuario de X |
username | string | Nombre de usuario de X (sin @) |
display_name | string | Nombre visible |
description | string | Biografía del usuario |
followers_count | integer | Número de seguidores |
following_count | integer | Número de cuentas seguidas |
tweet_count | integer | Total de tuits |
verified | boolean | Indica si la cuenta está verificada |
blue_verified | boolean | Indica si la cuenta tiene verificación Blue |
verified_type | string | Tipo de verificación |
profile_image_url | string | URL de la imagen de perfil |
cover_image_url | string | URL de la imagen de portada |
created_at | string | Fecha de creación de la cuenta |
location | string | Ubicación del usuario |
url | string | URL del sitio web del usuario |
protected | boolean | Indica si la cuenta está protegida |
favorites_count | integer | Número de me gusta |
media_count | integer | Número de publicaciones multimedia |
can_dm | boolean | Indica si los mensajes directos están abiertos |
is_automated | boolean | Indica si la cuenta es automatizada |
pinned_tweet_ids | array de strings | ID de los tuits fijados |
2. Buscar usuarios
Busca usuarios de X por palabra clave.
Endpoint
POST https://openapi.felo.ai/v2/x/user/searchCuerpo de la solicitud
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
query | string | Sí | Palabra clave de búsqueda |
cursor | string | No | Cursor de paginación de una respuesta anterior |
Ejemplo
curl -X POST 'https://openapi.felo.ai/v2/x/user/search' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"query": "artificial intelligence"
}'Respuesta correcta (200)
{
"status": "ok",
"message": null,
"data": {
"total": 50,
"has_next": true,
"next_cursor": "cursor_abc123",
"users": [
{
"user_id": "...",
"username": "...",
"display_name": "..."
}
]
}
}Campos de la respuesta
| Campo | Tipo | Descripción |
|---|---|---|
total | integer | Número total de resultados |
has_next | boolean | Indica si hay más resultados disponibles |
next_cursor | string | Cursor de la página siguiente |
users | array | Lista de objetos de usuario (consulta la sección 1) |
3. Obtener los tuits de un usuario
Recupera los tuits de un usuario de X concreto.
Endpoint
POST https://openapi.felo.ai/v2/x/user/tweetsCuerpo de la solicitud
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
x_user_id | string | No | ID de usuario de X (indica x_user_id o username) |
username | string | No | Nombre de usuario de X (indica x_user_id o username) |
limit | integer | No | Número de tuits que se devolverán |
cursor | string | No | Cursor de paginación |
include_replies | boolean | No | Indica si se incluyen las respuestas |
Ejemplo
curl -X POST 'https://openapi.felo.ai/v2/x/user/tweets' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"username": "elonmusk",
"limit": 20
}'Respuesta correcta (200)
{
"status": "ok",
"message": null,
"data": {
"total": 20,
"has_next": true,
"next_cursor": "cursor_def456",
"tweets": [
{
"id": "1234567890",
"content": "Tweet content here...",
"author": { "user_id": "...", "username": "elonmusk" },
"created_at": "2026-03-09T12:00:00Z",
"metrics": {
"retweet_count": 1000,
"favorite_count": 5000,
"reply_count": 200,
"quote_count": 100,
"view_count": 500000,
"bookmark_count": 50
},
"hashtags": ["AI"],
"mentions": ["OpenAI"],
"url": "https://x.com/elonmusk/status/1234567890",
"lang": "en"
}
]
}
}Campos del objeto de tuit
| Campo | Tipo | Descripción |
|---|---|---|
id | string | ID del tuit |
content | string | Contenido de texto del tuit |
author | object | Objeto de usuario del autor (consulta la sección 1) |
created_at | string | Fecha de creación del tuit |
metrics | object | Métricas de interacción (consulta más abajo) |
replies | array | Tuits de respuesta (si están disponibles) |
conversation_id | string | ID del hilo de la conversación |
media_urls | array | Multimedia adjunta |
hashtags | array de strings | Hashtags del tuit |
mentions | array de strings | Nombres de usuario mencionados |
urls | array de strings | URL del tuit |
url | string | Enlace permanente al tuit |
source | string | Origen del tuit (por ejemplo, "Twitter Web App") |
lang | string | Código de idioma del tuit |
is_reply | boolean | Indica si es una respuesta |
in_reply_to_id | string | ID del tuit al que se responde |
in_reply_to_user_id | string | ID de usuario del tuit al que se responde |
in_reply_to_username | string | Nombre de usuario del tuit al que se responde |
quoted_tweet | object | Objeto del tuit citado (recursivo) |
retweeted_tweet | object | Objeto del tuit retuiteado (recursivo) |
is_limited_reply | boolean | Indica si las respuestas están limitadas |
Campos del objeto de métricas
| Campo | Tipo | Descripción |
|---|---|---|
retweet_count | integer | Número de retuits |
favorite_count | integer | Número de me gusta |
reply_count | integer | Número de respuestas |
quote_count | integer | Número de citas |
view_count | integer | Número de visualizaciones |
bookmark_count | integer | Número de marcadores |
4. Buscar tuits
Busca tuits de X por palabra clave con compatibilidad para consultas avanzadas.
Endpoint
POST https://openapi.felo.ai/v2/x/tweet/searchCuerpo de la solicitud
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
query | string | Sí | Consulta de búsqueda (admite sintaxis de búsqueda avanzada) |
query_type | string | No | Filtro por tipo de consulta |
since_time | integer | No | Filtro de hora de inicio (marca de tiempo Unix en segundos) |
until_time | integer | No | Filtro de hora de fin (marca de tiempo Unix en segundos) |
limit | integer | No | Número de tuits que se devolverán |
cursor | string | No | Cursor de paginación |
Ejemplo
curl -X POST 'https://openapi.felo.ai/v2/x/tweet/search' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"query": "artificial intelligence",
"limit": 20
}'Respuesta correcta (200)
{
"status": "ok",
"message": null,
"data": {
"total": 20,
"has_next": true,
"next_cursor": "cursor_ghi789",
"tweets": [
{
"id": "...",
"content": "...",
"author": { "user_id": "...", "username": "..." },
"created_at": "2026-03-09T12:00:00Z",
"metrics": { "retweet_count": 100, "favorite_count": 500 }
}
]
}
}Campos de la respuesta
| Campo | Tipo | Descripción |
|---|---|---|
total | integer | Número total de resultados |
has_next | boolean | Indica si hay más resultados disponibles |
next_cursor | string | Cursor de la página siguiente |
tweets | array | Lista de objetos de tuit (consulta la sección 3) |
5. Obtener respuestas a tuits
Recupera las respuestas de tuits concretos.
Endpoint
POST https://openapi.felo.ai/v2/x/tweet/repliesCuerpo de la solicitud
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
tweet_ids | array de strings | Sí | ID de los tuits cuyas respuestas se quieren obtener |
cursor | string | No | Cursor de paginación |
since_time | integer | No | Filtro de hora de inicio (marca de tiempo Unix) |
until_time | integer | No | Filtro de hora de fin (marca de tiempo Unix) |
Ejemplo
curl -X POST 'https://openapi.felo.ai/v2/x/tweet/replies' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"tweet_ids": ["1234567890"]
}'Respuesta correcta (200)
{
"status": "ok",
"message": null,
"data": {
"results": [
{
"tweet_id": "1234567890",
"total": 10,
"has_next": true,
"next_cursor": "cursor_jkl012",
"replies": [
{
"id": "...",
"content": "Great tweet!",
"author": { "user_id": "...", "username": "..." },
"created_at": "2026-03-09T12:30:00Z"
}
]
}
]
}
}Campos de la respuesta
| Campo | Tipo | Descripción |
|---|---|---|
results | array | Lista de objetos de resultado de respuestas |
results[].tweet_id | string | ID del tuit original |
results[].total | integer | Número total de respuestas |
results[].has_next | boolean | Indica si hay más respuestas disponibles |
results[].next_cursor | string | Cursor de la página siguiente |
results[].replies | array | Lista de objetos de tuit de respuesta (consulta la sección 3) |
Códigos de error
| Código | Estado HTTP | Descripción |
|---|---|---|
UNAUTHORIZED | 401 | La clave de API no es válida o está revocada |
X_SEARCH_FAILED | 400/500 | Falló la solicitud de búsqueda en X (comprueba los parámetros o el error downstream) |
RATE_LIMIT_EXCEEDED | 429 | Demasiadas solicitudes; vuelve a intentarlo tras una breve espera |
insufficient_credits | 402 | No hay créditos suficientes para completar la solicitud |
Créditos y límites de solicitudes
Costes en créditos
Cada llamada a la API descuenta créditos según el número de resultados devueltos:
| Endpoint | Coste en créditos |
|---|---|
POST /x/user/info | 1 crédito por cada usuario devuelto |
POST /x/user/search | 1 crédito por cada usuario devuelto |
POST /x/user/tweets | 1 crédito por cada tuit devuelto |
POST /x/tweet/search | 1 crédito por cada tuit devuelto |
POST /x/tweet/replies | 1 crédito por cada respuesta devuelta |
Los créditos se descuentan una vez completada la solicitud, según el número real de resultados. Si una solicitud devuelve 0 resultados, no se descuentan créditos.
Requisito de saldo mínimo: tu cuenta debe tener al menos 10 créditos para realizar cualquier solicitud a la API de X. Las solicitudes con menos de 10 créditos se rechazan con HTTP 402.
Límites de solicitudes
Los límites de solicitudes se aplican según el servicio de API y las políticas de cuenta vigentes. Cuando se aplica un límite, la API devuelve HTTP 429. El encabezado Retry-After indica el tiempo de espera sugerido en segundos. Usa la documentación de servicio más reciente y las respuestas reales de la API para gestionar los límites de solicitudes; no se requiere suscripción para usar la plataforma.