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.
Retrieve Threads profiles, posts, replies and related posts, and search posts or accounts. Compact projections are available for posts.
API availability: Available
http://localhost:3040Public API: https://api.scrapeatlas.com.Endpoints
/v1/threads/profileGet 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/v1/threads/user/postsList 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/v1/threads/postGet 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/v1/threads/post/commentsList Threads post comments
Read public replies to a Threads post in page order. Use trim for a compact projection.
Reference/v1/threads/searchSearch Threads posts
Search public Threads posts by keyword, with ranked or recent ordering, inclusive UTC date filters and an optional compact projection.
Reference/v1/threads/search/usersSearch Threads users
Discover public Threads accounts by keyword, including identity, display name, profile pictures, verification, biography, follower count and privacy flag.
ReferenceQuick start
Create an API key on your account page, then call the public API. Values below are placeholders.
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.
| HTTP | failure.code | Meaning |
|---|---|---|
| 400 | invalid_request | Missing, duplicate, malformed or unsupported parameters, handles, dates or URLs. |
| 401 | unauthorized | Invalid API key. |
| 404 | not_found | Unknown handle (Threads redirects it to the login form) or unknown post code. |
| 403 | restricted_page | The page or document is restricted to signed-in viewers. |
| 503 | search_unavailable | User search was called without a configured search key. |
| 502 | search_failed | The web search index answered with an error, a non-JSON body or an unexpected shape. |
| 429 | upstream_rate_limited | Threads or the web index rate limited the request. |
| 502 | upstream_challenged | Threads answered the request with a challenge page instead of a document (status challenged). |
| 502 | operation_unavailable | Threads no longer serves the pinned document for this operation. |
| 502 | unsafe_redirect | Threads redirected the request somewhere other than the login form or the canonical permalink. |
| 502 | unsupported_page | The page or GraphQL result is missing, mismatched or structurally unsupported. |
| 502 | response_too_large | The decoded responses exceeded 8 MiB. |
| 502 | payload_too_complex | The response exceeded the JSON depth or node limits. |
| 502 | request_limit | The upstream request budget was exhausted. |
| 502 | upstream_error | Network failure or HTTP 5xx after the single retry. |
| 503 | busy | All retrieval slots are busy. |
| 504 | timeout | The 45-second deadline elapsed. |