fb-pixel

bytedance/seedance-2.5

Next-gen audio-video model — up to 30s clips, smarter reference control, and pro-grade editing.

text-to-videoimage-to-videovideo-to-videowith audio30s clipsreference control

Start Here

Create Your API Key

Generate a key to call Seedance 2.5. Usage draws from your API Balance.

Get API Key

API Balance

Overview

Seedance 2.5 is a next-generation video creation model with major improvements in long-form storytelling, omni reference support, and editing. It can generate up to 30 seconds of video in one request, extend videos over multiple rounds, accept up to 50 omni reference assets per request, and perform precise timestamp-based editing. Improved visual quality produces results with a more realistic, cinematic look.

1. Before you begin

You need two things: an API key, and a funded API balance.

  1. Click Get API Key in the card above to generate a key instantly.
  2. Click Add Balance to fund your account — billed in USD, and separate from your kaze.ai web credits.
  3. Buying at volume? Contact sales for discounted rates.

Base URL

https://api-srv.kaze.ai

Use this root with the /api/ext/v1 paths below.

Authorization

Bearer <KAZE_API_KEY>

Send it in the Authorization header.

Content type

application/json

All examples use JSON request bodies.

2. Pricing

Billed per second of output. Cost scales with resolution and duration. Enterprise saves 30% on every generation.

Resolution
Duration
Or

dreamina-seedance-2-5-hc

Seedance 2.5

Saniyede (Starter/Enterprise)$0.22/$0.16
Başlangıç Toplamı$1.10
Kurumsal Toplam -30%$0.8

3. Quick Start

The fastest way to test the API is to create a video from text. No asset upload is required.

Start Here

Create Your API Key

Generate a key to call Seedance 2.5. Usage draws from your API Balance.

Get API Key

Step 1. Set up your API key

Create an API key and store it securely on your server.

export API_BASE_URL="https://api-srv.kaze.ai"
export KAZE_API_KEY="<YOUR_API_KEY>"

Every request must include:

Authorization: Bearer <YOUR_API_KEY>
Content-Type: application/json

Do not expose your API key in browser code, mobile apps, or public repositories.

Step 2. Create a video (Text-to-Video Generation)

curl --request POST "$API_BASE_URL/api/ext/v1/video/generate" \
  --header "Authorization: Bearer $KAZE_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "dreamina-seedance-2-5-hc",
    "content": [
      {
        "type": "text",
        "text": "A cat and a dog are running through a sunny park."
      }
    ],
    "duration": 5,
    "resolution": "720p",
    "ratio": "16:9"
  }'

The API accepts the task immediately and returns a task ID:

{
  "task": {
    "id": "mvt-xxxxxxxx",
    "status": "pending"
  }
}

A successful response means the task was created. It does not mean the video is ready.

Step 3. Check the task status

Replace mvt-xxxxxxxx with the task ID returned in Step 2.

curl "$API_BASE_URL/api/ext/v1/video/tasks/mvt-xxxxxxxx" \
  --header "Authorization: Bearer $KAZE_API_KEY"

Check the endpoint every 5–10 seconds until the task reaches a final status.

StatusMeaning
pendingThe task is waiting to start.
processingThe video is being generated.
completedThe video is ready.

Step 4. Get the video

When the status is completed, read the generated video URL from task.outputs.

{
  "task": {
    "id": "mvt-xxxxxxxx",
    "status": "completed",
    "outputs": [
      "https://media.example.com/generated-video.mp4"
    ],
    "last_frame_url": "https://media.example.com/last-frame.jpg"
  }
}

last_frame_url is included only when return_last_frame is enabled. You have now completed your first Seedance API request.

4. Reference-to-Video Generation

Skip this section if you only need text-to-video. Images, videos, and uploaded audio must be added through the Asset API before they can be used in a video request. The workflow is:

  1. Add the media URL as an asset.
  2. Save the returned asset ID.
  3. Wait until the asset status is completed.
  4. Use asset://{asset_id} in the video request.
  5. Create and poll the video task normally.

Step 1. Add an asset

curl --request POST "$API_BASE_URL/api/ext/v1/assets" \
  --header "Authorization: Bearer $KAZE_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "dreamina-seedance-2-5-hc",
    "url": "https://media.example.com/reference.webp",
    "asset_type": "Image",
    "name": "reference-image"
  }'

Example response:

{
  "id": "asset-xxxxxxxx",
  "status": "processing"
}

Save the value of id.

Step 2. Wait for the asset

Use the asset status endpoint until the returned status is completed.

