Seedance 2.5
ByteDance Seedance 2.5 with 30-second single-pass clips, up to 50 multimodal references, and native synchronized audio.
POST /v2/videos/generate — model: "seedance-2.5"
Seedance 2.5 is ByteDance's next-generation video model, served directly through our first-party BytePlus ModelArk integration. It extends Seedance 2.0 with single-pass clips up to 30 seconds and a much larger multimodal reference budget: up to 30 reference images, 10 reference videos, and 10 reference audio tracks in a single request.
See Video Generation overview for common request fields, response format, and error codes.
Model-specific parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
seedanceParams.duration | integer | 8 | Video duration in seconds, any integer from 4 to 30 |
seedanceParams.resolution | string | "720p" | Output resolution: "480p" or "720p" |
seedanceParams.aspect_ratio | string | "16:9" | Aspect ratio: "21:9", "16:9", "4:3", "1:1", "3:4", "9:16", or "adaptive" |
seedanceParams.start_image | string | — | URL or asset://{assetId} for the first frame |
seedanceParams.end_image | string | — | URL or asset://{assetId} for the last frame (requires start_image) |
seedanceParams.reference_image_urls | string[] | — | Up to 30 reference image URLs or asset URIs |
seedanceParams.reference_video_urls | string[] | — | Up to 10 reference video URLs or asset URIs, each 30 seconds or shorter |
seedanceParams.reference_audio_urls | string[] | — | Up to 10 reference audio URLs or asset URIs, each 30 seconds or shorter |
seedanceParams.generate_audio | boolean | true | Enables synchronized audio generation. Audio is included in the base price. |
seedanceParams.return_last_frame | boolean | false | Returns the last frame of the generated video |
seedanceParams.seed | integer | — | Optional random seed for reproducible generations |
Frame anchors and reference media are mutually exclusive: a request that sets start_image or end_image cannot also include reference_image_urls, reference_video_urls, or reference_audio_urls. The API rejects mixed requests at validation time.
Reference videos and reference audio files must each be 30 seconds or shorter — the upstream API probes each file's actual duration at submit time and rejects longer clips with a "reference video/audio is too long" error.
Unlike Seedance 2.0, this model does not accept web_search or camera_fixed, and 1080p / 4k output is not available upstream.
Asset references
Reference fields (start_image, end_image, reference_image_urls, reference_video_urls, reference_audio_urls) accept both direct URLs and asset URIs in the format asset://{assetId}. Use the Assets API to pre-upload media and obtain asset IDs.
Credit cost
Pricing is per second of output. The total credit cost is credits-per-second × duration. Reference images and audio do not affect cost; only reference_video_urls does (it shifts pricing to the *-refvid rate because reference video changes the upstream generation mode).
| Variant | Credits / sec |
|---|---|
480p | 18 |
720p | 40 |
480p-refvid | 21 |
720p-refvid | 47 |
Examples: an 8-second 720p clip costs 40 × 8 = 320 credits; a 30-second 720p clip costs 40 × 30 = 1200 credits; a 15-second 480p-refvid clip costs 21 × 15 = 315 credits.
Example result
Once the job is COMPLETED, the result object on GET /v2/jobs/:id looks like:
{
"videoUrl": "https://cdn2.apiframe.ai/videos/b2c3d4e5-f6a7-8901-bcde-f23456789012.mp4"
}See Result format for field details.
Code examples
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 30-second product spot: wide establishing shot of a minimalist kitchen at dawn, slow push-in to a glass bottle on the counter, warm morning light, gentle ambient audio",
"model": "seedance-2.5",
"seedanceParams": {
"duration": 30,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": true
}
}'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 30-second product spot: wide establishing shot of a minimalist kitchen at dawn, slow push-in to a glass bottle on the counter, warm morning light, gentle ambient audio",
"model": "seedance-2.5",
"seedanceParams": {
"duration": 30,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": True,
},
},
)
print(response.json())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 30-second product spot: wide establishing shot of a minimalist kitchen at dawn, slow push-in to a glass bottle on the counter, warm morning light, gentle ambient audio",
model: "seedance-2.5",
seedanceParams: {
duration: 30,
resolution: "720p",
aspect_ratio: "16:9",
generate_audio: true,
},
}),
});
console.log(await response.json());Try it
/v2/videos/generateTry it