Skip to content
scrapeatlas.Dashboard

Get a Threads post

Try in Playground

Retrieve a public Threads post by permalink, with view count, replies, related posts and ancestor posts. Use trim for a compact projection.

GET/v1/threads/postx-api-key
x-api-keystringrequiredheader

Your ScrapeAtlas customer key. Create one on /account/ and set SCRAPEATLAS_API_KEY.

Query parameters
2
urlstringrequiredquery

threads.com or threads.net post permalink (query strings and fragments ignored).

max 2048 chars

Examplehttps://www.threads.com/@example/post/ExAmPlE0001
trimenumquery

true keeps the compact projection: id, pk, caption, code, like_count, taken_at, user (feed and search posts add url).

one of: true, false

Response fields
50
requestIdstring

Request correlation identifier.

HTTP attempts for the operation (profile, posts, post, comments: one page load, plus one canonical redirect hop for short, threads.net or wrongly attributed permalinks; search: a bodiless session probe (HEAD on the login route) plus one document, with the login page read only when the probe sets no cookie; user search: the index and one profile page per account, five by default and ten at most; each with the shared transient retry), decoded bytes and duration.

accounting.upstreamRequestsinteger

Always included.

≥ 0

accounting.responseBytesinteger

Always included.

≥ 0

accounting.durationMsnumber

Always included.

≥ 0

successboolean

True when usable data is returned; inspect status and coverage for omissions.

statusenum

success, partial, failed, or challenged. HTTP 200 can be partial.

one of: success, partial

sourceUrlstring

Canonical threads.com URL of the profile, post or search (user search: the web index endpoint, query excluded).

absolute HTTPS URL

fetchedAtstring

UTC retrieval time.

Complete means every source field of the operation was returned; warnings name every omission or cap (private_account, posts_first_page_only, posts_truncated, comments_first_page_only, comments_truncated, related_posts_truncated, parent_posts_truncated, search_results_truncated, date_filter_applied, users_truncated, users_omitted). Source is public_web, or web_index for user search.

coverage.sourceenum

Always included.

one of: public_web, web_index

coverage.completeboolean

Always included.

coverage.warningsenum[]

Always included.

The permalinked post as the page carries it (field groups below) with view_counts appended.

post.pkstring

Always included.

post.idstring

Always included.

min 1 chars

Author as the post carries it: pk, profile_pic_url, friendship_status (null logged out), username, id, interop_messaging_user_fbid, is_meta_ai_bot, full_name, transparency_label, transparency_product, transparency_product_enabled, is_verified, has_onboarded_to_text_post_app, text_post_app_is_private.

post.user.pkstring

Always included.

post.user.usernamestring

Always included.

min 1 chars

post.codestring

Always included.

min 1 chars

post.media_typeinteger

Always included.

post.taken_atinteger

Always included.

post.view_countsintegernullable

View count Threads shows on the permalink page, taken from the page's logged-out gating define; null when the page carries none (very fresh posts).

Always included.

up to 50 items

comments.pkstring

Always included.

comments.idstring

Always included.

min 1 chars

Always included.

comments.user.pkstring

Always included.

comments.user.usernamestring

Always included.

min 1 chars

comments.codestring

Always included.

min 1 chars

comments.media_typeinteger

Always included.

comments.taken_atinteger

Always included.

Always included.

up to 20 items

relatedPosts.pkstring

Always included.

relatedPosts.idstring

Always included.

min 1 chars

Always included.

relatedPosts.user.pkstring

Always included.

relatedPosts.user.usernamestring

Always included.

min 1 chars

relatedPosts.codestring

Always included.

min 1 chars

relatedPosts.media_typeinteger

Always included.

relatedPosts.taken_atinteger

Always included.

Always included.

up to 50 items

parentPosts.pkstring

Always included.

parentPosts.idstring

Always included.

min 1 chars

Always included.

parentPosts.user.pkstring

Always included.

parentPosts.user.usernamestring

Always included.

min 1 chars

parentPosts.codestring

Always included.

min 1 chars

parentPosts.media_typeinteger

Always included.

parentPosts.taken_atinteger

Always included.

HTTP 200 returns the success variant. Check status: partial means usable data with warnings, and failed or challenged requests carry a failure object described in Errors & responses.

Error codes
17
HTTPfailure.codeMeaning
400invalid_requestMissing, duplicate, malformed or unsupported parameters, handles, dates or URLs.
401unauthorizedInvalid API key.
404not_foundUnknown handle (Threads redirects it to the login form) or unknown post code.
403restricted_pageThe page or document is restricted to signed-in viewers.
503search_unavailableUser search was called without a configured search key.
502search_failedThe web search index answered with an error, a non-JSON body or an unexpected shape.
429upstream_rate_limitedThreads or the web index rate limited the request.
502upstream_challengedThreads answered the request with a challenge page instead of a document (status challenged).
502operation_unavailableThreads no longer serves the pinned document for this operation.
502unsafe_redirectThreads redirected the request somewhere other than the login form or the canonical permalink.
502unsupported_pageThe page or GraphQL result is missing, mismatched or structurally unsupported.
502response_too_largeThe decoded responses exceeded 8 MiB.
502payload_too_complexThe response exceeded the JSON depth or node limits.
502request_limitThe upstream request budget was exhausted.
502upstream_errorNetwork failure or HTTP 5xx after the single retry.
503busyAll retrieval slots are busy.
504timeoutThe 45-second deadline elapsed.