Overview
Public social media data from 10 platforms, 62 actions, one API — profiles, posts, comments, followers and search as JSON
Social Media Data gives you public data from TikTok, Instagram, X (Twitter), LinkedIn, Facebook, YouTube, Reddit, Threads, Pinterest and Snapchat through one API. Profiles, posts, comments, followers, videos, jobs, ads and search — each a single call that returns structured JSON with parsed fields, not HTML.
No scrapers to maintain, no proxies, no logins. Every action here reads public data, so you never hand us an account.
Platforms
| Platform | Actions | What you get |
|---|---|---|
| TikTok | 6 | Profiles, videos, comments, keyword search and transcripts. |
| 6 | Profiles, posts, post detail, comments, hashtag search and followers. | |
| X (Twitter) | 4 | Profiles, user tweets, tweet detail and keyword search. |
| 14 | People, companies, posts, comments, jobs, ads and people search. | |
| 4 | Pages, page posts, comments and the Meta Ad Library. | |
| YouTube | 6 | Search, video details, channels, comments, related videos and suggestions. |
| 7 | Post search, subreddit feeds, post details with comments, subreddit and user info. | |
| Threads | 9 | Profiles, posts, replies, thread details, account search and the public feed. |
| 4 | Profiles, pin detail, board pins and search. | |
| Snapchat | 2 | Public profiles and Spotlight videos. |
See every action with its action_id, credits and a real response.
Explore
All actions
Every platform, action_id, params and response — start here
Pricing
A lookup is 2 credits; social data plans from $19/mo
Wire Task API
The POST /v1/wire/task + poll endpoints every action uses
Webhooks
Get a signed event when a job completes instead of polling
How it works
Each action is a Wire action you call with one endpoint. Three steps:
- Get an API key — from Settings → API Keys in the dashboard. Pass it as
X-API-Keyon every request. - Submit a call —
POST /v1/wire/taskwith the action'saction_idandparams. It returns ajob_idright away. - Collect the result —
GET /v1/wire/jobs/{job_id}untilstatus: "completed", or add awebhook_urland receive a signedwire.job.completedevent. Most social calls finish in 5–20 seconds.
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": "tiktok_profile", "params": {"username": "khaby.lame"}}'import requests, time
res = requests.post('https://api.anakin.io/v1/wire/task', headers={'X-API-Key': 'your_api_key'},
json={"action_id": "tiktok_profile", "params": {"username": "khaby.lame"}})
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": "tiktok_profile", "params": {"username": "khaby.lame"}}) });
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);What comes back
The job result wraps the action's output in a fixed envelope. data.status tells you whether the action succeeded; data.data holds the fields documented on each action.
{
"status": "completed",
"credits_used": 2,
"execution_ms": 3182,
"data": {
"status": "ok",
"data": {
"username": "khaby.lame",
"nickname": "Khabane lame",
"user_id": "127905465618821121",
"bio": "Se vuoi ridere sei nel posto giusto😎 If u wanna laugh u r in the right place😎",
"verified": true,
"followers": 163000000,
"following": 81,
"likes": 2700000000,
"videos": 1358,
"avatar_url": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-avt-0068-tx2/08987e23b94057953fd4f1738694bf5f~tplv-tiktokx-cropcenter:1080:1080.jpeg?…",
"profile_url": "https://www.tiktok.com/@khaby.lame"
},
"files": [],
"error": null,
"meta": {
"action_id": "tiktok_profile",
"catalog_slug": "tiktok",
"execution_ms": 3058,
"envelope_version": "v1"
}
}
}| Field | Type | Description |
|---|---|---|
status | string | Job status: processing, completed or failed |
credits_used | number | Credits charged for this call (0 when it failed) |
data.status | string | "ok", or "error" with data.error set |
data.data | object | The action's output — see the action for its fields |
data.error | string | null | A short message when the action could not get the data (private account, not found, rate-limited) |
data.meta | object | action_id, catalog_slug and the envelope version |
Paging, limits and cost
- Paged actions (feeds, comments, search) return one page per call plus
next_cursor. Pass it back ascursorfor the next page; it'snullwhen there are no more. Reddit usesafterthe same way; LinkedIn people search usespage. limitactions let you ask for more than the default page in one call. The price grows withlimit— the formula is on each action and on Pricing.- A standard lookup is 2 credits — one profile, one post, one page. Credits come from your social data plan and your one Anakin balance; see Pricing.
- Only successful calls are charged. A failed job refunds its credits automatically.
Errors
Submit-time errors (bad action_id, not enough credits) come back as HTTP errors from POST /v1/wire/task. Data-time problems — a private or deleted account, a post that no longer exists — complete the job with data.status: "error" and a one-line data.error, and are not charged.
Related
- Product — Social Media Data API: plans, platforms and the live demo
- API — Wire: catalogs, tasks, jobs and webhooks