TikTok photo post image formats: WebP or JPEG, not PNG
TikTok's photo post API lists WebP and JPEG, 20 MB per image, up to 1080p. If your AI images default to PNG, set Sume's output_format to jpeg or webp first.

TikTok's Media Transfer Guide lists WebP and JPEG as the image formats for the Content Posting API, with a maximum of 20 MB per file and a maximum resolution of 1080p. PNG is not on that list. When you generate stills with Sume's Image docs, pass output_format as jpeg or webp, since the same docs show png as one of the options and the default may not be what TikTok wants.
What does TikTok list for images?
From the Media Transfer Guide: formats WebP and JPEG, up to 20 MB each, up to 1080p. From the Photo Post reference: up to 35 images per post, URLs must be publicly accessible and verified by your app, and only PULL_FROM_URL is supported.
The 1080p ceiling matters for AI image output. A generator that returns a 2048-pixel square gives you a file TikTok's page says is above the maximum, so resize on the way out.
| Format | TikTok photo post | Sume Image output_format |
|---|---|---|
| JPEG | Listed | jpeg or jpg |
| WebP | Listed | webp |
| PNG | Not listed | png (avoid for TikTok) |
How do you request the right format?
The Image docs give output_format as png, jpeg, jpg or webp, preferred over the deprecated format field. Check the Image page for the full request shape and the rest of the sizing options; the sketch below shows only the field that matters here and is not a complete request.
The returned URL is on media.sume.com, with a media_type such as image/webp, so you can confirm the type before you hand the URL to TikTok.
ALLOWED = {"image/jpeg", "image/webp"}
def tiktok_ok(media_type: str, size_bytes: int) -> bool:
return media_type in ALLOWED and size_bytes <= 20 * 1024 * 1024
print(tiktok_ok("image/webp", 3_000_000))
print(tiktok_ok("image/png", 3_000_000))What is still on you?
Sume does not post photos and cannot verify your domain with TikTok. The URL ownership rule still applies; see the URL ownership post. Also check the pixel dimensions yourself against the 1080p ceiling, since this post found no Sume field in the docs that guarantees it.
Sources
Related posts
More in Media tools
- TikTok trending video transcripts via API: what summary_mode returns
Can you get a transcript with Sume's trending video search? summary_mode transcript returns metadata plus an unsupported warning. What to do for the words.
- Trim an AI clip first, or use source_in on the timeline?
For a shot that is too long, set source_in and duration on the Timeline 1.0 slot. Use video_trim ($0.02 per job) only when another step needs a new MP4 file.
- Put a product shot above a UGC creator clip: compose stack
Timeline compose stacks one Sume-hosted still over one video into a single MP4. Set ratio for the still's share. The public rate is $0.02 per job.
- Check a video filter program for free before you encode it
POST /v1/video-filter/check runs the same schema and allowlist as the encode and returns diagnostics without creating a job. Encoding is $0.02 a job.
Written by Sume