← back to blog
CostsMeasured·October 21, 2026·6 min read

AI video API pricing: we paid twice for the same model and measured it

Every video model sells you a per-second rate and bills you by the token. We ran one clip through two doors on the same day, read the provider's own usage counter, and found we had been paying exactly double. Here is the whole arithmetic, with the numbers that produced it.

Maxfounder of Sndwich · @SattyEth

We generate video from an API all day: a persona, a clip, a replacement, an upscale. The bill is the largest line in the product, so when a reader sent us a screenshot showing a ten-second clip for about $2.30 while our own quote for the same thing read $4.62, it was worth a day of measuring rather than a shrug about markups.

What follows is one model, Seedance 2.5, bought two ways on 21 October 2026. No modelling, no estimates from a pricing page: a real generation, the token counter the provider returns in its own response, and the rates as they appear in the console.

AI video API pricing is a token count wearing a per-second costume

Video models are advertised per second and billed per token, and the token is not a word. For this family it is a count of pixel-frames: the width times the height times the frame rate times the seconds, divided by 1024.

We tested the formula against the only authority that matters, the provider's own meter. A four-second clip at 480p, 9:16, came back as a real file of 480×854 at 24 fps with an audio track, and the response reported 38,830 tokens. The formula predicts between 38,430 and 38,880 depending on whether the true frame is 854 or 864 pixels tall. That is agreement to within one percent, which means the arithmetic below is not a guess.

The bill counts pixels, so resolution is the strongest lever you have. Half the width and half the height is a quarter of the tokens: twelve seconds costs $5.55 at 720p and $2.47 at 480p through the same door, for the same seconds and the same model.

Seedance 2.5 API pricing: one model, two prices

Our rate came off an invoice: $0.0214 per 1,000 tokens through the aggregator we had been using. The console of ByteDance's own ModelArk lists the same model at $0.0107 to $0.011 per 1,000 tokens with no video on the input, and $0.0064 to $0.0070 with one. Exactly double, at every tier.

Here is what that does to a twelve-second clip at 720p, which is a perfectly ordinary thing to want. The bars are dollars for one render.

Seedance 2.5, via aggregator720p, 12 s
$5.55
Seedance 2.5, directsame model, same seconds
$2.77
Kling O3$0.14/s
$1.68
Seedance 2.0 fastdirect
$1.45
Wan 3$0.10/s at 720p
$1.20
Seedance 2.0 minidirect, for drafts
$0.91
One twelve-second 720p render, six ways. The top bar and the second are the same model.

The cross-check that convinced us was not ours. A public post priced a ten-second 720p clip at about 200 roubles, roughly $2.31. The direct rate times ten seconds at 720p gives $2.31 to the cent. The resellers were not undercutting anyone; they were simply buying at the counter while we bought through a window.

What else you pay for that no pricing page lists

The rate is the smallest part of the surprise. These four cost us real money in a single week, and none of them appears on a pricing page.

Seconds you send inA reference clip is billed alongside the render. Five seconds in plus five out is not five seconds of billing, and a reference twice the length of the render turns a $1.03 job into $1.85.
Refusals that completeTwo runs of one video-to-video engine finished successfully and changed nothing we asked for. $0.71 each. A job that returns a file is still a job you paid for.
Moderation after the computeAn output safety check can fail 271 seconds in, on frames the model generated itself. There is no setting for it on that endpoint; its API takes no safety parameter at all.
Steps that silently drop thingsThe upscaler we use accepts a video and returns picture only. The sound has to be laid back on with a second call, which is cheap but has to exist, or the clip comes back mute.

None of that is dishonesty on anybody's part. It is what happens when the unit you are billed in is not the unit you think in.

What to do about it

Pick the resolution before anything elseIt is a quadratic lever and the only one that cannot be argued with. Draft at 480p, finish at 720p, and go to 1080p for the one take you will publish.
Read the provider's own usage fieldEvery serious video API returns the tokens it charged you for in the response. Log it. A pricing page tells you a rate; the response tells you the bill.
Check whether your input is billedIf the endpoint takes a reference clip, assume its seconds are on the invoice too, then verify against the counter. Trimming the reference is often the cheapest optimisation available.
Price the direct door before you commitAn aggregator buys you one queue, one webhook shape and one error format across many models, and that is worth something. Whether it is worth double is a number you can now check in an afternoon.

We have not moved everything, and we are not about to recommend you do either. What we did change is that every step in our pipeline now shows its own price before it runs, and the resolution is a choice on the node rather than a default buried in a request.

How a cheap clip becomes an expensive one

The week that produced these numbers went roughly like this, and every stage of it is ordinary.

A rate on a pageYou read per second, you plan per second, and the first invoice is a different number entirely.
The default resolution720p is the default almost everywhere. Nobody chose it; it quadruples the bill against 480p for a draft nobody will publish.
The reference clipYou attach the source so the model keeps the scene. Its seconds join the bill, and the reference is usually longer than the render.
The retryA refusal, a mute result, a person who did not get replaced. Each retry is a full price render, and the reason is often one line you could not see.

The fix for the last one is not a cheaper model. It is knowing what the engine refuses before you pay: the clip length window it accepts, what it needs to see in the first frames, and whether it edits your footage or reshoots the scene. We wrote down what each engine actually does when we learned it the expensive way, and the same exercise for text models produced a finding of the same shape: the average hides everything worth knowing.

See the price before the render, not after

Sndwich builds video as a chain of steps. Each one quotes itself from the rate it will actually be billed at, and the engine picker says what each model does and refuses.

Price per step. Resolution and length change the number in front of you, before anything runs.
Limits up front. Clip length windows, what the engine needs to see, what it will not do at all.
Drafts cheap, finals sharp. Switch a step to a draft model, keep the chain, spend on the take you keep.
Try the pipeline →
ShareTelegramX

Read next