Receipts
How to read what a run actually cost, attempt by attempt, with runs_evidence, GET /v1/runs/{id}/attempts and the exact money in route.summary.
Every run settles to one number, actualCost, and every attempt behind it has its own receipt.
One number: actualCost
actualCost is what you were charged for the run. Compare it against estimatedCost (what was
held) to see how much of the hold came back to your balance. See Holds.
Exact money in route.summary
A fallback run’s route.summary states each attempt’s charge to the exact cent, or fraction of a
cent, trimmed of trailing zeros: "$0.0198", "$0.005", "$0.000007", "$1", and "$0" for
nothing charged. For example:
zerobounce: guessed ($0.01). hunter: found ($0.0245). Charged $0.0345.
The words describing each attempt fit the job: a people.email.verify route reads “verdict
invalid” or “answered”; web.scrape.* reads “fetched” or “fetched, flagged”; a job with enrich
in its name reads “matched” or “matched, flagged”; find jobs and everything else read “found” or
“found, flagged”.
Every attempt, with its own receipt
looot runs evidence <run-id>{ "runId": "<runId>" }This is runs_evidence (MCP) or GET /v1/runs/{id}/attempts (REST). Each row carries the
attempt’s status, the provider’s own response status, latency in milliseconds, a receipt id, and
its cost, never raw provider headers or bodies:
{
"attemptId": "att_...",
"ordinal": 2,
"status": "completed",
"providerResponseStatus": 200,
"latencyMs": 380,
"receiptId": "rcpt_...",
"cost": 0.0245
}
An attempt can also carry outcome, outcomeReason and routeAfterAttemptId (the attempt before
a fallback step, when that earlier one was billed). Sum the attempts’ costs and you get the run’s
charge: the receipts always sum to the ledger entry.
Your ledger
looot ledger list --limit 50
Needs the usage.read scope. Every balance change is one ledger entry: top_up, trial_credit
(only on older workspaces), reservation (a hold), release (a hold returned), charge and
refund. Pass nextCursor back as --cursor for the next page.
Worked example
Run job:web.scrape.markdown on https://example.com with fallback, get route.summary back as
"steel: fetched, html only, no markdown ($0.005). jina: fetched ($0.003). Charged $0.008.", then
pull runs_evidence for the two attempts to see each one’s own latency and receipt id.