Threads
Publishing to Threads via the Octopost API
Threads
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"
]
}
}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.