Threads API: List recent posts
Lists an account's latest public Threads posts, newest first, with text, engagement counts, thumbnails and links. Only posts shown without logging in are returned.
Unofficial. Not affiliated with or endorsed by Threads.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Username, required
username Threads username, with or without @, or a profile link. Example: zuck.
zuck
- Max Results optional
max_results Maximum posts to return, up to 25. Example: 10.
10 (default)
Whole number from 1 to 25.
Input as JSON
{ "username": "zuck"}Output
{ "posts": [ { "text": "It's been just over a year since we started Meta Superintelligence Labs. Muse Spark was our first family of models, and now Muse Wonder is a much larger and more advanced class of models that brings us to the frontier. \nWe're releasing two models today. Muse Wonder for fast frontier performance and …", "likes": 823, "quotes": 9, "post_id": "4006434261020307755", "replies": 81, "reposts": 34, "post_link": "https://www.threads.com/@zuck/post/DeZtrvAEfEr" , "posted_at": "2026-10-12T16:57:09Z", "thumbnail_links": [ "https://scontent-sea5-1.cdninstagram.com/v/t51.71878-15/843458448_2045298256099953_8644614754157170636_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=110&ig_cache_key=NDAwNjQzNDI2MTAyMDMwNzc1NQ%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkZFRUQueHBpZHMuNjQwLnNkci52aWRlb19kZWZhdWx0X2NvdmVyX2ZyY…" ] }, { "text": "Introducing Muse Wonder, our new family of frontier models with state of the art performance for personal and professional agentic work.", "likes": 2109, "quotes": 60, "post_id": "4006434140014576097", "replies": 522, "reposts": 168, "post_link": "https://www.threads.com/@zuck/post/DeZtp-TkQHh" , "posted_at": "2026-10-12T16:56:29Z", "thumbnail_links": [ "https://scontent-sea5-1.cdninstagram.com/v/t51.82787-15/844965867_17991705567103224_8296143909108287920_n.webp?_nc_cat=109&ig_cache_key=NDAwNjQzNDE0MDAxNDU3NjA5Nw%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkZFRUQueHBpZHMuMjE2MC5zZHIucmVndWxhcl9waG90by5DMyJ9&_nc_ohc=rp31ausBBLsQ7k…" ] }, { "text": "You can use Muse Wonder to power your Muse by subscribing today. We'll work to bring this level of intelligence to everyone over time.", "likes": 91, "quotes": 0, "post_id": "4006434136633974390", "replies": 17, "reposts": 3, "post_link": "https://www.threads.com/@zuck/post/DeZtp7KER52" , "posted_at": "2026-10-12T16:56:28Z", "thumbnail_links": [] } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"threads.com/list_recent_posts","input":{"username":"zuck"}}' # 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/list_recent_posts" , "input": { "username": "zuck" }})# 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/list_recent_posts" , "input": { "username": "zuck" } }), 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/list_recent_posts# with {"username":"zuck"}"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": [ "username" ], "properties": { "username": { "type": "string", "description": "Threads username, with or without @, or a profile link. Example: zuck." }, "max_results": { "type": "integer", "default": 10, "maximum": 25, "minimum": 1, "description": "Maximum posts to return, up to 25. Example: 10." } }, "additionalProperties": false}Output schema
{ "type": "object", "required": [ "posts" ], "properties": { "posts": { "type": "array", "items": { "type": "object", "required": [ "text", "posted_at", "likes", "replies", "reposts", "quotes", "thumbnail_links", "post_link", "post_id" ], "properties": { "text": { "type": [ "string", "null" ], "description": "Text of the post, if available." }, "likes": { "type": [ "integer", "null" ], "description": "Number of likes, or null when hidden." }, "quotes": { "type": [ "integer", "null" ], "description": "Number of quotes, or null when hidden." }, "post_id": { "type": "string", "description": "Threads post ID." }, "replies": { "type": [ "integer", "null" ], "description": "Number of replies, or null when hidden." }, "reposts": { "type": [ "integer", "null" ], "description": "Number of reposts, or null when hidden." }, "post_link": { "type": "string", "description": "Public link to the post." }, "posted_at": { "type": "string", "format": "date-time", "description": "When the post was published, in UTC." }, "thumbnail_links": { "type": "array", "items": { "type": "string" }, "description": "Image and video thumbnail links." } }, "additionalProperties": false }, "description": "Latest public posts, newest first." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
threads.com/list_recent_posts- Returns
- text, posted_at, likes, replies, reposts, quotes, thumbnail_links, post_link, post_id
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/list_recent_posts with the inputs above.
Ask your agent
- Show me the latest 15 public posts from the account @natgeo on Threads, newest first, with likes and reply counts.
- What has the creator mkbhd been posting on Threads recently? I want the text and links for about 8 of their newest posts.
- Pull up the last 20 public Threads posts by user huberman, including repost and quote counts and any thumbnail images.
- I need a quick look at the recent activity of the Threads profile nasa: give me 5 of their newest posts with timestamps.
- Get the 12 most recent public posts from the profile https://www.threads.com/@meta so I can compare engagement across them.
See more
All Threads methodsGets a public Threads post with its engagement counts and the replies visible without logging in.
threads.com/get_postGets 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_profileLists the latest publicly embeddable posts and reels from an Instagram account, newest first. Without login Instagram may show fewer posts than requested. View counts that are not available are null.
instagram.com/list_recent_postsLists 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 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 the latest public articles by a Medium writer or publication (by username, publication name or Medium link), with dates, reading times, claps, member-only labels and tags.
medium.com/list_author_articlesLists 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_postsLists the latest posts from a public Telegram channel preview, with text, posting time, approximate views, edit flag, forwarded source, thumbnails and post links.
t.me/list_channel_posts