Threads API · v1.0 · graph.threads.net

Program the conversation

Publish, read, search, listen, and measure - the official Meta Threads API, fully documented on one page. Free to use, OAuth-secured, with code in Python, JavaScript, and PHP.



FREE · OAUTH 2.0 · WEBHOOKS · 250 POSTS/DAY
QUICKSTART.SH
# 1 - stage the post
curl -X POST "https://graph.threads.net/v1.0/$UID/threads" \
  -d media_type=TEXT \
  -d text="Hello, Threads 👋" \
  -d access_token=$TOKEN
→ {"id":"18027481937261"}

# 2 - go live
curl -X POST "https://graph.threads.net/v1.0/$UID/threads_publish" \
  -d creation_id=18027481937261 \
  -d access_token=$TOKEN
→ published ✓
Threads API documentation

Where the docs live, and how they're organized

Official documentation sits on Meta for Developers - everything else on the internet is commentary.

📖

developers.facebook.com/docs/threads

Getting started, publishing, insights, keyword search, reply management, webhooks, oEmbed, and troubleshooting - one canonical tree.

🧭

How to read it

Start at Overview → Get Started for app setup, then jump straight to the guide for your use case. Reference pages list every field and permission per endpoint.

📰

Watch the changelog

The API ships fast - 2026 alone added ghost posts, Instagram cross-sharing, spoiler tags, text attachments, and reply approvals. The changelog page is worth a bookmark.

Threads API pricing

Price: zero. Currency: rate limits.

Meta publishes no paid tier, per-call fee, or quota-upgrade product for the Threads API.

$0no fees, no paid tiers, no credit card required
250posts per profile per rolling 24 hours
1,000replies per profile per rolling 24 hours
500keyword searches per rolling 7 days

Your real costs are engineering time and hosting. Budget for those; the API itself stays free.

Threads API access

Getting access, step by step

Access is self-serve: no application essay, no sales call.

Create a Meta app

In the Meta for Developers dashboard, create an app and add the Threads API use case.

Configure & test

Add redirect URIs, invite Threads testers, and exercise endpoints with standard access on your own account.

Request advanced access

For public users and sensitive scopes (like threads_keyword_search), complete App Review with a demo of your use case.

Ship

Move tokens to production storage, subscribe webhooks, and monitor your quota via /threads_publishing_limit.

Threads API key

There is no "API key" - there are tokens

Unlike simple key-based APIs, Threads uses OAuth access tokens that represent a specific user's permission grant.

🔑

App credentials

Your app has an App ID and App Secret - these identify your software, but can't call user endpoints alone.

🎫

User access tokens

Each connected account grants a token scoped to specific permissions - that token is what authorizes every API call.

🔒

Treat them like passwords

Environment variables and secret managers only - never in code, repos, or client-side JavaScript.

Threads developer API

A developer-friendly surface

The developer experience is deliberately boring - in the best way.

🧪

Graph API Explorer

Generate test tokens and fire requests from the browser before writing a line of code.

👥

Test users & roles

Invite teammates as testers so development never touches production accounts.

📐

Predictable REST

JSON in, JSON out, standard HTTP codes, cursor pagination, and field selection with ?fields= - if you've used any Graph API, you already know it.

Meta Threads API

The Meta platform context

"Meta Threads API" is the formal name - and the Meta pedigree is the point.

🏛️

Same platform machinery

App dashboard, App Review, permissions model, and policy framework are shared with Facebook and Instagram APIs - one mental model across Meta.

🛡️

Same governance

Meta Platform Terms apply: respect user data, request minimal scopes, and pass review for public access.

🚀

Rapid roadmap

Meta ships Threads API features fast - the 2026 wave (ghost posts, cross-sharing, reply approvals, webhooks) signals long-term platform investment.

Instagram Threads API

Where Instagram and Threads meet

Threads accounts are built on Instagram identity - and the API reflects it.

🪪

Identity through Instagram

Accounts authenticate via their Instagram login; usernames stay in sync across both apps.

📤

Cross-share to Stories

The 2026 threads_share_to_instagram scope enables crossreshare_to_ig parameters on publish - one API call, two surfaces.

⚠️

Don't confuse the APIs

The Instagram Graph API and Threads API are separate products with separate tokens and scopes - related family, different doors.

Threads Graph API

Graph API conventions, Threads host

Threads follows Graph API conventions on its own host: graph.threads.net.

BASE URL & CONVENTIONS
# Base URL - note: threads.net, not facebook.com
https://graph.threads.net/v1.0/...

# Field selection
GET /me?fields=id,username,threads_profile_picture_url

# Cursor pagination
GET /me/threads?limit=25&after={cursor}

# Versioned paths - pin your version, watch deprecations
GET /v1.0/{user_id}/threads
Threads publishing API

The two-step publish flow

Every post - text, image, video, carousel, GIF, or ghost post - goes container-first, then publish.

