AI video API cost per approved clip: a practical breakdown

Oct 26, 2026·9 min read

Your application generates 100 video candidates, but the editor approves 40. The AI video API cost per approved clip is not the price shown beside the model: it is the spend attributable to those candidates divided by 40. A technically completed video can still miss the brief, show an unsuitable camera move, or lose to another candidate during selection.

For developers budgeting a production workflow, the useful comparison is therefore unit price and approval yield. This breakdown uses supplied GenRelay rates dated October 26, 2026, separates generation-based from second-based billing, and provides a local estimator. All approval rates and workload examples below are illustrative planning assumptions, not model benchmarks.

What is the difference between generation cost and approved asset cost?

Generation cost measures spending on a billed output or attempt; approved asset cost measures spending per deliverable that passes your acceptance criteria.

An approved clip is a video your team accepts for its intended placement. Define that placement before calculating costs: a background loop and a product demonstration may require different motion, subject accuracy, and composition. A generated clip does not become approved merely because it is playable.

For a closed batch, use these formulas:

  • Generation spend: sum of recorded generation charges attributable to the batch.
  • Generation-only cost per approved clip: generation spend divided by unique approved clips.
  • Fully loaded cost per approved clip: generation spend plus attributable review, editing, storage, and delivery costs, divided by unique approved clips.

Keep the two approved-cost metrics separate. Otherwise, an improvement in model selection can be hidden by a change in editing effort. If no clips are approved, cost per approved clip is undefined; report the spend and zero approvals rather than displaying a misleading zero-dollar result.

An approved asset can also combine multiple generated shots. In that workflow, count final accepted deliverables, not their component shots, and assign each charge once.

Which unit prices belong in the October 26 cost model?

Use per-generation prices for Veo 3.1 and Omni Flash, and per-second prices for the two Grok versions listed below.

These are the supplied GenRelay pricing inputs for October 26, 2026, not a statement about pricing across other services. Confirm the applicable rate before committing a production budget.

Model or option Supplied USD rate Billing basis
Veo 3.1 Lite $0.060 Per generation
Veo 3.1 720p $0.120 Per generation
Veo 3.1 1080p $0.180 Per generation
Grok 1.5 $0.022 Per billed second
Grok 1.0 $0.010 Per billed second
Omni Flash 720P $0.10 Per generation
Omni Flash 1080P $0.15 Per generation

Lite is an option label here, not a specified resolution. Do not categorize it as 720p or 1080p without separate documentation. Omni Flash's two prices are per generation, not per second.

For generation-based pricing, multiply the rate by the applicable billed generation count. For second-based pricing, multiply the rate by actual billed seconds. Billed seconds are the quantity used for charging; they should come from billing records rather than an assumption about requested or usable duration.

The video API overview provides product context. Before comparing model options, verify the billing unit attached to each one; a shared product category does not imply a shared pricing basis.

How much can approval yield change the effective price?

Approval yield can change the effective price more than a small difference in unit rates, because rejected candidates still consume any spending recorded against them.

Approval yield means unique approved clips divided by candidate attempts in the same measured batch. For a simplified forecast where every attempt incurs one identical generation charge and can produce one approved clip, expected generation-only cost is unit price divided by approval probability.

The following scenarios assume 100 billed generations for each generation-priced option. Each percentage is an invented budgeting scenario, not an observed acceptance rate or a claim about comparative quality.

Option Spend for 100 generations 25 approvals 50 approvals 80 approvals
Veo 3.1 Lite $6.00 $0.240 $0.120 $0.075
Veo 3.1 720p $12.00 $0.480 $0.240 $0.150
Veo 3.1 1080p $18.00 $0.720 $0.360 $0.225
Omni Flash 720P $10.00 $0.400 $0.200 $0.125
Omni Flash 1080P $15.00 $0.600 $0.300 $0.1875

The three rightmost columns show dollars per approved clip. They are arithmetic sensitivity checks, not a model ranking.

For second-priced options, suppose billing records hypothetically contain 600 billed seconds across 100 attempts, with 50 clips approved. Grok 1.5 would cost $13.20 in total, or $0.264 per approval. Grok 1.0 would cost $6.00, or $0.120 per approval. This is an illustrative aggregate of billed seconds, not a supported-duration claim or an instruction to request six-second videos.

For a unit-focused comparison, see Omni Flash versus Grok API pricing. Compare approval costs only after matching the creative brief and acceptance standard.

How should retries and editorial rejection enter the budget?

Count each recorded charge once, then count only unique approved deliverables in the denominator.

A retry is another attempt associated with the same intended deliverable. Editorial rejection is a completed candidate being declined for creative or production reasons. Those are different events: one describes workflow activity, while the other describes a review decision.

For example, a hypothetical Veo 3.1 720p batch starts with 100 charged generations and then incurs 20 additional charged generations after review. Its generation spend is 120 × $0.120 = $14.40. If the complete batch ultimately produces 40 unique approved clips, its cost is $0.36 per approval.

