Agent run cost on Sume: quote debited_usd_micros, not held
To price one agent run or job on Sume, call usage_get with its id and quote summary.debited_usd_micros. Holds and refunds are not spend. Batch it in script_run.

To say what an agent run or a job cost on Sume, call usage_get with a thread_id, run_id or job_id and quote summary.debited_usd_micros. The figure is in millionths of a dollar. That is the spend the tool description tells you to report. held_usd_micros and refunded_usd_micros are not spend, and you should not add up the rows yourself. The tool is listed under account and catalog on the MCP tools and gates page.
Which number is which?
| Field | Meaning | Quote it as cost? |
|---|---|---|
summary.debited_usd_micros | settled spend | yes |
held_usd_micros | reserved while work runs | no |
refunded_usd_micros | returned to the wallet | no |
cap{} on a run | generation-cap accounting | no |
final=false | a hold is still open | wait, then read again |
Why does final=false matter?
A run reserves money before it spends it. While a hold is open the debited figure can still rise, so reading it early undercounts. When final is false, wait for the job with jobs_wait and call usage_get again. An agent run also has a cap: generation_spend_cap_usd is required on Agent Completions, and the receipt's usage shows the cap in micros. The cap is a ceiling, not the bill. See Agent Completions.
How do I price twenty jobs?
Do it in one call rather than twenty. script_run runs a JavaScript body with sume.tools.usage_get and returns only the numbers you pick, so the model's context holds twenty small values and no raw rows. Inside a script, calls run four at a time, and a script defaults to 32 calls with a ceiling of 64. Check the shape of one result in calls[] before you trust the field path in the sketch.
const rows = [];
for (const id of args.job_ids) {
const r = await sume.tools.usage_get({ job_id: id });
rows.push({ id, usage: r });
}
return rows.map((x) => ({
id: x.id,
debited: x.usage?.summary?.debited_usd_micros ?? null,
final: x.usage?.final ?? null,
}));What should the report say?
Report the debited total only for rows where final is true, and list the rest as pending. Divide micros by 1,000,000 for dollars, so 240000 is $0.24. Do not mix the cap into the sum; a run with a 2-dollar cap that debited 0.24 cost 0.24. The optional limit on usage_get defaults to 20, so pass an id to scope the answer rather than paging a whole wallet.
For long renders, wait first with jobs_wait, which takes up to 20 ids and holds up to 55 seconds, as Jobs and results explains.
Where does the number come from?
The debited figure is the amount Sume actually took from the wallet for that id. Admission checks the wallet before a job starts, which is why a hold exists, and the hold turns into a debit or a refund when the job ends. That lifecycle is the reason a mid-run read can look low, and a read after a failed job can show a refund. Quote the settled value, and say so in the report.
Sources
Related posts
More in Pricing
- Sume video captions cost a flat $0.20 per clip up to 60 seconds
Standalone caption jobs reserve and capture $0.20 for videos up to 60 seconds. Batch math for 10, 100 and 1,000 clips, and the avatar inline exception.
- Sume wallet presets $50, $100, $500, $1,000: what each buys
Sume's wallet presets are $50, $100, $500 and $1,000 at 1 credit per dollar. $50 buys 17 Seedance 2.5 clips at 720p, 80 Wan 3.0 clips or 400 music generations.
- Sume yearly vs monthly plan: what Pro, Startup and Scale save
Yearly Sume plans save $48 on Pro, $180 on Startup and $720 on Scale against twelve monthly payments. Full arithmetic and concurrency per tier.
- Suno Pro's 20 downloads a month versus paying per generation
Suno Pro is $8 a month with 20 downloads and commercial rights; Sume's Music Router charges $0.125 per generation with no monthly cap, so 20 songs is $2.50.
Written by Sume