How to cut AI video API costs: seven practical ways
AI video is billed by the second, and the rate rises steeply with resolution, so the way you work matters as much as the model you pick. These are seven habits that cut the bill without lowering the quality of what you ship.
Where the money goes
Almost every video model is billed per second of output, and the rate climbs steeply with resolution. On Seedance 2.5 a second of 1080p costs $0.55, five times the $0.11 it costs at 480p. Most of the savings below come from one idea: pay the high rate only for clips you already know you want.
1. Draft at the lowest resolution, then render the keeper
Use a low resolution to check the prompt, framing and motion. When a draft works, send the same prompt again at full resolution. The final is a new take, so it will not match the draft frame for frame, but a prompt that works at 480p almost always works at 1080p.
| Model | Draft | 8 s draft | Final | 8 s final |
|---|---|---|---|---|
| Seedance 2.5 | 480p | $0.88 | 1080p | $4.40 |
| Seedance 2.0 | 480p | $0.64 | 1080p | $3.20 |
| Wan 3.0 | 480p | $0.40 | 1080p | $1.36 |
| Gemini Omni 1.1 Flash | 360p | $0.32 | 1080p | $0.80 |
Three Seedance 2.5 drafts and one final cost $2.64 plus $4.40, against $17.60 for four finals.
2. Know where a higher setting costs nothing more
Some models charge the same for two settings. There, always ask for the bigger one:
- Veo 3.1: 720p and 1080p are both $0.20 per second without sound.
- Gemini Omni 1.1 Flash: 720p and 1080p are both $0.10 per second.
- GPT Image 2: 1K, 2K and 4K all cost $0.03 per image.
The models page lists every price key, so you can spot these before you pick a size.
3. Pick the cheaper tier of the same model
Most families have a fast or lite version for a fraction of the price. They are the right choice for drafts, social clips and anything watched on a phone.
| Family | Full tier | Lower tier |
|---|---|---|
| Veo 3.1 | Veo 3.1 at 1080p: $0.20 | Veo 3.1 Lite at 1080p: $0.06 |
| Seedance 2.0 | Seedance 2.0 at 720p: $0.15 | Seedance 2.0 Fast at 720p: $0.11 |
For a model-by-model view of the lowest prices, see the cheapest AI video API guide.
4. Turn sound off when you will add your own
Some models charge extra for generated sound. If music or a voice-over goes on in editing, set audio to false:
| Model | Setting | Silent | With sound |
|---|---|---|---|
| Kling 3.0 | 720p | $0.09 | $0.13 |
| Veo 3.1 | 1080p | $0.20 | $0.40 |
| Veo 3.1 Fast | 720p | $0.08 | $0.10 |
5. Choose the start frame with a cheap image first
Image to video gives you control over the first frame, and a picture costs far less than a second of video. Make several start frames with an image model such as GPT Image 2 at $0.03 each, pick the best, and only then animate it. The text to video vs image to video guide explains when this pays off.
6. Ask for the length you need
Per-second billing means a 10 second clip costs twice a 5 second one. If you will cut it to 4 seconds in editing, ask for 4 or 5 seconds where the model allows it.
7. Let the API guard your spend
max_cost_usdon each request sets the most that job may cost. Routes priced above it are skipped, and if none is left the request is refused with422 max_cost_exceeded, so a typo indurationorresolutioncannot run up a large bill.- Failed jobs are free. The price is held when you submit and released if the job fails, on every model.
- An
Idempotency-Keyheader means a request you resend after a network error returns the job you already started instead of paying for a second one.
Drafts then a final, in code
This script drafts three versions of an idea at 480p, then renders the chosen prompt at 1080p. Each request carries a max_cost_usd just above its price and its own Idempotency-Key.
import os
import time
import uuid
import requests
API = "https://api.revana.si/v1"
KEY = os.environ["REVANA_API_KEY"]
def run(model, inp, max_cost_usd):
key = str(uuid.uuid4()) # resend with this key after a network error: no duplicate job
headers = {"Authorization": f"Bearer {KEY}", "Idempotency-Key": key}
body = {"model": model, "input": inp, "max_cost_usd": max_cost_usd}
job = requests.post(f"{API}/generations", headers=headers, json=body).json()
while job["status"] in ("queued", "running"):
time.sleep(5)
job = requests.get(f"{API}/generations/{job['id']}", headers=headers).json()
return job
prompts = [
"A red kite climbs over a windy beach, the camera tracking it from the sand.",
"A red kite climbs over a windy beach, seen from above as it rises toward the camera.",
"A child runs along a windy beach pulling a red kite into the sky, slow motion.",
]
# 1. A cheap 480p draft of each idea
drafts = [run("seedance-2.5", {"prompt": p, "resolution": "480p", "duration": 8}, 1.1)
for p in prompts]
for p, d in zip(prompts, drafts):
print(d["status"], d.get("cost_usd"), d["output"]["urls"][0] if d["output"] else d["error"])
# 2. Render only the idea you liked, at 1080p
final = run("seedance-2.5", {"prompt": prompts[1], "resolution": "1080p", "duration": 8}, 5.3)
print(final["status"], final.get("cost_usd"))Every request field is in the docs, credit packs from $10 are on the pricing page, and you can get an API key in a minute.
Frequently asked questions
How can I make AI video generation cheaper?
Draft at the lowest resolution and only render the clips you keep at full size, use fast or lite tiers for drafts, turn off generated sound if you add your own, and ask only for the length you need.
Do I pay for failed AI video generations?
Not on Revana. The price is held when you submit and released if the job fails, on every model.
How do I cap what one generation can cost?
Send max_cost_usd with the request. Routes priced above it are skipped, and if none is left the request is refused with 422 max_cost_exceeded before anything is charged.
Does a lower resolution draft look like the final?
Not frame for frame: the final is a new take. But the draft shows whether the prompt, framing and motion work, which is what you are paying to find out.
How do I avoid paying twice when a request times out?
Send an Idempotency-Key header. Sending the same key and body again returns the generation you already started instead of a new one.
Spend less on every clip
One API key for every video and image model, with spend caps on each request. Prepaid credit from $10, and failed jobs are never charged.