DocsOrganizations
Billing
INFRO bills a software subscription; your own providers bill you for model usage. What each covers, how cost estimates are computed, and what a plan limit does.
You get two bills, from two companies, and they do not move together.
| Bill | From | For | Scales with |
|---|---|---|---|
| Model usage | Your AI providers | The inference your requests consume, on the accounts you connected, at the rates you negotiated with them | Your traffic |
| Subscription | INFRO | The control plane: gateway, request logs, cost attribution, budgets, policy, audit log | Your plan — never your tokens |
INFRO takes 0% of model spend, and that is structural rather than a promise: your requests run on your own accounts under your own credentials, so your provider invoices you and INFRO is not a party to the transaction. There is no arrangement under which we could take a share of it, and provider spend never appears on an INFRO invoice.
What a plan is priced on
- Gateway requests per month, with a soft allowance.
- Request history — how long request metadata stays queryable.
- Seats — people with console access. Gateway keys are not seats.
- Projects — separate keys, budgets, policies and attribution.
- Capabilities — prompt capture, your negotiated rates, trace export and cost reconciliation, on the larger plans.
Nothing INFRO sells is priced per token. A plan whose price moved with what your provider charged would put us back in the middle of your model spend, which is the arrangement this product exists to replace. The four plans and what each includes are on the pricing page.
What counts as a request
- One inference request your application sends to the gateway counts once, whether it streams or not.
- Retries and provider failover inside a single request do not add to the count. One request you made is one request on your allowance, however many upstream attempts it took.
- A request refused before it reached a provider — a budget ceiling, a model your policy does not allow — is recorded in your request log so you can see it, and does not count.
- Console traffic, authentication, health checks, model-catalog reads and INFRO's own background jobs are never counted.
The allowance resets at 00:00 UTC on the 1st of each calendar month, on monthly and annual subscriptions alike: an annual subscription buys twelve monthly allowances, not one pooled yearly quota. That is a different clock from billing_day_of_month, which is the reset day for the budgets you set against your providers' spend — the console labels each with its own date.
The 14-day trial
Every plan can be tried for 14 days. No payment method is taken, and a trial never becomes a charge on its own — subscribing is a separate, explicit step where the amount and the interval are shown before you confirm. An organization gets one trial; switching plans during it changes what you are trying and does not extend it.
During a trial the plan's request allowance is a ceiling rather than a target — an unbounded free trial is not somebody's production traffic — and the refusal says so, with 402 trial_allowance_exhausted. A paid plan is never refused for volume.
When a trial ends, requests keep being served for a further three days so an expiry over a weekend is not an outage, and we email you before and after. After that the gateway returns 402 subscription_required until a plan is active. Nothing is deleted at any point: your provider connections and their credentials, gateway keys, routes, budgets, policies, team and request history all remain, and serving resumes the moment a plan is active.
Going past the allowance
On a paid plan, overage is soft. The gateway does not drop production traffic over a plan limit. Passing the request allowance raises an alert and the console offers an upgrade; it does not start refusing requests, and it does not raise a charge for the excess. A software quota must never become an outage in your product — that is the whole reason a control plane is safe to put in the request path.
Where cost figures come from
Every request carries usage.cost: an estimate of what your provider will bill you for it. usage.price_source says how it was computed.
price_source | Meaning |
|---|---|
custom_provider | Your own negotiated rate for the provider that served this request. The most accurate figure INFRO can give you: a rate card belongs to one contract, and this is the rate from the contract the request actually ran under. |
custom | Your own negotiated rate for this model, entered without naming a provider, and applied here. Right when you pay the same rate everywhere; approximate when you do not. |
list | The model vendor's published rate. The default, and right for most accounts on that vendor's own API — an approximation on a cloud reseller, where the same model bills off a different rate card. |
| absent | The model is unpriced — no rate is known. cost is omitted rather than reported as zero. |
A rate is set per model, and optionally per provider. The same model does not cost the same everywhere: anthropic/claude-opus-5 bills off one rate card on a direct Anthropic account, another on AWS Bedrock and a third on Google Vertex. Set one rate for a model and it applies to every connection; set one for a specific provider and it wins for that provider, leaving the general rate to answer for the rest.
- The rate is applied at serving time and stored. Entering a new rate today does not rewrite what last month cost, and neither does a vendor changing their list price.
- A provider rate and a general rate are never merged. If your Bedrock rate names only input tokens, output falls through to the catalog rather than borrowing the general rate's output figure — a cost assembled from two different contracts appears on no invoice anywhere.
- An unpriced request contributes nothing to any total rather than being counted as zero, and totals that include one are reported as partial.
- A budget cannot be enforced against an unpriced request. Its worst case is unknown, so it is treated as zero and always admitted — refusing your own traffic because our catalog has a gap would be a control acting on our ignorance. The remedy is a rate; the console flags every unpriced model.
- Your provider's own invoice is authoritative. These are estimates for planning and attribution.
Checking the estimates against your provider
An estimate can be checked. Connect a read-only billing credential under Reconciliation in the console and INFRO reads your provider's own cost API once a day, storing what they reported beside what it estimated for the same UTC day. What the console then shows is the variance — "estimated $4,182, OpenAI billed $4,194, variance 0.29%" — which is a stronger and more honest claim than either figure alone.
- The billing credential is separate from the one that serves your requests, and always will be. Your inference key is used to send requests and read the usage the provider reports back — never to read your account or your billing. Cost data needs an admin-scoped key that cannot serve inference at all, so it is a second credential with its own consent. It is stored encrypted, never shown again, and used for one endpoint.
- It is entirely optional. Connect none and you get estimates with no variance figure, which is exactly how the platform behaves today.
- Reconciliation never rewrites a request's cost. Both providers report daily and organization-wide, so attributing a reported total back to individual requests would invent precision they did not give. A request keeps the rate it was priced at.
- A sustained one-way gap is a finding, not a report. A single day's difference is usually timing — a request at 23:59 UTC lands in one system's day and the other's. A gap that stays in one direction for most of a week means a rate INFRO is not modelling, most often a negotiated rate that was never entered.
- Available for OpenAI (an Admin key) and Anthropic (an
sk-ant-adminkey). Bedrock, Vertex and Azure keep their cost in the surrounding cloud's billing system, behind IAM unrelated to the inference credential; a provider without an integration shows no variance rather than a variance of zero.
Two documented gaps worth knowing before you compare a figure against an invoice: Anthropic's cost endpoint excludes Priority Tier spend, and it is unavailable for Claude on AWS. On an account using either, a variance will not close — and that is the provider's reporting, not your rates.
Changing plans
An upgrade takes effect immediately and the payment provider prorates the difference for the rest of the period. A downgrade takes effect at the next renewal by default, so you keep what you paid for — and if the smaller plan includes fewer seats or projects than you are using, the console says which before you confirm. INFRO does not delete projects, remove members or revoke security controls to make a plan fit.
Budgets are not payments
A 402 budget_exceeded means a ceiling you set — on an organization, project, member or key — has no room for the request. Nothing is owed to INFRO and nothing is unpaid; the remedy is to raise or remove that budget, not to pay anybody. See spend controls.
Cancelling
Cancel from the payment provider's portal, linked in the console, at any time. The plan runs to the end of the period it paid for; after that the gateway stops serving requests for the organization. Nothing is deleted — your provider connections and their credentials, gateway keys, routes, budgets, policies, team and request history all remain, and signing in, billing and exporting your data keep working. A failed payment is different from a cancellation: a subscription we cannot collect keeps its entitlements through a grace period while we ask you to update the card, so an expired card does not take a production application down. See the refund policy.