Threads API
Use the Crosspostify API to publish images, multi-image carousels, videos, and text threads directly to Meta's text-first social network.
Threads is Meta's fast-growing, text-based conversation app, heavily integrated with the Instagram ecosystem. It's a prime platform for rapid-fire discussions, developer build-in-public updates, and community engagement.
The Crosspostify Threads integration supports all native post types: single images, swipeable carousels (up to 10 images), videos (up to 5 minutes), and standard text posts. Threads enforces a 500-character limit per post.
This page covers everything specific to Threads when using the Crosspostify API. For general authentication, rate limits, and error handling, see the full API Reference.
Threads-Specific Parameters
When publishing to a Threads account, parameters like title are ignored, as Threads is a single-stream text and media platform. Your main focus will be the caption and media attachments.
accountId✓ AppliesRequired. Your Threads account ID from /social-accounts.caption✓ AppliesThe thread text. Max 500 characters. Supports hashtags, links, and emojis.title✗ IgnoredNot rendered on Threads — omit this field.boardId✗ IgnoredPinterest only — ignored for Threads.is_aigc✗ IgnoredTikTok only — ignored for Threads.facebookFirstComment✗ IgnoredFacebook only — ignored for Threads.textFormatPresetId✗ IgnoredFacebook only — ignored for Threads.Threads enforces a firm 500-character limit per post. Crosspostify will return a validation error if your caption exceeds this limit. Long URLs also count against this limit.
Supported Endpoints
Threads fully supports all four Crosspostify post types:
/post/imageImage PostPublish a single image to Threads. The image is displayed beautifully inline within the feed, perfect for sharing visual updates, charts, or memes alongside your text.
Image Post Notes
- Images appear uncropped in the feed. Portrait (4:5) and square (1:1) perform best.
- Upload your image first via
POST /mediaand use the returnedmediaId - Caption counts toward the 500-character limit.
- All datetime values must be in UTC timezone (ISO 8601 format with
Zsuffix).
Request Body
mediaIdstringrequiredThe ID of the uploaded image file. Obtain this from POST /media.
scheduledDatestringoptionalSchedule the post for a future time (ISO 8601 with 'Z' suffix). Omit to post immediately.
postsarrayrequiredArray of post objects. Include one object per Threads account.
posts[].accountIdstringrequiredThe Threads account ID. Retrieve from GET /social-accounts.
posts[].captionstringoptionalPost text. Max 500 characters. URLs are auto-linked by Threads.
Response
Code Example
curl -X POST "https://v1.api.crosspostify.com/post/image" \
-H "X-API-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"mediaId": "img_12345",
"scheduledDate": "2025-06-01T14:00:00Z",
"posts": [
{
"accountId": "acc_threads_123",
"caption": "Just dropped the new design system. What do you think? 🧵👇 #design #ui"
}
]
}'/post/imagesCarouselPublish an image carousel to Threads. Users can horizontally swipe through up to 10 images, making this highly engaging for storytelling or photo dumps.
Carousel Notes
- Threads supports a maximum of 10 images per post.
- Images appear in the exact order provided in your
mediaIdsarray. - The platform favors identical aspect ratios across all images in a carousel for a smooth swiping experience.
Request Body
mediaIdsarrayrequiredOrdered array of image media IDs. Maximum 10 images.
scheduledDatestringoptionalSchedule the post for a future time (ISO 8601 with 'Z' suffix). Omit to post immediately.
postsarrayrequiredArray of post objects. Include one object per Threads account.
posts[].accountIdstringrequiredThe Threads account ID. Retrieve from GET /social-accounts.
posts[].captionstringoptionalShared caption for all images. Max 500 characters.
Response
Code Example
curl -X POST "https://v1.api.crosspostify.com/post/images" \
-H "X-API-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"mediaIds": ["img_001", "img_002", "img_003", "img_004"],
"scheduledDate": "2025-06-01T14:00:00Z",
"posts": [
{
"accountId": "acc_threads_123",
"caption": "Behind the scenes from today\'s studio session. 📸 Which one is your favorite?"
}
]
}'/post/videoVideo PostPublish a native video to Threads. Videos up to 5 minutes long are supported, making Threads an excellent secondary distribution channel for TikToks, Reels, or Shorts.
Video Post Notes
- Videos can be up to 5 minutes long.
- Portrait (9:16) videos are highly recommended, as they take up the most screen real estate on mobile devices.
- Upload your video first via
POST /mediaand use the returnedmediaId.
Request Body
mediaIdstringrequiredThe ID of the uploaded video file. Obtain this from POST /media.
scheduledDatestringoptionalSchedule the post for a future time (ISO 8601 with 'Z' suffix). Omit to post immediately.
postsarrayrequiredArray of post objects. Include one object per Threads account.
posts[].accountIdstringrequiredThe Threads account ID. Retrieve from GET /social-accounts.
posts[].captionstringoptionalPost text alongside the video. Max 500 characters.
Response
Code Example
curl -X POST "https://v1.api.crosspostify.com/post/video" \
-H "X-API-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"mediaId": "vid_12345",
"scheduledDate": "2025-06-01T14:00:00Z",
"posts": [
{
"accountId": "acc_threads_123",
"caption": "Quick walkthrough of the new feature we just shipped! Let me know if you hit any bugs. 🚀"
}
]
}'/post/textText PostPublish a standard text post to Threads. Text is the primary language of the platform, ideal for announcements, thoughts, links, and engaging with followers.
Text Post Notes
- Strict 500-character limit.
- Line breaks are supported and preserved in the final post.
- URLs are automatically hyperlinked by Threads, making it a great platform for driving traffic.
- Hashtags are fully supported and will convert into clickable tags.
Request Body
scheduledDatestringoptionalSchedule the post for a future time (ISO 8601 with 'Z' suffix). Omit to post immediately.
postsarrayrequiredArray of post objects. Include one object per Threads account.
posts[].accountIdstringrequiredThe Threads account ID. Retrieve from GET /social-accounts.
posts[].captionstringrequiredThe post text. Max 500 characters. Required for text posts.
Response
Code Example
curl -X POST "https://v1.api.crosspostify.com/post/text" \
-H "X-API-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"scheduledDate": "2025-06-01T14:00:00Z",
"posts": [
{
"accountId": "acc_threads_123",
"caption": "Hot take: Threads is actually becoming the best place for developer discussions right now.\n\nThe signal-to-noise ratio has been surprisingly good lately. Anyone else feeling this way?"
}
]
}'Content Guidelines
Threads is a conversation-first app. While highly visual posts can perform well, context and engaging captions are key. Content that sparks dialogue, asks questions, or shares timely insights usually performs best.
Image Requirements
- Format: JPG, PNG
- Max file size: 20MB per image
- Max 10 images per carousel post
- Recommended format: 4:5 or 1:1
Video Requirements
- Format: MP4 recommended
- Max file size: 100MB via Crosspostify
- Max duration: 5 minutes
- Vertical (9:16) video highly recommended
Text & Caption Tips
- Strict 500-character limit
- Include a strong hook or question
- URLs are active — great for driving traffic
- Use hashtags sparingly for discoverability
Scheduling
- Minimum lead time: ~10 minutes ahead
- All times must be UTC (ISO 8601 + Z)
- Omit scheduledDate to post immediately
- Post when your specific audience is most active