X (Twitter)
X (Twitter) data via Wire — profiles, user tweets, tweet detail and keyword search as structured JSON
https://api.anakin.io/v1/wire/taskProfiles, user tweets, tweet detail and keyword search. Every X (Twitter) action is a Wire action: call POST /v1/wire/task with the action_id and params below, then poll GET /v1/wire/jobs/{id} (or pass a webhook_url). All actions read public data — no login, no cookies, auth_mode: none.
Catalog: x · Actions: 4 · Auth: none · Billing: only successful calls are charged
| Action | action_id | Credits | Returns |
|---|---|---|---|
| Profile | x_profile | 2 | 1 item |
| User Posts | x_user_tweets | 2 | 20 tweets |
| Post Details | x_tweet_detail | 2 | 1 item |
| Post Search | x_search | 16+ | up to limit tweets (default 20) |
Credits marked + grow with limit — the exact formula is on each action. See Pricing for what a credit costs on your plan.
Call a X (Twitter) action
The same call works for every action on this page — swap action_id and params.
curl -X POST https://api.anakin.io/v1/wire/task \
-H "X-API-Key: your_api_key" \
-H "Content-Type: application/json" \
-d '{"action_id": "x_profile", "params": {"username": "NASA"}}'import requests, time
res = requests.post('https://api.anakin.io/v1/wire/task', headers={'X-API-Key': 'your_api_key'},
json={"action_id": "x_profile", "params": {"username": "NASA"}})
job_id = res.json()['job_id']
while True: # poll until the job settles (or pass webhook_url and skip this)
job = requests.get(f'https://api.anakin.io/v1/wire/jobs/{job_id}', headers={'X-API-Key': 'your_api_key'}).json()
if job['status'] in ('completed', 'failed'):
break
time.sleep(2)
print(job['data']['data'])const headers = { 'X-API-Key': 'your_api_key', 'Content-Type': 'application/json' };
const res = await fetch('https://api.anakin.io/v1/wire/task', { method: 'POST', headers, body: JSON.stringify({"action_id": "x_profile", "params": {"username": "NASA"}}) });
const { job_id } = await res.json();
let job;
do { // poll until the job settles (or pass webhook_url and skip this)
await new Promise((r) => setTimeout(r, 2000));
job = await (await fetch(`https://api.anakin.io/v1/wire/jobs/${job_id}`, { headers })).json();
} while (!['completed', 'failed'].includes(job.status));
console.log(job.data.data);The job result wraps the action's output: data.status is "ok" or "error", and data.data holds the fields shown under each action below. See the overview for the full envelope.
Profile
Get a public X (Twitter) profile: name, bio, follower, following, post, like and media counts, verified and protected flags, location, join date, avatar and banner.
action_id: x_profile · Credits: 2 / call · Returns: 1 item
| Parameter | Type | Description |
|---|---|---|
action_id required | string | Set to x_profile |
params.username required | string | X username (with or without @) or profile URL. |
Request
{
"action_id": "x_profile",
"params": {
"username": "NASA"
}
}Response — data.data of the completed job (trimmed):
{
"user_id": "11348282",
"username": "NASA",
"name": "NASA",
"bio": "Making the seemingly impossible, possible. ✨",
"followers": 92321820,
"following": 115,
"tweets": 74427,
"likes": 17030,
"media": 28197,
"listed": 96885,
"verified": true,
"protected": false,
"location": "Pale Blue Dot",
"created_at": "2007-12-19T20:20:32Z",
"profile_image_url": "https://pbs.twimg.com/profile_images/1321163587679784960/0ZxKlEKB_normal.jpg",
"banner_url": "https://pbs.twimg.com/profile_banners/11348282/1788992290"
}User Posts
Get an X user's latest posts (all the most recent ones available, about 15-20): text, date, likes, reposts, replies, quotes, views, bookmarks and media links.
action_id: x_user_tweets · Credits: 2 / call · Returns: 20 tweets
| Parameter | Type | Description |
|---|---|---|
action_id required | string | Set to x_user_tweets |
params.username required | string | X username or profile URL. |
Request
{
"action_id": "x_user_tweets",
"params": {
"username": "NASA"
}
}Response — data.data of the completed job (trimmed):
{
"username": "NASA",
"tweets": [
{
"tweet_id": "2110491624337760703",
"url": "https://x.com/NASA/status/2110491624337760703",
"author_username": "NASA",
"text": "There's work to be done 🛠️\n\nJoin us on Oct. 20 for a preview of two upcoming spacewalks in which astronauts will install solar arrays to give the @Space_Stat…",
"created_at": "2026-10-14T22:03:08Z",
"likes": 1668,
"retweets": 232,
"replies": 108,
"quotes": 20,
"views": 516446,
"bookmarks": 72,
"lang": "en",
"media_urls": [
"https://pbs.twimg.com/media/HUn48qSW8AEmiHh.jpg"
]
},
{
"tweet_id": "2110389272024867195",
"url": "https://x.com/NASA/status/2110389272024867195",
"author_username": "NASA",
"text": "Have you seen our new episode of Planetary Defenders yet?\n\n\"This Is Not an Exercise,\" our latest documentary on the scientists who find asteroids before they…",
"created_at": "2026-10-14T15:16:26Z",
"likes": 897,
"retweets": 119,
"replies": 76,
"quotes": 11,
"views": 307444,
"bookmarks": 61,
"lang": "en",
"media_urls": [
"https://pbs.twimg.com/media/HUmb2vRWwAAFQ3D.jpg"
]
},
"… 18 more"
],
"count": 20,
"message": null
}Post Details
Get one X post: text, author, date, likes, reposts, replies, quotes, views, bookmarks, language and media links.
action_id: x_tweet_detail · Credits: 2 / call · Returns: 1 item
| Parameter | Type | Description |
|---|---|---|
action_id required | string | Set to x_tweet_detail |
params.tweet_url required | string | Link to the post (https://x.com/<user>/status/<id>). |
Request
{
"action_id": "x_tweet_detail",
"params": {
"tweet_url": "https://x.com/NASA/status/2107566197579341846"
}
}Response — data.data of the completed job (trimmed):
{
"tweet_id": "2107566197579341846",
"url": "https://x.com/NASA/status/2107566197579341846",
"author_username": "NASA",
"text": "After delivering science and supplies to the @Space_Station earlier this year, Northrop Grumman's Cygnus XL cargo spacecraft is scheduled to depart on Friday…",
"created_at": "2026-10-06T20:18:32Z",
"likes": 3805,
"retweets": 494,
"replies": 174,
"quotes": 30,
"views": 2873443,
"bookmarks": 157,
"lang": "en",
"media_urls": [
"https://pbs.twimg.com/media/HT-USaWXsAAUp55.jpg"
]
}Post Search
Search recent X posts by keyword (20 by default, up to 1,000, latest first) with text, author, date and engagement counts.
action_id: x_search · Credits: 16 for up to 20 results, +2 per extra result (max 1000) · Returns: up to limit tweets (default 20)
| Parameter | Type | Description |
|---|---|---|
action_id required | string | Set to x_search |
params.query required | string | Keywords; X search operators work too. |
params.limit | integer | How many posts to return, 1 to 1000. Up to 20 costs 16 credits; each post beyond 20 adds 2 credits. Default 20 |
Request
{
"action_id": "x_search",
"params": {
"query": "nasa artemis",
"limit": 20
}
}Response — data.data of the completed job (trimmed):
{
"query": "nasa artemis",
"tweets": [
{
"tweet_id": "2110677738440872375",
"url": "https://x.com/theSpacecyborg/status/2110677738440872375",
"author_username": "theSpacecyborg",
"text": "Christina Koch leaves the flight roster.\n\n@NASA named her acting deputy chief engineer from 1 Nov.\n• Succeeds Van Hooser (retires 21 Oct, 35+ yrs)\n• Manageme…",
"created_at": "2026-10-15T10:22:41Z",
"likes": 0,
"retweets": 0,
"replies": 0,
"quotes": 0,
"views": 4,
"bookmarks": 0,
"lang": "en",
"media_urls": []
},
{
"tweet_id": "2110675966385123399",
"url": "https://x.com/cosmos4u/status/2110675966385123399",
"author_username": "cosmos4u",
"text": "@astro_reid @NASA Go ... away from being an astronaut: now the whole crew of Artemis II is history. Was this all planned before the launch? And has there bee…",
"created_at": "2026-10-15T10:15:39Z",
"likes": 0,
"retweets": 0,
"replies": 0,
"quotes": 0,
"views": 7,
"bookmarks": 0,
"lang": "en",
"media_urls": []
},
"… 18 more"
],
"count": 20,
"message": null
}Cost: 16 credits for up to 20 results; each result beyond 20 adds 2 credits, up to
limit: 1000.