Threads API

The Threads API without chasing Meta's changelog

The Threads API is actively developed by Meta — which means frequent updates and breaking changes. Aether buffers every update and absorbs breaking changes before they reach your integration. Cross-post to Instagram and Threads in one API call.

Post to Threads in under 15 minutes

One call for text, images, and cross-platform publishing. Pass both a Threads and Instagram profileId to post to both simultaneously.

Node.js / TypeScript
import Aether from "aether";

const aether = new Aether({ apiKey: process.env.AETHER_API_KEY });

// Post to Threads
const post = await aether.posts.create({
  text: "One API call. Seven platforms. No OAuth nightmares.",
  profileIds: ["th_user456"],
  overrides: {
    threads: { replyControl: "everyone" },
  },
});

// Cross-post to Threads + Instagram simultaneously
const crossPost = await aether.posts.create({
  text: "Shipping something big today 🚀",
  profileIds: ["th_user456", "ig_abc123"],
  mediaUrls: ["https://your-cdn.com/launch.jpg"],
  overrides: {
    threads: { replyControl: "everyone" },
    instagram: { contentType: "post" },
  },
  scheduledFor: "2026-06-15T12:00:00Z",
});

Free tier · 3 accounts · no credit card

Get your free API key

The same call in Python and cURL

Python
import os
import aether

client = aether.Aether(api_key=os.environ["AETHER_API_KEY"])

# Post to Threads
post = client.posts.create(
    text="One API call. Seven platforms. No OAuth nightmares.",
    profile_ids=["th_user456"],
    overrides={"threads": {"reply_control": "everyone"}},
)

# Cross-post to Threads + Instagram
cross_post = client.posts.create(
    text="Shipping something big today 🚀",
    profile_ids=["th_user456", "ig_abc123"],
    media_urls=["https://your-cdn.com/launch.jpg"],
    scheduled_for="2026-06-15T12:00:00Z",
)
cURL
curl -X POST https://api.aetherhq.dev/v1/posts \
  -H "Authorization: Bearer $AETHER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Shipping something big today 🚀",
    "profileIds": ["th_user456", "ig_abc123"],
    "mediaUrls": ["https://your-cdn.com/launch.jpg"],
    "scheduledFor": "2026-06-15T12:00:00Z",
    "overrides": {
      "threads": { "replyControl": "everyone" },
      "instagram": { "contentType": "post" }
    }
  }'

The actual API response

Aether returns a normalized post object immediately. Once published, publishResults includes the native Threads post ID and publish timestamp for each platform.

JSON
{
  "success": true,
  "data": {
    "id": "post_7r9uv4c",
    "status": "scheduled",
    "text": "Shipping something big today 🚀",
    "profileIds": ["th_user456", "ig_abc123"],
    "mediaUrls": ["https://cdn.aetherhq.dev/org_9p2qrs/launch.jpg"],
    "mediaKeys": ["org_9p2qrs/launch.jpg"],
    "scheduledFor": "2026-06-15T12:00:00.000Z",
    "publishResults": [],
    "publishedAt": null,
    "failedAt": null,
    "createdAt": "2026-06-08T14:23:11.000Z"
  }
}

Threads OAuth — without a Meta developer app

Getting direct Threads API access means: applying for Threads API access separately from your Instagram app, managing Meta OAuth 2.0, and staying current with a rapidly evolving API.

Aether's Connect Link removes all of that. Call one endpoint, get a URL, send it to your user. They authorize on Threads, and the account appears in your dashboard.

TypeScript
// Generate a Connect Link for your user to authenticate Threads
const link = await aether.connectLinks.create({
  platform: "threads",
  redirectUrl: "https://yourapp.com/settings/social",
});

// Send link.url to your user — they click, authorize on Threads/Meta,
// and the account appears in your dashboard automatically.
// No separate Meta developer app setup needed.
console.log(link.url);      // "https://connect.aetherhq.dev/link/cl_th4u7v..."
console.log(link.expiresAt); // "2026-06-15T14:23:11.000Z"

Everything the Threads API gives you

No separate Meta app

Aether holds pre-approved access to the Threads API. Connect an account through our Connect Link flow — no Meta developer portal work on your end.

Cross-post with Instagram

