---
title: "Read cost and usage"
description: "Inspect one job's charges or review the tenant's usage by user and team."
canonical_url: "https://docs.oz0.ai/spend/cost-and-usage"
---
# Read cost and usage

> Inspect one job's charges or review the tenant's usage by user and team.

For: tenant administrators and cost owners.

The LLM gateway meters every model call: tokens in and out, tokens read from and written to the cache, the cost in US dollars, and the job, agent, node and model it belongs to. Nodes cannot make a model call around it.

Inspect one job's charges or review the tenant's usage by user and team.

## Choose a task

<table>
<thead>
  <tr>
    <th>
      Task
    </th>
    
    <th>
      Guide
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      Understand recorded charges
    </td>
    
    <td>
      <a href="https://docs.oz0.ai/spend/cost-and-usage/accounting">
        Open guide
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      Read model call timings
    </td>
    
    <td>
      <a href="https://docs.oz0.ai/spend/cost-and-usage/timings">
        Open guide
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      Export usage
    </td>
    
    <td>
      <a href="https://docs.oz0.ai/spend/cost-and-usage/exports">
        Open guide
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      Explain prices and cache costs
    </td>
    
    <td>
      <a href="https://docs.oz0.ai/spend/cost-and-usage/prices-and-cache">
        Open guide
      </a>
    </td>
  </tr>
</tbody>
</table>

## One job

`run` prints a job's cost when it finishes, and `job get` shows it at any time, one row per job in its tree:

```bash [Terminal]
oz0 job get job-bb270cf1-b194-4bf1-a0e3-267e061e416a
```

```text
JOB                                       AGENT   NODES              MODELS                       CALLS  INPUT  CACHED  OUTPUT  COST
job-bb270cf1-b194-4bf1-a0e3-267e061e416a  lead    node-91378eb09343  anthropic/claude-sonnet-5-5  2      465    0       45      $0.0014
└ helper-30aa1892                         helper  node-d77d102ec079  anthropic/claude-haiku-4-5   2      307    0       44      $0.0005
```

