Skip to content
scrapeatlas.Dashboard

Social networks

Threads API

Retrieve public Threads profiles, a profile's recent posts, single posts with their replies and related posts, keyword search results and account discovery, exactly as Threads' own web client receives them.

6 endpointsx-api-key

Retrieve Threads profiles, posts, replies and related posts, and search posts or accounts. Compact projections are available for posts.

API availability: Available

Base URL · local workerhttp://localhost:3040Public API: https://api.scrapeatlas.com.
Authenticationx-api-keyCustomer key from your account. See Authentication.

Endpoints

GET/v1/threads/profile

Get a Threads profile

Retrieve a public Threads profile by handle: the account header Threads' own web client receives (identity, bio with fragments and links, follower count, verification, profile pictures, topic tags), with its fields at the top level.

Reference
GET/v1/threads/user/posts

List Threads user posts

Read a profile's recent public Threads posts and the author's continuation posts, with canonical URLs. Use trim for a compact projection.

Reference
GET/v1/threads/post

Get a Threads post

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

Reference
GET/v1/threads/post/comments

List Threads post comments

Read public replies to a Threads post in page order. Use trim for a compact projection.

Reference
GET/v1/threads/search

Search Threads posts

Search public Threads posts by keyword, with ranked or recent ordering, inclusive UTC date filters and an optional compact projection.

Reference
GET/v1/threads/search/users

Search Threads users

Discover public Threads accounts by keyword, including identity, display name, profile pictures, verification, biography, follower count and privacy flag.

Reference

Quick start

Create an API key on your account page, then call the public API. Values below are placeholders.

Terminal
curl "https://api.scrapeatlas.com/v1/threads/profile?handle=example" \
  -H "x-api-key: YOUR_API_KEY"

Coverage & limits

  • Independent worker on port 3040, THREADS_API_KEY in x-api-key. No Threads or Instagram account, login, storage, media download or product dependency; each operation runs one anonymous session with a browser TLS fingerprint, the way Threads' own web client connects.
  • Four concurrent operations, 45-second deadline, at most four upstream requests per operation: profile, posts, post and comments = one page load (plus one canonical redirect hop for short, threads.net or re-attributed permalinks); search = the session probe (a HEAD on the login route, plus the login page when the probe sets no cookie) plus one search document; user search = twelve: the web index, up to ten profile pages (five by default) and the retry; each with one shared transient retry for network failures or HTTP 5xx. Challenges, rate limits and 4xx answers are never retried.
  • 8 MiB decoded response across an operation (16 MiB for user search, which reads up to ten profile pages), 600,000 JSON nodes, 64 levels, 50 posts and 50 continuation posts per profile window, 50 comments, 20 related posts, 50 parent posts, 50 search results, 10 users.
  • Windows: the profile feed (posts_first_page_only), the reply window of a post (comments_first_page_only) and the search window (about twenty posts) are each returned as one page. Private accounts answer the profile header and an empty posts window with private_account.
  • Keyword user search needs THREADS_SEARCH_API_KEY (Brave Search API) or the shared BRAVE_SEARCH_KEY; the route reports search_unavailable without one. One index request per search (20 URLs requested, profile permalinks kept, at most 10), 1 MiB index response, then one profile page per account (five by default, up to ten with limit; three at a time; pages that no longer resolve are omitted as users_omitted); results are ordered by the index.
  • The search document id is pinned to the one Threads' web client uses; when Threads retires it, the operation fails operation_unavailable instead of guessing.
  • Handles are 1–30 letters, digits, periods and underscores (leading @ accepted), post URLs are threads.com or threads.net /@handle/post/<code>, /t/<code> or /post/<code> permalinks (query strings and fragments ignored). Identity is verified against the request; mismatches fail unsupported_page. Unknown handles and unknown post codes fail not_found.
  • Optional THREADS_PROXY_URL (falling back to TWITCH_PROXY_URL, then REDDIT_PROXY_URL) routes every operation through a fresh residential proxy session.
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.