Threads
Posting to Threads through Octopost: 500 characters, images and carousels, reply chains. Opens to customers after Meta approves the Octopost app.
Status: available after Meta approval. Threads publishing works, but Meta has not yet approved the Octopost app, so customers can't connect a Threads account yet. This page describes how it will work.
Threads supports text posts, images, videos, carousels, and multi-post reply threads. Octopost handles Meta's two-step container publishing, processing status polling, and reply threading automatically: you just send us your content.
Content Limits#
| Constraint | Limit |
|---|---|
| Post text | 500 characters |
| Carousel items | 10 images or videos |
| Image formats | JPEG, PNG |
| Video formats | MP4, MOV |
| Media URLs | Must be publicly accessible |
Good to Know#
- URLs count toward the 500-character limit. Plan your text length accordingly. URLs in post text will render as link previews.
- No editing after publish. Once a post goes live on Threads, it cannot be edited via the API. Double-check your content before sending.
- Unpublished containers expire after 24 hours. This is a Meta-side constraint. If Octopost encounters a publishing delay, it will retry well within this window.
- Media must be at a public URL. Threads fetches images and videos from the URL you provide. If the URL is behind auth or a CDN that blocks Meta's servers, the post will fail.
- Instagram Business or Creator account required. Users connect their Threads account through Octopost's account settings. A personal Instagram account won't work: they'll need to upgrade to Business or Creator first.
Platform-Specific Features#
Reply Threads#
Send multiple posts as a thread. Octopost publishes them in sequence, linking each reply to the previous post:
{
"thread": [
{ "content": "Starting a thread on Threads..." },
{ "content": "Here's the second part." },
{ "content": "And the conclusion." }
],
"platforms": ["threads"]
}Octopost creates each post and wires up the reply_to_id chain for you.
Carousels#
Include up to 10 images or videos. Octopost assembles the individual item containers and the parent carousel container behind the scenes:
{
"content": "Photo dump from the weekend",
"platforms": ["threads"],
"media": {
"images": [
"https://example.com/photo1.jpg",
"https://example.com/photo2.jpg",
"https://example.com/photo3.jpg"
]
}
}Threads (yes, threads on Threads)#
Put the main post in content and any replies in segments. Octopost publishes them in order using Threads' native reply_to_id reply chain, so they appear as a connected thread:
{
"content": "Shipping a thing today.",
"platforms": ["threads"],
"segments": [
{ "content": "https://example.com" }
]
}Threads' native API requires a two-step publish (create container, then publish) for each segment, so threads with many segments take a few seconds per post. The link-in-reply pattern works well here too: Threads prefers posts without URLs in the main body. See Threaded Posts for the full guide.
Rate Limits#
Meta does not publish specific rate limits for the Threads API. Octopost tracks request volume and uses conservative pacing to keep your account safe.
Things Octopost Handles for You#
You don't need to worry about any of this, but in case you're curious:
- Meta OAuth flow. Threads authentication goes through Meta's OAuth system with
threads_basic,threads_content_publish, andthreads_manage_repliesscopes. Octopost manages the entire connection and token lifecycle. - Two-step container publishing. Threads requires you to first create a media container, then publish it in a separate API call. Octopost does both steps and handles any failures between them.
- Container processing status polling. After creating a container, Threads may need time to process media before it can be published. Octopost polls the container status and only publishes once processing is complete.
- Reply threading via
reply_to_id. When you send a multi-post thread, Octopost publishes the first post, captures its ID, then uses it as thereply_to_idfor the next post, chaining the entire thread together. - Carousel container assembly. Each carousel item must be created as its own container, then a parent carousel container is created referencing all of them. Octopost handles this multi-step process from a single request.
- Content validation. Octopost validates the 500-character limit before sending anything to Meta, so you get an immediate error instead of a delayed API failure.
- Error reporting. If something goes wrong: media URL not accessible, account not properly connected, container creation fails: Octopost reports a clear error describing what happened and why.
Example#
{
"content": "Hello from Octopost!",
"platforms": ["threads"],
"media": {
"images": ["https://example.com/photo.jpg"]
}
}That's it. Octopost takes care of the rest.