import requests, time headers = {"Authorization": "Bearer " + AIMLAPI_KEY} job = requests.post( "https://api.aimlapi.com/v2/video/generations", headers=headers, json={ "model": "bytedance/seedance-2-5", "prompt": "A serene timelapse of clouds over a mountain range" }, ).json() gid = job["id"] while True: res = requests.get(f"https://api.aimlapi.com/v2/video/generations?generation_id={gid}", headers=headers).json() if res.get("status") in ("completed", "error"): break time.sleep(5) print(res["video"]["url"])
const headers = { Authorization: `Bearer ${process.env.AIMLAPI_KEY}`, "Content-Type": "application/json", }; const job = await (await fetch("https://api.aimlapi.com/v2/video/generations", { method: "POST", headers, body: JSON.stringify({ "model": "bytedance/seedance-2-5", "prompt": "A serene timelapse of clouds over a mountain range" }), })).json(); let res; do { await new Promise((r) => setTimeout(r, 5000)); res = await (await fetch(`https://api.aimlapi.com/v2/video/generations?generation_id=${job.id}`, { headers })).json(); } while (!["completed", "error"].includes(res.status)); console.log(res.video.url);
# submit the generation — the response contains the job "id" curl -X POST https://api.aimlapi.com/v2/video/generations \ -H "Authorization: Bearer $AIMLAPI_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"bytedance/seedance-2-5","prompt":"A serene timelapse of clouds over a mountain range"}' # then poll until status is "completed" — video.url holds the result curl "https://api.aimlapi.com/v2/video/generations?generation_id={id}" -H "Authorization: Bearer $AIMLAPI_KEY"
OpenAI-compatible — swap the base URL and it works with your existing SDK.
| Type | Price |
|---|---|
| Output | |
Without video input: $13.91 / 1M tokens, tokens = output_duration × width × height × fps ÷ 1024. With video input: $8.32 / 1M tokens, tokens = (input_duration + output_duration) × width × height × fps ÷ 1024. See worked examples in the section above.
| Model | Input | Output | Context | Best for |
|---|---|---|---|---|
Seedance 2.5 This page | Long-form narrative video with strong editing and multi-language | |||
| Video generation | ||||
| Video generation | ||||
| Video generation | ||||
| Cinematic video + native audio |
Seedance 2.5 takes image, text, video, audio as input and returns video.
Seedance 2.5 became available on August 7, 2026.
Seedance 2.5 is priced at $8.32 / 1M.
Seedance 2.5 is billed per generation — a fixed charge per output rather than by prompt length.
Yes, Seedance 2.5 accepts image input as well as a text prompt.
Seedance 2.5 was built by ByteDance.
Use bytedance/seedance-2-5 as the model id on AI/ML API.
Yes. Seedance 2.5 is served through AI/ML API, so the same key and endpoint format used for other models applies.
Yes, it supports a 30-second continuous narrative in a single generation.
Yes, it produces synchronized audio alongside the video output.
It accepts image, text, video, and audio inputs and can generate video guided by reference assets.
It supports up to 50 reference assets total: 30 images, 10 videos, and 10 audio clips.