Felo APIs
X Search API
Recherchez des utilisateurs X, tweets, timelines et réponses avec des métadonnées de pagination.
/v2/x/tweet/searchAuthentification
Bearer API key
Type de contenu
application/json
Notes sur les limites
1 request per 10 seconds, 3 per minute, 10 per 10 minutes.
L'API X Search donne accès aux données de X (Twitter), y compris les profils utilisateurs, la recherche de tweets, les tweets d'un utilisateur et les réponses aux tweets.
Authentification
Toutes les requêtes nécessitent une clé API dans l'en-tête Authorization :
Authorization: Bearer YOUR_API_KEYUtilisation avec des agents IA
Installez le paquet complet felo-ai pour fournir à un agent X Search et tous les autres Felo Skills disponibles. L'installateur découvre dynamiquement chaque répertoire de paquet contenant SKILL.md, au lieu de conserver une liste figée de Skills. Installez tous les Skills découverts dans Codex ~/.codex/skills, Claude Code ~/.claude/skills, OpenClaw ~/.agents/skills ou Hermes Agent ~/.hermes/skills. Consultez le guide d'installation manuelle des agents IA pour les instructions d'installation, de clé API et de vérification propres à chaque plateforme.
1. Obtenir les informations d'un utilisateur
Récupérez par lot les profils d'utilisateurs X par nom d'utilisateur.
Endpoint
POST https://openapi.felo.ai/v2/x/user/infoCorps de requête
| Paramètre | Type | Requis | Description |
|---|---|---|---|
usernames | array of strings | Oui | Liste des noms d'utilisateur X à rechercher |
Exemple
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"]
}'Réponse de succès (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"
}
]
}
}Champs de l'objet utilisateur
| Champ | Type | Description |
|---|---|---|
user_id | string | ID utilisateur X |
username | string | Handle X (sans @) |
display_name | string | Nom d'affichage |
description | string | Biographie de l'utilisateur |
followers_count | integer | Nombre d'abonnés |
following_count | integer | Nombre d'abonnements |
tweet_count | integer | Nombre total de tweets |
verified | boolean | Indique si le compte est vérifié |
blue_verified | boolean | Indique si le compte dispose de la vérification Blue |
verified_type | string | Type de vérification |
profile_image_url | string | URL de l'image de profil |
cover_image_url | string | URL de l'image de couverture |
created_at | string | Date de création du compte |
location | string | Localisation de l'utilisateur |
url | string | URL du site web de l'utilisateur |
protected | boolean | Indique si le compte est protégé |
favorites_count | integer | Nombre de likes |
media_count | integer | Nombre de publications média |
can_dm | boolean | Indique si les DM sont ouverts |
is_automated | boolean | Indique si le compte est automatisé |
pinned_tweet_ids | array of strings | ID des tweets épinglés |
2. Rechercher des utilisateurs
Recherchez des utilisateurs X par mot-clé.
Endpoint
POST https://openapi.felo.ai/v2/x/user/searchCorps de requête
| Paramètre | Type | Requis | Description |
|---|---|---|---|
query | string | Oui | Mot-clé de recherche |
cursor | string | Non | Curseur de pagination issu de la réponse précédente |
Exemple
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"
}'Réponse de succès (200)
{
"status": "ok",
"message": null,
"data": {
"total": 50,
"has_next": true,
"next_cursor": "cursor_abc123",
"users": [
{
"user_id": "...",
"username": "...",
"display_name": "..."
}
]
}
}Champs de réponse
| Champ | Type | Description |
|---|---|---|
total | integer | Nombre total de résultats |
has_next | boolean | Indique si d'autres résultats sont disponibles |
next_cursor | string | Curseur pour la page suivante |
users | array | Liste d'objets utilisateur (voir section 1) |
3. Obtenir les tweets d'un utilisateur
Récupérez les tweets d'un utilisateur X spécifique.
Endpoint
POST https://openapi.felo.ai/v2/x/user/tweetsCorps de requête
| Paramètre | Type | Requis | Description |
|---|---|---|---|
x_user_id | string | Non | ID utilisateur X (fournissez x_user_id ou username) |
username | string | Non | Nom d'utilisateur X (fournissez x_user_id ou username) |
limit | integer | Non | Nombre de tweets à renvoyer |
cursor | string | Non | Curseur de pagination |
include_replies | boolean | Non | Indique s'il faut inclure les réponses |
Exemple
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
}'Réponse de succès (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"
}
]
}
}Champs de l'objet tweet
| Champ | Type | Description |
|---|---|---|
id | string | ID du tweet |
content | string | Contenu textuel du tweet |
author | object | Objet utilisateur de l'auteur (voir section 1) |
created_at | string | Date de création du tweet |
metrics | object | Métriques d'engagement (voir ci-dessous) |
replies | array | Tweets de réponse (s'ils sont disponibles) |
conversation_id | string | ID du fil de conversation |
media_urls | array | Médias joints |
hashtags | array of strings | Hashtags présents dans le tweet |
mentions | array of strings | Noms d'utilisateur mentionnés |
urls | array of strings | URL présentes dans le tweet |
url | string | Lien permanent vers le tweet |
source | string | Source du tweet (par exemple "Twitter Web App") |
lang | string | Code de langue du tweet |
is_reply | boolean | Indique s'il s'agit d'une réponse |
in_reply_to_id | string | ID du tweet auquel il est répondu |
in_reply_to_user_id | string | ID utilisateur du tweet auquel il est répondu |
in_reply_to_username | string | Nom d'utilisateur du tweet auquel il est répondu |
quoted_tweet | object | Objet du tweet cité (récursif) |
retweeted_tweet | object | Objet du tweet retweeté (récursif) |
is_limited_reply | boolean | Indique si les réponses sont limitées |
Champs de l'objet metrics
| Champ | Type | Description |
|---|---|---|
retweet_count | integer | Nombre de retweets |
favorite_count | integer | Nombre de likes |
reply_count | integer | Nombre de réponses |
quote_count | integer | Nombre de citations |
view_count | integer | Nombre de vues |
bookmark_count | integer | Nombre de signets |
4. Rechercher des tweets
Recherchez des tweets X par mot-clé avec prise en charge des requêtes avancées.
Endpoint
POST https://openapi.felo.ai/v2/x/tweet/searchCorps de requête
| Paramètre | Type | Requis | Description |
|---|---|---|---|
query | string | Oui | Requête de recherche (prend en charge la syntaxe de recherche avancée) |
query_type | string | Non | Filtre par type de requête |
since_time | integer | Non | Filtre d'heure de début (horodatage Unix en secondes) |
until_time | integer | Non | Filtre d'heure de fin (horodatage Unix en secondes) |
limit | integer | Non | Nombre de tweets à renvoyer |
cursor | string | Non | Curseur de pagination |
Exemple
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
}'Réponse de succès (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 }
}
]
}
}Champs de réponse
| Champ | Type | Description |
|---|---|---|
total | integer | Nombre total de résultats |
has_next | boolean | Indique si d'autres résultats sont disponibles |
next_cursor | string | Curseur pour la page suivante |
tweets | array | Liste d'objets tweet (voir section 3) |
5. Obtenir les réponses à un tweet
Récupérez les réponses à des tweets spécifiques.
Endpoint
POST https://openapi.felo.ai/v2/x/tweet/repliesCorps de requête
| Paramètre | Type | Requis | Description |
|---|---|---|---|
tweet_ids | array of strings | Oui | ID du ou des tweets dont vous voulez les réponses |
cursor | string | Non | Curseur de pagination |
since_time | integer | Non | Filtre d'heure de début (horodatage Unix) |
until_time | integer | Non | Filtre d'heure de fin (horodatage Unix) |
Exemple
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"]
}'Réponse de succès (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"
}
]
}
]
}
}Champs de réponse
| Champ | Type | Description |
|---|---|---|
results | array | Liste d'objets de résultat de réponses |
results[].tweet_id | string | ID du tweet d'origine |
results[].total | integer | Nombre total de réponses |
results[].has_next | boolean | Indique si d'autres réponses sont disponibles |
results[].next_cursor | string | Curseur pour la page suivante |
results[].replies | array | Liste d'objets tweet de réponse (voir section 3) |
Codes d'erreur
| Code | Statut HTTP | Description |
|---|---|---|
UNAUTHORIZED | 401 | La clé API est invalide ou révoquée |
X_SEARCH_FAILED | 400/500 | La requête de recherche X a échoué (vérifiez les paramètres ou une erreur en aval) |
RATE_LIMIT_EXCEEDED | 429 | Trop de requêtes, réessayez après un court délai |
insufficient_credits | 402 | Crédits insuffisants pour effectuer la requête |
Crédits et limitation de débit
Coût en crédits
Chaque appel API déduit des crédits selon le nombre de résultats renvoyés :
| Endpoint | Coût en crédits |
|---|---|
POST /x/user/info | 1 crédit par utilisateur renvoyé |
POST /x/user/search | 1 crédit par utilisateur renvoyé |
POST /x/user/tweets | 1 crédit par tweet renvoyé |
POST /x/tweet/search | 1 crédit par tweet renvoyé |
POST /x/tweet/replies | 1 crédit par réponse renvoyée |
Les crédits sont déduits après la fin de la requête, selon le nombre réel de résultats. Si une requête renvoie 0 résultat, aucun crédit n'est déduit.
Solde minimum requis : votre compte doit disposer d'au moins 10 crédits pour effectuer une requête à l'API X. Les requêtes effectuées avec moins de 10 crédits sont rejetées avec HTTP 402.
Limitation de débit
Les limites de débit sont appliquées selon les politiques en vigueur du service API et du compte. En cas de limitation, l'API renvoie HTTP 429. L'en-tête Retry-After indique le délai d'attente suggéré en secondes. Utilisez la documentation de service la plus récente et les réponses réelles de l'API pour gérer les limites de débit ; un abonnement n'est pas requis pour utiliser la plateforme.