Every network’s caption limit, in one table
What each platform actually allows in a caption, how many images or videos it takes, and which limit wins when you post to several at once.
Every network has its own idea of how long a caption may be, how many files may ride along with it, and whether a post can continue into a thread. Cross-posting means living with all of them at once — so here is the whole set, read from the same table Ravenpost uses to validate a post before it is published.
The limits, network by network
| Network | Caption | Images | Videos | Thread | Media required |
|---|---|---|---|---|---|
| 2,200 | 10 | 10 | — | Yes | |
| TikTok | 2,200 | 35 | 1 | — | Yes |
| X | 280 | 4 | 1 | 25 follow-ups | No |
| Telegram | 4,096 | 10 | 10 | 25 follow-ups | No |
| 63,206 | 10 | 1 | — | No | |
| 3,000 | 20 | 1 | — | No | |
| Threads | 500 | 20 | 20 | 25 follow-ups | No |
| Bluesky | 300 | 4 | — | 25 follow-ups | No |
| YouTube | 5,000 | — | 1 | — | Yes |
The one that matters is the tightest
A caption that goes to several networks has to satisfy the strictest of them. Select every network above and the budget collapses to 280 characters — X’s limit, not an average of the others. There is no clever way around this: a platform that receives more than it allows rejects the post, and a scheduler that quietly truncates is worse, because the sentence it cuts is the one you cared about.
Two ways out, both better than writing to the lowest common denominator:
- Write one caption per network. The long-form version for LinkedIn, the sharp one for X. In Ravenpost that is a tab per selected platform in the composer, and the base caption is used by any network you don’t override.
- Continue into a thread where the platform has one. X, Bluesky, Mastodon and Threads have real reply chains; Telegram and Discord take consecutive messages, which reads the same way. The thread limit follows the same rule as the caption budget — the strictest selected network wins.
Three quirks the numbers don’t show
Telegram takes formatting; nothing else does. A Telegram caption can carry links, bold and code, so markdown belongs in a Telegram post or a Telegram-specific override. Every other network publishes a caption as plain text, and the asterisks show up as asterisks.
LinkedIn needs escaping, not formatting. Its API treats ( ) [ ] { } @ # * _ ~ as reserved even in ordinary prose — an unescaped (finally!) corrupts the post. That is a publishing-time concern rather than something to write around, but it is why a caption that looks fine can arrive broken if the tool sending it doesn’t handle it.
“Media required” is not a style guide. Instagram, TikTok and YouTube will not accept a post with no file at all; X, Facebook, Telegram, Bluesky and the rest will. It is the difference between a post you can schedule and one the API refuses.
Where these numbers come from
The table above is generated from Ravenpost’s platform registry — the same file the composer reads to warn you before you schedule, and the publisher reads before it sends. When a platform changes a limit, this page changes with it, because there is no second copy to update. The machine-readable version is GET /v1/platforms, which is what we suggest reading instead of hardcoding any of these into your own tooling.