XCRAP.CC

Référence API

Chaque endpoint est un GET, sans authentification, et répond dans celui des cinq formats que vous demandez. L'URL de base est ci-dessous. Il n'y a rien d'autre à configurer.

URL de base

https://xcrap.cc/v1

Aucune authentification

Aucune clé, aucun jeton, aucun en-tête à envoyer. Les limites de débit sont par IP et par endpoint.

OpenAPI

La spec complète est servie en JSON et YAML. Pointez n'importe quel générateur ou framework d'agents dessus.

Formats de réponse

JSON par défaut. Changez avec ?format= ou un en-tête Accept. Les deux s'accordent ; le paramètre de requête l'emporte quand les deux sont présents.

?format= Accept Content-Type
json application/json application/json
markdown text/markdown text/markdown
yaml application/yaml application/yaml
csv text/csv text/csv
html text/html text/html
x-markdown-tokens

Chaque réponse markdown porte une estimation de son coût de lecture, pour qu'un agent puisse décider si un fil tient dans son contexte avant d'en récupérer le corps.

Limites de débit

Les limites sont par endpoint plutôt qu'un budget global unique, parce qu'une requête bulk peut coûter cinquante appels en amont et un post en cache n'en coûte aucun. Chaque réponse porte x-ratelimit-limit, x-ratelimit-remaining et x-ratelimit-reset.

Budget Requêtes Fenêtre S'applique à
tweet 45 1 min /v1/tweet
user 45 1 min /v1/user
thread 15 1 min /v1/thread
timeline 15 1 min /v1/user/tweets
graph 15 1 min /v1/user/followers, /v1/user/following
replies 15 1 min /v1/replies
history 4 5 min /v1/user/history
search 10 15 min /v1/search
bulk 6 5 min /v1/bulk
media 20 1 min /v1/media, /v1/media/download
meta 90 1 min /v1/trends
page 240 1 min Pages du site

Besoin de plus ? L'offre Entreprise propose des limites plus hautes et une capacité dédiée. Voir l'offre Entreprise →

Erreurs

Les erreurs reviennent dans le format demandé, avec un code stable lisible par machine, un message décrivant ce qui a échoué et un indice sur la marche à suivre.

Statut code Que faire
400 bad_request Un paramètre est manquant ou mal formé. Vérifiez-le par rapport à cette page.
404 not_found Le post ou le compte est supprimé, suspendu, privé ou n'a jamais existé.
429 rate_limited Budget de l'endpoint épuisé. Attendez la durée indiquée dans retry-after, ou voyez l'offre Entreprise pour des limites plus hautes.
451 opted_out Ce compte a demandé à être exclu de XCrap.
500 internal_error Notre faute. Déjà signalé. Réessayez sous peu.
502 upstream_failed Toutes les sources ont refusé. C'est généralement bref ; réessayez dans une minute.
504 upstream_timeout Une source n'a pas répondu à temps. Réessayez dans une minute.
503 search_unavailable La capacité de recherche est épuisée pour l'instant, ou la recherche n'est pas configurée. Attendez retry-after.
Essayer

Remplissez les paramètres et envoyez. Ça part vers la vraie API — il n'y a pas de clé à ajouter, donc rien ne s'interpose entre ce formulaire et une réponse réelle.

GET /v1/tweet 45 / 1m

Un post, entièrement résolu

Récupère un seul post avec son auteur, tous les compteurs d'engagement, les médias joints à chaque débit, les résultats de sondage et le post cité, déplié sur un niveau.

Illustration de l'endpoint /v1/tweet

Paramètres

Paramètre Type Par défaut Description
url Requis string aucune L'URL du post ou son identifiant numérique. x.com, twitter.com, les miroirs fx/vx et un identifiant seul fonctionnent tous.
download boolean aucune Envoie Content-Disposition pour que le navigateur enregistre la réponse comme un fichier.
format string json Format de réponse : json, markdown, yaml, csv ou html. Prime sur l'en-tête Accept.
fresh boolean false Ignore le cache et récupère à nouveau à la source. À utiliser avec modération.

Exemple

https://xcrap.cc/v1/tweet?url=https://x.com/jack/status/20&format=markdown

Essayer

download
format
fresh
GET /v1/tweet

Les limites de débit s'appliquent ici exactement comme ailleurs.

GET /v1/thread 15 / 1m

Un fil entier, déroulé dans l'ordre

Donnez-lui n'importe quel post d'un fil, y compris le premier, et il renvoie les posts de l'auteur dans l'ordre de lecture. X n'expose que le parent d'un post, alors XCrap recoud la timeline de l'auteur par identifiant de conversation pour parcourir le fil vers l'avant.

Illustration de l'endpoint /v1/thread

Paramètres

