AI video API: seed and size return 400 on Sume; what to send instead
No Sume video model accepts seed, and size returns 400 unsupported_parameter. Use resolution and aspect_ratio, and keep the prompt and frames to redo a take.

If you copy an OpenRouter-style video request into Sume, two fields will fail: seed and size. Sume's POST /v1/videos rejects both with a 400 instead of ignoring them. Send resolution and aspect_ratio for the output shape, and treat each generation as non-repeatable.
The rejection is deliberate. A silently dropped seed would look like reproducibility and not deliver it.
Which request fields does Sume reject?
Sume's docs list the places where the router differs from OpenRouter's video route. Most are a clear 400 with the reason; the last row is a precedence rule, not an error.
| Field | What Sume does | Send instead |
|---|---|---|
| seed | 400; every model reports seed: false | Keep prompt and frames; expect variation |
| size | 400 unsupported_parameter; supported_sizes is null | resolution + aspect_ratio |
| provider.options (non-empty) | 400 unsupported_parameter | Omit it, or send an empty object |
| frame_images with input_references | frame_images wins | Send only one of the two |
How do you get the shape you wanted from size?
Map the pixel size to a resolution tier and an aspect_ratio. A 1280x720 request becomes resolution: "720p" with aspect_ratio: "16:9", and 1080x1920 becomes 1080p with 9:16. The supported ratios differ by model. Kling 3 takes 16:9, 9:16 and 1:1; Omni takes 16:9 or 9:16 only; Wan 3.0 adds 4:3 and 3:4.
Read supported_resolutions and supported_aspect_ratios from GET /v1/videos/models before you hard-code a value.
How do you repeat a result without a seed?
You cannot guarantee it, so design around it. Keep the approved clip as the source of truth and store its URL. For a second shot that must match, start from a frame of the approved clip as first_frame, or pass the same reference images. Use an Idempotency-Key to make retries return the same job, which is repeatability of the request, not of the pixels.
- Store the output URL and the prompt with each approved take.
- Continue a scene from a frame of the approved clip.
- Use one idempotency key per intended clip.
What does a clean request look like?
No seed, no size, no passthrough options.
import os, requests
r = requests.post(
"https://api.sume.com/v1/videos",
headers={
"Authorization": f"Bearer {os.environ['SUME_API_KEY']}",
"Idempotency-Key": "shot-12-v1",
},
json={
"model": "wan-3.0",
"prompt": "A red kite rises over a beach",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "9:16",
},
)
print(r.status_code, r.json())Sources
Related posts
More in Developers
- Vendors swap GPUs; keep one video job shape
Luma said on Jul 23, 2026 it runs video-to-video inference on AMD and Tensorwave. Your client should not care: one Sume job shape covers every model.
- Profit per SKU across channels: add AI media cost from Sume
Amazon lists cross-channel profitability as upcoming. Add what your product images and clips cost per SKU by reading Sume's usage ledger by job id.
- Animate a still by API: first-frame jobs on Sume
fal lists FLUX 3 as animating one still into video. On Sume you send the still as a first frame to a video model; this Python script submits and polls.
- Ask for the aspect ratio first: an MCP input_required round trip
MCP multi round-trip requests let a tool answer input_required to ask for an aspect ratio or spend approval before a render, with state in requestState.
Written by Sume