curl --request POST "$API_BASE_URL/api/ext/v1/assets/get" \
--header "Authorization: Bearer $KAZE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
  "model": "dreamina-seedance-2-5-hc",
  "asset_id": "asset-xxxxxxxx",
  "task_id": ""
}'

Do not submit the video task while the asset is still processing.

Step 3. Reference the asset

  1. Add the completed asset to the content array
  2. The request must still contain at least one text item.
curl --request POST "$API_BASE_URL/api/ext/v1/video/generate" \
  --header "Authorization: Bearer $KAZE_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "dreamina-seedance-2-5-hc",
    "content": [
      {
        "type": "text",
        "text": "Use @image1 as the character and @image2 as the background. Follow the camera movement from @video1 and use @audio1 as ambient sound."
      },
      {
        "type": "image_url",
        "image_url": {
          "url": "asset://asset-xxxxxxxx"
        },
        "role": "reference_image"
      },
      {
        "type": "image_url",
        "image_url": {
          "url": "asset://asset-xxxxxxxx"
        },
        "role": "reference_image"
      },
      {
        "type": "video_url",
        "video_url": {
          "url": "asset://asset-xxxxxxxx"
        },
        "role": "reference_video"
      },
      {
        "type": "audio_url",
        "audio_url": {
          "url": "asset://asset-xxxxxxxx"
        },
        "role": "reference_audio"
      }
    ],
    "duration": 5,
    "resolution": "720p",
    "ratio": "16:9"
  }'

The API accepts the task immediately and returns a task ID:

{
  "task": {
    "id": "mvt-xxxxxxxx",
    "status": "pending"
  }
}

Then Check the task status and Get the video.


Supported reference types

MediaTypeRoles
Imageimage_urlreference_image, first_frame, last_frame
Videovideo_urlreference_video
Audioaudio_urlreference_audio

Uploaded images and videos use an asset:// URL. Audio can use either an uploaded asset or a public HTTPS URL.


Referencing media in a prompt

Reference media by its position in the content array:

  • @image1, @image2
  • @video1
  • @audio1

Example:

Use @image1 as the character and @image2 as the background.
Follow the camera movement from @video1 and use @audio1 as ambient sound.

Configuration methods

Omni reference-to-video without specifying a subtask

For an omni reference-to-video task, if you do not need to distinguish the specific subtask type and do not need to customize the video aspect ratio or duration, use the following configuration method . This can avoid errors caused by task-type constraints.

  1. Set omni_reference_task_type to auto.
  2. Set content.role to reference_image, reference_video, or reference_audio.
  3. ratio must be adaptive; duration must be -1; the reference video must be 4-30 seconds long.

Common Recipes

RecipeDescription
Text to videoUse one text item. No asset upload is required.
Image to videoAdd an image with the reference_image or first_frame role.
First and last frameAdd two image items using the first_frame and last_frame roles.
Video referenceUpload and process a video asset, then add it with the reference_video role.
Audio referenceUse an uploaded audio asset or a public HTTPS audio URL with the reference_audio role.

API Reference

Endpoints

ActionMethodPath
Check balancePOST/api/ext/v1/get_quota
Add an assetPOST/api/ext/v1/assets
Check an assetPOST/api/ext/v1/assets/get
Rename an assetPOST/api/ext/v1/assets/update
Create a videoPOST/api/ext/v1/video/generate
Get a video taskGET/api/ext/v1/video/tasks/{task_id}
List video tasksGET/api/ext/v1/video/tasks

Video parameters

ParameterTypeRequiredDefaultDescription
modelstringYes-Seedance model ID. Use one of the enabled IDs above.
contentarrayYes-1-50 content items. Include at least one text item.
durationintegerNo10Output length in seconds. Supported range depends on the model, commonly 4-30 seconds.
resolutionstringNo720p480p, 720p.
ratiostringNo16:921:9, 16:9, 4:3, 1:1, 3:4, or 9:16.
generate_audiobooleanNofalseGenerate synchronized audio in the same request.
watermarkbooleanNofalseAdd an AI watermark to the generated video.
return_last_framebooleanNofalseReturn the last frame URL with the completed task.

Model

Model IDNotes
dreamina-seedance-2-5-hcSeedance 2.5

Troubleshooting

The request returned HTTP 200, but there is no video

Video generation is asynchronous. Save task.id and check the task endpoint until the status is completed.

The asset cannot be used

Make sure the asset status is completed and the URL uses this format: asset://asset-xxxxxxxx

The request is rejected

Check that:

  • The API key is valid.
  • The account has sufficient balance.
  • content contains at least one text item.
  • The model ID is enabled for your account.
  • Parameter values are supported by the selected model.