Developers

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.

5 min readSume
All posts

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.

From Video generation, the API reference, and the API's request validation, read 2026-09-26. Check each model's lists with GET /v1/videos/models.
Status and codeCauseFix
400 invalid_requestThe body fails the request schema: an unknown field, a missing prompt, a bad URL, or a value outside an enumFix the field named in details.errors
400 unsupported_parametersize, seed, or a non-empty provider.optionsRemove the field; use resolution plus aspect_ratio instead of size
400 unsupported_capabilityA value the model's catalog entry does not list, or an input combination it cannot takePick a value from details.supported, or drop the input
404 model_not_foundmodel is not a catalog id or an auto alias such as sume/autoUse 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 reports supported_sizes: null. Send resolution and aspect_ratio instead.
  • seed: every model reports seed: false. Remove it; no v1 model takes a seed.
  • provider.options: allowed_passthrough_parameters is 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, or aspect_ratio the model does not list, such as 720p on minimax-h3, which is native 480p or 768p.
  • A frame_type or input_references type outside supported_frame_images or supported_input_references.
  • A last_frame sent without a first_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: true on a model whose descriptor reports generate_audio: false.
  • generate_audio: false on minimax-h3, minimax-h3-max, or gemini-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 prompt with a pinned model.
  • Video Router fields such as image_url, end_image_url, reference_image_urls, or video_url with a pinned model. Use frame_images and input_references, or send the flat fields to POST /v1/video-router/generate.
  • A media or callback_url URL that is not public HTTPS.
  • A non-integer duration, or a resolution or aspect_ratio outside the schema's enums.
  • More than 2 frame_images or 12 input_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