Credits and billing
How Stav charges — prepaid credits, usage at catalogue price, a 5.5% fee when you buy, BYOK free for 10,000 requests a month, 12-month expiry, spend caps, and what a 402 means.
No subscription. Each workspace has a prepaid wallet. Requests are debited at catalogue price. The platform fee is charged once, when you buy credits.
The numbers
| What | Amount | When |
|---|---|---|
| Platform fee | 5.5% of the credits bought, minimum €0.80 | At purchase, never per request |
| Usage | The Provider Endpoint's catalogue price, no markup | Every request |
| BYOK | 10,000 requests a month free, then 5.5% of the catalogue-equivalent price | Requests served through your own provider key |
€100 of credits costs €105.50 plus any VAT, and buys €100 of usage.
Buying credits
- Card only, through Stripe Checkout, on the Billing page (
/app/billing). - €10 minimum, €20,000 maximum per purchase.
- Fee and VAT are shown before you pay.
- One invoice per purchase, one line: Stav Credits.
- Each wallet holds one currency, chosen once for the workspace. Amounts on this page are in EUR; other currencies have their own limits on the Billing page.
VAT is charged at purchase:
- Norway — 25% MVA.
- EU business with a VAT ID — reverse charge.
- EU consumer — your country's VAT where Stav's EU OSS registration is active; otherwise the purchase is refused.
- Outside the EU/EEA — no VAT.
Usage is never invoiced separately. It is a wallet debit, itemised per request in Your workspace → Monitor → Request log.
Auto top-up. Set a threshold, an amount and a monthly ceiling. When the balance drops below the threshold, Stav charges your saved card and issues a normal invoice. After three failed charges in a row, auto top-up switches off and the owner is emailed.
Enterprise. Larger agreements are invoiced by Stav and credited to the wallet manually. Same ledger, same prices.
What a request costs
Each model page lists its Provider Endpoints with input and output prices per million tokens. A request is priced at the endpoint that served it (X-Stav-Model and X-Stav-Provider on the response). Cached prompt reads are billed at 10% of the input price.
Endpoints marked free work with an empty wallet and debit nothing.
The cost on every answer
Every successful request on /v1/chat/completions, /v1/messages and /v1/responses says what it cost, in the workspace's currency:
usage.costandusage.cost_currencyin the body — the amount debited from the wallet for that request, no markup, the platform fee not included (it is charged when you buy credits). Through your own provider key it is the 5.5% fee alone, or0under the free allowance.X-Stav-CostandX-Stav-Cost-Currencyas response headers on a non-streaming answer. A stream's headers go out before the token counts exist, so on a stream the amount is on the final frame that carriesusage— the chunk with an emptychoicesarray on chat completions (sendstream_options: {"include_usage": true}), themessage_deltaevent on Messages, theresponse.completedevent on Responses.X-Stav-Cost-Currencyis sent on a stream too.
/v1/embeddings answers the same way: usage.cost and usage.cost_currency in the body, X-Stav-Cost and X-Stav-Cost-Currency on the response. Its cost is the input tokens plus the endpoint's per-request price, where Stav charges one.
Read the currency; never assume it. A workspace billed in NOK sees "cost": 0.1234, "cost_currency": "NOK". The field is absent when the cost could not be quoted — it is never an estimate.
The counts the cost is priced on are in the same usage, cache included: prompt_tokens_details.cached_tokens and cache_write_tokens on chat completions, cache_read_input_tokens / cache_creation_input_tokens on Messages, input_tokens_details on Responses. One convention on every provider, the same as OpenRouter's: prompt_tokens is the whole prompt, and the cache counts are the part of it that hit the cache. So, per million tokens:
cost = (prompt_tokens − cached − written) × input
+ cached × cache read + written × cache write
+ completion_tokens × output
The one exception is the verbatim /v1/messages path to Anthropic, where the response is Anthropic's own: there input_tokens is the uncached part and the cache counts are in addition to it. Your Request log shows the whole prompt either way — which is why, from 22 October 2026, the token counts on Monitor and in the Request log are higher for Anthropic-served requests that used a cache: the cached part is now in the prompt count. The cost did not change.
"usage": {
"prompt_tokens": 1240,
"completion_tokens": 310,
"total_tokens": 1550,
"cost": 0.0084,
"cost_currency": "EUR"
}
BYOK
Add your own provider key under Your workspace → Connect → Inference Providers: choose Attach key on the provider's row. Matching requests go through your provider account: the provider bills you for tokens. Stav still routes, applies policy and logs.
- First 10,000 BYOK requests each calendar month: free.
- After that: 5.5% of what the catalogue would have charged. A €0.0100 request debits €0.00055.
- Over the allowance with a zero balance, the request is refused before the provider is called.
Expiry
| Credit | Expires |
|---|---|
| Purchased | 12 months after purchase |
| Sign-up grant (€5, first workspace a user creates) | 30 days |
| Promotional or manual grants | 6 months |
Oldest credit is used first. Expiry notices go out 30 and 7 days before a lot expires.
Spend caps
Set on the Billing page (workspace), the API key page (per key) and the router page (per router).
- Scope: workspace, API key, or router.
- Period: daily or monthly.
- Hard caps block the request that would cross the limit. Soft caps never block.
- Both alert at 50%, 80% and 100%.
- Per-request ceiling: blocks a single request whose projected cost (endpoint price × estimated tokens, including
max_tokens) exceeds the limit.
All checks run before the provider is called. Spend totals are cached for about 30 seconds, so a burst can pass a hard cap slightly.
At zero: the 402
A priced request needs a positive balance before it is dispatched. It is debited when it completes, so the last request can take the balance slightly below zero. The next priced request is refused:
{
"error": {
"message": "Your workspace's wallet is empty. Add credit to use priced models, or call a free endpoint. Top up at /app/billing.",
"type": "insufficient_quota",
"code": "wallet_empty",
"param": null
}
}
| Status | code | Meaning | Action |
|---|---|---|---|
| 402 | wallet_empty | No balance for a priced request, or for the BYOK fee | Top up |
| 402 | budget_exceeded | A hard cap was reached; the message names it | Raise the cap or wait for the period |
| 402 | request_cost_ceiling | This request's projected cost is over the ceiling | Lower max_tokens or raise the ceiling |
| 503 | gate_unavailable | Stav could not read the balance. Not run, not charged | Retry |
If the gateway cannot read your balance, caps or spend, it does not guess. The request is refused with HTTP 503 and code gate_unavailable, and nothing is charged. Retry with backoff.
Nothing is served on credit, and nothing is queued.
Reading your spend
- Your workspace → Monitor → Request log — cost, model, Inference Provider, tokens per request.
- Your workspace → Monitor → Spend — spend per day, by model, by Router and by API key. Narrow it to one Router, key, model or Provider Endpoint surface, and pick a period of up to 90 days. Each row and each day opens the requests behind the number. Export as CSV.
- Your workspace → Monitor → Usage — requests and tokens, with the same filters.
- Billing — balance, purchases, invoices, expiring credit, caps.
X-Stav-Request-Idon every response joins your logs to ours. See Response headers.