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.

A Seedance 2.5 request on Sume's Video Router that has reference_audio_urls but no reference_image_urls or reference_video_urls returns a 400: "reference_audio_urls requires at least one reference image or video." Audio is a companion reference, not a stand-alone one, so add at least one image or clip.
The rule is in Sume's request schema for the Video Router (see the API reference and Video Router). ByteDance Seed describes audio references as one of the inputs alongside images and video clips, up to 10 audio clips per pass on its side (launch post, read 2026-10-02); Sume's limits are lower.
What combinations does the Video Router accept?
Reference fields are checked together, not one at a time.
| Request has | Result |
|---|---|
| Only reference_audio_urls | 400: needs at least one reference image or video |
| reference_image_urls + reference_audio_urls | Accepted |
| reference_video_urls + reference_audio_urls | Accepted |
| More than 3 audio, 3 video or 9 image references | 400: per-type cap |
| More than 12 reference files in total | 400: "Reference inputs must not exceed 12 total files." |
| image_url (first frame) + any reference_*_urls | 400: use frame fields or references, not both |
How many audio references can I send?
Up to 3 on seedance-2.5, and they count toward the 12-file total with the images and clips. The OpenAPI schema shows a higher array ceiling of 5 because the same schema serves other models; the per-model check is the one that applies here. Each URL must be public HTTPS.
What does a valid request look like?
One character image and one voice clip, 12 seconds, vertical. Tag the media in the prompt so the model knows what each file is for.
{
"model": "seedance-2.5",
"prompt": "The woman in @Image 1 speaks to camera in the voice of @Audio 1, warm window light.",
"reference_image_urls": ["https://example.com/host.jpg"],
"reference_audio_urls": ["https://example.com/voice.mp3"],
"duration": 12,
"aspect_ratio": "9:16"
}Does the same rule apply on POST /v1/videos?
The 400 above is the Video Router's own rule, and this post does not claim an identical message on /v1/videos. There, audio goes in input_references as an audio_url entry, and the documented model-level check for seedance-2.5 is the 12-file total. Send an image or clip with the audio there too: it is what the Seedance examples do, and it keeps the request portable between the two endpoints.
Sources
Related posts
More in Developers
- 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.
- Seedance 2.5 reference images in Python with asyncio and httpx
A runnable Python script: send reference images to seedance-2.5 on Sume's /v1/videos, poll every 30 s with asyncio, save the MP4, and handle the errors.
Written by Sume