Seedance 2.5 API: Endpoint, Parameters and Real Billing
The Seedance 2.5 API is asynchronous, priced per second, and has three billing rules that catch people out. Everything you need before writing the first call.
From $0.07 per second, 480p with a reference clip

What the Seedance 2.5 API gives you
One POST creates a job, one GET polls it, and polling is free. The Seedance 2.5 API decides its mode from which media fields you populate rather than from a separate parameter.
A prompt alone is text-to-video. Add images and the Seedance 2.5 API runs image-to-video. Add first and last frames and it animates a transition. Add a source clip and it edits or extends.
The POST returns a task id immediately and generation takes two to five minutes. A Seedance 2.5 API integration needs a polling loop or a queue, not a synchronous request.
The platform serves it as doubao-seedance-2.5-face. Getting the Seedance 2.5 API model string wrong is the most common first-call failure, and it returns a synchronous error rather than a charge.
One header, workspace-scoped, no project id. A Seedance 2.5 API key carries the billing scope of the workspace that issued it.
Every failed job returns credits in full, including moderation refusals. The Seedance 2.5 API never charges for a render you did not receive.
No generator here. Seedance 2.5 API calls run on the hosted API, and every parameter and rate below is taken from their published documentation.
Seedance 2.5 API parameters that matter most
Four fields that decide cost and outcome.
duration
Four to thirty seconds, default five. Passing -1 lets the model choose, but the Seedance 2.5 API reserves credits at the 30-second cap and refunds the difference, which can trigger a 402 on a thin balance.
resolution
480p, 720p or 1080p, default 720p. There is no 4K on the Seedance 2.5 API, and asking for one returns an error rather than a downgraded clip.
content_filter
Boolean, true by default. False routes the seedance 2.5 api request to a less restrictive channel and makes the prompt mandatory. The platform documents it as routing rather than an off switch.
omni_reference_task_type
Declare edit or extend and the Seedance 2.5 API validates the rules at submit instead of failing minutes later. Worth setting on any reference-driven job.
Four steps to a working Seedance 2.5 API call
- 1
Create a key
Generate one in the the platform dashboard and send it as a bearer token. The Seedance 2.5 API rejects anything else on the authorization header.
- 2
POST the job
Send model, prompt and any media URLs to the videos generations endpoint. Every seedance 2.5 api media field takes public HTTP or HTTPS URLs; base64 is rejected platform-wide.
- 3
Poll the task
GET the task id until status is completed or failed. Seedance 2.5 API polling costs nothing, so a two-second interval is fine.
- 4
Read the output
A completed seedance 2.5 api task carries video urls, plus a last frame url when you asked for one. Re-host anything you need to keep, because delivered URLs are not permanent.
Seedance 2.5 API, answered
Per second of billable video, from $0.071153 to $0.461856 depending on resolution and whether the request carried a reference clip. A ten-second 1080p render is about $4.62. Reference images and reference audio add nothing to the bill.
Output duration, plus the full length of any reference video, with a floor of five thirds of the output duration on any request containing video. A two-second source with a five-second output bills nine seconds rather than seven, which surprises most first integrations.
doubao-seedance-2.5-face on the hosted API. Older guides quote doubao-seedance-2.5 without the suffix, which predates launch and does not resolve. Check the model page rather than trusting a code sample.
Polling is the documented path and it is free, so a short interval loop is the simplest seedance 2.5 api integration. Because generation runs two to five minutes, a two to five second poll adds no meaningful load and needs no callback infrastructure.
Schema validation, and nothing was charged. Common causes are an invalid resolution, a size value combined with first or last frames, or a missing prompt on a text-to-video request. The error names the offending field.
Either a task-type rule or moderation. Error 80006 is a safety refusal and does not name the stage. A parameter mismatch on an edit job produces a different failure, and declaring omni_reference_task_type converts that into an immediate 400 next time.
Up to 30 images, 10 video clips totalling 30 seconds, and 10 audio tracks. Image and role-tagged image arrays are mutually exclusive, so pick one per Seedance 2.5 API request.
Yes, on the same endpoint with a different model id. Seedance 2.0 caps at 15 seconds where 2.5 reaches 30, and the request shape is close enough that switching versions is mostly a string change.
A key carries the billing scope of the workspace that issued it, and there is no separate project header. Teams that need separate accounting create separate workspaces rather than separate keys inside one, because usage aggregates at the workspace level.
Start with the Seedance 2.5 API documentation
Published parameters, live per-second rates, free polling and automatic refunds on failure.
Related: Seedance 2.5 API