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.

5 min readSume
All posts

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.

Request fields that differ from OpenRouter on POST /v1/videos, read 2026-10-04
FieldWhat Sume doesSend instead
seed400; every model reports seed: falseKeep prompt and frames; expect variation
size400 unsupported_parameter; supported_sizes is nullresolution + aspect_ratio
provider.options (non-empty)400 unsupported_parameterOmit it, or send an empty object
frame_images with input_referencesframe_images winsSend 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

All Developers posts

Written by Sume