Post to Instagram and Threads simultaneously with one API call. Aether formats content for each platform's requirements automatically.

All content types

Text posts (500 chars), single images, single videos, link attachments, and carousels up to 10 media items. Each type is one API call.

Reply threads

Read replies and post reply threads via the Inbox API. Reply control (everyone, accounts you follow, or mentioned only) is configurable per post.

API stability buffer

Threads API is in active development. Aether tracks every Meta update and absorbs breaking changes before they reach your integration.

Scheduling

Pass scheduledFor and Aether queues the post. Works for all Threads content types. Respects the 250 API calls per 24h limit automatically.

Analytics

Views, likes, replies, reposts, and follower gains — per post and per account. Historical data with custom date ranges via the Analytics API.

MCP / AI agents

Every Threads endpoint is an MCP tool. Claude, Cursor, and any MCP-compatible agent can post, reply, and pull analytics without extra code.

Why not build directly on the Threads API?

The Threads API is production-ready but still maturing. Here's what you take on directly versus using Aether.

FeatureAetherThreads API directly
API accessPre-approved via Aether — connect instantlyApply for Threads API access separately
API stabilityWe buffer breaking changes for youActive development — changes land on you
Cross-postingInstagram + Threads in one API callTwo separate Meta API integrations
AuthenticationOne API keyMeta OAuth 2.0
Rate limitsHandled automatically250 API calls per 24h per token
Platform complianceOfficial API, fully compliantOfficial API, fully compliant

Threads API rate limits

Platform-level limits set by Meta. Aether tracks the remaining quota per token and queues posts automatically when approaching limits.

OperationLimitError codeNote
API calls250 / 24 h per token429Remaining shown in response headers
Text post length500 characters100UTF-8
Video duration5 minutes max100MP4 / MOV
Carousel items10 items max100Images or videos
Link preview1 link per postAuto-generated from URL
Reply depth5 levelsVia Inbox API

Threads API error codes reference

CodeMeaningHow Aether handles it
190Invalid or expired OAuth tokenAether auto-refreshes — reconnect via Connect Link if it persists
200Permission denied for this operationRe-connect via Connect Link to re-request all scopes
324Missing required field in requestAether validates requests; check text or media fields
368Account temporarily blockedContent policy issue — review the post before resubmitting
100Invalid request parameterCheck content type, character limit, and media format
429Rate limit reached (250 calls / 24 h)Aether tracks remaining quota and queues posts automatically

AI-Native

Let your AI agent post to Threads

Aether ships an MCP server that exposes every Threads endpoint as a callable tool. Claude Desktop, Cursor, and any MCP-compatible agent can post, cross-post with Instagram, reply to threads, and pull analytics — with no additional integration code.

Claude Desktop config
# Add to ~/.claude/claude_desktop_config.json
{
  "mcpServers": {
    "aether": {
      "command": "npx",
      "args": ["-y", "aether-mcp"],
      "env": { "AETHER_API_KEY": "sk_live_..." }
    }
  }
}

# Claude can now post to Threads:
# "Post our launch announcement to Threads and Instagram now"
# "Schedule a Threads thread for tomorrow morning"
# "What are our most replied-to Threads posts this week?"

Frequently asked questions

Is the Threads API stable enough for production?+

Threads API launched in June 2024 and has been broadly stable since. Aether tracks every Meta update and absorbs breaking changes, so your integration remains unaffected even during Threads API revisions.

What content types can I post to Threads?+

Text posts (up to 500 characters), single images, single videos, link attachments, and carousels (up to 10 media items). Reply threads and quote posts are also supported via the Inbox API.

Can I cross-post to Instagram and Threads at the same time?+

Yes. If you have both platforms connected, pass both profileIds in one API call. Aether formats the content for each platform's requirements automatically — including character limits and media format differences.

Does Threads have rate limits I need to track?+

Threads applies 250 API calls per 24 hours per token. Aether surfaces the remaining limit in API response headers and queues posts gracefully if you approach it.

Can I reply to Threads posts through the API?+

Yes. The Inbox API supports reading replies and posting reply threads. Reply control (everyone, accounts you follow, or mentioned only) is configurable per post via the overrides object.

Ready to ship your Threads integration?

Free tier · 3 accounts · full API access · MCP server · no credit card.

Get your free API key →