PUBLISH A TEXT POST
# Step 1 - create the media container
POST /v1.0/{user_id}/threads
  ?media_type=TEXT
  &text=Hello+Threads+👋
  &access_token={token}
→ {"id": "18027..."}  # creation_id

# Step 2 - publish it
POST /v1.0/{user_id}/threads_publish
  ?creation_id=18027...
  &access_token={token}
→ {"id": "18027..."}  # live post ID ✓

# Media: media_type=IMAGE|VIDEO|CAROUSEL + image_url/video_url
# 2026 extras: ghost posts, spoiler tags, crossreshare_to_ig
Threads analytics API

Build dashboards on the numbers

"Analytics API" in practice means the insights endpoints plus your own storage and charts.

📡PullINSIGHTS ENDPOINTS
🗄️StoreYOUR DB · DAILY CRON
📈ChartTRENDS OVER TIME
🔁ActFEED THE CALENDAR

The API returns current values; historical trendlines are yours to build by snapshotting on a schedule. Data availability starts from April 2024.

Threads insights API

Every metric the API exposes

Two levels: per-post media insights and account-level user insights.

LevelMetricsNotes
Post (media)views, likes, replies, reposts, quotes, sharesGET /{media_id}/insights?metric=…
Account (user)views, likes, replies, reposts, quotes, followers_count, follower_demographicsDemographics need a minimum follower threshold

Requires the threads_manage_insights scope.

Threads posts API

Reading posts and profiles

Retrieval is as important as publishing - here's the read side.

READ ENDPOINTS
# Your profile
GET /me?fields=id,username,threads_biography

# Your posts (media objects)
GET /me/threads?fields=id,text,media_type,media_url,
    permalink,timestamp,topic_tag

# A single post
GET /{media_id}?fields=id,text,media_type,children

# Public search (advanced access)
GET /keyword_search?q=coffee&search_mode=TAG
    &media_type=TEXT_POST
Threads replies API

Conversations, programmatically

Read threads, manage replies, and - since 2026 - approve them before they go live.

🧵

Read conversations

Fetch replies to a post and full conversation trees, with author, text, and timestamps for each node.

✍️

Reply & moderate

Post replies via the publish flow with reply_to_id, and hide or restrict replies that cross your lines.

Approval gates

2026's reply-approval controls let workflows hold outbound replies for human sign-off - the API-level safety net for automation.

Scopes: threads_read_repliesthreads_manage_repliesthreads_manage_mentions

Threads webhook API

Real-time events, pushed to you

Stop polling. Webhooks deliver publish and delete events to your endpoint the moment they happen.

WEBHOOK LIFECYCLE
# 1. Subscribe in the app dashboard: callback URL + verify token

# 2. Meta verifies your endpoint
GET https://you.dev/webhooks/threads
  ?hub.mode=subscribe&hub.challenge=1158201&hub.verify_token=…
→ respond with hub.challenge

# 3. Events arrive as signed POSTs
POST https://you.dev/webhooks/threads
{ "entry": [{ "changes": [{ "field": "threads",
    "value": { "event": "published", "media_id": "…" } }] }] }

# 4. Verify X-Hub-Signature-256, then trigger your workflow
Threads API integration

Integration patterns that ship

Four proven shapes for building Threads into a product.

PatternShapeUsed by
SchedulerQueue in DB → cron → publish flowBuffer-style tools
InboxWebhooks + replies API → unified queueHootsuite-style suites
AnalyticsDaily insights snapshots → warehouse → BIMetricool-style dashboards
AgentMCP tools + LLM + approval gatesAI-native automations
Threads API integration services

When to hire the integration out

Not every team should build this in-house - here's how to buy it well.

🧑‍💻

Who does this work

Freelance API developers, automation consultancies (Zapier/Make/n8n specialists), and Meta Business Partners with engineering arms.

📋

Scope it precisely

"Publish queue + mention webhooks into HubSpot" is buildable in days; "integrate Threads" is a blank check. List endpoints and events explicitly.

🔐

Own your assets

The Meta app, tokens, and code repository belong in your accounts. A vendor who insists otherwise is building you a hostage situation.

Threads API tutorial

Zero to first post in an afternoon

The complete quickstart, condensed.

Create the app

Meta for Developers → Create App → add the Threads use case. Note your App ID and Secret.

Add yourself as a tester

Invite your Threads account under Roles, and accept the invite in the Threads app's website-permissions settings.

Get a token

Use the Graph API Explorer (or your OAuth flow) to generate a token with threads_basic and threads_content_publish.

Publish a test post

Run the two-step flow from the publishing section above - container, then threads_publish.

Read it back

GET /me/threads to confirm, then add insights, webhooks, and scheduling as your app grows.

Threads API Python

Python quickstart

requests is all you need.

PYTHON · PUBLISH + INSIGHTS
import requests

BASE = "https://graph.threads.net/v1.0"

