Every network has a different idea of a post. These are the limits each one enforces through its publishing API in October 2026, in one table, taken from the networks' own documentation and checked against real publishes. They are the same rules Preflight runs on a post before it leaves; where a network silently cuts something rather than refusing it, the table says so.
Text
| Network | Limit | How it counts | Notes |
|---|---|---|---|
| 2,200 characters | characters | 30 hashtags and 20 @mentions at most; refuses more | |
| Facebook Page | 63,206 characters | characters | |
| Threads | 500 | UTF-8 bytes | emoji cost up to 4; at most 5 links |
| TikTok | 2,200 characters on video; 4,000 on photo posts | characters | first line of a photo post is its title, 90 characters shown |
| YouTube | title 100 characters; description 5,000 bytes | bytes for the description | over 15 hashtags, all hashtags are ignored; no < or > |
| 3,000 characters | characters | personal profiles | |
| description 800 characters; title 100 | characters | title is cut, not refused | |
| X | 280 | weighted: a link is 23, CJK and emoji are 2 | |
| Bluesky | 300 graphemes, and 3,000 bytes | graphemes | links count their full length |
| Mastodon | 500 by default; your instance decides | graphemes; a link is 23; the domain of a mention is free | |
| Telegram | 4,096 text-only; 1,024 as a caption | characters | |
| Discord | 2,000 | characters | Markdown allowed |
| Tumblr | effectively unlimited | hashtags on the last line become tags |
Pictures
| Network | Per post | Format | Size | Dimensions and ratio |
|---|---|---|---|---|
| Instagram feed | 10 | JPEG only | 8 MB | 4:5 to 1.91:1; width 320 to 1,440 |
| Instagram story | 1 | JPEG | 8 MB | 9:16 recommended |
| 10 | JPEG, PNG, GIF, BMP, TIFF | 10 MB | ||
| Threads | 20 | JPEG, PNG | 8 MB | ratio up to 10:1; width 320 to 1,440 |
| TikTok photo post | 35 | JPEG, WebP, pulled from a verified host | up to 1080p | |
| 20 | JPEG, PNG, GIF | 10 MB | at most 36.15 million pixels | |
| 1 | JPEG, PNG | 20 MB | 2:3 recommended | |
| Bluesky | 4 | JPEG, PNG, WebP | 2 MB after resizing | |
| Mastodon | 4 | JPEG, PNG, GIF, WebP | 16 MB default; instance decides | |
| Telegram | 10 in an album | JPEG | 10 MB | width + height at most 10,000; ratio at most 20:1 |
| Discord | 10 | any | 10 MB each, 25 MB per message | |
| Tumblr | 30 | JPEG, PNG, GIF | 20 MB |
Video
| Network | Length | Size | Frame rate | Format | Notes |
|---|---|---|---|---|---|
| YouTube | up to 12 hours (15 minutes on an unverified channel) | 256 GB | MP4, MOV and most others | vertical or square up to 3 minutes becomes a Short | |
| TikTok | 3 seconds to 10 minutes; each creator has a lower maximum reported by the API | 4 GB | 23 to 60 fps | MP4, MOV, WebM | 360 to 4,096 pixels each side |
| Instagram Reel | 3 seconds to 15 minutes | 300 MB | 23 to 60 fps | MP4, MOV | 9:16 recommended |
| Instagram story | 3 to 60 seconds | 100 MB | MP4, MOV | ||
| Facebook video | up to 240 minutes | 10 GB | MP4, MOV | ||
| Facebook Reel | 3 to 90 seconds | 24 to 60 fps | MP4 | vertical, at least 540×960 | |
| Facebook story | 3 to 60 seconds | 100 MB | |||
| Threads | up to 5 minutes | 1 GB | 23 to 60 fps | MP4, MOV | |
| 3 seconds to 30 minutes | 500 MB, at least 75 KB | MP4 | one video, no pictures with it | ||
| Bluesky | up to 3 minutes | 100 MB | MP4 | one video, no pictures with it | |
| Mastodon | instance decides | 99 MB default | MP4, WebM and more | one video, no pictures with it | |
| Telegram | 50 MB through the Bot API | MP4 | |||
| Discord | 10 MB (more on boosted servers) | MP4, WebM, MOV | |||
| Tumblr | up to 10 minutes | 500 MB | MP4 | one video per post | |
| not through the API |
Mixing pictures and video
Instagram carousels, Threads, Telegram albums and Discord take pictures and video together. LinkedIn and Mastodon refuse a post that mixes them. Bluesky, TikTok and Facebook accept the post and silently keep only the first kind: send a video and three pictures and the pictures are gone. Tumblr takes one video. Preflight warns or refuses before upload in each case.
Empty posts
Facebook, Telegram, Discord, Tumblr, Threads and Mastodon accept media with no text. YouTube needs a video and a title. Instagram, TikTok and Pinterest need media. X, Bluesky and LinkedIn need text.
How Preflight uses this table
The composer runs every row above on the post as you type it, per network, and the API runs the same rules on POST /v1/posts and on validate_post over MCP. A rule the network does not have is not here: a check that blocks a post the network would take is as wrong as one that lets a refused post through. When a network changes a rule, the code changes and so does this page, with a new date at the top.
Longer pages on the rules that cause the most failures: Instagram, TikTok, YouTube Shorts, Threads.
Questions people ask
- Which network counts characters in bytes?
- Threads (500 bytes) and YouTube's description (5,000 bytes). Bluesky and Mastodon count graphemes; X weights links and some scripts. Everyone else counts characters.
- Why did my Instagram picture fail?
- Almost always one of three things: it is a PNG, HEIC or WebP (the API takes JPEG only, so the tool has to convert), it is taller than 4:5 or wider than 1.91:1, or it is over 8 MB.
- Why did my TikTok video fail hours after upload?
- The frame rate. TikTok accepts 23 to 60 fps and checks it after processing, so a 120 fps phone recording fails long after the tool said it was sent. Convert to 30 or 60 fps first.