ffmpeg_fields_rejected: why the API refuses ffmpeg flags

ffmpeg_fields_rejected means you sent vf, codec, crf or another ffmpeg field. Sume's media tools build the ffmpeg command themselves; send their own fields.

4 min readSume
All posts

ffmpeg_fields_rejected means your request body carried a field that looks like an ffmpeg flag, such as vf, filter, ffmpeg, cmd, codec or crf. Sume's media tools compile the ffmpeg command on the server, so you describe the result with the tool's own fields and never send the command.

The lists below are from the Sume docs for each tool, read 2026-09-29: Video filter, Video trim, Video frames and Audio detach.

Which fields trigger the refusal?

Each page lists its own set, and the sets differ slightly. The common core is vf, filter, ffmpeg, cmd, codec and crf; a few tools add more. The refusal names these fields because the server, not the caller, builds the command.

From the refusal tables of each page, read 2026-09-29.
ToolFields named in the refusal
Video filtervf, filter, ffmpeg, cmd, codec, crf, -i and friends
Video trimvf, filter, ffmpeg, cmd, codec, crf and friends
Video framesvf, filter, filter_complex, select, ffmpeg, cmd, codec, crf, preset
Audio detachaf, filter, ffmpeg, cmd, codec and friends

What do I send instead?

Send the tool's documented fields. The pixel work you would have put in vf goes in the video filter's filtergraph, a filters-only graph checked against an allowlist. Timeline 1.0 takes a declarative document, and its docs say callers never send filtergraphs, codecs or shell fragments there.

For a range cut, use trim's start with end or duration. For stills, use at[] or fps. For an audio track, use detach's format, range, channels and sample_rate.

Where each kind of request goes, from the same pages, read 2026-09-29.
You wantedField to send
A pixel filterfiltergraph on POST /v1/video-filter
A cutstart plus end or duration on POST /v1/video-trim
Output size or fps on a cutoutput { width, height, fps }, exact precision only
Stillsat[] or fps on POST /v1/video-frames
Audio as wav or mp3format on POST /v1/audio-detach

What does a fixed request look like?

This is the same intent as an ffmpeg -vf hflip: the first body is refused, the second is the tool's own field. Run the free check on the video filter before you encode; it validates filter names and structure, not option values, so a program that passes can still fail on the worker.

# Refused: ffmpeg_fields_rejected
curl -X POST https://api.sume.com/v1/video-filter/check \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"video_url":"https://media.sume.com/artifacts/artf_demo/talk.mp4","vf":"hflip"}'

# Accepted shape
curl -X POST https://api.sume.com/v1/video-filter/check \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"video_url":"https://media.sume.com/artifacts/artf_demo/talk.mp4","filtergraph":"hflip"}'

Why does Sume refuse raw ffmpeg?

The video filter page says the server compiles ffmpeg on the worker media runtime, and the allowlisted filters take only inline options: none of them reads a file or a socket. Refusing raw flags keeps every request inside that contract.

If a filter you want is not on the list, the check answers invalid_filtergraph and names the token; see ffmpeg filter API: Sume's video filter allowlist and checks. Also note that other filters, such as drawtext and subtitles, are not on the list.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume