Models
gpt-6-astra is half of OpenAI’s list price for the same model.
This table is a snapshot. The live price list is
GET /v1/models, which returns the rate for each model
beside its name — no key required. Read it from there if you are computing costs
in code.max_tokens, not a limit of the
model. It exists because the quote is priced at max_tokens: an unbounded
ceiling means an unbounded hold against your balance for a single request.
Web search
The relayed models have no internet access of their own, so the router searches on their behalf between rounds. That is a real cost from a real provider, and it costs about $0.00875 per search, capped at 3 searches per request. Search is billed after the fact, not quoted up front, because nothing knows whether a request will search until it does. Quoting for three searches that almost never happen would have charged every caller roughly thirty times what an ordinary chat turn costs. The exact figure and the per-request cap are published in thetools array of
GET /v1/models. A search is priced per call rather than per token, and the
final amount is whatever the search actually cost — which is why it is billed at
settlement rather than quoted up front.
What you are actually charged
Three numbers, and they are usually different:Quoted — held before the model runs
Quoted — held before the model runs
Input tokens are estimated high (about 3 characters per token, plus the
router’s own injected instructions), and output is priced at the full
max_tokens you asked for. An LLM’s cost is not knowable until after
generation, and the settlement scheme needs a price up front.Charged — metered after the last token
Charged — metered after the last token
Real input tokens at the real rate, real output tokens at the real rate, plus
whatever search actually cost. This is the figure in
x-nanorouter-charged-usdc and on your ledger row.Refunded — the difference, returned as credit
Refunded — the difference, returned as credit
Quote minus charge, credited back the moment the request settles and netted
into your next quote. From the second request onward you are charged
approximately your true cost.
Reasoning is not priced separately
The upstream bills reasoning as output tokens, and only the model decides how much of it there is. There is no separate reasoning rate to publish, and no way to quote for it in advance — it lands in your output token count.reasoning_effort defaults to low for exactly this reason. The backend’s own
default spends multiple seconds thinking before the first token on even trivial
prompts, and you pay for all of it.
Where the money goes
Your deposit sits in Circle Gateway, keyed to your own address. A charge is an EIP-3009 authorization signed on your behalf, batched, and settled on chain. You hold no native gas — on Arc, USDC is the gas token. Unspent credit is withdrawable, less any outstanding debt from a turn that overran its quote.How billing works, in detail
The quote, the hold, the meter, and the refund — and why it is built this way.