Social media API media requirements
A consolidated reference for file size, format, and dimension requirements across social platform publishing APIs.
Every platform's publishing API enforces different media rules: Instagram feed images are JPEG-only up to 8MB; X takes JPEG/PNG/WEBP to 5MB and MP4 video to 512MB; TikTok accepts MP4 video to 4GB but no PNG images; Bluesky caps images at 1MB with no video support. Some figures are platform-documented, others are PostGate's conservative defaults — the table labels which is which.
This is the hub page for PostGate's media-requirements reference set: one consolidated table of accepted image and video formats, and the file-size ceilings each platform's publishing API applies to them. For the detail behind any single column — aspect ratio, video codec/resolution/duration, or character limits — the linked pages below break each of those out on its own.
Two kinds of numbers appear in this table: figures a platform documents directly in its current developer reference, and figures PostGate enforces as its own conservative default where no authoritative platform number could be found. They're labeled differently on purpose — don't treat the second kind as a platform-guaranteed ceiling.
PostGate handles OAuth, publishing and delivery evidence for every network through one API. Start free or read the docs.
Consolidated media requirements table
| Platform | Image formats & max size | Video formats & max size | Notes |
|---|---|---|---|
| Facebook Pages | JPEG, BMP, PNG, GIF, TIFF · no documented size cap found (PostGate enforces 10MB) | MP4/MOV · PostGate enforces 4GB (unconfirmed against current Meta docs) | PostGate's own accepted image set (JPEG/PNG/WEBP) is narrower than Meta's documented list in some formats and adds WEBP, which Meta doesn't document — use JPEG or PNG for guaranteed compatibility. |
| JPEG only · 8MB · width 320–1440px | MP4/MOV · 300MB (Reels, Content Publishing API) | Business or Creator accounts only; container-based publish flow. | |
| Threads | JPEG and PNG documented by Meta · 8MB · width 320–1440px | MP4/MOV · 1GB | PostGate enforces JPEG-only in practice — Meta's live API rejects PNG image_url containers with a generic "Invalid parameter" error despite PNG being in the documented format list. A real, confirmed doc-vs-live-behavior mismatch. |
| JPG, PNG, GIF (no WEBP) · no documented size cap (PostGate enforces 8MB) | MP4 only · up to 5GB (raw Video API) | LinkedIn's often-cited "8MB" and "36" figures actually describe the profile-photo limit and a 36-megapixel resolution cap on a different product — not the feed-image file-size ceiling. | |
| TikTok | JPEG, WEBP (photo posts, up to 35 images) · 20MB each — PNG not supported | MP4 only · 4GB | Video posts remain capped at exactly one file; photo carousels can't be mixed with video. |
| YouTube | No image upload for posts (thumbnails are a separate, distinct endpoint) | Several containers accepted · 256GB hard ceiling (stated on the API reference) | A YouTube Data API compliance audit is required for public/unlisted uploads on most integrations. |
| JPEG, PNG · 20MB (Pins API/desktop) — PostGate currently enforces 32MB, which matches Pinterest's in-app mobile ceiling instead | MP4/MOV · 2GB | Because PostGate's enforced 32MB exceeds the documented 20MB API cap, an image between 20–32MB can pass PostGate's own validation and still be rejected by Pinterest at actual upload — treat 20MB as the safer practical ceiling. | |
| X (Twitter) | JPEG, PNG, WEBP · 5MB | MP4 only · 512MB (536,870,912 bytes) | 4 images XOR 1 video/GIF per post — never a mix. Uses chunked media upload (INIT/APPEND/FINALIZE), not a single request. |
| Bluesky | JPEG, PNG, WEBP · 1MB · up to 4 images | Not supported | Video publishing isn't implemented — Bluesky's AT Protocol video path is a separate upload-and-poll flow this integration doesn't have. |
| Mastodon | Instance-configurable | Instance-configurable | Every instance sets its own media ceilings; confirm via that instance's /api/v1/instance endpoint. |
| Telegram | URL-fetch: 5MB · Direct upload: 10MB | URL-fetch: 20MB · Direct upload: 50MB | PostGate delivers via URL-fetch, so the lower column applies in practice. PostGate's own enforced video ceiling (50MB) currently matches the direct-upload figure, not the URL-fetch ceiling its delivery path actually uses — see the video specs post for what that means for a video between 20–50MB. |
| Google Business Profile | JPG, PNG (no WEBP documented) · 5MB | Not supported via API | No video-upload endpoint exists in the Business Profile API — the commonly cited 30s/75MB/720p video spec describes the mobile app and Google Maps only. |
Go deeper on a specific dimension
This table is deliberately compact. For the full picture on any one column, the dedicated pages below cover it in more depth, with source citations and confidence flags on every figure:
- Aspect ratio requirements per social platform — accepted image and video aspect ratio ranges.
- Social media video specs by platform — codec, resolution, and duration in one table.
- Max video length per social platform — which duration ceilings are API-enforced versus account-policy-based.
- Character limits per social platform — post/caption text limits and how each platform actually counts them.
How does PostGate handle this?
Instead of hand-checking every platform's current documentation before every publish, PostGate's media pipeline validates format, size, dimensions, and duration against the platform capability matrix the moment an asset is ingested — so a mismatch surfaces as an immediate, structured error instead of a silent per-target publish failure discovered after the fact.
Frequently asked questions
Why does Threads reject PNG images via API even though Meta documents PNG support?
This is a real, confirmed doc-vs-live-behavior mismatch: Meta documents JPEG and PNG for Threads, but the live API rejects PNG image_url containers with a generic "Invalid parameter" error. PostGate enforces JPEG-only for Threads in practice for exactly this reason — use JPEG for guaranteed compatibility.
Is the LinkedIn feed image limit really 8MB?
No documented feed-image file-size ceiling could be found. LinkedIn's often-cited "8MB" and "36" figures actually describe the profile-photo limit and a 36-megapixel resolution cap on a different product — not the feed-image ceiling. PostGate enforces 8MB as its own conservative default, which shouldn't be treated as a platform-guaranteed number.
What is the safe maximum image size for Pinterest via API?
Treat 20MB as the practical ceiling — that is Pinterest's documented Pins API/desktop cap. PostGate currently enforces 32MB, which matches Pinterest's in-app mobile ceiling instead, so an image between 20 and 32MB can pass PostGate's own validation and still be rejected by Pinterest at actual upload.
Can I mix images and video in a single X (Twitter) post?
No — X allows 4 images or 1 video/GIF per post, never a mix. Images can be JPEG, PNG, or WEBP up to 5MB; video is MP4 only, up to 512MB (536,870,912 bytes), uploaded via X's chunked media upload flow (INIT/APPEND/FINALIZE) rather than a single request.
Can I upload video to Google Business Profile through the API?
No — no video-upload endpoint exists in the Business Profile API. The commonly cited 30-second/75MB/720p video spec describes the mobile app and Google Maps only. Via API, Google Business Profile accepts JPG and PNG images up to 5MB, with no WEBP documented.
