Threads Post Search API
Threads keyword search — posts with engagement + media. Flat 2 credits.
GET request to /v1/threads/search that responds with clean JSON and costs 2 credits. Pass cache=true for a free 24h cache hit; default is always fresh. Start with 100 free credits — no credit card.What is the Threads Post Search API?
Pass a keyword and get public Threads posts from Meta's Top SERP hydrate as clean JSON: id, code, url, text, ISO publishedAt, author{username,displayName,verified}, engagement{views,likes,replies,reposts,quotes}, threadId/isReply/isQuote, and media[] (carousel children deduped — the same image never appears twice in different crops). Flat 2 credits (parity with twitter/search). There is no sort or date filter — Meta ranks the page, and older or engagement-farm posts can appear near the top. When Meta's search page itself renders 'No results' the answer is an immediate empty 200 at 0 credits — a definitive verdict, not an outage, so there is nothing to retry. A transient Meta miss is retried in-request, then rescued by the same query's 6h last-good page (labelled stale:true + cached:true, fetchedAt = scrape time, servedAt = now, 0 credits), then the extended scraper. A retryable 502 UPSTREAM_UNAVAILABLE (0 credits) is returned only when every path missed — the endpoint never answers 404 “No posts found” for an upstream outage. Pass cache=true for the 24h shared cache (0 credits on hit).
What you get
- Posts from Meta Top SERP for your keyword
- id/code/url, text, ISO publishedAt
- engagement{views,likes,replies,reposts,quotes} + media[] (deduped)
- In-request retry + 6h stale rescue — outages never fake “no posts”
- Flat 2 credits
Try it
Fill in the parameters below and copy a ready-to-run request, or open the live Playground to run it against your account (no API key paste).
Parameters
curl "https://api.captapi.com/v1/threads/search?q=artificial%20intelligence" \
-H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."Edit the parameters and the code updates instantly. Switch languages and hit copy.
Example response
{
"success": true,
"data": {
"query": "artificial intelligence",
"totalReturned": 2,
"results": [
{
"platform": "threads",
"id": "3955315825888714785",
"code": "DbkGsmYk-Ah",
"url": "https://www.threads.net/@iansh04_/post/DbkGsmYk-Ah",
"text": "All Paid Courses (Free for First 4500 People)\n𝗣𝗮𝗶𝗱 𝗖𝗼𝘂𝗿𝘀𝗲 𝗙𝗥𝗘𝗘 (PART - 1)\n1. Artificial Intelligence\n2. Machine Learning\n3. Prompt Engineering\n4. Claude,Chatgpt,Grok\n5. Data Analytics\n6. AWS Certified\n7. Data Science\n8. BIG DATA\n9. Python\n10. Ethical Hacking\n(72 Hours only )\nLike + Repost + comment ' Drive '\nMust Follow @iansh04_ so I can DM you.",
"publishedAt": "2026-08-03T04:13:31.000Z",
"threadId": "3955315825888714785",
"replyToId": null,
"quoteId": null,
"isReply": false,
"isQuote": false,
"author": {
"username": "iansh04_",
"displayName": "Ansh Bhatnagar",
"verified": false
},
"engagement": {
"views": null,
"likes": 651,
"replies": 790,
"reposts": 412,
"quotes": 4
},
"media": [
"https://scontent-arn2-1.cdninstagram.com/v/t51.82787-15/763355760_17982304443106462_6808022601370922517_n.jpg?stp=c0.162.799.799a_dst-jpg_e35_s799x799_tt6&_nc_cat=1&ig_cache_key=Mzk1NTMxNTgyNTg4ODcxNDc4NQ%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkZFRUQueHBpZHMuNzk5LnNkci5yZWd1bGFyX3Bob3RvLkMzIn0%3D&_nc_ohc=W6xISNbePogQ7kNvwFHyufm&_nc_oc=Adpj2_PItVsSle0pXBx8J50TeHA2rVgNKt5K3ykIx7ldNtte-CnSNdBYH26W0xnr9tc&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-arn2-1.cdninstagram.com&_nc_gid=2OcSzrbqz_izuGJcwi-1qQ&_nc_ss=7a22e&oh=00_AQGLu1pgLEJU7smbOpdzIyAzqlyw6AtR4JFDxcgyr2gJzA&oe=6A77FBBD"
]
},
{
"platform": "threads",
"id": "3557348422268871722",
"code": "DFePYrboeQq",
"url": "https://www.threads.net/@theartificialintelligence/post/DFePYrboeQq",
"text": "🇨🇳🇺🇸 DeepSeek tells the world that artificial intelligence is not American intelligence, and the United States has no right to monopolize the development of AI that belongs to all mankind.\n\n-Dr. Victor Gao",
"publishedAt": "2025-01-31T02:04:57.000Z",
"threadId": "3557348422268871722",
"replyToId": null,
"quoteId": null,
"isReply": false,
"isQuote": false,
"author": {
"username": "theartificialintelligence",
"displayName": "Artificial Intelligence | AI",
"verified": true
},
"engagement": {
"views": null,
"likes": 10777,
"replies": 823,
"reposts": 759,
"quotes": 50
},
"media": [
"https://scontent-arn2-1.cdninstagram.com/o1/v/t16/f2/m84/AQPR4zUqReqf-s4ildWOQeBb718tDuYqeErpvd3aGhr4jI7THlrcuR7esStJjWXCkmLl-XURcNSrf7AsUKFmac0NgM-QfunN0v1quQo.mp4?_nc_cat=109&_nc_sid=5e9851&_nc_ht=scontent-arn2-1.cdninstagram.com&_nc_ohc=wtd19Chl-HEQ7kNvwGng7Cc&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uRkVFRC5DMy4xMjgwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6OTU1NDY3MDkxNzkyNDE0MiwiYXNzZXRfYWdlX2RheXMiOjU1MCwidmlfdXNlY2FzZV9pZCI6MTAxNjQsImR1cmF0aW9uX3MiOjI2MiwidXJsZ2VuX3NvdXJjZSI6Ind3dyJ9&ccb=17-1&vs=6df3e1b4c37b0184&_nc_vs=HBksFQIYTGlnX2JhY2tmaWxsX3RpbWVsaW5lX3ZvZC9FRjRCRkY3RkY3NEM5REZERjE1QUJDQUI1OEU4Rjk4Ql92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYOnBhc3N0aHJvdWdoX2V2ZXJzdG9yZS9HTFRwVkJ6VThfSDFnalVIQUtJNTJLZkhlbVZ2YmtZTEFBQUYVAgLIARIAKAAYABsCiAd1c2Vfb2lsATEScHJvZ3Jlc3NpdmVfcmVjaXBlATEVAAAm3NSR4IX7-CEVAigCQzMsF0BwYAAAAAAAGBJkYXNoX2Jhc2VsaW5lXzFfdjERAHXqB2XongEA&_nc_gid=2OcSzrbqz_izuGJcwi-1qQ&_nc_zt=28&_nc_ss=7a22e&oh=00_AQF8bFsn29XzqRjQkrRFQrTZklFBON9dC84Y-XO4UOk-iw&oe=6A73E02B",
"https://scontent-arn2-1.cdninstagram.com/v/t51.71878-15/474888843_486869244173785_943828438724363456_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=111&ig_cache_key=MzU1NzM0ODQyMjI2ODg3MTcyMg%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkZFRUQueHBpZHMuNjQwLnNkci52aWRlb19kZWZhdWx0X2NvdmVyX2ZyYW1lLkMzIn0%3D&_nc_ohc=3FblhuYndyEQ7kNvwEjz1O7&_nc_oc=Adp7qot7ziRgosQn26lzhfHrzzD_m2TOH814YQ1H8ASPezYzNdAr9tGFpJn46kg9I_o&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-arn2-1.cdninstagram.com&_nc_gid=2OcSzrbqz_izuGJcwi-1qQ&_nc_ss=7a22e&oh=00_AQEidlufgTbrLRvAeY_lttMaLW7uUuDWfGwhwIjT5ImsRQ&oe=6A77F4AA"
]
}
]
}
}Billing metadata is returned in response headers: X-Captapi-Credits (credits charged), X-Captapi-Cache (hit or miss), and X-Captapi-Source. Failed requests (4xx/5xx) are never charged. See the full list of error codes in the error reference.
Response structure
A successful call returns success and a data object with the following fields:
Top-level fields
queryThe search query you sent.totalReturnedNumber of items returned in this response.
Results
Each item in results contains:
platformPlatform identifier for this response (matches the endpoint's platform).idId of this results item.codeCode. Example: "DbkGsmYk-Ah".urlCanonical URL of the item.textText content.publishedAtPost publish time as ISO-8601 UTC (Meta Top SERP — may be months old).threadIdThread id. Example: "3955315825888714785".replyToIdReply to id.quoteIdQuote id.isReplyWhether the tweet is a reply.isQuoteIs quote. Example: false.authorAuthor name or handle.engagementEngagement metrics for the item.mediaCDN URLs for the post's images/videos. Carousel children are deduped by file — the same image never repeats in a different crop.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| q | string | Yes | Keyword or phrase to search public Threads posts (min 2 characters). |
| limit | integer | No | Max items to return (default 25, max 200). Flat 2 credits per call. |
| cache | boolean | No | Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh. |
Authentication: send your key as Authorization: Bearer capt_live_.... A typical call costs 2 credits. Pass cache=true for a free 24h cache hit; default is always fresh.
How it works
- 1. Sign up — get 100 free credits, no card required.
- 2. Create a key from your dashboard.
- 3. Send one request to
/v1/threads/searchand parse the JSON response.
Use cases
Trend Discovery
Find trending content by keyword or hashtag.
Content Sourcing
Build feeds and playlists programmatically.
Monitoring
Track topics, brands, and competitors.
Research
Sample large sets of content for analysis.
Frequently asked questions
What does the Threads Post Search API do?+
The Threads Post Search API lets you search and return matching results from a public Threads query using one GET request to /v1/threads/search. It returns clean JSON — no OAuth or infrastructure setup required.
How many credits does the Threads Post Search 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. 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 ~18?+
Flat 2 credits — same soft-cap surface as twitter/search and threads/user-posts. The old ~18 figure was a per-result extended-path rate at default limit 25; success is always billed at the published flat price now.
Can I sort by newest or filter by date?+
Not on this endpoint. Meta only exposes the default Top ranking on the logged-out search hydrate — months-old posts can sit next to recent ones. Client-side filter on publishedAt if you need a recency window.
Why do giveaway / engagement-farm posts rank first?+
Meta's Top SERP often boosts high-reply bait. Captapi returns what the hydrate embeds and does not apply a spam filter. replies ≫ likes is a common client-side signal to down-rank.
I got a 404 "No posts found" for a popular keyword — is the query really empty?+
Not anymore. That 404 used to fire when Meta's hydrate transiently missed and the extended scraper came back empty — misleading for queries that clearly have posts. The endpoint now retries the native fetch in-request, then serves the same query's last-good page from the past 6h (labelled stale:true + cached:true, 0 credits), then tries the extended scraper. Only when every path misses do you get a retryable 502 UPSTREAM_UNAVAILABLE at 0 credits — retry after ~60s.
What do stale:true and servedAt mean on a response?+
The live fetch failed and a recent (≤6h) successful page for the same query was replayed for free. fetchedAt is when that data was actually scraped; servedAt is when your request was answered. If freshness is critical, retry shortly — the live path usually recovers within a minute.
Is the Threads Post Search 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. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.
More Threads APIs
Ready to use the Threads Post Search API?
Sign up, grab your key, and make your first call in 60 seconds.