Skip to main content
The Threads API in SocialAPI connects Threads accounts. It publishes text, image, video, and carousel posts, reads, answers, and moderates replies, reads mentions and insights, and, in beta, looks up public profiles. Threads has no direct messages in the API. SocialAPI’s own Meta Threads app connects the account, so you register nothing: see Platform apps.

At a glance

Capabilities

An unsupported call returns 501 resource.not_supported. A Beta row depends on a Threads scope that Meta has not granted to SocialAPI’s app for every account: see Beta scopes. Reply moderation, mentions, and insights need a scope that an account connected before 2026-10-17 does not hold: reconnect such an account to use them. The cross-platform matrix is on Platforms.

Connect an account

Connect with POST /v1/accounts/connect and "platform": "threads". The shared flow, request fields, and result are in Connect accounts, and the redirect parameters are in Redirect parameters.
Response (HTTP 202):
A Threads access token lasts about 60 days. SocialAPI refreshes it. If a call returns 401 platform.threads.auth, the person revoked access or the refresh failed: reconnect the account. See Reconnect an account.

Replies

List the replies to a post with GET /v1/inbox/comments/{postId}, where postId is the post’s platform ID. Reply and delete work as described in Comments. Threads calls a comment a reply.
  • Hide and unhide: only replies from other accounts. They need the scope threads_manage_replies.
  • Delete: only replies your account wrote, and it works without threads_manage_replies. A reply from another account cannot be deleted: hide it instead.
  • A like and a private reply return 501 resource.not_supported.

Mentions

A mention is a public Threads post that tags your account. GET /v1/accounts/{id}/mentions lists mentions, and POST /v1/accounts/{id}/mentions/reply replies to one. The mention.received event delivers a mention as it happens, and the list returns the same mention with the same id, so you can match them. Details are in Mentions.
Response (HTTP 200):
Reply to a mention:
media_id is the id from the list response. An account connected without threads_manage_mentions gets 403 with a platform.threads.<code> error code on the list, where <code> is Meta’s error code. Reconnect the account to add the scope.

Insights

GET /v1/platforms/threads/insights returns post-level or account-level metrics. It needs threads_manage_insights. Post-level metrics for one post:
Account-level metrics over a window:
Response (HTTP 200) for level=account:
Each metric comes back as a scalar (value), a dated series (values), or, for follower_demographics, a breakdown. Account-level views is a series, follower_demographics is a breakdown, and the other account-level metrics are scalars.
  • follower_demographics needs exactly one breakdown and rejects since and until.
  • follower_demographics on an account with fewer than 100 followers returns 422 platform.threads.801.
  • follower_demographics returns breakdown, a list of { "dimension", "value" } rows, for example { "dimension": "US", "value": 540 } with breakdown=country. dimension is a country code, a city, an age range, or a gender, matching the breakdown you sent.
  • Metrics for a new post appear after a delay, and a deleted post returns nothing. Both return an empty result, not an error.
The 400 codes for these parameters are in Errors.

Profile discovery

GET /v1/platforms/threads/profile-lookup returns the public profile for an exact username. A leading @ is optional. It needs threads_profile_discovery.
Response (HTTP 200):
  • The lookup matches the exact username. There is no prefix or fuzzy search.
  • Only profiles with 100 or more followers are discoverable.
  • 404 resource.not_found means the username is not discoverable. Threads gives the same answer when the account does not exist, has fewer than 100 followers, or is outside the access tier, so the three cases look the same.
  • Threads allows 1,000 lookups per user per rolling 24 hours. More returns 429 platform.threads.rate_limit.

Webhook events

Threads accounts emit these events to your webhook endpoints. Payloads are in Webhook events. Every post.* event in Webhook events is emitted for this platform.

Limits

GET /v1/accounts/{id}/limits returns posts_remaining, posts_total, replies_remaining, and replies_total.

Scopes

SocialAPI’s Meta Threads app requests these scopes at connect. You apply for no app review. Each scope belongs to the account permissions in the last column, and the consent screen asks for the scopes of the permissions you selected. threads_basic is always requested. Threads asks for publishing and deleting as 1 pair of scopes shared by posts.write and comments.write, so the consent screen can show more than you selected. The account stays limited to the permissions you selected. threads_manage_mentions, threads_manage_replies, and threads_manage_insights are requested since 2026-10-17. An account connected before that date does not hold them: a call that needs one returns 403 with a platform.threads.<code> error code, where <code> is Meta’s error code. Reconnect the account to add them.

Beta scopes

These further scopes are requested only for accounts enrolled in the beta: Until Meta grants a scope for every account, a call that needs it from an account without it returns 403 with a platform.threads.<code> error code, where <code> is Meta’s error code. A beta scope is added when the account connects: reconnect the account to add one granted later.
Last modified on October 19, 2026