/v1/detail"platform": "x"X (Twitter) Detail API
One post by ID or link.
Get any public X post by ID or link and get back text, author, likes, comment count, views and publish time, as JSON over HTTP or from your AI client over MCP. A call to the X (Twitter) Detail API costs 1 credit ($0.002 to $0.0033 depending on the pack), failed calls are free, and the response has the same format as every other call. Last tested 2026-10-28.
Last updated:
What you get from the X (Twitter) Detail API.
From a recorded answer.
A recorded call returned the object below, field by field. Names and text are removed from the sample; the numbers are as recorded.
Lighter for your AI: the same recorded data (1 item) is about 1,464 tokens as the platform's raw JSON and about 424 as this interface returns it, 71% fewer (measured 2026-11-06). How it was measured
| Field | In the recorded answer |
|---|---|
| url | removed from the sample |
| format | video |
| title | null: X cannot give it |
| text | removed from the sample |
| published_at | 2026-10-08T14:10:00.000Z |
| author.id | removed from the sample |
| author.username | removed from the sample |
| author.name | removed from the sample |
| author.verified | true |
| author.followers | 932,620 |
| metrics.likes | 155 |
| metrics.comments | 7 |
| metrics.shares | null: X cannot give it |
| metrics.collects | 11 |
| metrics.views | 10,638 |
| metrics.reposts | 40 |
| images | empty list |
| hashtags | empty list |
| is_pinned | null: X cannot give it |
1 credit a call (≈ $0.002–$0.0033): about 3,000 calls for $10.
X (Twitter) Detail API: request and response
curl https://api.socialtoai.com/v1/detail \ -H "Authorization: Bearer $SOCIALTOAI_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ "platform": "x", "id": "2108198226532708497" }'import osimport uuidimport requestsresponse = requests.post( "https://api.socialtoai.com/v1/detail", headers={ "Authorization": f"Bearer {os.environ['SOCIALTOAI_API_KEY']}", # A new key for each request; the same one again retries it without paying twice. "Idempotency-Key": str(uuid.uuid4()), }, json={ "platform": "x", "id": "2108198226532708497", },)print(response.json())# Connected over MCP? Ask in plain words.Read this X post: 2108198226532708497# Your AI calls the detail tool with:{ "platform": "x", "id": "2108198226532708497"}value{ "platform": "x", "status": "ok", "items": [ { "platform": "x", "id": "…", "ref": "…", "approx": [], "type": "content", "url": "https://example.com/…", "format": "video", "title": null, "text": "…", "published_at": "2026-10-08T14:10:00.000Z", "author": { "id": "…", "username": "…", "name": "…", "verified": true, "followers": 932620 }, "metrics": { "likes": 155, "comments": 7, "shares": null, "collects": 11, "views": 10638, "reposts": 40 }, "images": [], "hashtags": [], "is_pinned": null } ], "unavailable": ["title", "metrics.shares", "is_pinned"], "cost_credits": 1}nullcollects 11views 10,638reposts 40Names and text were removed from the sample; the numbers are as recorded.
X (Twitter) Detail API parameters.
4 parameters, 1 required.
Send them as a JSON body with POST. Your key goes in the Authorization header, never in the URL.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| platform | string | Required | — | Always "x" on this page. |
| id | string | One of these | — | Post ID, a string of digits |
| url | string | One of these | — | Link to the post: an x.com or twitter.com link with /status/ in it |
| include | string | Optional | — | "transcript": the transcript of the video (2 credits)."transcript" |
Where to get what you send.
idPost ID, a string of digits (e.g. 2108198226532708497)
Every item these return carries its ref; send it as it is:
searchX (Twitter) Search APIsearch · sort=latestX (Twitter) Search APIuser_postsX (Twitter) User Posts APIcommunity_postsX (Twitter) community posts APIlist_postsX (Twitter) list posts APIquotesX (Twitter) post quotes APIthreadX (Twitter) thread context APImentionsX (Twitter) user mentions API
Or send the web link: the url field of the same items.
X (Twitter) Detail API response fields.
What X cannot give is marked.
| Field | Type | Meaning |
|---|---|---|
| items[].url | string | A link that opens the item. |
| items[].format | string | video, image, text or article. |
| items[].title | stringalways null | The title. |
| items[].text | string | The body text or caption. |
| items[].published_at | string | When it was published, ISO 8601 in UTC. |
| items[].author.id | string | The author's account ID. |
| items[].author.username | string | The author's handle. |
| items[].author.name | string | The author's display name. |
| items[].author.verified | boolean | Whether the author is verified. |
| items[].author.followers | integer | The author's follower count. |
| items[].metrics.likes | integer | Likes. |
| items[].metrics.comments | integer | Comments. |
| items[].metrics.shares | integeralways null | Shares. |
| items[].metrics.collects | integer | Saves. |
| items[].metrics.views | integer | Views or plays. |
| items[].metrics.reposts | integer | Reposts. |
| items[].images | string[] | Image addresses. |
| items[].hashtags | string[] | Hashtags, without the #. |
| items[].is_pinned | booleanalways null | Whether the author pinned it. |
nullFields X cannot giveRead null as “X did not give this”, not as zero. These are always null on this call:
titleThe title.metrics.sharesShares.is_pinnedWhether the author pinned it.
Send the parameter and the call returns something else:
include=transcriptthe transcript of the video2 creditsCompared with the Reddit Detail API, this call also gives author followers, saves, reposts, views and hashtags but does not give title or shares.
Every item also has platform, id, ref, approx and type; the response around the items is the same on every call. Response format
X (Twitter) Detail API: paging and billing.
5 calls per second per key, 20 after a purchase; going over is not charged. Rate limits
A failed call costs 0 credits and is never retried on its own. Error codes
“Last tested” above is the last day a real call of this interface succeeded. Each call reads from the platform, and fetched_at in the answer is when it was read. The same request sent again with the same key within 5 minutes is a replay (replayed: true): 0 credits, and the answer as first read.
Once connected over MCP, these questions use the X (Twitter) Detail API.
Read this X post: 2108198226532708497
1 creditdetail {"platform":"x","id":"2108198226532708497"}Read this X post: 2109760407824961716: the transcript of the video.
2 creditsdetail {"platform":"x","id":"2109760407824961716","include":"transcript"}Search X for posts about "weather forecast", then for the first 3: read this X post.
5 creditssearch {"platform":"x","query":"weather forecast"}detail {"platform":"x","id":"<ref>"} × 3
Give this to your AI.
Copy it into Claude or ChatGPT.
How to connectUse the SocialToAI MCP server (https://mcp.socialtoai.com/mcp) for this: Read this X post: 2108198226532708497Call the detail tool with {"platform":"x","id":"2108198226532708497"}. Needed: id, url.For several, call it once for each: 1 credit each.Before you start, work out how many credits it will take in all and ask me; call it only after I agree.What usually comes next, with the ref or username it returns: comments (Comments), call x.retweeters (Post retweeters).If SocialToAI is not connected yet, tell me how to connect it; never ask me to paste a key into the chat.Answer with a link to every item you used, and tell me how many credits it cost.Paste it into a chat once SocialToAI is connected over MCP. There is no key in it: Claude and ChatGPT sign in, other clients send a key in a header.
These ready-made tools call it when they run.
batch-statsOne row per link with its numbers as they are now. Links that no longer work are marked
The same call on other platforms.
All platforms and prices/v1/detail{ "platform": "x", "id": "2108198226532708497" }1 creditper callRead next.
What its own API allows, who can use it and what it costs, with sources.
X's official prices, with sources, and reading X per call instead
the numbers of hundreds of links in one job: prices per platform, what the free credits run, and what it stops for
Let your AI read X.