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.

5 min readSume
All posts

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.

Usage summary fields from Sume docs, read 2026-10-02
FieldMeaning
debited_usdWhat the wallet deducted; the figure to quote
held_usd_microsHolds still open; not spend yet
refunded_usd_microsHolds given back after failure, cancellation or queue_full
finaltrue 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

All Pricing posts

Written by Sume