Skip to content

Threads API

Postproxy publishes feed posts and multi-post chains to Threads, and lets you read and reply to comments. Threads has no direct-message API.

Every request below uses the base URL https://api.postproxy.dev and an Authorization: Bearer YOUR_API_KEY header. Replace YOUR_API_KEY and the example IDs with your own.

Platform IDthreads
Formatspost (default)
Character limit500
MediaOptional
PlacementsNone
CommentsList, reply, hide/unhide
Direct messagesNo
Post chainsYes

Threads has no custom parameters — pass an empty object (or omit it).

MediaMax sizeFormatsCountDuration
Image8 MBjpg, png, gif, webp20
Video1 GBmp4, mov1up to 5 min
  • Text-only posts are allowed; media is optional.
  • Images and a video can be mixed in a carousel (up to 20 items).
  • Minimum image dimensions: 200×200 px.
Terminal window
# Simple post with an image
curl -X POST "https://api.postproxy.dev/api/posts" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"post": { "body": "Exciting announcement coming soon! Stay tuned." },
"profiles": ["prof_abc123"],
"media": ["https://example.com/image.jpg"],
"platforms": { "threads": {} }
}'

Threads supports native thread conversations. Pass a thread array of follow-up posts; each child can carry its own media.

Terminal window
# A 3-post thread
curl -X POST "https://api.postproxy.dev/api/posts" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"post": { "body": "1/ Here is a thread about our launch" },
"profiles": ["prof_abc123"],
"thread": [
{ "body": "2/ First, we built the foundation...", "media": ["https://example.com/shot.jpg"] },
{ "body": "3/ Check it out at example.com" }
]
}'

Threads comments are managed through the Comments API. All comment writes are asynchronous and need the profile_id query parameter.

ActionSupported
List / readYes
ReplyYes
Hide / unhideYes
DeleteNo
Like / unlikeNo
  • Comment attachments can carry IMAGE, VIDEO, AUDIO, and GIF media on both top-level comments and replies.
  • A comment.created webhook fires when a new comment is synced.
Terminal window
# List comments on a post
curl "https://api.postproxy.dev/api/posts/post_abc123/comments?profile_id=prof_abc123" \
-H "Authorization: Bearer YOUR_API_KEY"
Terminal window
# Reply to a comment
curl -X POST "https://api.postproxy.dev/api/posts/post_abc123/comments?profile_id=prof_abc123" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "body": "Glad you liked it!", "parent_id": "cmt_abc123" }'
Terminal window
# Hide / unhide a comment
curl -X POST "https://api.postproxy.dev/api/posts/post_abc123/comments/cmt_abc123/hide?profile_id=prof_abc123" \
-H "Authorization: Bearer YOUR_API_KEY"
curl -X POST "https://api.postproxy.dev/api/posts/post_abc123/comments/cmt_abc123/unhide?profile_id=prof_abc123" \
-H "Authorization: Bearer YOUR_API_KEY"

Not supported — Threads has no DM API. Calls to the Direct Messages API for a Threads profile return 422.

Subscribe with the Webhooks API:

Terminal window
curl -X POST "https://api.postproxy.dev/api/webhooks" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/webhooks/postproxy",
"events": ["platform_post.published", "comment.created"]
}'

Events relevant to Threads:

EventWhen
post.processedA post is ready to publish
platform_post.publishedA post was published to the platform
platform_post.failedA post failed to publish (retries exhausted)
platform_post.failed_waiting_for_retryA publish attempt failed; will retry
platform_post.insightsNew analytics snapshot
comment.createdA comment was synced on a Threads post
profile.connected / .disconnectedConnection state changed
profile.statsNew profile stats snapshot
media.failedA media attachment failed to process
  • The 500-character limit is strict — longer copy should be split across a post chain.
  • Threads comments cannot be deleted or liked through the API.