TikTok photo post limits: 20 MB per image, 1080p max, JPEG or WebP
TikTok's media guide caps photo-post images at 1080p and 20 MB each, in WebP or JPEG. Set Sume image output and video stills to match before you upload.

For TikTok photo posts through the API, each image must be WebP or JPEG, at most 1080p, and at most 20 MB. AI image models usually return far more pixels than that, so ask Sume for the right shape up front instead of resizing later.
Sume's image route can output jpeg or webp and take a 9:16 aspect ratio, and video inspect can pull JPEG stills from a clip with a pixel cap. Neither sets a file-size target, so you verify the 20 MB limit yourself.
What are the image limits?
From TikTok's Media Transfer Guide:
| Item | Limit |
|---|---|
| Formats | WebP, JPEG |
| Resolution | Maximum 1080p |
| File size | Maximum 20 MB per image |
What does 1080p mean for a vertical image?
The page says only "maximum 1080p" and does not spell out which edge it measures. The cautious reading is a long edge of 1080 or less is certainly fine, and 1080x1920 is the common vertical 1080p frame. If an upload is refused, test with a smaller long edge before assuming something else is wrong.
Photos also differ from videos in how they get to TikTok. The upload guide says photos support only URL-based uploads from a verified domain, so the file has to sit on a domain you control.
How do I request the right size from Sume?
On Image 1.0, aspect_ratio accepts per-model native values and output_format accepts png, jpeg, jpg or webp. Choose jpeg or webp, never png, for TikTok. image_size takes WIDTHxHEIGHT only on models that accept custom pixels (GPT, Seedream, Flux, Qwen, Recraft); on GPT both edges must be multiples of 16, so 1080 itself is not valid there.
For stills from a video, ask video inspect for explicit timestamps as JPEG with a pixel cap. max_edge is the long-edge clamp, 64 to 2160, so 1080 stays inside the TikTok cap:
curl -X POST https://api.sume.com/v1/video-inspect \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: tiktok-stills-001" \
-d '{
"video_url": "https://media.sume.com/artifacts/artf_demo/clip.mp4",
"frames": { "at": [1, 4, 7], "format": "jpeg", "max_edge": 1080 }
}'What does Sume not check for you?
Neither route reports a file size or promises one under 20 MB. A JPEG at 1080 on the long edge is normally well below that, but measure the downloaded file before you send it. Sume also does not re-host the result on your verified domain: download the media.sume.com artifact and put it where TikTok can pull from.
Video inspect stills are unbilled with default probing; only the optional transcript is billed.
Pre-upload checklist
Before you queue a photo post:
- Format is JPEG or WebP.
- Long edge is 1080 or less.
- Each file is under 20 MB when measured.
- The files are served from a domain you have verified with TikTok.
Sources
Related posts
More in Integrations
- TikTok publish webhooks vs Sume run webhooks: wire both safely
TikTok sends webhooks for failed, complete, inbox, public and removed posts. Sume signs its own run webhook separately. Keep two receivers and verify Sume's.
- VS Code mcp.json: servers or mcpServers key for Sume's hosted MCP?
VS Code's .vscode/mcp.json uses a top-level servers key; the portable .mcp.json uses mcpServers. Put Sume's entry under the key that matches its file.
- WhatsApp image message: JPEG or PNG, 5 MB, 1024-character caption
WhatsApp Cloud API image messages take 8-bit RGB or RGBA JPEG or PNG up to 5 MB, with a caption up to 1024 characters. Make a compliant file with Sume Images.
- WhatsApp sticker limits: WebP, 100 KB static, 500 KB animated
WhatsApp Cloud API stickers must be WebP, 100 KB if static and 500 KB if animated. Sume Images can output static WebP; it does not make animated ones.
Written by Sume