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.

Before you encode a filter, call POST /v1/video-filter/check. It runs the same schema validation, op whitelist, filtergraph allowlist and source preflight as the real call, returns diagnostics instead of a 400, and does not create a job, reserve credits or touch the encoder. The encode itself is $0.02 per job, so the check mostly saves time and failed jobs, not large sums.
What the check returns
A valid response is object: video_filter_check with valid, encode: "not_run", diagnostics[], the compiled program.filters (names only), an estimate when the program is valid, and a next_action of submit_video_filter or fix_program_and_recheck. Idempotency-Key is not required on the check, but it is required on the encode.
| Item | Value |
|---|---|
| Check endpoint | POST /v1/video-filter/check, unbilled |
| Encode endpoint | POST /v1/video-filter, $0.02 per job |
| Source length | Up to 300 s |
ops | dim, crop |
filtergraph allowlist | eq, hue, blur, hflip, vflip, zoompan, tpad, fade, chromakey, vignette and others |
| Not allowed | trim, setpts, drawtext, subtitles |
| Source | media.sume.com artifact or asset |
A flow
1. Check the program. 2. If valid is false, read diagnostics[], fix, check again. 3. When next_action is submit_video_filter, post the same body to the encode endpoint with an Idempotency-Key. 4. Poll GET /v1/jobs/:id/status, then /result.
For hosted MCP the same flow is video_filter with check_only: true, then video_filter, then jobs_wait and jobs_result.
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",
"ops": [{"op": "dim", "amount": 0.45}]
}'Using it in CI
Because the check is unbilled and needs no idempotency key, it fits a pre-merge test: store a few representative programs, run each through the check on every change to your pipeline, and fail the build when valid is false. That catches a typo in a filter name before it reaches production, where it would otherwise surface as a failed job.
Limits
A program that passes the check can still fail on the encode box (a bad expression, memory, time), which comes back as a structured job error. The check does not download the media; it preflights the source. And filters are not for cutting or text: use trim for cuts and captions for burned-in words. The encode returns a new file and leaves the original alone.
Related posts
More in Media tools
- Video frames vs video inspect: max_edge 16 vs 64 and the 768 default
Sume video-frames max_edge is 16 to 2160 and keeps source size if omitted. Video-inspect max_edge is 64 to 2160 and defaults to 768.
- inspect_source_has_no_audio: check probe.has_audio before transcribe
transcribe true on a silent clip fails as inspect_source_has_no_audio. Probe first with frames false and read probe.has_audio, then ask for the transcript.
- Which AI video models take reference images in Sume's Videos panel?
Auto, Kling 3.0, Wan 3.0 and MiniMax H3 show reference slots in Sume's panel; H3 Max and Grok do not. Plus the API limits for image, video and audio references.
- Why did my video settings change when I switched model in Sume?
Sume's Videos panel clamps resolution, aspect ratio, duration and audio to the new model: 720p first, first listed length, first listed ratio. Worked examples.
Written by Sume