DocsCost & finance
Cost reconciliation
Compare INFRO's per-request cost estimates with what OpenAI and Anthropic report, see why the two differ, and apply an inferred rate for your own contract.
INFRO is in private early access. Running these examples requires an early-access account, an active trial or subscription entitlement, and your own provider connection. Self-serve purchasing is not generally open. See Early access.
INFRO prices every request when it serves it, from your own rate for that model and provider if you entered one, else the model vendor's list rate. That is an estimate of what your provider will bill you. Reconciliation checks it: once a day INFRO reads the cost your provider reports for the same UTC day and stores both figures side by side. The difference is the variance, and when it persists INFRO says what most likely causes it.
Reconciliation runs inside the same gateway that routes your traffic and enforces budgets before the provider is called, so a rate you correct here is the rate the next budget check uses.
Available on the Business plan. On plans below Business, the console shows a preview built only from what INFRO sees without a billing credential: how much of each provider's estimate used the vendor list rate versus your own rates, and how many requests were unpriced.
What is compared
- Reported cost — what the provider's own cost API returns for your organization, per UTC day. For OpenAI this is
GET /v1/organization/costs; for Anthropic,GET /v1/organizations/cost_report. - Estimated cost — the sum of INFRO's per-request estimates for traffic served through connections to that provider on the same day.
- Both are daily and organization-wide on the provider's side. INFRO never divides a reported total back across individual requests, and a request keeps the cost it was priced at when it was served.
- Today is excluded until it ends: a part-day compared with a whole one would show a large gap every morning.
Connect a read-only billing credential under Reconciliation in the console: an OpenAI Admin key, or an Anthropic sk-ant-admin key. It is separate from the credential that serves your requests, stored encrypted, and never shown again. See Billing for how the credential is handled.
Requests answered from the response cache are left out of INFRO's side of the comparison: they never reached your provider, and it reports nothing for them.
Why the figures differ
A gap that holds in one direction is a finding. Each finding names one cause, its evidence, the days it covers and a link to the requests behind it.
| Cause | What it means | What to do |
|---|---|---|
| Negotiated rate | Your provider bills a steady fraction of the list-rate estimate. Usually a contract or committed-use discount INFRO has not been told about. | Apply the suggested rate, or enter your contract rate under Prices. |
| Discount changed | The ratio between reported and estimated cost moved to a new level on a specific day and stayed there, while your own rate was already on file. | Check whether a contract term changed, then update the rate. |
| Vendor price change | The model vendor changed a published list rate. INFRO records the change with its source and effective date. | Nothing, unless you have your own rate for that model. |
| Unmodelled premium | Part of the reported cost comes from pricing INFRO does not model per request: Anthropic long-context pricing (the 200k–1M context window), cache-write pricing, or a priority tier. | Read the itemised lines; the premium is shown separately from the residual gap. |
| Traffic that bypasses INFRO | The provider reports more tokens on the account than INFRO sent. Some traffic reaches the same account without going through INFRO, such as a key used directly or batch jobs. | Find the keys listed in the evidence. Needs usage access, below. |
| Unpriced traffic | Requests INFRO could not price are missing from the estimate, so the estimate is low by an unknown amount. | Enter a rate for the unpriced models. |
| Unexplained | A gap that none of the above accounts for. The evidence is shown as measured. | Compare with your invoice; contact support if it persists. |
Confidence and evidence thresholds
Every finding carries a confidence — high, medium or low — and the figures it rests on, so you can judge it rather than trust it. INFRO does not name a rate-shaped cause from a short or noisy window:
- A negotiated rate needs the ratio of reported to estimated cost to hold within 5% (coefficient of variation) over at least 10 days.
- A rate is suggested for a model only with at least 7 days and $20 of reported spend for that model in the window.
- A single day's difference is not a finding. It is usually timing: a request at 23:59 UTC can land in one system's day and the other's next day.
Applying a suggested rate
A negotiated-rate or discount-changed finding carries one suggestion per model: the list rate, the rate you have on file (if any), the suggested rate, the factor between them and the formula used — reported cost divided by tokens, times one million, over the stated dates.
- Apply writes a rate for that exact model and provider kind — for example
openai/gpt-5.6-solon your OpenAI connections — with the note "Inferred from provider-reported cost" and the dates. It never writes the any-provider rate, because the same model can be billed differently on another provider. - It is prospective. Requests already served keep the cost they were priced at; nothing stored is re-priced.
- Applying needs the
policy.managepermission and a plan that includes custom rates. Each apply is recorded in the audit log. - A finding is marked applied once every suggestion on it has been applied. You can instead dismiss a finding with a short reason.
Usage access
Cost reports alone say how much, not how many tokens. With usage access, INFRO also reads your provider's usage report using the billing credential you already connected, and uses provider-counted tokens rather than its own for rate suggestions. It is also what makes bypass detection possible.
- Off by default, and switched on per billing connection by someone with
billing.manage. Turning it off is always allowed. - What it reads: token counts per day, grouped by provider API key and model. From OpenAI: input, cached input and output tokens and request counts. From Anthropic: uncached input, cache-read input, cache-creation input and output tokens. No prompts, no completions, no request contents.
- Provider key identifiers are matched against the keys on your INFRO connections so a finding can say which traffic is yours through INFRO and which is not; a key that cannot be matched is shown as unmatched.
- Without usage access, bypass detection reports not checked. It never reports "no bypass".
Provider gaps
- Anthropic's cost report excludes Priority Tier spend. On an account using it, the variance will not close; that is the provider's reporting, not your rates.
- Anthropic's cost report is not available for Claude on AWS. Bedrock, Vertex and Azure keep cost in the surrounding cloud's billing, so connections to them show no variance rather than a variance of zero.
- OpenAI's cost line items carry only the model and the token class (input, output, cached input). A premium OpenAI applies inside one of those classes cannot be separated out.
API
GET /v1/rate-findings returns your findings as { "data": [...] }. Pass status=open (the default) or status=all to include applied and dismissed findings. It is read-only and needs the same key access as the FOCUS export. Money is a US-dollar number; days are YYYY-MM-DD in UTC; null means unknown, never zero.
curl https://api.infro.io/v1/rate-findings \
-H "Authorization: Bearer $INFRO_API_KEY"{
"id": "rfnd_…",
"provider_kind": "openai",
"cause": "negotiated_rate",
"confidence": "high",
"status": "open",
"title": "OpenAI bills about 18% below INFRO's list-rate estimate",
"window": { "from": "2026-09-01", "to": "2026-09-23" },
"evidence": { "days": 14, "ratio_mean": 0.818, "ratio_cv": 0.011, "reported_usd": 4194.2, "estimated_usd": 5127.5, "list_priced_share": 1 },
"suggestions": [
{ "model": "openai/gpt-5.6-sol", "days": 14, "reported_usd": 812.4, "factor": 0.82, "applied_at": null }
]
}Your provider's own invoice is authoritative. INFRO's figures, reported and estimated, are for planning, attribution and checking. See also Commitments.