Skip to Content

Threads

Meta’s text-based social platform.

Unavailable engagement/profile counts and reply totals are null, not zero. Post responses include a nullable canonicalId (public shortcode) for stable identity across retrieval paths. Legacy numeric IDs remain accepted.

  • Post IDs: Use the shortcode (e.g. DQt-ox3kdE4) or numeric ID
  • User lookup: Use username for all user endpoints (profile, posts, replies)
  • Search scope: top is relevance-ranked; recent is chronological through the managed provider boundary; cursor pagination is unavailable
  • Result counts: Requested counts are maximums, not guaranteed matches.

Posts

GET /threads/posts/:id — 2 credits

Get a single post by shortcode or ID. Fields unavailable from the provider, including views, may be null.

ParamTypeRequiredDefaultDescription
idstringYesThreads post shortcode or numeric ID
curl -H "x-api-key: sk_byc_xxx" \ https://api.bycrawl.com/threads/posts/DQt-ox3kdE4

Response

{ "id": "3759936745132642616", "mediaId": "18062699315155466", "code": "DQt-ox3kdE4", "canonicalId": "DQt-ox3kdE4", "dedupKey": "threads:post:DQt-ox3kdE4", "text": "Priscilla and I started CZI almost 10 years ago...", "user": { "id": "314216", "username": "zuck", "profilePic": "https://...", "isVerified": true }, "media": [], "views": null, "stats": { "likes": 818, "replies": 927, "quotes": 16, "reposts": 112, "shares": 119 }, "createdAt": "2025-11-06T14:30:09.000Z", "replyTo": null, "threadChain": [], "isReply": false }

GET /threads/posts?ids=a,b,c — 2 credits per item

Batch get multiple posts. The request fails explicitly if any requested post cannot be retrieved after all configured provider fallbacks; successful arrays never contain hidden per-item error placeholders.

ParamTypeRequiredDefaultDescription
idsstringYesComma-separated post IDs or shortcodes
curl -H "x-api-key: sk_byc_xxx" \ "https://api.bycrawl.com/threads/posts?ids=DQt-ox3kdE4,DQEmdfkkSNE"

Response

[ { "id": "3759936745132642616", "mediaId": "18062699315155466", "code": "DQt-ox3kdE4", "canonicalId": "DQt-ox3kdE4", "dedupKey": "threads:post:DQt-ox3kdE4", "text": "Priscilla and I started CZI almost 10 years ago...", "user": { "id": "314216", "username": "zuck", "profilePic": "https://...", "isVerified": true }, "media": [], "views": 166996, "stats": { "likes": 818, "replies": 927, "quotes": 16, "reposts": 112, "shares": 119 }, "createdAt": "2025-11-06T14:30:09.000Z", "replyTo": null, "threadChain": [], "isReply": false } ]

GET /threads/posts/:id/replies — 3 credits

Get replies to a Threads post. totalReplies is null when unknown; a numeric value is an observed total, not an exhaustive-retrieval guarantee. hasMore indicates truncation. Pagination beyond the first batch is not supported.

ParamTypeRequiredDefaultDescription
maxbooleanNofalseUse authenticated mode for enhanced data
curl -H "x-api-key: sk_byc_xxx" \ "https://api.bycrawl.com/threads/posts/DW4Gb79kQc0/replies"

Response

