Seedance 2.5 references: input_references or reference_image_urls?
POST /v1/videos takes frame_images and input_references for seedance-2.5; the Video Router takes image_url and reference_*_urls. The wrong shape gets 400.

Which reference field you use for seedance-2.5 depends on the endpoint: POST /v1/videos takes typed input_references and frame_images, while POST /v1/video-router/generate takes flat image_url, end_image_url and reference_image_urls, reference_video_urls, reference_audio_urls. Send the other endpoint's shape and you get a 400 such as "input_references is only accepted on auto- / sume/auto / auto."
Video generation documents the first shape and says frame_images takes precedence if both are present; Video Router says it takes Sume's flat image_url / reference_image_urls fields. The refusals come from Sume's request schemas in the API reference.
Which shape goes with which endpoint?
The model id and the capabilities are the same on both; only the wire differs. The Video Router docs call themselves the legacy path and send new integrations to /v1/videos.
| You want | POST /v1/videos | POST /v1/video-router/generate |
|---|---|---|
| First frame | frame_images with frame_type: first_frame | image_url |
| Last frame | frame_images with frame_type: last_frame | end_image_url (needs image_url) |
| Reference images | input_references entries with type: image_url | reference_image_urls |
| Reference video | input_references entries with type: video_url | reference_video_urls |
| Reference audio | input_references entries with type: audio_url | reference_audio_urls |
What do the two bodies look like?
The same single reference image, once per endpoint.
// POST /v1/videos
{
"model": "seedance-2.5",
"prompt": "The mug steams on a windowsill",
"input_references": [
{"type": "image_url", "image_url": {"url": "https://example.com/mug.jpg"}}
],
"duration": 6
}
// POST /v1/video-router/generate
{
"model": "seedance-2.5",
"prompt": "The mug steams on a windowsill",
"reference_image_urls": ["https://example.com/mug.jpg"],
"duration": 6
}What does the wrong shape return?
A 400 naming the field. On /v1/videos a pinned model refuses reference_image_urls with "reference_image_urls is only accepted on auto- / sume/auto / auto." On the Video Router a pinned model refuses input_references and frame_images with the same wording for those fields. The auto- family is the exception on both: it accepts the other shape too.
The fix is a path-and-body change, not a model change; the docs say the model vocabulary is shared, so no id remapping is needed.
Does a single reference image mean first frame?
No. One reference image is reference-to-video, not image-to-video; a first frame needs the frame field. One image to Seedance: reference, or first frame? explains the difference, and ByteDance's launch post treats reference-based generation as one of the model's two centres (read 2026-10-02).
Sources
Related posts
More in Developers
- Seedance 2.5 reference audio alone returns 400: add an image
On Sume's Video Router, reference_audio_urls with no reference image or video returns 400. Pair the audio with an image or clip, within 3 audio and 12 total.
- Seedance 2.5 seed, size and provider options: why Sume returns 400
Sume rejects seed, size and non-empty provider.options on seedance-2.5 with 400 instead of dropping them. What to send to repeat a clip or fix the frame size.
- Seedance 2.5 sync mode: a 30-second wait, then poll
mode sync on the Video Router blocks at most 30 seconds. A Seedance 2.5 job can outlast it, so read sync.timed_out and poll status_url without resubmitting.
- Seedance aspect ratios on Sume: 3:2 and 9:21 are not on every model
Sume accepts nine aspect ratios in total, but each video model lists its own subset. Check supported_aspect_ratios before you request 3:2 or 9:21.
Written by Sume