Video generation API 400 errors: unsupported parameter and fixes
Why POST /v1/videos answers 400: invalid_request, unsupported_parameter for size, seed, or provider.options, and unsupported_capability. Causes and fixes.

A 400 from Sume's POST /v1/videos means the request broke a rule, and error.code names which one: invalid_request when the body fails the request schema, unsupported_parameter for size, seed, or a non-empty provider.options, and unsupported_capability when a value is outside the chosen model's catalog lists.
The codes below come from Sume's Video generation and Errors and rate limits docs and from the API's request validation, read on 2026-09-26. The general error envelope, other status codes, and 429s are covered in Sume API errors and rate limits.
Which 400 errors can POST /v1/videos return?
Three codes cover the video-specific refusals. A fourth failure, an unknown model id, is a 404 rather than a 400.
| Status and code | Cause | Fix |
|---|---|---|
400 invalid_request | The body fails the request schema: an unknown field, a missing prompt, a bad URL, or a value outside an enum | Fix the field named in details.errors |
400 unsupported_parameter | size, seed, or a non-empty provider.options | Remove the field; use resolution plus aspect_ratio instead of size |
400 unsupported_capability | A value the model's catalog entry does not list, or an input combination it cannot take | Pick a value from details.supported, or drop the input |
404 model_not_found | model is not a catalog id or an auto alias such as sume/auto | Use a bare id from GET /v1/videos/models |
How do I fix an unsupported parameter error?
The request schema defines these fields, as OpenRouter's does, but no v1 model can honor them. Sume rejects them rather than silently dropping them, and each message names the reason:
size: every model reportssupported_sizes: null. Sendresolutionandaspect_ratioinstead.seed: every model reportsseed: false. Remove it; no v1 model takes a seed.provider.options:allowed_passthrough_parametersis empty for every model. Omit it or send{}.
What does unsupported_capability mean?
The body is well formed, but the model you named cannot do what it asks. Sume checks the request against the model's catalog entry, the source GET /v1/videos/models is built from. When a value is outside a list, the error's details carry model, field, value, and supported, the accepted list. The common causes:
- A
duration,resolution, oraspect_ratiothe model does not list, such as720ponminimax-h3, which is native 480p or 768p. - A
frame_typeorinput_referencestype outsidesupported_frame_imagesorsupported_input_references. - A
last_framesent without afirst_frame. - More references of one type than the model accepts, such as a tenth image on
minimax-h3; the reference-to-video guide compares the caps. generate_audio: trueon a model whose descriptor reportsgenerate_audio: false.generate_audio: falseonminimax-h3,minimax-h3-max, orgemini-omni-flash-1.1, which always produce audio. Omit the field.
Why do I get invalid_request?
Usually the body failed the request schema, before any model rule ran. details.errors lists each problem with its path and message. On this route that means:
- A top-level field the schema does not define.
- No
promptwith a pinned model. - Video Router fields such as
image_url,end_image_url,reference_image_urls, orvideo_urlwith a pinned model. Useframe_imagesandinput_references, or send the flat fields toPOST /v1/video-router/generate. - A media or
callback_urlURL that is not public HTTPS. - A non-integer
duration, or aresolutionoraspect_ratiooutside the schema's enums. - More than 2
frame_imagesor 12input_references.
What does the error body look like?
It is Sume's standard envelope. The envelope also carries retryable and next_action; for a 400 they are false and fix_input, so change the body before you send it again. Quote request_id if you contact support. In this minimax-h3 example, supported also lists the 2K and 4K upscales, which the model's descriptor leaves out.
{
"error": {
"code": "unsupported_capability",
"message": "minimax-h3 does not support resolution 720p.",
"request_id": "req_...",
"details": {
"model": "minimax-h3",
"field": "resolution",
"value": "720p",
"supported": ["480p", "768p", "2K", "4K"]
}
}
}Is a rejected request billed?
No. The schema and model checks above run before Sume creates a job or reserves any balance, so those 400s leave no job and no charge. One invalid_request comes later: if Sume rejects the input while submitting the job to the provider, the job already exists, so Sume marks it failed, refunds its reservation, and returns the job in details. A job that is accepted and fails while it runs returns status: failed with an error field, covered in why an AI video job fails.
Sources
Related posts
Written by Sume