`NODES` shows where each branch ran and `MODELS` which models answered, several when a fallback took over. A job with a [budget](https://docs.oz0.ai/build/parts/contracts-and-limits/budgets#budgets) shows it on the last line, and web searches by the provider's server tool are counted there too.

## Across jobs

```bash [Terminal]
oz0 usage                      # the last 24 hours, by job, agent and model
oz0 usage --since 168h         # the last week
oz0 usage --job <job-id>       # one job
oz0 usage --tenant acme --json # for scripts and spreadsheets
```

A tenant's spending this month, and its monthly budget if it has one, are in `tenant list`; see [A budget per tenant and month](https://docs.oz0.ai/build/parts/contracts-and-limits/budgets#a-budget-per-tenant-and-month).

## Per user and team

Every job is charged to whoever started it and to their team. `quota usage` shows what each one's jobs spent and started, next to this month's spending and their [quotas](https://docs.oz0.ai/spend/budgets-and-quotas):

```bash [Terminal]
oz0 quota usage            # this month
oz0 quota usage --days 7   # the last seven UTC days
```

The console's *Cost* page shows the same under *By user and team*.

[Works-council mode](https://docs.oz0.ai/govern/works-council-mode), on by default, hides figures about people: you see your own row, teams of at least five people and service identities, and the tenant's total (the `(tenant total)` line, the *Tenant total* row); everyone else's spending is in the total only. An admin turns it off with a reason: `oz0 tenant works-council <tenant> --off --reason "..."`.

## My budget

The *Cost* page's My budget shows your own monthly quota in the tenant, what your jobs spent of it this month, the shares at which you are alerted (80% and 100% by default), what approved requests added, and how many of your requests for more wait. Only you see your figures there, whatever works-council mode says; `oz0 quota mine` prints the same. Quotas are set under Spend, Budgets, and the card links there. When your jobs pass one of the shares you get a notification, and nobody else does: see [My budget and spend alerts](https://docs.oz0.ai/spend/budgets-and-quotas/requests#my-budget-and-spend-alerts).

A running agent sees its own job tree's spend too, as the last part of each model request: see [What the agent sees of its spend](https://docs.oz0.ai/build/parts/contracts-and-limits/budgets#what-the-agent-sees-of-its-spend).

When a budget, a quota or a tree's limit refuses a call or a job, the refusal carries its numbers for code as well as words for people: the scope, its limit and spend, when it resets, the refused call's worst case, whether the job waits, and who can raise it. An app or an agent reads those fields instead of the message; see [Spend refusals](https://docs.oz0.ai/reference/spend-refusals). The audit trail's `run.refused` entries keep the same fields as `refusal_detail`.

## Spend alerts

People are told when a budget passes a share of it: a job tree's budget, the tenant's monthly budget, a team's quota and a person's own. The shares are the tenant's spend alerts (80% and 100% by default, 50% allowed for monthly budgets and quotas), set with `oz0 tenant spend-alerts` or in the console under Spend, Budgets, Alerts; the alert at 100% says whether jobs now wait and who decides. Who is told, and how works-council mode limits it, is on [My budget and spend alerts](https://docs.oz0.ai/spend/budgets-and-quotas/requests#my-budget-and-spend-alerts).

## Spend anomalies

Once a day, an hour after the UTC day ends (so calls metered late still count), the edge looks at each tenant's day and compares its spend with its usual. When the day is far above it, it opens a spend anomaly finding, which the *Cost* page shows as a card (*Spend higher than usual*), `oz0 usage anomalies` lists, `oz0 doctor` and the health page name for cluster admins, and the event `spend.anomaly` sends to the tenant's admins and its [notification rules](https://docs.oz0.ai/admin/notifications).

- The usual is the median of the day totals of the 28 days before, or, once the tenant has two weeks of history, of the same weekday in those four weeks (a busy Monday is compared with Mondays). It needs a week of history.
- Far above is a robust rule: the day's spend is more than the median plus 3.5 times the spread, where the spread is the median absolute deviation (scaled to compare with a standard deviation) or a fifth of the median, whichever is larger. One spiky day in the history does not move the median.
- A floor: no finding for a day under $10 of spend, or the floor the tenant sets (`oz0 tenant spend-alerts <tenant> --anomaly-floor 25`). `--anomaly off` turns the finding off; both are [governed](https://docs.oz0.ai/govern/reviewed-changes#four-eyes-for-governance-changes) loosenings.
- What rose: the three agents, models and plugins whose spend that day rose the most against their own usual (a model call counts under the plugin of the agent that made it; a plugin's own report under that plugin), and teams only where [works-council mode](https://docs.oz0.ai/govern/works-council-mode) shows the team, checked again whenever the finding is read. Never by who started or ran a job: there is no dimension of people. The finding links the day's five most costly jobs.
- Counted: every metered call and plugin report, as budgets count them; a call whose outcome is unknown (a timeout, a cut stream) counts at what was held for it, as budgets count it ([incomplete calls](https://docs.oz0.ai/spend/cost-and-usage/accounting#incomplete-calls)).
- Left out: spend of replays (the test bench), eval routines' jobs, rollouts' shadow runs and measured-savings comparisons. A job's kind comes from its workflow, which only the edge starts, never from its ID, so naming a job `shadow-...` hides nothing. The finding shows what it left out, per kind. [Outside spend](https://docs.oz0.ai/spend/cost-and-usage/accounting#outside-spend) of the day is shown apart, in its own currency, and never counted.
- One finding per day. The check looks at each day once (a restart or another edge does not repeat it; a check cut off midway is taken over half an hour later), so a tenant has at most one finding per day. Resolve it with a reason: `oz0 eval resolve <id> --reason "a migration ran"`.
- No estimate of a saving. The finding says what rose and where; it does not say what could be saved.

An agent that only one person uses can single that person out: its row in the finding is that person's spend. Works-council mode hides figures about people and teams, not about agents, so keep this in mind when you share the finding outside the people who may see the tenant's costs.

```bash [Terminal]
oz0 usage anomalies
2026-10-11  open  01a13065-ce48-71ee-838f-04c22ef56eb1
  spent $186.00 against a usual $20.00 (the median of the same weekday over the last 4 weeks; anomaly above $34.00)
  rose by agent:  reviewer +$155.00; helper +$10.00; writer +$1.00
  rose by model:  m-large +$160.00; m-small +$1.00
  rose by plugin: review +$160.00; search +$5.00; docs +$1.00
  job spike  $165.00
  left out: compare $400.00, eval $500.00, replay $300.00
```

## Previous section links

<span id="costs-that-plugins-report">

Costs that plugins report

</span>

: [open guide](https://docs.oz0.ai/spend/cost-and-usage/accounting#costs-that-plugins-report).

<span id="tools-model-use">

Tools' model use

</span>

: [open guide](https://docs.oz0.ai/spend/cost-and-usage/accounting#tools-model-use).

<span id="how-fast-each-call-was">

How fast each call was

</span>

: [open guide](https://docs.oz0.ai/spend/cost-and-usage/timings#how-fast-each-call-was).

<span id="how-prices-are-worked-out">

How prices are worked out

</span>

: [open guide](https://docs.oz0.ai/spend/cost-and-usage/prices-and-cache#how-prices-are-worked-out).

<span id="outside-spend">

Outside spend

</span>

: [open guide](https://docs.oz0.ai/spend/cost-and-usage/accounting#outside-spend).

<span id="usage-export">

Usage export

</span>

: [open guide](https://docs.oz0.ai/spend/cost-and-usage/exports#usage-export).

<span id="incomplete-calls">

Incomplete calls

</span>

: [open guide](https://docs.oz0.ai/spend/cost-and-usage/accounting#incomplete-calls).

<span id="the-platforms-own-runs">

The platform's own runs

</span>

: [open guide](https://docs.oz0.ai/spend/cost-and-usage/accounting#the-platforms-own-runs).

<span id="agents-with-a-model-cascade">

Agents with a model cascade

</span>

: [open guide](https://docs.oz0.ai/spend/cost-and-usage/accounting#agents-with-a-model-cascade).

<span id="reprice-recorded-spend">

Reprice recorded spend

</span>

: [open guide](https://docs.oz0.ai/spend/cost-and-usage/prices-and-cache#reprice-recorded-spend).

<span id="the-prompt-cache">

The prompt cache

</span>

: [open guide](https://docs.oz0.ai/spend/cost-and-usage/prices-and-cache#the-prompt-cache).

<span id="prompts-with-their-stable-parts-first">

Prompts with their stable parts first

</span>

: [open guide](https://docs.oz0.ai/spend/cost-and-usage/prices-and-cache#prompts-with-their-stable-parts-first).


## Sitemap

See the full [sitemap](https://docs.oz0.ai/sitemap.md) for all pages.
