Skip to content

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? ​

PlatformCaption (chars)Video (max size / duration)ImageCarousel itemsPosts per 24hFeatures
Instagram2,200300 MB / 900 s8 MB, 10 images, jpg/png10 (mixed media)50stories, first comment
Facebook63,2061,024 MB / 14,400 s10 MB, jpg/png/gif/webp1025stories, first comment
X2801,024 MB / 14,400 s4 images, jpg/png/gif/webp450first comment
LinkedIn3,0005,120 MB / 600 s8 MB, jpg/png/gifnot listed150first comment
TikTok2,2004,096 MB / 600 sjpg/jpeg/webpnot listed15AI content marking
YouTube5,000 (title 100)262,144 MB / 43,200 s (Shorts 180 s)not listednot listed10first comment, AI content marking
Threads5001,024 MB / 300 s8 MB, 10 images, jpg/png10 (mixed media)50first comment
Pinterest5001,024 MB / 900 s20 MB, jpg/png/gif/webp520none
Reddit40,0001,024 MB / 900 s10 MB, 1 image, jpg/png/gif/webp140first comment
Bluesky300100 MB / 60 s1 MB, 4 images, jpg/png/gif/webp450first comment
Telegram4,09650 MB / 3,600 s10 MB, 10 images, jpg/png/webp10 (mixed media)100none
Discord2,0008 MB / 600 s8 MB, 10 images, jpg/png/gif/webp10100none
Mastodon50040 MB / 3,600 s8 MB, 4 images, jpg/png/gif/webp4100none
Nostr1,000not listednot listednot listed100none
Slack40,000not listednot listednot listed100none
Dev.to400,000not listed25 MB, 5 images, jpg/png/webp/gifnot listed50none
Hashnode100,000not listed25 MB, 5 images, jpg/png/webp/gifnot listed50none
Tumblr50,000not listed20 MB, 1 image, jpg/png/webp/gifnot listed250none

"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:

typescript
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.

Next steps ​