Channels
Threads
What Threads lets an agent do through uplika, what it costs you in limits, and what it simply does not offer.
Quick reference
| Name | Type | Description |
|---|---|---|
characters | text | 500 |
images | media | up to 20 per post |
carousel | media | 2-20 items, images and video can be mixed |
video | media | 1 per post |
text alone | media | allowed |
posts / 24h | limit | 250 |
deletes / 24h | limit | 100 |
status | state | beta |
These numbers come from the same file the server validates against, so they cannot drift from what publishing actually accepts.
Which permissions does connecting ask for?
Connecting asks Meta for six permissions. The screen the person sees is Meta's, so those are the names they will read. Ours are the narrower scopes an agent holds after that.
What Meta asks the person to approve
| Name | Type | Description |
|---|---|---|
threads_basic | meta | Read the account's own profile and posts. Every other call depends on it. |
threads_content_publish | meta | Create a post and publish it. |
threads_delete | meta | Delete a post the account published. |
threads_read_replies | meta | Read the reply thread under the account's posts. |
threads_manage_replies | meta | Reply to a post or a reply, and hide a reply. |
threads_manage_insights | meta | Read view, like, reply, repost, quote and share counts. |
What an agent token carries
| Name | Type | Description |
|---|---|---|
accounts:read | read | List connected channels. |
posts:read | read | Read publishing history, replies and insights. |
posts:write | write | Publish, delete, reply, hide and upload. |
offline_access | oauth | Keep the agent connected after the browser closes. |
How do I publish my first Threads post?
Connect the channel in the dashboard, then call publish. Nothing else has to be set up first.
curl -X POST https://api.uplika.com/v1/posts \
-H "Authorization: Bearer $UPLIKA_KEY" \
-H "Content-Type: application/json" \
-d '{"content":"hello from an agent","accountIds":["acc_..."]}'What kinds of posts can I publish?
Text on its own, one image, one video, or a carousel that mixes images and video. A carousel needs at least two items. Alt text belongs to a carousel item, not to the post, and Threads rejects it anywhere else.
What do the image files have to look like?
We hand Threads a public URL and Threads fetches it, so the file has to already be somewhere it can reach. Uploading through us puts it on our CDN and gives you that URL.
| Name | Type | Description |
|---|---|---|
formats | image | image/jpeg, image/png |
size | image | up to 8MB |
aspect ratio | image | up to 10:1 (any pixel width) |
count | image | up to 20 per post |
formats | video | video/mp4, video/quicktime |
size | video | up to 2048MB |
length | video | up to 43200 seconds |
width | video | up to 3840px |
What numbers can I read back?
Six per post: views, likes, replies, reposts, quotes and shares. They come from the platform when you ask, and we keep a daily snapshot so the history survives even after you delete the post.
What does the Threads API not give us?
Not everything you can do in the Threads app is in its API. These are gaps on Meta's side, not ours.
| Polls | There is no way to attach one when creating a post. |
|---|---|
| Quote posts | You can link to a post, but you cannot quote it as a quote post. |
| Editing after publishing | Delete and post again is the only route. |
| Who liked it | You get the count, never the list of people. |
| Direct messages | Not part of the Threads API at all. |
| New top level comments | You can reply to a post or to a reply. You cannot start a fresh comment on someone else's post. |
What can uplika not do yet?
These are ours to build, and none of them are blocked by the platform.
| Scheduling | Publishing happens the moment you call it. There is no queue and no draft. |
|---|---|
| Drafts | Nothing is stored half finished. |
| Webhooks | Poll get_post instead. It settles in seconds for text. |
Can an agent work the replies?
It can read the thread under a post, answer any reply in it, and hide a reply. It cannot start a new top level comment on a post that is not yours, because the API has no call for that.
What do the channel's own error messages mean?
When Threads refuses something we pass its sentence through instead of rewriting it, so you can search for the exact words. These are the ones Meta documents for video containers (checked 2026-08-10). The rest arrive as written.
| What Threads says | What it means | What to do |
|---|---|---|
| FAILED_DOWNLOADING_VIDEO | Threads could not fetch the file from the URL we handed it. | Upload through us so the file sits on our CDN, or make sure the URL is public and stays up for a few minutes. |
| INVALID_ASPEC_RATIO | The frame shape is outside what Threads takes. The spelling is Meta's, not a typo of ours. | Re-encode closer to square or 9:16 and publish again. |
| INVALID_DURATION | The clip is longer or shorter than Threads allows. | Trim it and publish again. Retrying the same file will fail the same way. |
| UNKNOWN | Threads failed on its own side and did not say why. We replace this one with a sentence, because the word on its own tells you nothing. | Try again. The same file usually goes through on a second attempt. |
Questions
Can I post to Threads without connecting the channel first?
No. Publishing needs a token for that specific account, and the only way to get one is the connect flow in the dashboard. An agent cannot do it on your behalf.
Does a long post get split automatically?
No, and that is on purpose. Pass threadItems and you decide where the breaks fall. We keep the order and wait for each piece to land before sending the next one.
What happens to my posts if I disconnect the channel?
They stay on Threads. We keep our record and its daily metric snapshots too, so the history does not disappear. What stops is publishing.