Threads API: Get post
Gets a public Threads post with its engagement counts and the replies visible without logging in.
Unofficial. Not affiliated with or endorsed by Threads.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Post, required
post Link to a public post on Threads, for example https://www.threads.com/@threads/post/Ddt8NiwkZXm.
https://www.threads.net/@threads/post/DdcPsEkH3NZ
- Max Replies optional
max_replies Maximum replies to return, up to 20; for example 10.
20
Whole number from 0 to 20. Default
10.
Input as JSON
{ "post": "https://www.threads.net/@threads/post/DdcPsEkH3NZ" , "max_replies": 20}Output
{ "text": "Photographers who send the selects when they said they would", "likes": 510, "quotes": 3, "post_id": "3989132369199067993", "replies": [ { "text": "Here are some of my recent favorites 📸🧡😎", "likes": 0, "post_link": "https://www.threads.com/@sophiatesch/post/DdcQQ2vkphd" , "posted_at": "2026-09-18T20:05:58Z", "author_username": "sophiatesch" }, { "text": null, "likes": 0, "post_link": "https://www.threads.com/@korbskilabs/post/DdcQTTkEl80" , "posted_at": "2026-09-18T20:06:18Z", "author_username": "korbskilabs" }, { "text": "The Tired Photographer", "likes": 9, "post_link": "https://www.threads.com/@dr.ayrat/post/DdcQU8wiNZB" , "posted_at": "2026-09-18T20:06:32Z", "author_username": "dr.ayrat" } ], "reposts": 30, "post_link": "https://www.threads.com/@threads/post/DdcPsEkH3NZ" , "posted_at": "2026-09-18T20:00:57Z", "replies_count": 93, "author_username": "threads", "author_display_name": "Threads", "media_thumbnail_links": [ "https://scontent-sea5-1.cdninstagram.com/v/t51.82787-15/815866628_17988992904102532_2006031957805872894_n.jpg?stp=cp6_dst-jpg_e35_tt6&_nc_cat=100&ig_cache_key=Mzk4OTEzMjM2OTE5OTA2Nzk5Mw%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkZFRUQueHBpZHMuOTcyLnNkci5yZWd1bGFyX3Bob3RvLkMzIn0%…" ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"threads.com/get_post","input":{"post":"https://www.threads.net/@threads/post/DdcPsEkH3NZ","max_replies":20}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "threads.com/get_post" , "input": { "post": "https://www.threads.net/@threads/post/DdcPsEkH3NZ" , "max_replies": 20 }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "threads.com/get_post" , "input": { "post": "https://www.threads.net/@threads/post/DdcPsEkH3NZ" , "max_replies": 20 } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run threads.com/get_post# with {"post":"https://www.threads.net/@threads/post/DdcPsEkH3NZ","max_replies":20}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "post" ], "properties": { "post": { "type": "string", "description": "Link to a public post on Threads, for example https://www.threads.com/@threads/post/Ddt8NiwkZXm." }, "max_replies": { "type": "integer", "default": 10, "maximum": 20, "minimum": 0, "description": "Maximum replies to return, up to 20; for example 10." } }}Output schema
{ "type": "object", "required": [ "author_username", "post_link", "replies", "post_id", "media_thumbnail_links" ], "properties": { "text": { "type": [ "string", "null" ] }, "likes": { "type": [ "integer", "null" ] }, "quotes": { "type": [ "integer", "null" ] }, "post_id": { "type": "string" }, "replies": { "type": "array", "items": { "type": "object", "properties": { "text": { "type": [ "string", "null" ] }, "likes": { "type": [ "integer", "null" ] }, "post_link": { "type": "string" }, "posted_at": { "type": [ "string", "null" ] }, "author_username": { "type": "string" } } } }, "reposts": { "type": [ "integer", "null" ] }, "post_link": { "type": "string" }, "posted_at": { "type": [ "string", "null" ] }, "replies_count": { "type": [ "integer", "null" ] }, "author_username": { "type": "string" }, "author_display_name": { "type": [ "string", "null" ] }, "media_thumbnail_links": { "type": "array", "items": { "type": "string" } } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
threads.com/get_post- Returns
- author, text, date, likes, replies count, reposts, quotes, thumbnails, replies
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method threads.com/get_post with the inputs above.
Ask your agent
- Can you pull up this public Threads post and tell me who wrote it, what it says, and how many likes and reposts it has: https://www.threads.com/@threads/post/Ddt8NiwkZXm
- Grab the top 8 replies from a public Threads thread about a new coffee shop opening, including the author names and reply counts.
- I need the engagement numbers for a Threads post from last week: likes, quotes, and total replies, plus the date it was posted.
- Fetch a Threads post link I'm sending and list any image thumbnails attached to it along with the author's name.
- What are people saying under this Threads post? Show me up to 15 visible replies and the text of the original post.
See more
All Threads methodsLists an account's latest public Threads posts, newest first, with text, engagement counts, thumbnails and links. Only posts shown without logging in are returned.
threads.com/list_recent_postsGets a public Threads profile by username or profile link, with bio, followers, verification, picture and bio links. Private profiles are not returned.
threads.com/get_profileGets a public X (Twitter) post from its link: author, full text, posting time, likes, reposts, replies, quotes, views, language, media and the quoted post. Deleted, protected and unavailable posts cannot be returned.
x.com/get_postLists an account's latest public Bluesky posts, newest first. Replies and reposts are left out unless requested; a repost's time is when the account reposted it.
bsky.app/list_recent_postsLists a company's recent public LinkedIn posts in page order, from its name or LinkedIn company page link: post text, approximate date, reactions, comments, image and link. Only updates shown on the signed-out company page are available.
linkedin.com/list_company_postsLists a Mastodon account's latest public posts, newest first. Replies and boosts are optional. Private and unlisted posts are left out.
mastodon.social/list_recent_postsLists recent public posts of a Tumblr blog, optionally only those with a given tag. Private or login-only blogs cannot be read.
tumblr.com/list_blog_postsFinds a Substack newsletter by name or web address and returns its latest public posts with dates, authors, access level and engagement counts.
substack.com/list_newsletter_posts