Skip to content

Threads

Threads publishing uses the official Threads API: create a media container, wait until its status is finished, then publish. Nothing is posted by automating threads.com.

Checked against Posts, access tokens, long-lived tokens, replies, and insights.

Kind Rule
Text 500 characters. Emoji count as their UTF-8 bytes. At most 5 unique links.
Link A text post plus one https link card. The card is not available on an image, video, or carousel.
Image One JPEG or PNG, up to 8 MB. Threads downloads it from a public https link.
Video One MP4 or MOV, up to 5 minutes and 1 GB. Threads downloads it.
Carousel 2 to 20 images or videos. Counts as one post.

A profile can publish 250 posts in 24 hours. A first comment is a reply after Threads accepts the post. Other people’s replies are on Inbox and listening. Keyword search and direct messages are not part of this connection.

Threads downloads each image and video from a public https link. The product builds that link from MEDIA_PUBLIC_ORIGIN and a signed /media/pull/{token} path. If the public origin is missing or is not https, publish fails before a container is created.

  1. Open developers.facebook.com/apps and add the Threads API use case. The Threads app id can be different from a Facebook app id.
  2. Add the redirect URI exactly: {APP_PUBLIC_ORIGIN}/api/connect/threads/callback. Check the dashboard for a trailing slash it may have added.
  3. Request threads_basic, threads_content_publish, threads_manage_replies, threads_read_replies, and threads_manage_insights.
  4. Add Threads testers and publish to a tester profile first. threads_content_publish needs advanced access from App Review before anyone who is not a tester can publish. Request advanced access for the reply and insights permissions at the same time.
  5. Put the Threads app id and secret in THREADS_CLIENT_ID and THREADS_CLIENT_SECRET.
  6. Set MEDIA_PUBLIC_ORIGIN and MEDIA_SIGNING_KEY (at least 16 characters).
  7. Set THREADS_HTTP_ALLOW_NETWORK=1 only on the server that may call graph.threads.com.

A short-lived token is exchanged for a long-lived token of about 60 days. Refresh extends a token that is still valid. Threads asks that a token be at least a day old before it is refreshed.