TikTok photo post title length: 90 runes, description 4000

TikTok's photo post API caps the title at 90 UTF-16 runes and the description at 4000, unlike video posts. How to count them and where Sume fits in.

4 min readSume
All posts

For a photo post, the TikTok Content Posting API allows a title of at most 90 UTF-16 runes and a description of at most 4000. Both fields are optional. Sume has no TikTok publish route, so you write and count both strings yourself and send them with your own TikTok request.

Limits are from TikTok's photo reference, "Last updated August 24, 2026", read 2026-10-01.

What are the two limits?

Both are measured in UTF-16 runes, not bytes and not visible characters. A Korean syllable is one rune; many emoji are two. The video post limit in the video caption post is a different number, so do not reuse a video validator for photos.

Photo post text fields, from the TikTok reference read 2026-10-01.
FieldMax (UTF-16 runes)Required
post_info.title90No
post_info.description4000No

How do I count UTF-16 runes?

In JavaScript, string.length already counts UTF-16 code units, so title.length <= 90 is the check. Do not use the spread or Array.from length, which counts code points and would let long emoji titles through.

const fits = (title, description = "") =>
  title.length <= 90 && description.length <= 4000;
console.log(fits("봄 신상 룩북"), fits("x".repeat(91)));

Do burned-in captions count toward the title?

No. Sume's video captions burn text onto an existing public video URL and apply to video, not to the post's title field. The docs say black-outline is the default style for Korean wording and language takes a hint such as ko. A photo post has no video to caption, so text on a slide has to be part of the generated image itself or added in your own tooling.

Where does the image come from?

Generated images are returned as media.sume.com URLs, for example https://media.sume.com/img/01J.../0.png; the images docs show the response shape. Put those URLs in photo_images and keep the post text in your own fields.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume