Social media character limits and media rules, every network

    One table: caption length, pictures per post, video length, size and frame rate for Instagram, TikTok, YouTube, Facebook, Threads, LinkedIn, Pinterest, Bluesky, Mastodon, Telegram, Discord and Tumblr. Verified October 2026.

    Updated · Prices and limits checked against the vendors' own pages and APIs on that date.

    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

    NetworkLimitHow it countsNotes
    Instagram2,200 characterscharacters30 hashtags and 20 @mentions at most; refuses more
    Facebook Page63,206 characterscharacters
    Threads500UTF-8 bytesemoji cost up to 4; at most 5 links
    TikTok2,200 characters on video; 4,000 on photo postscharactersfirst line of a photo post is its title, 90 characters shown
    YouTubetitle 100 characters; description 5,000 bytesbytes for the descriptionover 15 hashtags, all hashtags are ignored; no < or >
    LinkedIn3,000 characterscharacterspersonal profiles
    Pinterestdescription 800 characters; title 100characterstitle is cut, not refused
    X280weighted: a link is 23, CJK and emoji are 2
    Bluesky300 graphemes, and 3,000 bytesgraphemeslinks count their full length
    Mastodon500 by default; your instance decidesgraphemes; a link is 23; the domain of a mention is free
    Telegram4,096 text-only; 1,024 as a captioncharacters
    Discord2,000charactersMarkdown allowed
    Tumblreffectively unlimitedhashtags on the last line become tags

    Pictures

    NetworkPer postFormatSizeDimensions and ratio
    Instagram feed10JPEG only8 MB4:5 to 1.91:1; width 320 to 1,440
    Instagram story1JPEG8 MB9:16 recommended
    Facebook10JPEG, PNG, GIF, BMP, TIFF10 MB
    Threads20JPEG, PNG8 MBratio up to 10:1; width 320 to 1,440
    TikTok photo post35JPEG, WebP, pulled from a verified hostup to 1080p
    LinkedIn20JPEG, PNG, GIF10 MBat most 36.15 million pixels
    Pinterest1JPEG, PNG20 MB2:3 recommended
    Bluesky4JPEG, PNG, WebP2 MB after resizing
    Mastodon4JPEG, PNG, GIF, WebP16 MB default; instance decides
    Telegram10 in an albumJPEG10 MBwidth + height at most 10,000; ratio at most 20:1
    Discord10any10 MB each, 25 MB per message
    Tumblr30JPEG, PNG, GIF20 MB

    Video

    NetworkLengthSizeFrame rateFormatNotes
    YouTubeup to 12 hours (15 minutes on an unverified channel)256 GBMP4, MOV and most othersvertical or square up to 3 minutes becomes a Short
    TikTok3 seconds to 10 minutes; each creator has a lower maximum reported by the API4 GB23 to 60 fpsMP4, MOV, WebM360 to 4,096 pixels each side
    Instagram Reel3 seconds to 15 minutes300 MB23 to 60 fpsMP4, MOV9:16 recommended
    Instagram story3 to 60 seconds100 MBMP4, MOV
    Facebook videoup to 240 minutes10 GBMP4, MOV
    Facebook Reel3 to 90 seconds24 to 60 fpsMP4vertical, at least 540×960
    Facebook story3 to 60 seconds100 MB
    Threadsup to 5 minutes1 GB23 to 60 fpsMP4, MOV
    LinkedIn3 seconds to 30 minutes500 MB, at least 75 KBMP4one video, no pictures with it
    Blueskyup to 3 minutes100 MBMP4one video, no pictures with it
    Mastodoninstance decides99 MB defaultMP4, WebM and moreone video, no pictures with it
    Telegram50 MB through the Bot APIMP4
    Discord10 MB (more on boosted servers)MP4, WebM, MOV
    Tumblrup to 10 minutes500 MBMP4one video per post
    Pinterestnot 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.

    Write it once. Let the rules be our problem.

    Preflight checks every post against each network's rules before it leaves, then publishes it to twelve networks. Free plan, no card.