Threads posting

Post and schedule to Threads

Status 200 Uploads publishes to Threads for you: a text post of up to 500 characters, text with an image or a video, or a carousel of up to 20 files, now or at a time you pick. Send it from the dashboard, the REST API, Python, n8n or an AI app such as Claude, alongside the same post on your other networks. You sign in on Threads itself; our own Meta app does the publishing.

  • Checked on

Threads at a glance

What you can post
Text on its own, text with one image or one video, or a carousel of 2 to 20 files.
Largest video
1 GB per file. File limits of every network
Largest image
8 MB per image.
Video length
Up to 5 minutes, Threads' own limit.
Text
Up to 500 characters. Longer text is refused before Threads is called, so nothing is cut without you knowing.
Scheduling
Schedule a post up to 365 days ahead, or send it now.
Plans
Threads is on every plan, Free included. Pricing
How it connects
You sign in on Threads itself (OAuth), so we never see your Threads password.

What you can post to Threads

Text posts

A post of words only: a question, an update or a link to something new. It can have up to 500 characters, links and hashtags included. A post with neither text nor a file is refused, since Threads would have nothing to show.

Video posts

Text with one video of up to 1 GB and 5 minutes. The answer gives the post's permalink once Threads has published it.

Image posts

Text with one image of up to 8 MB. A larger image is refused before Threads is called.

Carousels

Text with 2 to 20 files in one post, which people swipe through on Threads.

What we change for you, and tell you

When we change or flag something in a Threads post, the answer (and History) names it with one of these codes. Your original file is never changed.

  • unknown_field: A field we do not read is not used, and the answer says so (with the field name we think you meant, when there is one). The post still goes out.

  • field_not_used: A field we read but could not use for this post (for example another network's block, or a setting that does not apply to this kind of post) is named in the answer. The post still goes out.

  • options_outside_post: An option sent next to "post" instead of inside it is not used, and the answer says where it belongs.

  • media_url_not_kept: A scheduled post that names its media by web address fetches the file when it goes out, and we keep no copy: the answer reminds you the file must still be there then.

  • posts_close_together: The answer warns when another Threads post of the account is scheduled within 20 seconds: leave at least a minute between them.

  • caption_over_limit: In a dry run or a scheduled post, a caption longer than Threads allows is flagged. We send it as it is; Threads may refuse it or cut it short.

  • moved_to_next_day: When the daily limit of the profile is reached while a scheduled post is going out, the networks that did not fit move to the next day as a scheduled post of their own, and the post read back says so.

  • queued_for_next_day: On a plan with a daily limit, a post over the day's limit is queued for the next day instead of failing (answer 202), and the answer gives the time.

Post to Threads your way

The same Threads post from the dashboard, the REST API, Python, n8n or an AI app.

From the dashboard

  1. Under Connections, connect Threads by signing in on Threads.
  2. In Schedule, write the text and add a file if the post has one; the composer will not send a text longer than Threads allows.
  3. Pick Threads with the other networks you want, then publish now or choose a date and time.

Connect Threads →

From the REST API

A text post to Threads (POST /api/v2/posts)
curl -X POST 'https://status200uploads.com/api/v2/posts' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer rl_your_api_key' \
  -H 'Idempotency-Key: threads-launch-note' \
  -d '{
    "post": {
      "accountId": "@yourprofile",
      "platform": "threads",
      "content": {
        "text": "Version 2 is out today. What should we build next?"
      }
    }
  }'

Full page →

From Python

Check the length, then post with the status200uploads package
from status200uploads import Status200

s200 = Status200()  # STATUS200_API_KEY in the environment

text = "Version 2 is out today. What should we build next?"
if len(text) > 500:
    raise SystemExit("Threads refuses text over 500 characters")

result = s200.publish({"accountId": "@yourprofile", "platform": "threads", "content": {"text": text}}, wait=True)
print(result.final.get("permalink") if result.final else result.code)

Full page →

From n8n

  1. Add an HTTP Request node that sends POST to https://status200uploads.com/api/v2/posts.
  2. Headers: Authorization with Bearer rl_your_key, Content-Type application/json, and Idempotency-Key {{ $json.id }}-threads, so a rerun of the workflow gets the first answer back instead of a second post.
  3. Body: the JSON below. A text over the Threads limit comes back as 400 api_error, so route that output to a step that shortens it.
The HTTP Request body
{
  "post": {
    "accountId": "@yourprofile",
    "platform": "threads",
    "content": { "text": "{{ $json.text }}" }
  }
}

Full page →

From an AI app

Write a short Threads post about our new opening hours and post it at 18:00 today.

The app drafts the text, checks it with status200_validate_post (a text over the Threads limit is flagged before anything is sent) and schedules it with status200_schedule_post. You get the scheduled post's id back, and the app can move or cancel it for you before 18:00.

Full page →

Threads errors you may see

The code in the answer, what it means and what to do. Each one is in the API reference.

Threads error codes
HTTPCodeWhat it meansWhat to do
400api_errorThe text is over 500 characters, or the post has neither text nor a file. Nothing was sent to Threads.Shorten the text, or add the missing text or file, and send it again.
413MEDIA_TOO_LARGEThe video is larger than Threads takes.Use a video of at most 1 GB.
500platform_errorThreads answered with a server error that named no code.Send it again once, with the same Idempotency-Key.
404media_not_foundThe mediaID is not a file of your account, or it was removed after 7 days.Upload the video again and use its new mediaID.
409media_processingThe video you imported is still being fetched into your library.Wait the seconds in Retry-After and send the post again.

Threads questions

Start posting to Threads

Threads is on every plan, Free included. Everything on this page was checked on 26 October 2026.