How billing works
Funds for the upper bound are reserved at creation and settled on actual usage; failed and cancelled tasks are free.
On this page
Video generation is charged by usage, recorded in meters such as video_tokens. Every task goes through two steps: a reservation and a settlement.
Reservation
When you create a task, the platform takes the largest usage the request can produce (quote.) and the current price version, calculates quote.reserved_amount and reserves it from your balance. When the balance is not enough, the answer is 429 insufficient_balance with the reservation needed in error.details, and no task is created.
Settlement
After the task finishes it is settled on actual usage (usage.video_tokens): the charge comes out of the reservation and the rest returns to your balance. Once settlement_status is settled, billing. is the task's final charge.
Failed and cancelled tasks are free
- Once a failed or cancelled task is settled, its final charge and amount due are zero and the whole reservation is released.
- When an HTTPS input cannot be prepared, the task fails with an
input_*error, the whole reservation is released and nothing is charged for generation. - Refused requests (4xx) are refused before any reservation: nothing is reserved and nothing is charged.
An example
These numbers come from the example task of these docs:
| Step | Usage | Amount (USD) |
|---|---|---|
| Reserved at creation | Upper bound of 111779 video_tokens | 0.782453 |
| Charged after completion | Actual 51652 video_tokens | 0.361564 |
| Released | — | 0.420889 |
Amounts
Every amount is in USD, written as a string with six decimal places, such as "0.361564". An amount that is not final yet is null.
Prices
List prices of each model are on the Pricing page; your team's prices and their versions are in the console. These docs never fix a price.