X / Twitter Thread API
Resolve the linear self-thread containing an X (Twitter) post, from its root through the author's linked continuations. This excludes replies from other users.
$3.75/1k req, pay per request, no subscription.
Post
Jonah Ruiz
@buildwithjonah
Spent the last 6 months building a data pipeline that normalizes 40 scraper APIs into one schema. Here is what broke, and what I would do differently. A thread.
4:00 PM · Sep 26, 2024 · 284K Views
Jonah Ruiz@buildwithjonah
First lesson: every provider's error format is different. We ended up writing a translation layer just to know whether a failure meant retry, or never retry.
{"id":Â "1842093771280384512","url":Â "https://x.com/buildwithjonah/status/1842093771280384512","text":Â "Spent the last 6 months building a data pipeline that normalizes 40 scraper APIs into one schema. Here is what broke, and what I would do differently. A thread.","conversationId":Â "1842093771280384512","inReplyToId":Â null,"authorId":Â "1401882093771280384","authorHandle":Â "buildwithjonah","authorName":Â "Jonah Ruiz",+11 more fields}
Pricing
X / Twitter Thread API pricing
Try it
Get X / Twitter thread in one request
{
"found": true,
"data": {
"conversationId": "1842093771280384512",
"threadLength": 3,
"complete": true,
"author": {
"id": "1401882093771280384",
"handle": "buildwithjonah",
"name": "Jonah Ruiz"
},
"tweets": [
{
"id": "1842093771280384512",
"url": "https://x.com/buildwithjonah/status/1842093771280384512",
"text": "Spent the last 6 months building a data pipeline that normalizes 40 scraper APIs into one schema. Here is what broke, and what I would do differently. A thread.",
"conversationId": "1842093771280384512",
"inReplyToId": null,
"authorId": "1401882093771280384",
"authorHandle": "buildwithjonah",
"authorName": "Jonah Ruiz",
"media": [],
"createdUtc": 1727366400,
"likeCount": 3820,
"replyCount": 96,
"repostCount": 412,
"quoteCount": 28,
"viewCount": 284000,
"bookmarkCount": 1540,
"lang": "en",
"isReply": false,
"source": "Twitter Web App"
},
{
"id": "1842093771280450048",
"url": "https://x.com/buildwithjonah/status/1842093771280450048",
"text": "First lesson: every provider's error format is different. We ended up writing a translation layer just to know whether a failure meant retry, or never retry.",
"conversationId": "1842093771280384512",
"inReplyToId": "1842093771280384512",
"authorId": "1401882093771280384",
"authorHandle": "buildwithjonah",
"authorName": "Jonah Ruiz",
"media": [
{
"type": "photo",
"url": "https://pbs.twimg.com/media/F9k2QoQWkAA_error_flow.jpg",
"width": 1600,
"height": 900
}
],
"createdUtc": 1727366460,
"likeCount": 1240,
"replyCount": 31,
"repostCount": 88,
"quoteCount": 5,
"viewCount": 91000,
"bookmarkCount": 512,
"lang": "en",
"isReply": true,
"source": "Twitter Web App"
},
{
"id": "1842093771280516096",
"url": "https://x.com/buildwithjonah/status/1842093771280516096",
"text": "Second lesson: pagination cursors are never portable across providers. We had to build our own cursor abstraction to keep client code simple.",
"conversationId": "1842093771280384512",
"inReplyToId": "1842093771280450048",
"authorId": "1401882093771280384",
"authorHandle": "buildwithjonah",
"authorName": "Jonah Ruiz",
"media": [],
"createdUtc": 1727366520,
"likeCount": 980,
"replyCount": 22,
"repostCount": 64,
"quoteCount": 3,
"viewCount": 68000,
"bookmarkCount": 401,
"lang": "en",
"isReply": true,
"source": "Twitter Web App"
}
],
"url": "https://x.com/buildwithjonah",
"verified": true,
"blueVerified": true,
"avatarUrl": "https://pbs.twimg.com/profile_images/1401882093771280384/jonah_400x400.jpg",
"coverUrl": "https://pbs.twimg.com/profile_banners/1401882093771280384/1700000000",
"bio": "Building data infra. Previously eng @Segment. Writing about pipelines and APIs.",
"location": "Denver, CO",
"followers": 41200,
"following": 512,
"createdUtc": 1517443200
}
}Full parameter and response reference - every field, type, and example for this endpoint.
Reference
One request, one response shape.
Every field you send and every field you get back, each with a real example.
Last verified 2026-10-06 · uptime and latency measured over 30d
Request body
JSON, posted to this endpoint.
- urlstring
https://x.com/buildwithjonah/status/1842093771280384512
Canonical x.com or twitter.com status URL with a numeric tweet ID. Any tweet in the self-thread can be supplied; the provider resolves the thread root.
Response
JSON, one example value per field.
- foundboolean
true
- conversationIdstring
1842093771280384512
- threadLengthnumber
3
- completeboolean
true
- urlstring
https://x.com/buildwithjonah
- verifiedboolean
true
- blueVerifiedboolean
true
- avatarUrlstring
https://pbs.twimg.com/profile_images/1401882093771280384/jonah_400x400.jpg
- coverUrlstring
https://pbs.twimg.com/profile_banners/1401882093771280384/1700000000
- biostring
Building data infra. Previously eng @Segment. Writing about pipelines and APIs.
- locationstring
Denver, CO
- followersnumber
41200
- followingnumber
512
- createdUtcnumber
1517443200
- idstring
1401882093771280384
- handlestring
buildwithjonah
- namestring
Jonah Ruiz
- idstring
1842093771280384512
- urlstring
https://x.com/buildwithjonah/status/1842093771280384512
- textstring
Spent the last 6 months building a data pipeline that normalizes 40 scraper APIs into one schema. Here is what broke, and what I would do differently. A thread.
- conversationIdstring
1842093771280384512
- inReplyToIdnull
null
- authorIdstring
1401882093771280384
- authorHandlestring
buildwithjonah
- authorNamestring
Jonah Ruiz
- mediaarray
- createdUtcnumber
1727366400
- likeCountnumber
3820
- replyCountnumber
96
- repostCountnumber
412
- quoteCountnumber
28
- viewCountnumber
284000
- bookmarkCountnumber
1540
- langstring
en
- isReplyboolean
false
- sourcestring
Twitter Web App
FAQ
About the X / Twitter Thread API
The AnyAPI X / Twitter Thread API returns X / Twitter thread data as normalized JSON from one POST call to /v1/run/twitter.thread. Resolve the linear self-thread containing an X (Twitter) post, from its root through the author's linked continuations. This excludes replies from other users. AnyAPI returns one normalized schema whichever source serves it. It costs from $3.75 per 1,000 requests, in US dollars with no subscription and no monthly minimum. Over the last 30 days, 97.8% of X / Twitter thread calls through AnyAPI succeeded, with a median response time of 3.7 seconds across 461 measured calls.