TikTok API frame rate 23-60 fps: conform a clip with Video trim

TikTok's Content Posting API accepts 23-60 fps video. Check the clip's rate, then conform it to 24, 25, 30 or 60 fps with Sume's Video trim output field.

5 min readSume
All posts

TikTok's Content Posting API takes video between 23 and 60 frames per second, so a 24, 25, 30 or 60 fps clip is inside the range and a 15 fps or 120 fps clip is not. If a clip falls outside it, conform it before you call the API: Sume's Video trim accepts an output.fps of 24, 25, 30 or 60 and re-encodes to that rate in the same job that cuts the clip.

TikTok's own Get Post Status page lists frame rate among the technical reasons a post can fail, next to file format, duration and picture size. That makes frame rate worth fixing up front, because the failure shows up after the upload, not at the request that started it.

What frame rates does TikTok accept?

The Media Transfer Guide gives the video spec as 23-60 FPS, with MP4 recommended, WebM and MOV also supported, H.264 recommended, and a maximum duration of 10 minutes through the API. The Get Post Status page names frame rate as one of the failure categories when processing rejects a file.

The page does not publish a table of which exact frame rates inside the window are best for the For You feed, so this post does not claim one. It only says what is accepted.

TikTok accepted range against Sume Video trim output.fps, read 2026-10-02
Source frame rateInside TikTok's 23-60 rangeWhat to do
15 fpsNoConform to 24 or 30 before posting
24, 25, 30 fpsYesPost as is, or leave output unset
60 fpsYesPost as is, or conform to 30 to shrink the file
120 fpsNoConform to 60 or 30

How do you conform the frame rate with Sume?

Video trim takes one clip on media.sume.com, a start, and exactly one of end or duration, and returns a new MP4. The optional output object takes width, height and fps, where fps is 24, 25, 30 or 60. It works only with precision: "exact", which is the default frame-accurate re-encode; pairing output with precision: "keyframe" is refused with video_trim_output_requires_exact.

The request below keeps the first 20 seconds of a clip and conforms it to 30 fps. Idempotency-Key is required, and the default mode is async, so you poll the job.

curl -X POST https://api.sume.com/v1/video-trim \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: tiktok-fps-001" \
  -d '{
    "video_url": "https://media.sume.com/artifacts/artf_demo/talk.mp4",
    "start": 0,
    "duration": 20,
    "output": { "fps": 30 }
  }'

Where do you read the new file?

Poll GET /v1/jobs/:id/status, then GET /v1/jobs/:id/result. A finished trim returns kind: video_trim with a new video_url, duration_seconds and optional warnings[]; the source is never modified. The flow is the same one described in Jobs and results.

Video trim only reads clips that are already on the Sume media host. A clip from elsewhere has to be imported first through POST /v1/media-imports, and an off-host URL is rejected with unsupported_media_source.

What does Sume not do here?

Sume does not post to TikTok and does not call the Content Posting API for you; you take the finished MP4 URL to your own TikTok app or tool. Video trim also does not offer arbitrary frame rates: only 24, 25, 30 and 60 are accepted, and a client that sends ffmpeg-style fields such as vf, codec or crf gets ffmpeg_fields_rejected.

Video trim costs a flat $0.02 per job according to the docs, and the docs say to confirm the live rate in GET /v1/catalog. Treat that number as the documented rate, not a quote.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume