Pricing mechanics
How the price of a single request is computed, reserved, and settled.
A request is priced per token, at the rate of the backend that served it. This page is the logic behind the number you see against a request in the usage log.
What you are charged for
Input tokens and output tokens, each at its rate. Where a model distinguishes them further, two more kinds can appear:
- Cached input tokens. When a backend recognises part of your prompt from an earlier request, those tokens are priced separately from fresh ones. See Prompt caching.
- Reasoning tokens. A reasoning model's internal thinking is billed as output unless the backend prices it separately. See Reasoning.
A few models also carry a flat per-request fee on top. Most do not.
Input and output are not always the same rate
On the GPU network, the input rate and the output rate are the same number, so a request costs its total token count times one rate. The fallback provider prices input and output separately, with output the dearer of the two.
Since which backend served your request is not something you chose, the rate that applied is recorded against the request rather than assumed. See Pricing.
The lifecycle of a charge
Rates are frozen at the start
The rates in effect when your request begins are captured and used for the whole of it. A price change while a request is running cannot alter what that request costs.
An estimate is reserved
Before a backend is called, an estimate is placed on hold against your balance:
your prompt, plus the most the model could return under your max_tokens, plus a
small margin. Holds are deliberately generous — the point is to guarantee the
request is covered, not to predict its cost.
This is why your available balance can dip further during a request than the final charge explains.
The hold is settled
When the request finishes, the hold is released: the real cost is charged and the rest returns to your balance. If nothing chargeable happened, the hold is voided instead and no money moves at all.
Settlement runs just after your response is delivered, not during it — which is why a cost is marked provisional for a short while before it firms up.
An attempt that failed is not charged
Each attempt at a backend has its own hold, released or voided on its own. A request that tried two backends before one worked is charged once. See Failover & retries.
Costs that change after the fact
Two things can move a charge after it looked final.
Token counts. Normally the backend reports exactly how many tokens were used and that is what you are billed for. When it does not report them — a stream that broke before the final usage figures arrived, for instance — the counts are estimated instead, and the log says so.
Currency. The network is paid in its own token while your balance is in dollars, so a request is charged at the rate captured when it ran and reconciled once the network confirms the actual amount. Where the two differ, a correcting entry appears on your balance rather than the original charge being rewritten — your history stays honest, and the correction is visible as its own line.