Docs / Billing
Billing and credits
Prepaid credits in US dollars. Each request is charged for the tokens it actually used. Two things work differently from a postpaid API: a hold is taken before the request runs, and a disconnect does not stop the meter.
Credits
- Your balance is in US dollars and is shared by all keys of the account.
- Cost per request = uncached input + cached input + output, at the model's prices, rounded up to the next micro-dollar ($0.000001).
- Token counts come from the
usagethe model reports. Reasoning tokens are part ofcompletion_tokensand are billed as output. - Every request that reaches a model — tokens, cost, status, errors — is listed in the dashboard.
- With no balance left, requests answer
402 insufficient_quota. Top-ups are manual for now; see Top-ups.
Cached prompt tokens
Prompt tokens the model reports as cached (usage.prompt_tokens_details.cached_tokens) are billed at the model's cached-input rate, a fifth of the input rate at launch. Caching happens on the model side; you do not opt in. It pays to keep the start of your prompt stable between calls — system prompt and tool definitions first, the changing part last. If the model reports no cached tokens for a request, the whole prompt is billed as input.
Holds: why max_tokens matters
Before a request reaches the model, the relay reserves the most it could cost:
- Prompt: the length of your messages (plus tools and response format) at 3 characters per token, priced as uncached input. This is deliberately pessimistic.
- Output:
max_completion_tokensormax_tokens(timesn), or 8,192 tokens if you set neither, priced as output.
The reserved amount leaves your balance while the request runs. When it finishes, the relay gives the hold back and charges the real cost. A hold is a reservation, not a limit: a response longer than the hold is still billed in full.
What this means in practice:
- A hold never exceeds your balance. If the maximum cost is more than you have, the relay reserves everything you have and runs the request anyway.
- Large holds block parallel requests. While one request holds your whole balance, every other request gets
402 insufficient_quotauntil it settles. Agents that fire many calls at once feel this first. - Your balance can go below zero. If a request costs more than was reserved, the full cost is still charged. Further requests answer 402 until you top up.
Disconnects
What happens after you hang up:
- The relay keeps reading the model's output for up to 25 seconds, without sending it anywhere.
- If the generation ends within that window, you are charged its real usage. A streaming request shows status
499in the dashboard. - If it is still running after 25 seconds, the relay can no longer see the final usage and charges at least the amount it reserved for the request — the hold. Without
max_tokens, that hold includes 8,192 output tokens.
Non-streaming requests work the same way: the relay stays connected to the model after you leave, and a generation that outlives the window leaves the hold charged.
So: a client-side timeout does not save money, and a retry after a timeout pays twice. Bound every request with max_tokens, and set client timeouts generous enough for the answer you asked for.
How a request settles
| Outcome | You pay |
|---|---|
| Success | The reported usage. |
| Error before any output (4xx/5xx from the model, model unreachable) | Nothing. |
Upstream timeout (504) or an unreadable response (502) | Nothing. |
| Stream fails midway | The reported usage if the model sent it; otherwise an estimate from the characters received (about 4 per token), marked as estimated in the dashboard. |
| Client disconnects | Real usage if the generation ends within 25 s, otherwise the hold. See above. |
Bonus credits
Part of your balance can be bonus credit — from an invite or the bonus on a top-up. The dashboard shows paid and bonus credit separately.
- Bonus credit is spent first, so paid credit stays available for models that need it.
- Bonus credit is not valid for
model-one. It is billed to paid credit only. - If only bonus credit is left,
model-oneanswers402 bonus_not_applicable.model-zeroandmodel-one-flashkeep working.
Top-ups
Top-ups are manual during the beta: message toxuv.t.me on Telegram with your login and the pack or amount. The credit lands on your balance once the payment is confirmed. The bonus part is bonus credit.
Packs
| Pack | You pay | Bonus | Credited | Notes |
|---|---|---|---|---|
| Just Try | $2 | $1 | $3 | Once per account |
| Prime | $20 | $3 | $23 | — |
| Ultima | $100 | $20 | $120 | — |
| Scale | $500 | $150 | $650 | Grants Scale perks |
Other amounts
Any amount from $1 works. The bonus is the percentage of the highest tier the amount reaches:
| Amount | Bonus |
|---|---|
| Below $20 | none |
| From $20 | 15% |
| From $100 | 20% |
| From $500 | 30% |
$50 top-up → 15% bonus → $57.50 credited ($50 paid + $7.50 bonus)Scale perks
Any single top-up of $500 or more — the Scale pack or a custom amount — grants Scale perks for good:
- Direct line to the team on Telegram
- Early access to new models
- 5× request rate limit (600 per minute per key)