ApiframeDocs
Video GenerationSeedance

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/generatemodel: "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

ParameterTypeDefaultDescription
seedanceParams.durationinteger8Video duration in seconds, any integer from 4 to 30
seedanceParams.resolutionstring"720p"Output resolution: "480p" or "720p"
seedanceParams.aspect_ratiostring"16:9"Aspect ratio: "21:9", "16:9", "4:3", "1:1", "3:4", "9:16", or "adaptive"
seedanceParams.start_imagestringURL or asset://{assetId} for the first frame
seedanceParams.end_imagestringURL or asset://{assetId} for the last frame (requires start_image)
seedanceParams.reference_image_urlsstring[]Up to 30 reference image URLs or asset URIs
seedanceParams.reference_video_urlsstring[]Up to 10 reference video URLs or asset URIs, each 30 seconds or shorter
seedanceParams.reference_audio_urlsstring[]Up to 10 reference audio URLs or asset URIs, each 30 seconds or shorter
seedanceParams.generate_audiobooleantrueEnables synchronized audio generation. Audio is included in the base price.
seedanceParams.return_last_framebooleanfalseReturns the last frame of the generated video
seedanceParams.seedintegerOptional 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).

VariantCredits / sec
480p18
720p40
480p-refvid21
720p-refvid47

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

POST/v2/videos/generateTry it

On this page