Command overview
beacon pricing shows how beacon token-usage and the dashboard’s token
view turn tokens into an estimated cost, and checks the overrides file you can use to price
models with your own rates.
Command syntax
--pricing-file <path> to use a specific overrides file, and --user
(the default) or --system to pick which endpoint’s default file is read. Every command is
offline: nothing is fetched, and nothing is written.
Where prices come from
Estimates come from two lists, checked in this order:- Your overrides file, if there is one. It can price models the catalog cannot know (internal or proprietary models, releases newer than your Beacon build, names a gateway invents) and replace list prices with the rates your organisation actually pays.
- The catalog embedded in Beacon: the providers’ published standard-tier API list
prices, generated from LiteLLM’s model price list.
beacon pricing infoprints its source, upstream commit and generation date.
The overrides file
Beacon reads the overrides file from the endpoint directory:
The file is yours. Beacon never creates, edits or rewrites it, and the dashboard only reads it;
write it by hand or from your own tooling. If it is missing, estimates use the catalog alone.
beacon token-usage --pricing-file <path> and beacon pricing --pricing-file <path> read a
different file instead; a file named that way must exist.
Keep it readable only by you (chmod 600, in a 0700 directory) if the rates are
confidential: Beacon does not put rates in any event, but the file itself is plain JSON.
~/.beacon/endpoint/pricing/overrides.json
Rules
- Rates are US dollars per million tokens, written as JSON numbers:
3,0.3,2.5e-1. Beacon converts each one exactly to integer microdollars, so0.3is exactly 300,000 microdollars per million tokens. A value finer than one microdollar per million tokens (more than six decimal places) is refused rather than rounded. - Refused values, each with an error naming the key: negative numbers,
0(leave a field out when a rate is unpublished; a zero would make tokens free), quoted numbers such as"3.00", anything above $100,000 per million tokens (almost always a per-token or per-thousand price in the wrong field), unknown fields (usually a misspelled rate), and a key written twice. - A row replaces the catalog row whole. Fields you leave out are unpublished, not
inherited from the catalog, and are priced the way the catalog prices a missing rate: cache
reads and cache writes at the row’s input rate, one-hour writes at its five-minute write
rate. Those fallbacks are named in the report’s
pricing.models[].fallbacksand bybeacon pricing show. - Bands apply to every token of a single request whose prompt (input plus cache read plus
cache write) is above
above_tokens, exactly as the catalog’s bands do, and only to usage Beacon knows is one request (see How the estimate is computed). A band needs to state only what changes; every rate it leaves out is the row’s base rate. Bands may be listed in any order; two bands at the same threshold are refused. - Matching. A row or alias name is matched with the same ladder as the catalog: the exact
reported name first, then case and provider prefix (
anthropic/Claude-Sonnet-4-5), dotted versions (claude-sonnet-4.5), Bedrock route prefixes, and after stripping a[1m]marker, a snapshot date or an effort suffix. So a row forclaude-sonnet-4-5also pricesclaude-sonnet-4-5-20250929, even though the catalog has a row for that exact snapshot. - Overrides win. When any name in the file matches a model, the file decides; the catalog
is consulted only for models no override name reaches. If two names in the file match a model
at the same rung with different prices, the model is left unpriced rather than priced at a
list price the file was written to replace;
beacon pricing validatewarns about such names. - Aliases point at an exact name: a row in this file (checked first) or a catalog key from
beacon pricing list. An alias cannot also be a row, and a target that exists in neither list is refused.
Auditing an estimate
When an overrides file is in use, the report’spricing block says so:
source is override for a model priced by a row of the file and catalog for one priced by
the catalog; alias is set when the model reached its entry through an alias (an alias to a
catalog key has source: catalog). The sha256 is the digest of the file’s bytes, so an
estimate can be traced to the exact file that produced it. The text report prints the same
path and digest in its footer and lists the models the file priced.
If the default overrides file is invalid, beacon token-usage fails with the error rather than
quietly printing list prices. The dashboard keeps answering: it prices from the catalog alone
and reports the problem in pricing.overrides.error.
beacon pricing show
Explains how one model name resolves: the entry that priced it (catalog key or override), the match rung and any stripped decorations, the rates in USD per million tokens, its bands, and which rates are unpublished. For an unpriced model it says so, and lists the tied candidates when several entries matched with different prices.beacon pricing list
Lists every catalog entry and every row and alias of the overrides file, with base rates in USD per million tokens. Override rows come first; a catalog entry replaced by a row of the same name is markedcatalog* ("overridden": true in JSON). --provider keeps only the entries
of one provider, such as anthropic, openai, gemini or bedrock_converse.
beacon pricing info
Prints the catalog’s provenance (source URL, upstream commit, fetch and generation dates, model count, tier) and the overrides file that would be used, with its digest, or why it cannot be.info reports an invalid file instead of failing on it.