# publish (two-step)
c = requests.post(f"{BASE}/{USER_ID}/threads", params={
    "media_type": "TEXT",
    "text": "Hello from Python 🐍",
    "access_token": TOKEN}).json()

requests.post(f"{BASE}/{USER_ID}/threads_publish", params={
    "creation_id": c["id"], "access_token": TOKEN})

# insights for a post
m = requests.get(f"{BASE}/{c['id']}/insights", params={
    "metric": "views,likes,replies,reposts",
    "access_token": TOKEN}).json()
print(m)
Threads API JavaScript

JavaScript / Node quickstart

Native fetch, nothing else. Keep tokens server-side.

NODE · PUBLISH + WEBHOOK HANDLER
const BASE = "https://graph.threads.net/v1.0";

// publish (two-step)
const c = await fetch(`${BASE}/${USER_ID}/threads?media_type=TEXT` +
  `&text=${encodeURIComponent("Hello from Node 👋")}` +
  `&access_token=${TOKEN}`, { method: "POST" })
  .then(r => r.json());

await fetch(`${BASE}/${USER_ID}/threads_publish` +
  `?creation_id=${c.id}&access_token=${TOKEN}`,
  { method: "POST" });

// express webhook verification
app.get("/webhooks/threads", (req, res) =>
  res.send(req.query["hub.challenge"]));
Threads API PHP

PHP quickstart

Shown with cURL - swap in Guzzle for real projects.

PHP · PUBLISH
$base = "https://graph.threads.net/v1.0";

function post($url) {
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $out = json_decode(curl_exec($ch)); curl_close($ch);
  return $out;
}

$c = post("$base/$userId/threads?" . http_build_query([
  "media_type" => "TEXT",
  "text" => "Hello from PHP 🐘",
  "access_token" => $token]));

post("$base/$userId/threads_publish?creation_id={$c->id}" .
  "&access_token=$token");
Threads API rate limits

The limits, in one table

Rolling windows, per profile - check live headroom any time.

ActionLimitWindow
Posts250Rolling 24 hours
Replies1,000Rolling 24 hours
Deletions100Rolling 24 hours
Keyword searches500Rolling 7 days

Live quota: GET /{user_id}/threads_publishing_limit. Handle 429s with exponential backoff - well-behaved apps rarely see them.

Threads API authentication

OAuth 2.0, end to end

The full authorization dance in five moves.

Redirect to authorize

Send the user to threads.net/oauth/authorize with your client_id, redirect_uri, and requested scopes.

User approves

They review the permissions your app requests and grant access with their Threads account.

Receive the code

Threads redirects back to you with a short-lived authorization code.

Exchange for a token

Server-side, trade code + app secret at /oauth/access_token for a short-lived user token.

Upgrade to long-lived

Exchange again at /access_token for a ~60-day token - then refresh before expiry.

Common scopes: threads_basicthreads_content_publishthreads_manage_insightsthreads_manage_repliesthreads_keyword_searchthreads_share_to_instagram

Threads API access token

Token lifecycle & hygiene

Two token types, one refresh habit.

⏱️

Short-lived

Fresh from the OAuth exchange, valid for hours - fine for testing, wrong for production.

📆

Long-lived

Exchanged from a short-lived token, valid ~60 days - refresh it on a schedule (a token past 24h old can be refreshed) so users never re-auth.

🧯

Revocation reality

Users can revoke access anytime from their settings; handle 401s by prompting a clean re-connect, not by failing silently.

Threads API automation

The API as an automation engine

Publishing, webhooks, and insights compose into full pipelines - covered in depth on the Automation guide.

Cron / triggerSCHEDULE OR EVENT
📤Publish flowCONTAINER → LIVE
🔔WebhookCONFIRM + FAN OUT
📊InsightsMEASURE + LEARN

Recipes, no-code wiring (Zapier · Make · n8n), and AI-agent patterns live on the Automation & AI Tools guide.

Threads API alternatives

Alternatives, honestly assessed

There's exactly one sanctioned way to program Threads - and some genuinely different roads if you want an open ecosystem.

🚫

Unofficial libraries & scrapers

Reverse-engineered clients and headless-browser bots violate Meta's terms and get accounts restricted. Whatever they promise, the official API now does legitimately - don't.

🐘

The fediverse route

Threads speaks ActivityPub - and so does Mastodon, whose fully open API has no corporate review process. For open-web projects, it's the closest cousin.

🦋

AT Protocol (Bluesky)

A different open ecosystem with a famously accessible API - worth knowing if your product targets text-social broadly rather than Threads specifically.

For reaching Threads' 400M+ users specifically, the official Meta Threads API is the alternative-free answer - free, capable, and actively developed.

Two calls to production.

Create a Meta app, grab a token, run the two-step flow - your first programmatic post ships this afternoon.

FREE FOREVER · 250 POSTS/DAY · WEBHOOKS INCLUDED