SeeDance2 group, and tasks are billed by tokens.
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
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, theSeeDance2 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:- 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
durationto-1, which lets the model choose a length from 4 to 30 seconds, so setdurationexplicitly when cost matters.
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 finalusage.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:
- Search call logs for
doubao-seedanceor the full model ID you used. - Use the pre-charge row to confirm the token, group, and source IP.
- Use the settlement row to read the final completion tokens.
- Match the task ID and its creation and completion times on the asynchronous task page, and count the two rows as one video.
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
statusisqueuedorrunning. - Treat
succeededandcompletedas success. - Treat any other value as final. On a final failure, stop polling and log the full response.
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_urlor indata.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
- The shell examples use
curlandjq. Install jq withbrew install jqorsudo 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
First and last frames
Image, video, and audio references
Active, send its asset://... URI as a reference_image.
Query a task
create.json and check the task:
status is queued or running. A successful response looks like this:
Download the result
Authorization header is needed:
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 withpip 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 asfailed 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.
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 defaultgenerate_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’scontent.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.