{ "rootPost": { "id": "3870872187813562164", "code": "DW4Gb79kQc0", "text": "Original post text...", "user": { "id": "314216", "username": "zuck", "profilePic": "https://...", "isVerified": true }, "stats": { "likes": 2613, "replies": 476, "quotes": 55, "reposts": 189, "shares": 336 }, "createdAt": "2026-04-09T14:00:00.000Z" }, "replies": [ { "id": "3870872993254359647", "code": "DW4Hqm0AMge", "text": "This is a reply to the original post", "user": { "id": "63125302142", "username": "justincookphoto", "profilePic": "https://...", "isVerified": false }, "media": [], "stats": { "likes": 92, "replies": 5, "quotes": 0, "reposts": 0, "shares": 0 }, "createdAt": "2026-04-09T15:00:00.000Z", "replyTo": null, "threadChain": [], "isReply": true } // ...more items ], "totalReplies": 476, "hasMore": true }

GET /threads/posts/search?q=xxx — 3 credits per call (top and recent)

Search posts by keyword. top uses the public relevance page. recent uses a provider that supports true chronological search rather than re-sorting a relevance-only sample.

ParamTypeRequiredDefaultDescription
qstringYesSearch keyword
countintegerNo10Maximum posts to return (max 25 for top, 200 for recent)
search_typestringNotoptop (relevance) or recent (chronological)
sincestringNoISO date/time lower bound for recent
untilstringNoISO date/time upper bound for recent

Both top and recent use managed retrieval with bounded recovery. Recent never falls back to relevance-only results. If retrieval fails without usable data, the request fails. A valid short or empty result is not an error.

Inspect search.partial, reason, requestedCount and returnedCount. Incomplete retrieval preserves collected posts with partial: true and reason: "incomplete_results"; otherwise reason is null. partial: false is not an exhaustive-recall guarantee. Date bounds are filtered locally; keyword matching is not exact-phrase matching. Acquisition diagnostics are internal: source, sources and fallbackAttempted are no longer returned. Use canonicalId (the public shortcode) for persistent identity and post/replies/batch lookups, or dedupKey (threads:post: plus shortcode) for namespaced deduplication. Existing id values remain compatible but can differ between retrieval paths. When neither a shortcode nor a valid Threads permalink is available, canonicalId and dedupKey are null; retain the original id without assuming cross-source equality.

Identical searches share a cache for up to 60 seconds; recovery results may use a shorter cache. top and recent have separate keys. Concurrent identical searches share work across workers. Coordination outages return a temporary service error rather than starting duplicate upstream work; retry with backoff. Each successful API request is still billed normally, including cache hits.

Unavailable engagement stats are null, never invented zeros. Numeric values represent observed counts. Search cursors are not returned because this endpoint does not accept pagination.

Both top and recent cost 3 credits per successful request, regardless of count or the number of matches returned. Failed requests are refunded by the Gateway.

curl -H "x-api-key: sk_byc_xxx" \ "https://api.bycrawl.com/threads/posts/search?q=threads&search_type=recent"

Response

{ "posts": [ { "id": "3847614751430661572", "mediaId": "17913742854319868", "code": "DVleTsbk9XE", "text": "Artists! Show me your most recent artwork!...", "user": { "id": "63436967516", "username": "koshino.yoshihiro", "profilePic": "https://...", "isVerified": true }, "media": [], "stats": { "likes": 41, "replies": 118, "quotes": 0, "reposts": 0, "shares": 0 }, "createdAt": "2026-03-07T13:50:42.000Z" } // ...more items ] }

Users

GET /threads/users/:username — 2 credits

Get user profile.

ParamTypeRequiredDefaultDescription
usernamestringYesThreads username
curl -H "x-api-key: sk_byc_xxx" \ https://api.bycrawl.com/threads/users/zuck

Response

{ "id": "314216", "username": "zuck", "fullName": "Mark Zuckerberg", "profilePic": "https://...", "bio": "I build stuff", "isVerified": true, "followerCount": 5439848, "followingCount": 0 }

GET /threads/users/:username/posts — 2 credits

Get the first public SSR batch of a user’s posts. Custom counts and pagination are unavailable.

This is not a complete post history. Repeating the request fetches the first batch again, not a next page. No usable cursor or completeness flag is returned; do not interpret a short or empty batch as proof that the account has no older posts. Passing cursor, count, page, after, before, limit or offset returns HTTP 400.

ParamTypeRequiredDefaultDescription
usernamestringYesThreads username
curl -H "x-api-key: sk_byc_xxx" \ https://api.bycrawl.com/threads/users/zuck/posts

Response

{ "posts": [ { "id": "3759936745132642616", "code": "DQt-ox3kdE4", "text": "Priscilla and I started CZI almost 10 years ago...", "user": { "id": "314216", "username": "zuck", "profilePic": "https://...", "isVerified": true }, "stats": { "likes": 818, "replies": 927, "quotes": 16, "reposts": 112, "shares": 119 }, "hasMedia": false, "createdAt": "2025-11-06T14:30:09.000Z" } // ...more items ] }

GET /threads/users/:username/replies — 2 credits

Get the first public SSR batch of a user’s replies. Custom counts and pagination are unavailable.

ParamTypeRequiredDefaultDescription
usernamestringYesThreads username

Response

{ "replies": [ { "type": "others", "replyId": "3848726738042452746", "replyCode": "DVpbJOqkXsK", "replyText": "Congrats! This is wild...", "replyTimestamp": "2026-03-09T02:40:01.000Z", "stats": { "likes": 60, "replies": 12, "quotes": 0, "reposts": 0, "shares": 5 }, "replier": { "id": "314216", "username": "zuck", "profilePic": "https://...", "isVerified": true }, "replyTo": { "postId": "3848622568860907884", "postCode": "DVpDdXjgXls", "postText": "Original post text...", "postUrl": "https://www.threads.com/@otheruser/post/DVpDdXjgXls", "author": { "id": "63215166896", "username": "otheruser", "profilePic": "https://...", "isVerified": true } } } // ...more items ] }

GET /threads/users/search?q=xxx — 2 credits

Search users by username or name.

ParamTypeRequiredDefaultDescription
qstringYesSearch query

Response

{ "users": [ { "id": "314216", "username": "zuck", "fullName": "Mark Zuckerberg", "profilePic": "https://...", "isVerified": null }, { "id": "43015418666", "username": "zuckubus", "fullName": "Memes | Comedy | Entertainment", "profilePic": "https://...", "isVerified": null } // ...more items ] }

Feed

GET /threads/feed/public — 2 credits

Get public For You feed.

ParamTypeRequiredDefaultDescription
countintegerNo10Number of items to return

Response

{ "posts": [ { "id": "3847150142294366101", "code": "DVj0qvdDJeV", "text": "Why they ain't got on no white gloves touching...", "user": { "id": "63446067958", "username": "candicebenbow", "profilePic": "https://...", "isVerified": true }, "stats": { "likes": 42, "replies": 3, "reposts": 2, "quotes": 0, "shares": 0 }, "createdAt": "2026-03-06T22:27:36.000Z", "media": [] } // ...more items ] }
Last updated on