Do not divide by an approval percentage and then add another retry multiplier if that percentage already includes retry attempts. Doing both counts the same attrition twice. Likewise, do not assume every technical failure has an identical billing outcome: reconcile actual charges without inferring a billing policy from job status.

For forecasting, a constant approval probability is a simplification. Repeated attempts can share the same difficult brief or weak prompt, so their outcomes may be correlated. Track approval yield by brief type and revision round rather than treating a global average as a dependable prediction for every project.

How can you estimate costs locally with Python Decimal?

Use Python's Decimal type to calculate unit costs and approval-adjusted estimates without binary floating-point artifacts.

Decimal represents decimal values directly when initialized from strings. The following standard-library script makes no network calls and requires no API credentials. Save it as approved_clip_cost.py and run python3 approved_clip_cost.py.

from decimal import Decimal, ROUND_HALF_UP

D = Decimal
RATES = {
    "Veo 3.1 Lite": ("generation", D("0.060")),
    "Veo 3.1 720p": ("generation", D("0.120")),
    "Veo 3.1 1080p": ("generation", D("0.180")),
    "Grok 1.5": ("second", D("0.022")),
    "Grok 1.0": ("second", D("0.010")),
    "Omni Flash 720P": ("generation", D("0.10")),
    "Omni Flash 1080P": ("generation", D("0.15")),
}


def estimate(model, units, approved, extra_cost="0"):
    basis, rate = RATES[model]
    units, extra = D(str(units)), D(str(extra_cost))
    if not units.is_finite() or not extra.is_finite():
        raise ValueError("Use finite quantities and costs")
    if units < 0 or extra < 0:
        raise ValueError("Quantities and extra costs must be nonnegative")
    if not isinstance(approved, int) or approved < 0:
        raise ValueError("Approved clips must be a nonnegative integer")
    if basis == "generation" and units != units.to_integral_value():
        raise ValueError("Generation count must be an integer")
    spend = rate * units
    per_clip = (spend + extra) / D(approved) if approved else None
    return spend, per_clip


def money(value):
    if value is None:
        return "undefined (zero approvals)"
    return "$" + str(value.quantize(D("0.0001"), rounding=ROUND_HALF_UP))


# Illustrative billed quantities, not supported duration settings.
scenarios = [
    ("Veo 3.1 720p", "120", 40, "0"),
    ("Grok 1.5", "600", 50, "0"),
    ("Omni Flash 1080P", "100", 80, "0"),
]
for model, units, approved, extra in scenarios:
    spend, per_clip = estimate(model, units, approved, extra)
    print(f"{model}: generation spend={money(spend)}; "
          f"cost/approved={money(per_clip)}")

assert estimate("Veo 3.1 720p", "120", 40)[1] == D("0.36")
assert estimate("Grok 1.5", "600", 50)[1] == D("0.264")
assert estimate("Omni Flash 1080P", "100", 80)[1] == D("0.1875")

The outputs are $0.3600, $0.2640, and $0.1875 per approved clip for the three scenarios. Set extra_cost to attributable operational spending when you want the fully loaded metric. This is a planning estimator: reconcile its results against actual billing records, especially when a batch spans rate changes or different options.

What should a production cost ledger record?

Record billable quantities, recorded charges, and approval decisions separately so creative outcomes do not overwrite financial history.

A ledger is an auditable record of the batch's spending and outcomes. Useful fields include an internal attempt identifier, intended deliverable identifier, model option, rate date, billing unit, billed quantity, recorded charge, review status, rejection reason, and final approval identifier. These are suggested application fields, not claimed provider response fields.

Use one row per attempt, with final approval identifiers deduplicated when counting deliverables. Keep pending decisions distinct from rejected candidates. Close each reporting batch on a declared cutoff, or clearly label its approval count provisional.

To reduce costs, test clearer briefs, remove conflicting instructions, and review rejection categories before purchasing more attempts. Compare total cost and approval yield on the same sample of tasks. A lower-resolution option is economically useful only when it still meets the placement's requirements; a lower sticker price alone does not establish savings.

What questions come up when budgeting approved clips?

The recurring questions concern billing units, zero approvals, uncertain acceptance rates, and whether editing belongs in the calculation.

Is cost per generation the same as cost per approved clip?

No. They coincide only in the simplified case where every charged generation yields one approved clip and no other spending is included. Rejection, additional attempts, and multi-shot deliverables change that relationship.

What acceptance rate should I use before running a pilot?

Use several explicitly hypothetical scenarios rather than claiming a single expected rate. Replace them with measured results from your own briefs, and retain a range because a small pilot may not represent production work.

Should I multiply Omni Flash's listed price by video seconds?

No. The supplied October 26 rates are $0.10 per generation for 720P and $0.15 per generation for 1080P. Seconds are the pricing quantity for the listed Grok rates, not these Omni Flash rates.

Should editing labor count toward the approved clip budget?

Yes, when reporting fully loaded production cost. Also retain a generation-only figure so you can distinguish API spending changes from review or editing changes. Report both against the same set of unique approved deliverables.

Related posts

Join our DiscordAI video API cost per approved clip: a practical breakdown — GenRelay