How to get Threads user posts
GET request to /v1/threads/user-posts with your input. You get clean JSON back in seconds for 2 credits per call — no OAuth, scraping or platform SDKs. Recent Threads posts — engagement{views,likes,replies,reposts,quotes}, threadId/isReply. Flat 2 credits.How to get Threads user posts (step by step)
- 1
Get a free API key
Create a free Captapi account (100 credits, no card) and generate an API key from the dashboard.
- 2
Call the Threads User Posts API
Send an authenticated GET request to /v1/threads/user-posts with your input. No OAuth, no scraping setup.
- 3
Read the JSON response
Parse the clean JSON response. Pass cache=true for a free 24h cache hit; default is always fresh.
Code example
curl "https://api.captapi.com/v1/threads/user-posts?url=https%3A%2F%2Fwww.threads.net%2F%40zuck" \
-H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."What the response looks like
{
"success": true,
"data": {
"handle": "zuck",
"author": {
"username": "zuck",
"displayName": "Mark Zuckerberg",
"verified": true,
"profileImage": "https://scontent-cdg4-2.cdninstagram.com/v/t51.82787-19/550174606_17925811725103224_8363667901743352243_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-cdg4-2.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2gHf4XJXymdRHno1xv4ZWDptPQ_F47AvofZR9ZypzIXJ5_ggqvnOJ4NFY10teCcuKSw&_nc_ohc=vLH8jAZMCqoQ7kNvwFFwBjL&_nc_gid=wkyjiyQ2aEsOml1qJ-3q-Q&edm=APs17CUBAAAA&ccb=7-5&oh=00_AQBvZqkyiiQ8DOAXcD-rNsrA7GYbSMXCSzCPUIBJWAPwew&oe=6A6E2ABE&_nc_sid=10d13b"
},
"totalReturned": 5,
"posts": [
{
"platform": "threads",
"id": "3937491905269768921",
"code": "DakyAavlKLZ",
"url": "https://www.threads.net/@zuck/post/DakyAavlKLZ",
"text": "Today we're releasing Muse Spark 1.1 -- a strong agentic and coding model at a very low price. It's available through our new Meta Model API and in Meta AI.",
"publishedAt": "2026-07-09T14:00:34.000Z",
"threadId": "3937491905269768921",
"replyToId": null,
"quoteId": null,
"isReply": false,
"isQuote": false,
"author": {
"username": "zuck",
"displayName": "Mark Zuckerberg",
"verified": true
},
"engagement": {
"views": null,
"likes": 2852,
"replies": 765,
"reposts": 196,
"quotes": 63
},
"media": []
},
{
"platform": "threads",
"id": "3937491928497827415",
"code": "DakyAwYFK5X",
"url": "https://www.threads.net/@zuck/post/DakyAwYFK5X",
"text": "Muse Spark 1.1 is strongest at agentic performance, tool use, and computer use. It does well on long-running tasks with 1M token context window, can delegate execution to sub-agents running in parallel, and is trained to use computer interfaces on desktop, mobile, or browser.",
"publishedAt": "2026-07-09T14:00:37.000Z",
"threadId": "3937491905269768921",
"replyToId": "3937491905269768921",
"quoteId": null,
"isReply": true,
"isQuote": false,
"author": {
"username": "zuck",
"displayName": "Mark Zuckerberg",
"verified": true
},
"engagement": {
"views": null,
"likes": 912,
"replies": 91,
"reposts": 59,
"quotes": 14
},
"media": [
"https://scontent-cdg4-3.cdninstagram.com/v/t51.82787-15/741068464_17977387650103224_214669101615299168_n.webp?_nc_cat=110&ig_cache_key=MzkzNzQ5MTkyODQ5NzgyNzQxNQ%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkZFRUQueHBpZHMuMTYyMC5zZHIucmVndWxhcl9waG90by5DMyJ9&_nc_ohc=BnavDWIpJKMQ7kNvwGW14gJ&_nc_oc=Ado5sxMS3V9I9TFA6KpOo5ZTsDLrt2liAWKAxWtcz-ea50_hZb2YjO_d70TiTHhjkGA&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-cdg4-3.cdninstagram.com&_nc_gid=wkyjiyQ2aEsOml1qJ-3q-Q&_nc_ss=7a22e&oh=00_AQDyLjCkW1XRN7kshX0Uybz1QIy_tJdKTcfMdl2WJNISyA&oe=6A6E32AC"
]
}
]
}
}Billing metadata (credits charged, cache hit/miss) is returned in the X-Captapi-Credits and X-Captapi-Cache response headers.
Request parameters
| Name | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | Threads profile URL or @handle. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble. |
| limit | integer | No | Max items to return (default 20, max 100). Threads only exposes the last ~20–30 public posts on this surface — asking for 100 will not return 100. Flat 2 credits on the native path; Apify fallback ~0.7/post (min 2). |
| cache | boolean | No | Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh. Envelope includes cached + cachedAt on hits. |
Frequently asked questions
What does the Threads User Posts API do?
The Threads User Posts API lets you list items in bulk with metadata from a public Threads post using one GET request to /v1/threads/user-posts. It returns clean JSON — no OAuth or infrastructure setup required.
How many credits does the Threads User Posts API cost?
Each successful call costs 2 credits. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Hits include cached + cachedAt. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.
Do I need a Threads API key or OAuth?
No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle proxies, rate limits, retries, and authentication for you.
Why is this 2 credits when older docs said ~14?
Native profile-hydrate path is flat 2 credits — same soft-cap surface ScrapeCreators uses, and parity with Twitter user-tweets. The old ~14 figure was Apify billed at ~0.7 credits per returned post (default limit 20). Apify fallback still uses that per-result rate when the native path is unavailable.
I set limit=100 but only got ~25 posts. Is the endpoint broken?
No — Meta only exposes the last ~20–30 public posts on profile hydrate. limit is a client-side cap, not a promise that Threads has that many posts. See Platform limits on this page.
How do I rebuild a multi-part Thread?
Group posts by threadId. Within a thread, replyToId points at the previous post's id (root has replyToId null / isReply false). isQuote + quoteId mark quote posts.
Is the Threads User Posts API suitable for production use?
Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Hits include cached + cachedAt. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.
Ready to get Threads user posts?
Start free with 100 credits — no credit card required.
Get your free API key