Threads profile posts API
List recent public Threads posts for a handle — captions, engagement, and media — in the shared Social Fetch response envelope.
GET /v1/threads/profiles/{handle}/posts1 credit per successful request.
About this endpoint
Teams that already resolve a Threads profile still need the recent timeline: what the creator posted, when, and how it performed. Instagram cross-posts and Slack alerts often give you a handle first, not a permalink. Scraping threads.net for every username breaks when Meta changes the client HTML.
`GET /v1/threads/profiles/{handle}/posts` takes the Threads username in the path (with or without `@`). Send `x-api-key`, then branch on `data.lookupStatus` before you write rows — `found` or `not_found`. On `found`, `data.posts` is the list for this call. Each post can include id, shortcode, public URL, caption, takenAt (Unix seconds), optional author snapshot, metrics (likes, replies, reposts, reshares, quotes when Threads exposes them), media (images, videos, carousel items), plus optional `pinned` and `reply` flags. Pass `trim=true` when you want a smaller body with fewer fields per post.
This route lists posts for a handle. It does not expose cursor pagination — call again later for a fresh snapshot, or use `GET /v1/threads/posts` when you already have a permalink. Keyword discovery is `GET /v1/threads/search`. The profile card alone is `GET /v1/threads/profiles/{handle}`. Pricing is on the credit badge for this operation; bill from `meta.creditsCharged` on every response.
Threads profile posts API FAQ
How do I list Threads posts for a profile via API?
Call `GET /v1/threads/profiles/{handle}/posts` with your Social Fetch API key (`x-api-key`) and the Threads username in the path. Read `data.lookupStatus`, then `data.posts`. Full parameters and examples are in the API docs linked from this page.
How much does the Threads profile posts endpoint cost?
Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged — that field is the billing source of truth.
Does Threads profile posts support cursor pagination?
No. This operation returns the posts available for the resolved handle in a single response. There is no `cursor` query param and no `data.page` object. For a later snapshot, call the same path again. For one known permalink, use `GET /v1/threads/posts`.
What fields are in each Threads profile post?
Items can include id, shortcode, public URL, caption, takenAt, optional author (handle, verified, avatar), metrics (likes, replies, reposts, reshares, quotes when present), media (image and video renditions, optional carousel), and optional pinned / reply flags when Threads exposes them.
What does the trim query parameter do?
Optional `trim=true` returns a smaller payload with fewer fields per post when available. Use it when you only need core text and counts and want less JSON per call.
What happens for missing handles or empty feeds?
`lookupStatus` of `not_found` means the handle did not resolve; `posts` is empty. `found` with an empty `posts` array means the handle resolved but no public posts came back on this call. Keep `meta.requestId` if you need support on a failed list call.
Profile posts vs single Threads post vs search?
Use this route to list posts for a username. Use `GET /v1/threads/posts` when you already have a post URL. Use `GET /v1/threads/search` to find posts by keyword. They are separate operations on the Threads hub.
Do I need Meta Threads API access to list a feed?
No. You authenticate to Social Fetch with an API key. The route reads publicly visible posts; it does not require Meta app review or act on behalf of a logged-in Threads user.