The official X API
Everything, the long way around
- Built for everything — and priced like it
- Plumbing first: OAuth, cursors, raw envelopes
- You stitch multi-call jobs together yourself
Compare · X API alternative
A focused alternative to the official X API for read-heavy work — a single API key, credits-only pricing, clean JSON, and stable workflow endpoints. Clear scope: reads only, no account automation.
The official X API
xfetch
Rate limits scale with your plan — 60 / 300 / 600 / 900 / 1,500 / 2,400 req/min by plan. Failed calls, rate limits, and service-side errors are never charged.
Profiles, tweets, search, followers — the same /2 read paths you already use keep working.
Point your client at api.xfetch.io and swap the bearer for your xfetch key — no OAuth dance (see below).
Need richer blocks or a whole job in one call? Move that one request to a /v1 workflow endpoint.
curl -H "Authorization: Bearer $OFFICIAL_BEARER" \ https://<official-host>/2/users/by/username/jack
curl -H "Authorization: Bearer $XFETCH_API_KEY" \ https://api.xfetch.io/2/users/by/username/jack
What carries over to /2: supported request paths, official-style pagination tokens, count parameters where xfetch can honor them, the supported field selectors, and the official response body — credit metadata lives in headers, not your payload.
/v1/profiles/by-username and /v1/tweets/:id/context assemble what a job needs — profile + recent tweets, or tweet + author + context — in one call.
search.enriched returns tweets plus a single deduplicated authors array, so you join less by hand.
Normalized JSON drops into RAG and agents, with machine-readable /llms.txt and /openapi.json context.
Single-object lookups cost 1 credit; collections, search, and workflows scale by returned primary items. Usage is reported in stable endpoint keys.
A common warm-up for any social feature. On the official X API you assemble it across calls and a manual join. The xfetch workflow makes it a single named-block response.
GET /2/users/by/username/jack?user.fields=id,username,name → get the user id from the supported field subset
GET /2/users/:id/tweets → then merge user + tweets, page, and dedupe yourself
GET /v1/profiles/by-username/jack
{
"data": {
"user": { "username": "jack" },
"recent_tweets": [ …5 normalized tweets ]
},
"meta": { "credits": { "charged": 7 } }
}These boundaries keep the self-serve contract stable: xfetch is built for read workflows, migration-friendly reads, and predictable credits.
Posting, liking, reposting, following, and DMs stay outside the self-serve API.
We don't expose every endpoint that exists. Each one maps to a real user workflow.
No GraphQL, no single catch-all endpoint — just workflow endpoints with stable contracts.
Account control, bulk actions, and automation workflows stay outside the read API.
Sign in, mint an API key, and call the workflow your product needs. 1,000 credits free to start. Failed calls, rate limits, and service-side errors are never charged.