Platform constraints
These are the limits Socifyr uses to validate posts for each of the 18 supported platforms. They come from PLATFORM_CONSTRAINTS in @socifyr/shared, the same table the API and dashboard read. When you post to several platforms at once, the strictest limit among them applies to a shared caption or carousel.
Supported platforms: Instagram, Facebook, X, LinkedIn, TikTok, YouTube, Threads, Pinterest, Reddit, Bluesky, Telegram, Discord, Mastodon, Nostr, Slack, Dev.to, Hashnode and Tumblr.
What are the limits for each platform?
| Platform | Caption (chars) | Video (max size / duration) | Image | Carousel items | Posts per 24h | Features |
|---|---|---|---|---|---|---|
| 2,200 | 300 MB / 900 s | 8 MB, 10 images, jpg/png | 10 (mixed media) | 50 | stories, first comment | |
| 63,206 | 1,024 MB / 14,400 s | 10 MB, jpg/png/gif/webp | 10 | 25 | stories, first comment | |
| X | 280 | 1,024 MB / 14,400 s | 4 images, jpg/png/gif/webp | 4 | 50 | first comment |
| 3,000 | 5,120 MB / 600 s | 8 MB, jpg/png/gif | not listed | 150 | first comment | |
| TikTok | 2,200 | 4,096 MB / 600 s | jpg/jpeg/webp | not listed | 15 | AI content marking |
| YouTube | 5,000 (title 100) | 262,144 MB / 43,200 s (Shorts 180 s) | not listed | not listed | 10 | first comment, AI content marking |
| Threads | 500 | 1,024 MB / 300 s | 8 MB, 10 images, jpg/png | 10 (mixed media) | 50 | first comment |
| 500 | 1,024 MB / 900 s | 20 MB, jpg/png/gif/webp | 5 | 20 | none | |
| 40,000 | 1,024 MB / 900 s | 10 MB, 1 image, jpg/png/gif/webp | 1 | 40 | first comment | |
| Bluesky | 300 | 100 MB / 60 s | 1 MB, 4 images, jpg/png/gif/webp | 4 | 50 | first comment |
| Telegram | 4,096 | 50 MB / 3,600 s | 10 MB, 10 images, jpg/png/webp | 10 (mixed media) | 100 | none |
| Discord | 2,000 | 8 MB / 600 s | 8 MB, 10 images, jpg/png/gif/webp | 10 | 100 | none |
| Mastodon | 500 | 40 MB / 3,600 s | 8 MB, 4 images, jpg/png/gif/webp | 4 | 100 | none |
| Nostr | 1,000 | not listed | not listed | not listed | 100 | none |
| Slack | 40,000 | not listed | not listed | not listed | 100 | none |
| Dev.to | 400,000 | not listed | 25 MB, 5 images, jpg/png/webp/gif | not listed | 50 | none |
| Hashnode | 100,000 | not listed | 25 MB, 5 images, jpg/png/webp/gif | not listed | 50 | none |
| Tumblr | 50,000 | not listed | 20 MB, 1 image, jpg/png/webp/gif | not listed | 250 | none |
"Not listed" means the constraints table has no entry for that field. It does not mean the platform rejects it; check the platform page.
What do the columns mean?
- Caption is the maximum characters for the post body. The API accepts up to 25,000 in
text, then each platform adapter enforces its own cap. - Posts per 24h is a rolling cap. Socifyr stops sending to a platform that has reached it and the channel fails with a posting-limit error. It is a platform ceiling, not your plan limit.
- Shorts 180 s means YouTube classifies a square or vertical video up to 180 seconds as a Short. A landscape video is not a Short.
- Mixed media means a carousel can hold photos and videos together.
How do I post a caption that fits several platforms?
Use the shortest caption limit among your targets, or override per account:
await socifyr.uploads.text({
connections: ['x-myhandle', 'linkedin-myhandle'],
text: 'Short enough for X (280)',
platformOptions: {
'linkedin-myhandle': { text: 'The longer LinkedIn version, up to 3,000 characters ...' },
},
})See Cross-posting. Platform-by-platform behavior is on the platform pages.
What happens when a post breaks a limit?
The API rejects some cases at request time, for example a landscape video marked as a YouTube Short. Others fail on the platform and show in the channel's result.error. Dashboard error hints name the limit, for example Instagram allows up to 2200 characters. Shorten the caption and retry. See Check status and retry failures.
FAQ
Where do these numbers come from?
They are the constants Socifyr ships in @socifyr/shared. Platforms change limits, so treat the platform's own documentation as the final word if a post is rejected.
Is there a helper to compute the strictest limit?
@socifyr/shared exports getEffectiveCaptionLimit, getEffectiveCarouselLimit, getEffectiveVideoSizeLimit and getEffectivePhotoSizeLimit. Each takes a list of platforms and returns the most restrictive value.