/v1/videos provider.options returns 400: no passthrough in v1

Non-empty provider.options on /v1/videos returns 400 unsupported_parameter: every model lists allowed_passthrough_parameters as empty. seed and size fail too.

4 min readSume
All posts

Sume rejects a non-empty provider.options on POST /v1/videos with 400 unsupported_parameter. The reason is in the catalog: each model reports allowed_passthrough_parameters: [], because v1 runs one backend for each model and there is nothing to route options to. An empty { "options": {} } is fine.

Fields that return 400

Three OpenRouter-shaped fields are in the schema but rejected in v1.

Rejected /v1/videos fields, read 2026-10-05
FieldSume behaviourCatalog signal
provider.options (non-empty)400 unsupported_parameterallowed_passthrough_parameters: []
seed400 unsupported_parameterseed: false
size400 unsupported_parametersupported_sizes: null

Why reject instead of ignore

The docs call this intentional. A loud 400 is better than a silent generation of something the caller did not ask for, with a charge for it. The fields stay in the schema so OpenRouter-shaped clients type-check.

What to send instead

Read the catalog before you build the body, and send only the fields a model advertises.

import asyncio, os
import httpx

async def main():
    headers = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
    async with httpx.AsyncClient(base_url="https://api.sume.com", headers=headers) as c:
        r = await c.get("/v1/videos/models")
        r.raise_for_status()
        for m in r.json()["data"]:
            print(m["id"], m["allowed_passthrough_parameters"], m["seed"])

asyncio.run(main())

Use first-class fields

If you need something that a provider-specific option would set, look for a first-class field instead: resolution, aspect_ratio, duration, generate_audio, frame_images or input_references. Each model lists what it supports in its catalog row.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume