All posts
reference2026/09/11

How to Use Seedance 2.5: Fields, Limits and Billing

How to Use Seedance 2.5: Fields, Limits and Billing

How to use Seedance 2.5 through the hosted API: every request field and its limits, reference media rules, the polling loop, billed seconds and error 80006.

Knowing how to use Seedance 2.5 is mostly knowing its request shape. One call carries a prompt, four output settings and up to three kinds of reference media; the platform returns a task id; the finished video is collected by polling. The mechanics that differ from the older version are the 30-second ceiling, the size of the reference budget, and a billing rule that makes reference video cost more than the rate table suggests.

Confirm you are on 2.5 before anything else

Several hosts kept Seedance 2.0 as the default when they added 2.5 alongside it, so the model string decides what you get. The shipped 2.5 build is served under an identifier ending in -face. Older code samples quote an identifier without that suffix, which no longer resolves.

A second check needs no code review. Submit a request for a 20-second generation. On 2.0 it is rejected on the duration field, before a task exists, so nothing is charged.

How to use Seedance 2.5 through the hosted API

A generation request takes these fields.

FieldRangeDefault
promptup to 20,000 charactersnone
duration4 to 30 seconds, or -15
resolution480p, 720p, 1080p720p
aspect_ratio16:9, 9:16, 1:1, 4:3, 3:4, 21:9, adaptiveadaptive
generate_audiotrue or falsetrue
content_filtertrue or falsetrue

The prompt is required for text-to-video and optional once reference media is present. Quoted lines inside it are generated as speech, in the same pass as the picture, as a mono track covering dialogue, effects and music.

Setting duration to -1 hands the length decision to the model. The reservation is taken at the 30-second cap, so budget for a full-length clip when you use it.

Beyond those, the request exposes output_format for mp4 or mov, along with bitrate_mode, watermark, return_last_frame, seed, image_with_roles, omni_reference_task_type and a tools array. return_last_frame is the field that matters for chaining, since the last frame of one generation is what seeds the next.

Reference media rules that reject a request

Validation on reference media is strict and it fires before a task is created, which makes a rejection free but also makes it easy to hit repeatedly.

  • Images: up to 30 per request, jpeg, png, webp, bmp, tiff, gif, heic or heif, under 30 MB each.
  • Video: up to 10 clips, mp4 or mov, 200 MB or less each, 2 to 30 seconds each, 30 seconds combined.
  • Audio: up to 10 tracks, wav or mp3, 15 MB or less each, 2 to 30 seconds each, 30 seconds combined.

Every one of those is a public HTTP(S) URL. Data URIs are rejected across the platform, so host the file first.

Reference images and audio add nothing to the bill. Reference video does, in two ways, which is the next section.

Working out the bill before you send it

Billing is per second of finished video at a rate set by resolution and by whether reference video was attached.

ResolutionGeneration onlyWith a reference video
480p$0.118589$0.071153
720p$0.266824$0.160094
1080p$0.461856$0.275904

Billed seconds are the larger of two figures: the reference video length rounded up plus the output duration, or five thirds of the output duration rounded up.

Two worked examples show why that matters.

A ten-second 1080p generation with no reference clip bills ten seconds at $0.461856, which is about $4.62.

The same ten-second 1080p output with a six-second reference clip bills the larger of 16 seconds and 17 seconds, so 17 seconds at $0.275904, which is about $4.69. The lower rate is offset by the floor.

A smaller job shows the effect more sharply. A five-second 720p output with a three-second reference clip bills nine seconds rather than eight, coming to about $1.44, where the same five seconds generated from scratch is just over $1.33.

Polling, timing and refunds

The job is asynchronous. Submitting returns a task id, and the video is retrieved by polling that task until it reports completion.

Generation averages two to five minutes. Polling is free, so a fixed interval of fifteen to twenty seconds is reasonable and there is no advantage to backing off aggressively.

Failed jobs are refunded in full. A failed task's usage figures show whether the reserved amount came back, which is worth checking when a batch has misbehaved.

Reading a refusal

Safety refusals return error 80006. The error does not identify which stage fired, so the cause may be the prompt, a reference file, or the generated output.

Start with the prompt. Named real celebrities, third-party intellectual property and illegal content are blocked inside the model, and no host setting removes them. Then check the reference images, since a face or a logo in a supplied photograph can trigger the same result as naming it.

content_filter defaults to true. Setting it false routes the request through a less restrictive channel and does not disable moderation. It is a routing control rather than a switch, and the older alias nsfw_checker still validates.

Frequently asked questions

What model string do I call for Seedance 2.5? The shipped build carries an identifier ending in -face. Identifiers without that suffix come from pre-release samples and no longer resolve.

How do I generate a clip longer than 30 seconds? You chain generations. Thirty seconds is the per-request ceiling, so longer pieces are separate jobs joined in an editor, with return_last_frame giving you a clean handover point.

Why did a reference video cost more than the rate table suggested? The reference clip is billed for its own length on top of the output, and the request is never billed for fewer than five thirds of the output duration, rounded up. Whichever figure is larger becomes the billed seconds.

Does turning off the content filter let anything through? No. Setting content_filter to false selects a less restrictive channel and moderation still applies. The model-level blocks on real celebrities, third-party IP and illegal content stay in place regardless.

The short version

How to use Seedance 2.5 in order: verify the -face model string, set duration between 4 and 30 seconds, pick a resolution and aspect ratio, leave audio on unless you want silence, attach reference images freely because they are free, submit, then poll every fifteen seconds for two to five minutes. Price the job on billed seconds rather than output seconds whenever reference video is involved, and treat error 80006 as a refund plus a rewrite.