Validate a video filter program for free before you encode
POST /v1/video-filter/check runs the same validation as the encode with no job and no credits. See what it returns and what it cannot promise about the encode.

Yes: POST /v1/video-filter/check validates a video filter program without creating a job or reserving credits. It runs the same schema, operation whitelist, filtergraph allowlist and source preflight as the encode, and returns diagnostics instead of an error. It needs no Idempotency-Key.
Details are from the Video filter docs, read 2026-09-29.
What does the check return?
A valid response is an object of type video_filter_check.
| Field | Meaning |
|---|---|
valid | Whether the program passed |
encode | Always not_run |
diagnostics[] | Why a program failed |
program.filters | Compiled filter names only, no argv |
estimate | Present when valid |
next_action | submit_video_filter or fix_program_and_recheck |
How do I call it?
Send the same body you would send to the encode, without the idempotency header.
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}]}'Does a passing check guarantee the encode?
No. The docs say a program that passes can still fail on the worker, for example a bad expression, memory or time, and that failure comes back as a structured job error. The check confirms the contract, not the render.
What does the check cost?
Nothing; the docs call it free. The encode itself is listed at $0.02 per job, to be confirmed in GET /v1/catalog. Over MCP the same flow is video_filter with check_only: true, then video_filter, then jobs_wait and jobs_result.
Sources
Related posts
More in Developers
- video_trim_range_conflict: send end or duration, not both
The video trim API returns video_trim_range_conflict when a body has both end and duration. Send start plus exactly one of them; other range errors explained.
- Wan 3.0 webhook: get notified when a 30-second clip finishes
Long Wan 3.0 clips take minutes. Pass callback_url on POST /v1/videos and Sume posts a signed webhook when the job ends, so you don't have to poll wan-3.0.
- Wan 3.0 Node.js example: generate a video with fetch
A short Node.js script that submits a Wan 3.0 job to POST /v1/videos, polls until it completes and saves the MP4, with no SDK. It uses the wan-3.0 model id.
- Wan 3.0 Python example: submit, poll and download a clip
A short async Python script that submits a Wan 3.0 job to POST /v1/videos, polls until it finishes, and saves the MP4. It uses httpx and the wan-3.0 model id.
Written by Sume