Threads API endpoint
Lists public posts from the profile's Threads tab by `username`. Each item has its code, URL, text, creation time, image and video URLs, like, reply, repost and quote counts, reply flag and author. When `has_more` is true, pass `next_cursor` unchanged as `cursor` to fetch the next page; `pagination_limited` is true if Threads withholds a usable cursor.
/threads/profile/{username}/postsMCP tool: threads_profile_posts
username (required): Threads username, with or without the leading @.cursor (optional): opaque next_cursor returned by the previous response.Returns public posts in the profile's Threads tab, including attached topic/community metadata when available. When has_more is true, pass next_cursor unchanged to retrieve the next page. pagination_limited is true if Threads reports more posts but withholds a usable cursor. This tab accepts username and the optional pagination cursor; the public page exposes no additional sort or filter controls.
| Field | Filled in, of 10 checked | Values in the sample |
|---|---|---|
| id | 10 | |
| code | 10 | |
| url | 10 | threads.com |
| text | 10 | median 166 characters |
| author | 10 | |
| created_at | 10 | 2026-09-25 to 2026-10-12 |
| like_count | 10 | 61 to 5,104, median 614 |
| reply_count | 10 | 3 to 2,641, median 39 |
| repost_count | 10 | 2 to 269, median 19 |
| quote_count | 7 | 1 to 156, median 34 |
| image_urls | 4 | median 1 entry |
| is_reply | 6 | true in 6 of 6 |
| reply_to | 6 | |
| video_urls | 2 | median 1 entry |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| username (path) | string | Yes | Threads username | zuck | |
| cursor | string | No | Opaque cursor returned by the previous response | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/threads/profile/zuck/posts" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"username": "zuck",
"items": [
{
"id": "123",
"code": "ABC123",
"url": "https://www.threads.com/@zuck/post/ABC123",
"text": "Example post",
"author": {
"username": "zuck"
}
}
],
"has_more": true,
"next_cursor": "opaque-cursor"
}
}Request schema
No body schema
Response schema
#/definitions/threads.profilePostsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | threads.ProfilePostsResult | No | ||||
| data.has_more | boolean | No | ||||
| data.items | array | No | Thread record, 26 fields: author, code, created_at, id, image_urls, is_reply, like_count, quote_count, reply_count, reply_to, repost_count, text and 3 more. Described under Search Threads API. | |||
| data.next_cursor | string | No | Cursor to pass to fetch the next page when Threads provides one. | |||
| data.pagination_limited | boolean | No | True when Threads reports more posts but does not provide a usable cursor. | |||
| data.username | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Invalid username or cursor | #/definitions/app.Response |
| 404 | Profile not found | #/definitions/app.Response |
| 503 | Upstream error or parser drift | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/threads/profile/zuck/posts" \
-H "x-api-key: $CRAWLORA_API_KEY"