What did my seller agent spend? Read Sume usage by thread
Amazon's Seller Assistant plugin logs its actions with audit trails. For the media your agent made through Sume, read the cost by thread_id and run_id.

To find what an agent spent on media through Sume, read GET /v1/usage with the thread_id, run_id or job_id it worked under, and quote debited_usd_micros from the summary. It is the amount the wallet deducted, including every kind of operation in that scope, so no one has to add rows by hand.
Amazon's Seller Assistant plugin page says plugin interactions carry audit trails and actions need human approval (read 2026-10-04). That covers what the agent did in your Amazon account. The media it generated elsewhere has its own ledger.
What is in the summary?
Per the usage docs, the response adds a summary folded over every ledger row the scope caused; the limit parameter only caps how many rows are listed.
| Field | Meaning |
|---|---|
| debited_usd_micros | What the wallet deducted; the figure to quote |
| held_usd_micros | Holds still open; not spend yet |
| refunded_usd_micros | Holds given back after a failure or cancellation; not spend |
| final | true once no hold is open |
| script_runs | The script_run calls in the scope, each with rows and money |
| by_operation_type | The same money split by operation type |
How do you read it?
Pass the scope as a query parameter. job_id also accepts a turn's job id, which sums the turn plus every job it commissioned. Wait until final is true before booking a number.
import os, requests
r = requests.get(
"https://api.sume.com/v1/usage",
headers={"Authorization": "Bearer " + os.environ["SUME_API_KEY"]},
params={"thread_id": os.environ["SUME_THREAD_ID"], "limit": 50},
timeout=30,
)
r.raise_for_status()
s = r.json()["summary"]
print("debited USD:", s["debited_usd_micros"] / 1_000_000)
print("open holds:", s["held_usd_micros"], "final:", s["final"])
How do you cap it before it starts?
On Sume's hosted MCP server, paid tools accept max_spend_usd and dry_run, and every write needs an idempotency_key. Paid calls also need the mcp:write scope, which you grant at consent. Set a ceiling that matches the batch you approved, then compare it to the ledger after.
Why check at all?
Because an agent can finish a task without telling you the bill. A ledger read takes one call, and it is the record the docs call authoritative for billing.
Sources
Related posts
More in Agents
- Who authorizes agent spend on Sume: mcp:write, key and balance
On Sume, spend is authorized by the token: mcp:read hides paid tools, mcp:write allows them, and an API key sees all. There is no mcp:paid scope.
- x402 upto vs exact: how each maps to a Sume spend cap
Apify's x402 upto charges actual usage up to an allowance; exact takes a fixed $1.00 deposit and refunds the rest. Sume's analogue is a per-call spend cap.
- 200 from an Action run call: replay or skipped? Read the receipt
A 200 on POST /v1/actions/:id/runs means an idempotency replay or a skipped run. Branch on status, idempotency_hit and skip_reason, not on the HTTP code.
- 402 automation_generation_spend_cap_exceeded in a scheduled run
The per-run generation cap rejected one job before it reserved credits. Only that job fails; the run is not canceled. Raise the cap or trim the plan.
Written by Sume