# Prices and blanks

> How ai-tally puts a price on each call, and why an unknown cost shows as a blank instead of $0.

## How a call gets its price

AI providers charge by the token. A token is a small piece of text, roughly a short word. ai-tally keeps a price list with each provider's rates per million tokens. There are separate rates for:

- **input tokens**, the text you send
- **output tokens**, the text that comes back
- **cached input tokens**, input the provider has seen recently and charges less for

When a call arrives, ai-tally looks up the provider and model and multiplies each token count by its rate. It does this itself, even when your code sends its own cost estimate. That way every call is priced the same way.

For example, suppose a `gpt-4o-mini` call uses 1,000 input tokens and 500 output tokens. ai-tally charges the 1,000 input tokens at the input rate and the 500 output tokens at the output rate, then adds the two.

### Dated model names

Providers publish dated versions of a model, like `gpt-4o-2024-08-06` or `claude-sonnet-4-5-20250929`. ai-tally prices a dated name at the rate for its base model (`gpt-4o`, `claude-sonnet-4-5`). Only a real date at the end is treated this way. A name like `gpt-4-0613` is not a date, so it needs its own price.

### Cached tokens

When a provider serves part of your input from its cache, ai-tally bills those tokens at the cached rate and the rest at the normal input rate. If the price list has no cached rate for a model, cached tokens are billed at the normal input rate.

Anthropic also charges extra for writing to its cache. ai-tally counts those tokens at the normal input rate, so calls that write to Anthropic's cache come out a little lower than your bill.

## Blank, not $0

Sometimes ai-tally cannot know what a call cost. When that happens, the dashboard shows a blank (`—`) instead of a number. Hover over it to see why. A blank never means free.

A call's cost is blank when:

- **It did not report its tokens.** The most common case is an OpenAI stream sent without `stream_options.include_usage`.
- **Its model is not on the price list.** The call is still saved and counted, just without a price.
- **It is missing the provider or model name.**

A total that includes some blank calls is marked **at least**. It adds up only the calls ai-tally could price, so the real total is higher.

## Estimated and reconciled

Every cost ai-tally works out from its price list is an **estimate**: the price list times what the call reported. Cost Explorer shows these as **Estimated**.

Cost Explorer also has a **Reconciled** figure, meant for costs checked against your provider's actual bill. It stays blank until that check has been run for your organization.

## Next

- Try it: send one call with the [Quickstart](https://ai-tally.com/docs/get-started/quickstart) and find its price in Cost Explorer.
- A cost is blank and you expected a number? See [Check it works](https://ai-tally.com/docs/get-started/check-it-works).
