Seedance 2.5 icon
Video by ByteDance

Seedance 2.5 API

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"

What's special about Seedance 2.5

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.

Native synchronized audio

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.

Tighter motion and physics

It improves motion stability and physical plausibility over Seedance 2, holding up through fast action, multi-subject scenes, and complex interactions.

Cinematic multi-shot sequences

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.

Stronger character consistency

It keeps a character's identity steady across movement, angle changes, and scene transitions, which matters for films, brand spots, and serialized content.

Editing and extension built in

It can adjust specific clips, characters, actions, or storylines, swap or remove elements, and extend a shot without regenerating the whole clip.

Made with Seedance 2.5

A few outputs generated through the Seedance 2.5 API on Apiframe.

Sample coming soon

Drone shot flying over a tropical coastline at sunrise, smooth cinematic motion

Sample coming soon

A vintage car driving through a rainy neon city at night, reflections on the asphalt

Sample coming soon

Time-lapse of clouds rolling over a mountain range in warm golden light

Overview

Endpoint
POST /v2/videos/generate
Model ID
seedance-2.5
Params key
seedanceParams
Modality
Video
Provider
ByteDance
Avg. completion
~120s

Capabilities

Aspect ratios21:9, 16:9, 4:3, 1:1, 3:4, 9:16
Resolutions480p, 720p, 1080p
Durations4s, 6s, 8s, 10s, 12s, 15s
Image inputSupported
AudioSupported
Avg. time~120s

Quick start

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);

Response & job lifecycle

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).

1. Submission response (202)

{
  "jobId": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
  "status": "QUEUED"
}

2. Poll for the result

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);

Input schema

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.

Frequently Asked Questions

Common questions about the Seedance 2.5 API.

What is Seedance 2.5?

ByteDance's latest multimodal AI video generation model, an iteration on Seedance 2 with improved motion, audio, and consistency.

What inputs does it accept?

Text, image, audio, and video, which you can combine and tag with roles to guide the output.

Does it generate audio?

Yes. It produces synchronized native audio, including music, sound effects, beat sync, and lip-sync.

How long are the clips and what resolution?

Up to 15 seconds, at up to 1080p, across multiple aspect ratios. Pricing is per second of output.

Can it edit and extend videos?

Yes. It modifies clips, characters, and actions, replaces elements, and extends or continues shots.

How is it billed?

Per second of generated video, so a longer clip simply costs proportionally more — you only pay for successful generations.

Still have questions?

Start building with the Seedance 2.5 API

Get your API key and integrate Seedance 2.5 in minutes — Pay-as-you-go.

Free credits to start
One API for every model
Webhooks, SDKs & idempotency
No provider account required

Questions? Join our Discord or contact sales.