What did your agent spend? Reading an AgentRouter run receipt
Follow a real call from its spending cap to the settled charge, then separate the price of getting data from the quality of the result.
Product ·

Read the contract before the call
Before an agent invokes a tool, it should read the inputs, billing unit and current pricing version. A per-request tool and a per-result tool can have very different costs for the same-looking task. The call’s max_cost_usd sets a ceiling for that invocation. A task budget limits the combined work.
Our company-profile example used hunter.company_enrichment for linear.app. The maximum was $0.0049. AR reserved that amount while the call ran, then settled the same $0.0049 after the provider reported 0.2 credits of usage. The public example file includes the run ID and billing values, without account credentials or the full contact data.
| Receipt field | This company-profile call |
|---|---|
| Tool | hunter.company_enrichment |
| Status | COMPLETED |
| Maximum allowed | $0.0049 |
| Reserved while running | $0.0049 |
| Final net charge | $0.0049 |
| Reported usage | 0.2 credits |
A spending cap is not always the charge
In the pricing-research example, a Reddit search had max_cost_usd set to $0.0012. Its settled net charge was $0.00035. The maximum and the final charge answered different questions: how much the call was allowed to spend, and what it actually spent.
For a completed call, start with the run ID, tool, status and billing status. Then compare the maximum, reserved amount, customer charge, refund and net charge. The net charge is the useful value when adding up the settled task. The reserved amount describes an earlier stage and should not be counted again as another expense.
If a call is still running, fetch that same run. Repeating an invocation with a new idempotency key can create a second paid call. Keep the original key for a retry of the same request, and inspect the replay and charge_is_new fields when a receipt is returned again.
A completed call can still need review
Our Linear company profile completed successfully, but its Series C date disagreed with the company’s original announcement. Our email finder returned plausible addresses with inferred provenance and a catch-all flag; we used separate verification calls before counting them as verified. Neither of these distinctions can be read from COMPLETED alone.
Read the saved output and the provider response together with the bill. Check whether the data answers the question, whether important fields are missing and whether a claimed match is the right company or person. A successful network request establishes delivery, not that every returned fact is correct.
If a correctly requested, charged result is unusable, the run ID and a concise explanation provide the basis for a dispute. Follow the current tool contract for errors and empty results. We did not exercise a dispute or refund in this example, so these receipts do not demonstrate a refund outcome.
Add up the task without counting twice
Across the six blog examples, we made 21 unique provider calls with a combined net charge of $0.10505. We checked the run receipts against the session ledger and the wallet balance change. Several examples share the same page reads, so their individual subtotals overlap.
A useful task ledger has one row per unique run ID, with the tool, status, final net charge and a link to the saved result. Include calls whose data did not make it into the final report; they still contributed to the research bill. Keep your agent’s model charges separate from AR data fees.
| What was counted | Result |
|---|---|
| Unique provider calls | 21 |
| Total settled AR data fees | $0.10505 |
| Wallet balance change | $0.10505 |
| Agent model fees | Separate; not included |
Ask your agent for the receipt
Make the ledger part of the deliverable when you delegate research. You should be able to move from a finding to its source, from the source to the tool result and from the result to the charge. Small, inspectable tasks make that chain easier to follow.
The example file contains the 21 unique run IDs and their settled charges, together with the masked lead sample and the creator baseline. It is a record of these examples, not a promise that a future call will return the same data or price.
After completing this task through AgentRouter, show one ledger row per unique run ID: tool, run status, maximum allowed, reserved amount, final net charge and result location. Separate replays from new charges and include calls whose results were not used. Show the unique-run total without double-counting shared evidence. Keep AR data fees separate from your own model fees.