Cost of one AI video job: read GET /v1/usage with job_id
Add job_id to GET /v1/usage to see what one video job debited, held and refunded. The summary fields to quote, and why not to sum rows yourself.

To get the cost of one AI video job on Sume, call GET /v1/usage?job_id=<id> and quote summary.debited_usd. That field is what the wallet deducted for the job. Do not add up ledger rows yourself: a refunded row keeps its hold amount in billable_amount_usd_micros, so a hand-made sum overstates spend.
Video prices change with each launch week, so a per-job lookup is more reliable than a spreadsheet of assumed rates. The behavior below is from Sume's usage docs, read 2026-10-02.
What does the summary contain?
The response adds a summary folded over every ledger row the job caused. The limit parameter only caps the rows listed, not the summary.
| Field | Meaning |
|---|---|
debited_usd | What the wallet deducted; the figure to quote |
held_usd_micros | Holds still open; not spend yet |
refunded_usd_micros | Holds given back after failure, cancellation or queue_full |
final | true once no hold is open |
How do the statuses show up?
Rows move through reserved, captured and refunded. A video job reserves an estimate on submit, captures billable usage after success, and releases the reservation after a failure or cancellation before capture. Sume bills provider list times 1.25 on video models, and usage.cost in the poll response is the Sume billable amount.
So read final first. While it is false, a hold is still open and the debit may change.
import os
import requests
r = requests.get(
"https://api.sume.com/v1/usage",
params={"job_id": "JOB_ID_HERE", "limit": 50},
headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
timeout=30,
)
r.raise_for_status()
s = r.json()["summary"]
print("debited:", s["debited_usd"], "final:", s["final"])When should I use this?
Use it after a test clip to record the real cost next to the prompt, and after a failed job to confirm the hold was released. Replace JOB_ID_HERE with the id from the submit response. For a batch, loop over your saved job ids and total only the debited_usd values, once each job reports final.
Sources
Related posts
More in Pricing
- Cost per approved ad image: divide usage.cost by what you keep
Cost per image is not what you pay per approved image. Sum usage.cost over your batches, divide by images kept, and see which model earns its price.
- Cost per keeper AI video clip: retakes and failed jobs
One usable AI clip costs the clip price divided by your keep rate: at 25 percent, a $0.75 clip costs $3.00 per keeper. Includes a Python function.
- Cost to render a 30-minute video on Sume: a $3.00 ceiling
Sume Timeline reserves $0.10 per output minute and caps a render at 1,800 seconds, so 30 minutes reserves at most $3.00. Length table and the free plan call.
- A daily 15-second AI video for 30 days: monthly cost
Posting one 15-second AI video a day for 30 days is 450 generated seconds: $5.63 on Grok Imagine Video 1.5, $56.25 on Wan 3.0 720p, $94.50 on Kling 3 audio on.
Written by Sume