How video generation is billed
What each video model bills on (seconds or tokens), what counts and what does not, checked settlements, and how to estimate a job before you run it
Every video model works the same way: you create a task, then poll it. What differs is what the bill is based on. This page explains the rules and links to each model's own Billing section. It does not list prices, because they change: current unit prices are on the Models page.
Rules that apply to every video model
- A failed task is not billed. Seedance also does not settle expired tasks.
- Creating a task is not itself billed. A task that succeeds is settled on its actual usage.
- Bill is based on what the poll response returns, not on what you requested. Look at
usage.duration,usage.video_durationorusage.completion_tokens(see the table below). This matters when the model chooses the length (duration: -1) and when input video counts. - The amount charged is in
usage.costonly if your organization returns cost. Then the poll of a finished task carries it, and a finished task is reported as still in progress (no result link) until the charge has been booked, at most about 5 minutes. Otherwise the amount is in your usage records. Create responses never carry it. See Platform extensions. - Creating a task needs enough balance. If the balance is not enough, the request returns
402witherror.typeinsufficient_quota. See Errors.
Billing at a glance
| Model | Billed by (and what sets the rate) | What counts |
|---|---|---|
| HappyHorse text / image / reference to video | Generated seconds; the resolution tier sets the rate | Output seconds |
| HappyHorse video editing | usage.duration | Input video seconds plus output seconds, at the same rate |
| Wan 2.7 text to video | Generated seconds; the resolution tier sets the rate | Output seconds |
| Wan 2.7 image to video | Generated seconds | Output seconds; a continuation is billed by its total output duration |
| Wan 2.7 reference to video | Generated seconds | Output seconds plus reference video seconds, at the same rate |
| Wan 3.0 | usage.duration | Output seconds plus input video seconds, at the same rate. With duration: -1 the model decides the length |
| Wan Animate-Mix | usage.video_duration (fractional seconds); one rate, mode (wan-std / wan-pro) does not change it | Generated seconds |
| MiniMax video generation | Generated seconds × the unit price of the resolution tier | Output seconds. Input images are billed per image from the first one. On MiniMax-H3, input video seconds are billed at the output rate. Input audio is not billed separately |
| Seedance 2.0 | usage.completion_tokens × price per million tokens; the rate depends on output resolution and on whether a reference video is sent (with video is the lower rate) | Tokens actually consumed |
Checked against real settlements
These were verified charge by charge with a production test account on 2026-10-19 (the Seedance rows were also measured on that date).
| Job | What was sent and produced | Settled as |
|---|---|---|
| HappyHorse video editing | 6.62 s of input video + 6.62 s of output, usage.duration 13.24 | 13.24 seconds |
| Wan 2.7 reference to video | 5 s reference video + 2 s output, usage.duration 7 | 7 seconds |
| Wan 3.0 reference to video | 5 s reference video + 2 s output | 7 seconds |
| Wan 3.0 video editing | 5 s input + 5 s output | 10 seconds |
| Wan 2.7 image to video, continuation | 6 s continuation, usage.duration 6 | 6 seconds |
Wan Animate-Mix, wan-std | usage.video_duration 5.2 | 5.2 seconds |
| MiniMax-H3 | 3 s reference video + 4 s output | 7 seconds |
| Seedance 2.0, 1080p, 5 s | Formula estimate 243,000 tokens | 245,025 tokens measured |
| Seedance 2.0, 4K, 4 s | Formula estimate 777,600 tokens | 785,700 tokens measured |
Estimate a job before you run it
Models billed by seconds. Work out the billed seconds, then multiply by the unit price for your resolution tier:
cost ≈ billed seconds × unit price (for the resolution tier)
billed seconds = output seconds
+ input video seconds (only for the models marked above)For example, a Wan 2.7 reference-to-video job with a 5-second reference video and 2 seconds of output is billed as 7 seconds, not 2.
Seedance 2.0, billed by tokens. Estimate the tokens first, then price them:
tokens ≈ width × height × fps × seconds / 1024 (add the input video's seconds when you send one)
cost = tokens × unit price per million tokens / 1,000,000The measured usage.completion_tokens runs about 1% above this formula, so go by the returned value. When the input contains a video, the vendor sets a minimum token usage: below it, the minimum is billed.
Things that often surprise people
- Input video seconds are billed on HappyHorse video editing, Wan 2.7 reference to video, Wan 3.0 and MiniMax-H3. An input video of 5 seconds and an output of 2 seconds is a 7-second bill.
- Seedance 4K can have a lower price per token than 1080p and still cost more. That is the official pricing: a 4K job uses far more tokens (measured: 785,700 for 4 s at 4K versus 245,025 for 5 s at 1080p), so its total is higher.
- Wan Animate-Mix has no price tier by
mode.wan-stdandwan-proare billed at the same rate. - When the model chooses the length (
duration: -1), Wan 3.0 bills the duration the poll response returns.
Where each rule comes from
Each model page has its own Billing section with the same rules in detail, and the verified examples above are quoted from there. If a model's page and this overview ever differ, the model page is the reference.