Skip to main content
Generate video from text, images, video, and audio with Seedance 2.0 and 2.5 on LaoZhang API: create an asynchronous task, poll it, and download the MP4. You need a token in the SeeDance2 group, and tasks are billed by tokens.
Use the base URL https://api.laozhang.ai/seedance/api/v3.
  • Don’t append the official Ark path /api/v3/... directly to https://api.laozhang.ai.
  • Don’t drop /api from the prefix: /seedance/v3/... returns the site’s HTML instead of API JSON.

Token setup

Seedance models are only available in the SeeDance2 group, so the token must use that group. Tokens in other groups, such as default or Wan, can’t call them and fail with a no-channel error. A dedicated Seedance token also keeps logs and charges easy to review.

Endpoints

Don’t call GET /contents/generations/tasks without a task ID. On this relay the list endpoint returns the site’s HTML instead of JSON, so create tasks and then query each one by its ID.

Billing and pricing

Seedance is billed by tokens. In LaoZhang API’s public pricing as of September 24, 2026, the SeeDance2 group has a 0.18× multiplier, and each model’s base price is the same figure as Volcengine’s RMB price, so the USD price is Volcengine’s RMB price × 0.18. At the fixed exchange rate of 1:7, 0.18 × 7 = 1.26, which makes the nominal price about 1.26 times Volcengine’s official price. The multiplier converts RMB pricing into your USD balance. It isn’t a discount, and the amounts in call logs already include it, so don’t apply it again. With no input video, 480p, 720p, and 1080p output cost the same. Prices per 1M tokens: The Volcengine list price is its 480p and 720p price with no input video. The 5-second estimates assume a 16:9 video with no input video and count the 121 frames actually output: about 108,900 tokens at 720p and 245,025 tokens at 1080p. The actual token count is the task’s usage.completion_tokens, and the task’s cost is the sum of its two rows in call logs. Model prices are also on the console pricing page, and the model and pricing catalog lists groups and multipliers. Task details may show the multiplier as topup_convert_ratio: 0.18 next to group_ratio: 1. The two fields serve different purposes: group_ratio: 1 doesn’t mean the multiplier was skipped.

Estimate the cost of a task

Volcengine publishes this formula for estimating the cost:
The unit price depends on the output resolution and on whether the request includes an input video, and the output length drives usage:
  • Volcengine charges more per token for 1080p than for 480p and 720p (¥77 for Seedance 2.5 and ¥51 for Seedance 2.0 per 1M tokens). On LaoZhang API, the three resolutions cost the same when there is no input video, so use the table above. The fast and mini models go up to 720p.
  • A request with an input video (video_url) has a lower unit price: $7.56 per 1M tokens for Seedance 2.5, and $5.58 for Seedance 2.0 at 1080p. The input video’s duration also counts toward usage, though, so the same 5 seconds of output usually costs more overall.
  • Volcengine also sets a minimum token usage for requests with an input video and bills the minimum when the estimate falls below it.
  • Longer output uses more tokens. Seedance 2.5 defaults duration to -1, which lets the model choose a length from 4 to 30 seconds, so set duration explicitly when cost matters.
Volcengine lists these RMB prices for a 16:9 video with 5 seconds of output (Volcengine Ark model pricing, in Chinese). Use them to compare resolutions and inputs; for LaoZhang API prices in USD, use the rates above. Each range runs from a 2–4 second input video to the longest one allowed: 30 seconds for Seedance 2.5 and 15 seconds for the 2.0 models.

Why one task has two rows in call logs

The final token usage isn’t known when you create a task. LaoZhang API records an estimated pre-charge first, then settles the difference from the final usage.completion_tokens. Both rows belong to one task: they aren’t two requests or two full charges. Task cost = pre-charge amount + settlement amount. For example, a pre-charge of about $0.90 followed by a settlement of about $3.58 adds up to one task that costs about $4.48. If actual usage is lower than the estimate, the settlement row refunds the difference instead. The streaming label on the settlement row comes from the settlement process. It doesn’t mean your client used a streaming API, and it isn’t a request from another key. The settlement row usually doesn’t repeat the token, group, or IP, so use the pre-charge row to identify where a request came from. To reconcile one task:
  1. Search call logs for doubao-seedance or the full model ID you used.
  2. Use the pre-charge row to confirm the token, group, and source IP.
  3. Use the settlement row to read the final completion tokens.
  4. Match the task ID and its creation and completion times on the asynchronous task page, and count the two rows as one video.
If a task fails or expires, check its rows in call logs. If it still shows a charge you don’t expect, contact support with the task ID.

How a task works

1

Create a task

Call POST /contents/generations/tasks with the plain model ID in model and the prompt and any media in the content array. Save the returned id.
2

Poll the task

Call GET /contents/generations/tasks/{id} until status reaches a final state.
3

Download the video

After the task succeeds, download the video from content.video_url, or call /v1/videos/{id}/content.If you set return_last_frame to true, also read content.last_frame_url.

Task statuses

Use one rule for every response:
  • Keep polling while status is queued or running.
  • Treat succeeded and completed as success.
  • Treat any other value as final. On a final failure, stop polling and log the full response.
