Move a Seedance 2.5 call from video-router/generate to /v1/videos
Same jobs, same ids: map reference_image_urls to input_references and image_url to frame_images when you move a seedance-2.5 call to POST /v1/videos.

Moving a seedance-2.5 call from POST /v1/video-router/generate to POST /v1/videos is a path-and-body change: model ids stay the same, image_url becomes a frame_images entry and reference_image_urls become input_references. Sume recommends /v1/videos for new integrations and keeps Video Router working unchanged.
Responses differ too: Video Router returns Sume's { "data": ... } envelope, while /v1/videos returns the OpenRouter-style job with a polling_url.
Field map
| Video Router | /v1/videos |
|---|---|
| model: seedance-2.5 | model: seedance-2.5 |
| image_url | frame_images with frame_type first_frame |
| end_image_url | frame_images with frame_type last_frame |
| reference_image_urls | input_references type image_url |
| reference_video_urls | input_references type video_url |
| reference_audio_urls | input_references type audio_url |
| mode: async | not needed (always async) |
Before and after
Keep your Idempotency-Key; both routes honor it.
# before
POST /v1/video-router/generate
{"model": "seedance-2.5", "prompt": "...", "duration": 12, "mode": "async"}
# after
POST /v1/videos
{"model": "seedance-2.5", "prompt": "...", "duration": 12}Gotchas
/v1/videosreturns 400 forsize,seedand non-emptyprovider.optionson these models.- Job status is also reachable at
GET /v1/jobs/{id}/status.
What stays the same
Both routes create jobs with the same model ids, so a migration does not require re-mapping ids. Job status remains visible at GET /v1/jobs/{id}/status and /result.
The OpenRouter-compatible wire means a client written from OpenRouter's video docs works after you change the base URL and API key.
Migration checklist
Update any code that reads the { "data": ... } envelope; /v1/videos returns top-level fields such as polling_url and unsigned_urls.
- Replace the path.
- Map reference and frame fields.
- Handle
unsigned_urls[0]for download.
Sources
Related posts
More in Developers
- Move an OpenRouter video client to Sume: base URL, key, model ids
Sume POST /v1/videos matches the OpenRouter video API. Change the base URL, key and model id, then check size, seed, provider.options and webhooks.
- Move captions on an avatar video: design.placement and anchor_ratio
Inline avatar captions take no design overrides. To lift the caption line off the platform buttons, re-burn with the standalone job. Fields, price, example.
- mulmo images and mulmo movie break on gpt-image-1: set a model now
mulmocast-cli issue 1605: the gpt-image-1 default breaks mulmo images and movie after Oct 23, 2026. Which files to change, and a Python call to Sume instead.
- Music 1.0 is retiring: keep old calls, move new code to the router
Sume Music 1.0 routes still work and keep job.model sume/music-1.0, but every request now resolves through the Music Router. What to change and when.
Written by Sume