wan-3.0 duration 1 gives 400: the 2 to 30 s range, 25 cents at 2 s
Sume lists wan-3.0 at 2 to 30 seconds. A 1-second request is a 400 unsupported_capability; a 2-second 720p clip bills 25 cents (list $0.10 per second x 1.25).

On Sume, wan-3.0 accepts 2 to 30 seconds. A request for duration: 1 is rejected with 400 unsupported_capability and a details.supported list, and nothing is reserved or billed for it. The shortest clip you can buy is 2 seconds, which at 720p costs 25 cents.
The range and the price
The catalog lists wan-3.0 at $0.10 per second at 720p, $0.05 at 480p and $0.20 at 1080p. Sume bills list x 1.25 and rounds up to the cent. At 720p the product for a 2-second clip is 2 x $0.10 x 1.25 = $0.25 exactly, so there is no rounding. At 3 seconds it is $0.375, which rounds up to 38 cents.
| Duration | Arithmetic | Billable |
|---|---|---|
| 1 s | not accepted (400 unsupported_capability) | none |
| 2 s | 2 x 0.10 x 1.25 = 0.25 | $0.25 |
| 3 s | 3 x 0.10 x 1.25 = 0.375 | $0.38 |
| 10 s | 10 x 0.10 x 1.25 = 1.25 | $1.25 |
| 30 s | 30 x 0.10 x 1.25 = 3.75 | $3.75 |
Check before you submit
If your app lets a user pick a length, clamp it to the model's range instead of letting the API reject it. The model list endpoint returns supported_durations, and the docs tell you to read it before you submit. The snippet below fetches it once and clamps a requested duration. It needs a key, because /v1/videos/models is not a public route.
import os
import requests
def clamp_duration(model: str, wanted: int) -> int:
r = requests.get(
"https://api.sume.com/v1/videos/models",
headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
timeout=30,
)
r.raise_for_status()
entry = next(m for m in r.json()["data"] if m["id"] == model)
allowed = entry["supported_durations"]
return min(max(wanted, min(allowed)), max(allowed))
print(clamp_duration("wan-3.0", 1)) # 2Where the number comes from
The wan-3.0 entry in the Sume catalog gives resolutions of 480p, 720p and 1080p, aspect ratios of 16:9, 4:3, 1:1, 3:4 and 9:16, and a duration range of 2 to 30 seconds. Its list price is per second and depends on resolution: $0.05 at 480p, $0.10 at 720p and $0.20 at 1080p. Sume multiplies each by 1.25 and rounds the clip total up to the next cent, so a short clip never rounds to zero and a 2-second 480p clip costs 13 cents (0.125 rounded up).
These values come from the catalog data that backs the model list; the docs page for video generation points to GET /v1/videos/models as the place to read them at run time.
What else is in the range
Other models differ. seedance-2.5 takes 4 to 30 seconds, gemini-omni-flash-1.1 takes 3 to 10 seconds at 16:9 or 9:16, and most other catalog models stop at 15 seconds. A port from an API that took 4, 8 or 12 second clips will work on wan-3.0 for all three values; see the Sora seconds and size mapping for those prices.
Cache the model list. Calling it before every submit adds a request for no gain, because the ranges change only when the catalog does.
- Clamp on the server, not only in the browser.
- Show the user the minimum price, 25 cents at 720p, if you sell by the clip.
- On a 400, read
details.supportedand show it.
Sources
Related posts
More in Developers
- Wan 3.0 reference limits on Sume: 10 images, 5 videos, 5 audio clips
Wan 3.0 on Sume takes up to 10 reference images, 5 reference videos (15 s total, 16 fps or more) and 5 audio clips (15 s total). Here is the full envelope.
- wave_size_hint 450 is not concurrency: sizing Sume submit waves
With concurrency 100 and a 500-job queue, Sume shows wave_size_hint 450 but your in-flight budget is 100. How to compute both from generation_limits.
- Webhook signature mismatch: Sume fingerprint vs OpenRouter t=,v1=
A video webhook that fails verification has three usual causes: parsed body, wrong secret, wrong header format. Sume adds a secret fingerprint header.
- Check your Sume webhook secret at boot: 64 hex and a match
A Node startup check for a Sume webhook receiver: the secret must be 64 hex characters, non-empty, and equal to GET /v1/webhooks/signing-secret.
Written by Sume