AI video API: three models, one endpoint, and the async part that matters
Three video models behind one endpoint and one billing unit.
| Model | Credits per clip | Duration | Resolution |
|---|---|---|---|
| Seedance | 25 | 3–15s | 720p, 1080p |
| Kling | 35 | 5 or 10s | 1080p |
| Veo 3 | 100 | 8s fixed | 720p, 1080p |
The call returns a job
This is the part that differs from an image API and from most REST APIs you
have used. A render takes minutes, so the endpoint returns 202 Accepted with
a job_id and a state — not a video.
{ "job_id": "abc123", "state": "queued", "credits_held": 25 }
Four ways to collect the result, each surviving a different failure: long poll, SSE, webhook, and a scheduled backstop for jobs nobody is watching. Which to use depends on what is calling you — webhook vs polling.
A failed job is a successful HTTP response. It will not throw. Check
state, not the status code.
Duration decides more pipelines than price
Only some of these bill per second; the rest round you up to a fixed bucket. Asking for 7 seconds from a model that offers 5 or 10 means paying for 10, which can exceed the gap between per-second rates entirely.
Details in AI video API duration limits.
Cheapest path
Seedance at 25 credits ($0.25–$0.35), and half that again at 720p while you iterate. Work it out at your own volume with the AI API cost comparison tool.
Models covered on this page
Where these facts come from
- codebase: src/ai/providers/*.ts — every pricing() and paramsSchema
- codebase: src/ai/api/quota.ts — per-tier ceilings