Paramètre Type Par défaut Description
url Requis string aucune N'importe quel post du fil.
max_tweets integer 25 Profondeur, de 1 à 100. La réponse indique si elle a été tronquée.
format string json Format de réponse : json, markdown, yaml, csv ou html. Prime sur l'en-tête Accept.
fresh boolean false Ignore le cache et récupère à nouveau à la source. À utiliser avec modération.

Exemple

https://xcrap.cc/v1/thread?url=https://x.com/naval/status/1002103360646823936&format=markdown

Essayer

format
fresh
GET /v1/thread

Les limites de débit s'appliquent ici exactement comme ailleurs.

GET /v1/replies 15 / 1m

Les réponses sous un post

Une page de réponses à un post, les plus aimées ou les plus récentes d'abord, avec le post lui-même. Seules les réponses directes sont renvoyées : une réponse à une réponse appartient à sa propre conversation. Pas de pagination : c'est l'unique page que X sert pour ce post, jusqu'à une centaine de réponses.

Illustration de l'endpoint /v1/replies

Paramètres

Paramètre Type Par défaut Description
url Requis string aucune Le post dont lire les réponses : son URL ou son identifiant numérique.
sort string top top pour les plus aimées d'abord, recent pour les plus récentes d'abord.
format string json Format de réponse : json, markdown, yaml, csv ou html. Prime sur l'en-tête Accept.
fresh boolean false Ignore le cache et récupère à nouveau à la source. À utiliser avec modération.

Exemple

https://xcrap.cc/v1/replies?url=https://x.com/naval/status/1002103360646823936&sort=top&format=markdown

Essayer

sort
format
fresh
GET /v1/replies

Les limites de débit s'appliquent ici exactement comme ailleurs.

GET /v1/user 45 / 1m

Un profil

Bio, localisation, site web, date d'inscription, type de vérification, avatar et bannière en pleine résolution, ainsi que les nombres d'abonnés, d'abonnements, de posts et de médias.

Illustration de l'endpoint /v1/user

Paramètres

Paramètre Type Par défaut Description
handle Requis string aucune Le handle, avec ou sans @, ou une URL de profil complète.
format string json Format de réponse : json, markdown, yaml, csv ou html. Prime sur l'en-tête Accept.
fresh boolean false Ignore le cache et récupère à nouveau à la source. À utiliser avec modération.

Exemple

https://xcrap.cc/v1/user?handle=naval&format=markdown

Essayer

format
fresh
GET /v1/user

Les limites de débit s'appliquent ici exactement comme ailleurs.

GET /v1/user/tweets 15 / 1m

Les posts d'un compte

Une page des posts d'un compte, du plus récent au plus ancien. La pagination se fait par curseur plutôt que par offset, car une timeline bouge pendant qu'on la lit et un offset sauterait ou répéterait des posts sans prévenir.

Illustration de l'endpoint /v1/user/tweets

Paramètres

Paramètre Type Par défaut Description
handle Requis string aucune Le compte à lire.
count integer 20 Nombre de posts à renvoyer, de 1 à 100.
cursor string aucune Le next_cursor d'une réponse précédente.
exclude_replies boolean true Exclut les réponses du compte à d'autres personnes.
media_only boolean false Uniquement les posts avec une image ou une vidéo.
format string json Format de réponse : json, markdown, yaml, csv ou html. Prime sur l'en-tête Accept.
fresh boolean false Ignore le cache et récupère à nouveau à la source. À utiliser avec modération.

Exemple

https://xcrap.cc/v1/user/tweets?handle=naval&count=20

Essayer

exclude_replies
media_only
format
fresh
GET /v1/user/tweets

Les limites de débit s'appliquent ici exactement comme ailleurs.

GET /v1/user/followers 15 / 1m

Qui suit un compte

Une page des comptes qui suivent celui-ci, chacun sous forme de profil complet. X décide de la taille de page, généralement quelques dizaines ; passez next_cursor pour la page suivante, il vaut null sur la dernière.

Illustration de l'endpoint /v1/user/followers

Paramètres

Paramètre Type Par défaut Description
handle Requis string aucune Le compte dont lister les abonnés.
cursor string aucune Le next_cursor d'une réponse précédente.
format string json Format de réponse : json, markdown, yaml, csv ou html. Prime sur l'en-tête Accept.
fresh boolean false Ignore le cache et récupère à nouveau à la source. À utiliser avec modération.

Exemple

https://xcrap.cc/v1/user/followers?handle=jack&format=markdown

Essayer

format
fresh
GET /v1/user/followers

Les limites de débit s'appliquent ici exactement comme ailleurs.

GET /v1/user/following 15 / 1m

Qui un compte suit

Une page des comptes que celui-ci suit, chacun sous forme de profil complet. X décide de la taille de page ; passez next_cursor pour la page suivante, il vaut null sur la dernière.

Illustration de l'endpoint /v1/user/following

Paramètres