The query endpoint returns an Ark-style task object with status and content.video_url. If the response has a different shape:
  • A LaoZhang-compatible task object can instead put the URL in top-level result_url or in data.content.video_url.
  • If you can’t find a URL, download through /v1/videos/{id}/content.

Models

Model IDs are from LaoZhang API’s public pricing as of September 24, 2026, and the mini and 2.5 capabilities come from the model comparison in Volcengine’s Seedance 2.5 guide (in Chinese). Seedance 2.5 adds ratio and duration constraints for first-frame, first-and-last-frame, video-editing, and video-extension tasks, so read that guide before you switch a task to 2.5. Send the plain model ID in model. Don’t send a console endpoint ID (ep-...) and don’t append labels such as (2.0-audio-video) to the name: the relay matches channels by plain model ID.

Set up your environment

Before you run the examples:
  • The shell examples use curl and jq. Install jq with brew install jq or sudo apt-get install jq.
  • The Python example needs pip install requests.
  • Each create example saves its response to create.json, which the query step reads.

Create a task

Headers

Request parameters

content items

Common role values: With the Seedance 2.0 models (standard, fast, and mini), audio can’t be the only reference: when you send audio_url, include at least one image or video in the same request. Seedance 2.5 accepts audio as the only reference.

Text to video

The create response usually contains only the task ID:

First and last frames

Image, video, and audio references

To keep a real person’s identity or likeness consistent, an ordinary face image isn’t enough. Complete the real-person and virtual human asset flow first, and once the asset is Active, send its asset://... URI as a reference_image.

Query a task

Read the task ID from create.json and check the task:
Repeat the query every 10–15 seconds while status is queued or running. A successful response looks like this:
Result URLs are temporary signed URLs, usually valid for 24 hours. In production, download each result as soon as the task succeeds and copy it to your own storage.

Download the result

If the task detail includes a video URL, download it directly. It’s a signed URL, so no Authorization header is needed:
If there’s no URL you can parse, or you only need the file, use the compatibility endpoint. It lives under https://api.laozhang.ai/v1, not /seedance/api/v3. After the task succeeds, it looks up the stored result on the server and returns the MP4 or redirects to it:

Python example

This example creates a text-to-video task, polls for up to 20 minutes, and saves the MP4. Install the dependency with pip install requests.

Frequently asked questions

Was I charged twice for one Seedance task?

No. The two rows are the pre-charge and the settlement for one task, and their sum is the task’s cost; see why one task has two rows in call logs to reconcile them.

Am I charged when a request is rejected or a task fails?

No. A create request that is rejected outright, for example with a 4xx parameter error and no task ID, isn’t charged. If the task was created but ends as failed or expired, the pre-charge is refunded when the task settles. The actual charge is in call logs. If a failed or expired task still shows a charge, contact support with the task ID.

Is the SeeDance2 0.18× multiplier a discount?

No. It converts Volcengine’s RMB prices to your USD balance; see billing and pricing for the conversion and per-token prices.

Why does 1080p cost more, and does portrait cost more?

1080p costs more because it uses more tokens; aspect ratio barely matters. The per-token price is the same for 480p, 720p, and 1080p when there’s no input video, but token usage grows with the number of output pixels. Five seconds at 720p use about 108,900 tokens, and five seconds at 1080p use about 245,025, so a 1080p video costs more. At a given resolution every ratio has about the same pixel count: at 720p, 16:9 is 1280×720 and 9:16 is 720×1280. Landscape, portrait, and square videos therefore cost about the same. The formula is in Estimate the cost of a task.

What path and model value should I send?

Send requests to /seedance/api/v3/contents/generations/tasks. Removing /api from the prefix (/seedance/v3/...) returns the site’s HTML instead of JSON, and so does the list endpoint without a task ID. In model, send the plain model ID, such as doubao-seedance-2-0-260128. Don’t pass an ep-... endpoint ID, and don’t add a label after the ID.

Which model should I use: 2.0 standard, fast, mini, or 2.5?

Pick by the capability you need:
  • 1080p: 2.0 standard or 2.5. Fast and mini stop at 720p.
  • More than 15 seconds, more than 9 reference images, audio as the only reference, or MOV output: 2.5. The 2.0 models accept up to 9 images, 3 videos, and 3 audio clips.
  • Lowest cost: mini has the lowest price, and fast sits between mini and standard. Within the 2.0 family, standard gives the highest quality.
All four models use the same endpoint and the SeeDance2 group. Compare prices in Billing and pricing and capabilities in Models.

Why does my video have sound, and how do I turn it off?

Seedance 2.0 and 2.5 default generate_audio to true, so the model adds voices, sound effects, and background music that match the prompt and picture, in mono. Send "generate_audio": false for a silent video. For spoken lines, putting the dialogue in double quotes helps.

Where is the final video URL, and how long does it last?

In the Ark-style task detail, it’s content.video_url, valid for 24 hours. A LaoZhang-compatible task object may return it as top-level result_url or as data.content.video_url. If you only need the file, call /v1/videos/{id}/content. Volcengine keeps the video URL valid for 24 hours, and a URL for a Seedance 2.5 video can be downloaded at most 100 times. Download the video as soon as the task succeeds, store it yourself, and give your users your own URL.

Can audio be the only reference?

Only with Seedance 2.5. With the Seedance 2.0 models (standard, fast, and mini), send the audio together with at least one image or video.