One post by ID or link: text, media, views, likes, reposts and replies.
Canonical page: https://okdata.online/apis/x/posts/get/
- Endpoint:
GET /v1/x/posts/get - ID:
x.posts.get - Price: $0.0003 per call
- Returns: one Post object (
data.item) - Status: preview
- Good for: Competitor monitoring, Content research
One call costs $0.0003 and returns one post. 1,000 lookups cost $0.30. Failed calls are not charged.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
id |
string | no | The post ID. Give id or url. (e.g. 1850000000000000000) |
|
url |
string | no | A share link or page URL; the ID is read from it. (e.g. https://x.com/user/status/1850000000000000000) |
|
view |
string: compact / standard / full | no | standard |
How much of each object comes back. full adds platform-specific fields under ext. |
fields |
string[] | no | Fields to keep, by path (author.name), to save tokens. In a query string: comma-separated. |
Give id or url; one of the two is enough. cursor, view and fields work as described in Requests.
Each item is a Post.
| Field | Type | Description |
|---|---|---|
id |
string | Post ID on the platform. |
url |
string | Link to the post. |
type |
string | What kind of post it is. |
title |
string | null | Title, where the platform has one (videos, notes, articles). |
text |
string | Caption, body or description as plain text; articles come as Markdown. |
lang |
string | null | Language code, as reported or detected. |
published_at |
string | null | When it was published, ISO 8601 in UTC; null only where the source gives no time (wechat_mp.articles.metrics, wechat_channels.videos.metrics, youtube.channels.videos.list with type=short), then listed in meta.unavailable. |
author |
AccountRef | Who posted it. |
metrics |
Metrics | Counts at fetch time; a count the platform hides is null. |
images |
string[] | null | Image URLs for image posts and notes. |
hashtags |
string[] | null | Hashtags or topics, without the # sign. |
ext |
object | Platform-specific extras. Only returned with view=full. |
curl -G "https://api.okdata.online/v1/x/posts/get" \
-H "Authorization: Bearer $OKDATA_API_KEY" \
--data-urlencode 'id=1850000000000000000'import os
import requests
resp = requests.get(
"https://api.okdata.online/v1/x/posts/get",
headers={"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"},
params={"id": "1850000000000000000"},
timeout=60,
)
body = resp.json()
if body["code"] != "ok":
raise RuntimeError(f"{body['code']}: {body['message']} (charged: {body['charged']})")
row = body["data"]["item"]
print(row["id"], row["metrics"]["likes"], row["text"][:60])
print("cost: $" + body["meta"]["billing"]["amount"])const url = new URL('https://api.okdata.online/v1/x/posts/get');
url.searchParams.set('id', "1850000000000000000");
const res = await fetch(url, {
headers: {
Authorization: `Bearer ${process.env.OKDATA_API_KEY}`,
},
});
const body = await res.json();
if (body.code !== 'ok') throw new Error(`${body.code}: ${body.message}`);
const row = body.data.item;
console.log(row.id, row.metrics.likes, row.text.slice(0, 60));
console.log('cost: $' + body.meta.billing.amount);{
"name": "call",
"arguments": {
"capability": "x.posts.get",
"id": "1850000000000000000"
}
}Or ask an agent that has the MCP server connected:
Use X post detail and list the five posts with the most likes, with links.
{
"code": "ok",
"request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
"data": {
"item": {
"id": "1856012345678901234",
"url": "https://x.com/trailkit/status/1856012345678901234",
"type": "text",
"title": null,
"text": "Shipped the lighter tent today. 1.1 kg packed, same footprint.",
"lang": "en",
"published_at": "2026-11-02T09:30:00Z",
"author": {
"id": "1450012345678901248",
"username": "trailkit",
"name": "Trail Kit",
"avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
"followers": 18230,
"verified": true
},
"metrics": {
"views": 1250000,
"likes": 48200,
"comments": 1312,
"shares": null,
"favorites": 9650,
"reposts": 640
},
"images": null,
"hashtags": null
}
},
"warnings": [],
"meta": {
"capability": "x.posts.get",
"billing": {
"amount": "0.0003",
"currency": "USD",
"balance_after": "9.9997"
},
"unavailable": {
"metrics.shares": "platform"
},
"cached": false,
"replayed": false,
"fetched_at": "2026-11-11T08:00:00Z"
}
}Errors share one shape: code, request_id, message and message_zh (a fixed sentence per code), charged, retry, retry_after_seconds, param and docs_url, with the specifics in problems. They are not charged; only settlement_unknown is unknown until looked up. The full table: https://okdata.online/docs/errors/
One call costs $0.0003 and returns one post. 1,000 lookups cost $0.30. Failed calls are not charged.
Yes. Put the link in url and okdata reads the ID from it. Short share links work too.
No. You send only your okdata API key. The data is public data from X (Twitter); nothing is fetched with your own X (Twitter) account.
No. Every error response says charged: false, except a timeout, which says charged: null until the outcome is known. Resend with the same Idempotency-Key and you are never charged twice.
The field is null, and meta.unavailable names it with the reason: platform (the platform never shows it) or capability (we cannot fetch it yet).
- X post search: $0.002 per call · about 20 posts per page
- X account profile: $0.0004 per account · at most $0.04 per call
- X account posts: $0.002 per call · about 20 posts per page
- X trending topics: $0.009 per call · about 30 board entries per page
- X post replies: $0.002 per call · about 35 posts per page
- X post quotes: $0.0003 per post · at most $0.006 per call
- X post retweeters: $0.002 per call · about 100 accounts per page
- X article: $0.002 per call
- X thread: $0.0003 per post · at most $0.015 per call
- X account search: $0.0004 per account · at most $0.008 per call
- X account followers: $0.0001 per account · at most $0.02 per call
- X account following: $0.0001 per account · at most $0.02 per call
- X account mentions: $0.0003 per post · at most $0.006 per call
- X list posts: $0.002 per call · about 100 posts per page
- X list members: $0.0004 per account · at most $0.008 per call
- X list followers: $0.0004 per account · at most $0.008 per call
- X community profile: $0.0004 per call
- X community posts: $0.0003 per post · at most $0.006 per call
- X community members: $0.0004 per account · at most $0.008 per call