Paramètre Type Par défaut Description
handle Requis string aucune Le compte dont lister les abonnements.
cursor string aucune Le next_cursor d'une réponse précédente.
format string json Format de réponse : json, markdown, yaml, csv ou html. Prime sur l'en-tête Accept.
fresh boolean false Ignore le cache et récupère à nouveau à la source. À utiliser avec modération.

Exemple

https://xcrap.cc/v1/user/following?handle=jack&format=markdown

Essayer

format
fresh
GET /v1/user/following

Les limites de débit s'appliquent ici exactement comme ailleurs.

GET /v1/user/history 4 / 5m

Les posts d'un compte, en masse

Parcourt la timeline d'un compte et renvoie jusqu'à 1 000 posts en une réponse, du plus récent au plus ancien, éventuellement dans une fenêtre de dates. Le parcours prend environ une seconde par vingt posts ; pour un gros export, demandez format=ndjson : les posts arrivent alors un par ligne au fil de la récupération, à peu près du plus récent au plus ancien, au lieu d'arriver tous à la fin. Plus une fenêtre est ancienne, plus la timeline de X est lacunaire, et une fenêtre vieille de plusieurs années peut revenir maigre ou vide.

Illustration de l'endpoint /v1/user/history

Paramètres

Paramètre Type Par défaut Description
handle Requis string aucune Le compte à exporter.
max_posts integer 200 S'arrête après ce nombre de posts, de 1 à 1000.
since string aucune Post le plus ancien à inclure, sous forme de date comme 2025-01-01 ou d'horodatage ISO complet.
until string aucune Post le plus récent à inclure, sous forme de date ou d'horodatage ISO complet.
include_replies boolean false Inclut les réponses du compte à d'autres personnes.
include_reposts boolean false Inclure les posts que le compte a repostés depuis d’autres comptes.
format string json Format de réponse : json, markdown, yaml, csv ou html, ou ndjson pour diffuser un post par ligne. Prime sur l'en-tête Accept.
fresh boolean false Ignore le cache et récupère à nouveau à la source. À utiliser avec modération.

Exemple

https://xcrap.cc/v1/user/history?handle=naval&max_posts=200&since=2025-01-01

Essayer

include_replies
include_reposts
format
fresh
GET /v1/user/history

Les limites de débit s'appliquent ici exactement comme ailleurs.

GET /v1/media 20 / 1m

Lister les médias d'un post

Chaque fichier joint à un post : type, dimensions, durée, texte alternatif de l'auteur, chaque rendu vidéo encodé par X, et un lien de téléchargement prêt à l'emploi pour chacun.

Illustration de l'endpoint /v1/media

Paramètres

Paramètre Type Par défaut Description
url Requis string aucune Le post à inspecter.
format string json Format de réponse : json, markdown, yaml, csv ou html. Prime sur l'en-tête Accept.
fresh boolean false Ignore le cache et récupère à nouveau à la source. À utiliser avec modération.

Exemple

https://xcrap.cc/v1/media?url=https://x.com/i/status/1671370010743263233

Essayer

format
fresh
GET /v1/media

Les limites de débit s'appliquent ici exactement comme ailleurs.

GET /v1/media/download 20 / 1m

Télécharger un fichier

Transmet le fichier directement avec un en-tête Content-Disposition. Rien n'est mis en mémoire tampon ni écrit sur notre disque, ce qui est ce que la promesse de conservation de la politique de confidentialité signifie en pratique.

Illustration de l'endpoint /v1/media/download

Paramètres

Paramètre Type Par défaut Description
url Requis string aucune Le post auquel le fichier appartient.
index integer 0 Quel fichier, quand un post en contient plusieurs.
quality string best best ou worst. Vidéo uniquement ; les images n'ont qu'une résolution.

Exemple

https://xcrap.cc/v1/media/download?url=https://x.com/i/status/1671370010743263233&index=0

Essayer

quality
GET /v1/media/download

Les limites de débit s'appliquent ici exactement comme ailleurs.

POST /v1/bulk 6 / 5m

Jusqu'à cinquante posts d'un coup

Résout de nombreux posts en une requête. Les échecs sont par élément : un lien mort renvoie une erreur pour cette entrée et toutes les autres reviennent quand même. GET fonctionne aussi, avec des paramètres url répétés ou séparés par des virgules.

Illustration de l'endpoint /v1/bulk

Paramètres

Paramètre Type Par défaut Description
urls Requis string[] aucune Une à cinquante URL ou identifiants de posts, dans le corps JSON.
format string json Format de réponse : json, markdown, yaml, csv ou html. Prime sur l'en-tête Accept.
fresh boolean false Ignore le cache et récupère à nouveau à la source. À utiliser avec modération.

Exemple

curl -X POST https://xcrap.cc/v1/bulk \
  -H 'content-type: application/json' \
  -d '{"urls":["https://x.com/jack/status/20","1671370010743263233"]}'

Essayer

format
fresh
POST /v1/bulk

Les limites de débit s'appliquent ici exactement comme ailleurs.