One endpoint,
every model.
Tare is an OpenAI-compatible gateway in front of every model you use — ours and the ones you bring yourself. One base URL, one key, and every token accounted for.
Cost prices
A cost price is what you pay your upstream. It plays no part in what the platform charges you (on your own channels the tokens are billed to you directly); it decides whether cost attribution can be computed at all.
When cost prices are required
Accounting takes them in this order:
- The actual cost reported in the upstream's response (the real number for that call)
- Only when the upstream reports nothing, the price you entered here
For upstreams that report cost in the response, this table is never consulted, and you get accurate attribution without entering a single price.
Entries are needed for upstreams that do not report cost: self-hosted inference, some relays, local models.
Consequences of missing entries
Calls and billing are unaffected; the cost column is what suffers:
[!WARNING] Coverage is always reported alongside the number. "Cost this month $1,234 (62% covered)" means 38% of calls have no cost data — not that those calls were free, but that their cost is not known they cost. Margin computed on partial coverage reads optimistic.
The channel page lists models with missing prices.
Entering cost prices
Console → Channels → pick a channel → Costs. Enter input/output price per million tokens against the upstream model name. Cache read/write prices are optional.
⚠️ There is no effective period
Only the current value is stored, plus when it was entered. After a price change, recomputing a historical call uses the new price, not the one in force at the time.
For monthly reconciliation this is a real source of drift. Until effective periods are supported:
- split at the change date and reconcile the two ranges separately; or
- prefer upstreams that report cost in the response — that path is unaffected, since each call records its own true number.
There is no committed date for effective-period support.
recorded_at: when the price was entered
The cost-price read endpoint returns recorded_at (ISO 8601, e.g. 2026-08-21T17:30:00),
refreshed on every price change. It answers "when was this price entered", not "when was this
row created".
It exists for reconciliation: cost prices have no effective period, so backfilling historical cost always uses today's price. With this field you can at least see which version of the price a month was reconciled against — a price entered after a vendor's change, applied to calls made before it, is off, and without this field that skew is invisible in the report.
[!WARNING] Older rows carry
nullhere (the column was added later).nullmeans the entry time is unknown — do not default it to today on your side, that makes an unverified skew look verified.
Three rules for entering cost prices
The key is the upstream-side model name (z-ai/glm-5.1), not the name used to call the platform. A typo
does not fail, it simply never matches, and that model's cost stays empty forever. Use Browse
upstream models on the Channels page; do not type it.
Four numbers, all per million tokens: input (prompt), output (completion), cache read, cache write. Left blank they are stored as 0, not "unknown". Zero is correct when the vendor genuinely does not charge for cache reads; if you do not know, leave the whole entry out — a missing cost price shows up in the coverage figure, a wrong zero does not.
Automatically filled in:
- Entering a price backfills calls that already happened. Rows recorded while no price existed are filled in, so entering a price late does not lose that history. ⚠️ The backfill uses today's price (see "no effective period" above).
- Once an hour the upstream's own price list is read and fills in models you have used but not priced. Those are list prices, in the currency the vendor publishes, not converted, and they never overwrite a price you entered yourself.