How to Use the Seedance 2.5 API: Video with Native Audio in 20 Lines of Code

Published August 18, 2026 · 8 min read

Seedance 2.5 is ByteDance's newest video model and the headline feature is native synchronized audio — rain sounds on rain, engine noise on cars, dialogue lip-synced to faces, all generated together with the frames. This tutorial shows the complete integration path: submit a task, poll until it finishes, and download the MP4. Working code included.

Before you start

You need an API key from any provider that lists the model. On NovAI, registration takes under a minute and ships with $2 of trial credit — enough for two Seedance 2.5 clips. The model ID is doubao-seedance-2.5.

ParameterSupported values
resolution480p, 720p (trial accounts: 480p)
duration1–30 seconds (trial: ≤5s · top-up: ≤15s · $50+: ≤30s on NovAI)
imageOptional reference image URL for image-to-video

Step 1 — Submit the generation task

Video generation is asynchronous: you submit a task and receive a task ID immediately.

curl -X POST https://api.aiapi-pro.com/v1/video/generations \
  -H "Authorization: Bearer $NOVAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2.5",
    "prompt": "A street food stall at night, steam rising from a wok, the sizzle of oil, rain tapping on the awning",
    "resolution": "720p",
    "duration": 5
  }'

Response:

{
  "id": "cgt-20260818010541-h582g",
  "request_id": "vidgen-48cf5f6d496049a996d07b07",
  "status": "queued",
  "model": "doubao-seedance-2.5",
  "resolution": "720p",
  "duration": 5
}

Note how the prompt above mentions sounds explicitly — the audio model listens to your prompt. Words like "sizzle", "rain tapping", "engine roaring" steer the generated soundtrack the same way visual adjectives steer the frames.

Step 2 — Poll until it finishes

A 5-second clip typically completes in 1–3 minutes. Poll the task endpoint:

curl https://api.aiapi-pro.com/v1/video/generations/cgt-20260818010541-h582g \
  -H "Authorization: Bearer $NOVAI_API_KEY"

The status field moves through queued → running → succeeded (or failed). When succeeded, the response contains a signed video_url valid for 24 hours:

{
  "status": "succeeded",
  "resolution": "720p",
  "duration": 5,
  "generate_audio": true,
  "content": { "video_url": "https://.../cgt-20260818010541-h582g.mp4?..." },
  "usage": { "completion_tokens": 108450, "total_tokens": 108450 }
}

Step 3 — The same flow in Python

import time, requests

API_KEY = "nvai-..."
BASE = "https://api.aiapi-pro.com"
H = {"Authorization": f"Bearer {API_KEY}"}

# 1. submit
r = requests.post(f"{BASE}/v1/video/generations", headers=H, json={
    "model": "doubao-seedance-2.5",
    "prompt": "A paper boat drifting across a pond at dusk, frogs croaking softly",
    "resolution": "720p",
    "duration": 5,
})
task_id = r.json()["id"]

# 2. poll
while True:
    time.sleep(15)
    st = requests.get(f"{BASE}/v1/video/generations/{task_id}", headers=H).json()
    print(st["status"])
    if st["status"] in ("succeeded", "failed"):
        break

# 3. download
if st["status"] == "succeeded":
    video = requests.get(st["content"]["video_url"]).content
    open("output.mp4", "wb").write(video)
    print("saved output.mp4 —", st["usage"]["total_tokens"], "tokens")

Image-to-video

Add an image field with a URL to animate a reference image — the audio track is generated to match the scene too:

{
  "model": "doubao-seedance-2.5",
  "prompt": "The character waves at the camera while a crowd cheers",
  "image": "https://example.com/character.jpg",
  "resolution": "720p",
  "duration": 10
}

Costs, tiers and failure handling

On NovAI, billing is per finished second — $0.14/s at 480p, $0.32/s at 720p (full breakdown in our pricing article). The cost is pre-deducted when the task is accepted, and if the task later ends in failed status, the charge is refunded automatically — you will see a novai_refund object in the polling response.

Practical tips from our launch-day testing:

What to build with it

The audio-included output changes what a single API call can deliver: product ads that ship ready-to-post, game ambience loops, storyboards with sound, social teasers that don't need a separate sound-design pass. Combined with the 30-second duration ceiling, one call can now cover a complete short-form video slot.

Get your API key and generate the first clip free

$2 trial credit · doubao-seedance-2.5 · OpenAI-style async API

Start Free →

Related: Seedance 2.5 pricing, explained · Seedance 2.5 review: what actually changed · Model page