A sharper multimodal director
It builds on the Seedance 2 workflow, taking text, image, audio, and video references in one generation and letting you tag each one so the model knows what should drive style, motion, or sound.
Generate cinematic AI video with ByteDance's Seedance 2.5 through one unified API. A single REST endpoint, async jobs, and webhooks, with no separate ByteDance account to manage.
Integrate Seedance 2.5 with a single API call — one key, one unified endpoint, and shared billing across every model on Apiframe.
model: "seedance-2.5" It builds on the Seedance 2 workflow, taking text, image, audio, and video references in one generation and letting you tag each one so the model knows what should drive style, motion, or sound.
It scores the video as it generates, producing music, sound effects, beat-aware cuts, and lip-sync in the same pass instead of leaving you to add a soundtrack afterward.
It improves motion stability and physical plausibility over Seedance 2, holding up through fast action, multi-subject scenes, and complex interactions.
A single generation can string together multiple shots with natural cuts and transitions, so one clip reads like an edited sequence rather than a single take.
It keeps a character's identity steady across movement, angle changes, and scene transitions, which matters for films, brand spots, and serialized content.
It can adjust specific clips, characters, actions, or storylines, swap or remove elements, and extend a shot without regenerating the whole clip.
A few outputs generated through the Seedance 2.5 API on Apiframe.
Drone shot flying over a tropical coastline at sunrise, smooth cinematic motion
A vintage car driving through a rainy neon city at night, reflections on the asphalt
Time-lapse of clouds rolling over a mountain range in warm golden light
Send a single POST /v2/videos/generate request with your API key to
generate with Seedance 2.5. The call returns a jobId you can poll or
receive via webhook.
curl -X POST https://api.apiframe.ai/v2/videos/generate \
-H "X-API-Key: afk_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"prompt": "a cinematic sunrise over a futuristic cityscape, smooth camera push-in",
"model": "seedance-2.5",
"seedanceParams": {
"resolution": "720p",
"start_image": "https://example.com/input.jpg",
"generate_audio": false,
"end_image": "https://example.com/input.jpg"
}
}'import requests
response = requests.post(
"https://api.apiframe.ai/v2/videos/generate",
headers={
"X-API-Key": "afk_your_api_key_here",
"Content-Type": "application/json",
},
json={
"prompt": "a cinematic sunrise over a futuristic cityscape, smooth camera push-in",
"model": "seedance-2.5",
"seedanceParams": {
"resolution": "720p",
"start_image": "https://example.com/input.jpg",
"generate_audio": False,
"end_image": "https://example.com/input.jpg"
}
},
)
print(response.json()) # { "jobId": "...", "status": "QUEUED" }const response = await fetch("https://api.apiframe.ai/v2/videos/generate", {
method: "POST",
headers: {
"X-API-Key": "afk_your_api_key_here",
"Content-Type": "application/json",
},
body: JSON.stringify({
"prompt": "a cinematic sunrise over a futuristic cityscape, smooth camera push-in",
"model": "seedance-2.5",
"seedanceParams": {
"resolution": "720p",
"start_image": "https://example.com/input.jpg",
"generate_audio": false,
"end_image": "https://example.com/input.jpg"
}
}),
});
const { jobId } = await response.json();
console.log(jobId);Generation is asynchronous. A successful submission returns 202 Accepted with a jobId. Poll GET /v2/jobs/{id} (or supply a webhook_url) until the status is COMPLETED; the result field then holds the output URL(s).
{
"jobId": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
"status": "QUEUED"
}curl https://api.apiframe.ai/v2/jobs/JOB_ID \
-H "X-API-Key: afk_your_api_key_here"import requests, time
while True:
job = requests.get(
"https://api.apiframe.ai/v2/jobs/JOB_ID",
headers={"X-API-Key": "afk_your_api_key_here"},
).json()
if job["status"] in ("COMPLETED", "FAILED"):
break
time.sleep(2)
print(job["result"])let job;
do {
await new Promise((r) => setTimeout(r, 2000));
job = await fetch("https://api.apiframe.ai/v2/jobs/JOB_ID", {
headers: { "X-API-Key": "afk_your_api_key_here" },
}).then((r) => r.json());
} while (job.status !== "COMPLETED" && job.status !== "FAILED");
console.log(job.result);Request parameters accepted by the Seedance 2.5 endpoint. Model-specific options are nested under the params object shown below.
| Parameter | Type | Required | Default | Allowed / range | Description |
|---|---|---|---|---|---|
| prompt | string | required | — | — | Text description of what to generate. |
| model | string | required | "seedance-2.5" | "seedance-2.5" | The model identifier for this endpoint. |
| seedanceParams.resolution | string | optional | "720p" | "480p", "720p", "1080p" | Resolution |
| seedanceParams.start_image | string (URL) | optional | — | — | Use a still as the first frame of the clip. |
| seedanceParams.generate_audio | boolean | optional | false | — | Generate audio |
| seedanceParams.end_image | string (URL) | optional | — | — | Optional last frame to control the ending. |
| seedanceParams.reference_image_urls | string[] (URLs) | optional | — | — | Reference images |
| seedanceParams.reference_video_urls | string[] (URLs) | optional | — | — | Reference videos |
| seedanceParams.reference_audio_urls | string[] (URLs) | optional | — | — | Reference audio |
| seedanceParams.return_last_frame | boolean | optional | false | — | Also return the final frame as a still image. |
| seedanceParams.web_search | boolean | optional | false | — | Web search |
| seedanceParams.camera_fixed | boolean | optional | false | — | Disable camera movement. |
| seedanceParams.seed | number | optional | — | step 1 | Reuse a number to reproduce the same result. |
Common questions about the Seedance 2.5 API.
ByteDance's latest multimodal AI video generation model, an iteration on Seedance 2 with improved motion, audio, and consistency.
Text, image, audio, and video, which you can combine and tag with roles to guide the output.
Yes. It produces synchronized native audio, including music, sound effects, beat sync, and lip-sync.
Up to 15 seconds, at up to 1080p, across multiple aspect ratios. Pricing is per second of output.
Yes. It modifies clips, characters, and actions, replaces elements, and extends or continues shots.
Per second of generated video, so a longer clip simply costs proportionally more — you only pay for successful generations.
Still have questions?
Get your API key and integrate Seedance 2.5 in minutes — Pay-as-you-go.
Questions? Join our Discord or contact sales.