Billing & usage
Prepaid credit, spent per token, reconciled to the nano-dollar. No subscription and no expiry.
How a request is priced
cost = (prompt_tokens - cached_tokens) × input_price / 1,000,000
+ cached_tokens × cached_price / 1,000,000
+ completion_tokens × output_price / 1,000,000Cached tokens are a subset of prompt tokens, and we bill them once, at the cached rate. Charging them at both rates is the most common way a metered API quietly overcharges, and it hits agent workloads hardest — they replay the same system prompt on every loop.
Where the token counts come from
From the inference engine’s own usage report, on every request. We do not run a separate tokeniser and estimate, because our estimate and the engine’s reality would drift and you’d have no way to tell which was right.
On the rare occasion an engine fails to report usage, we fall back to counting the response stream and flag that row as inexact. You can see the flag — a ≈ in your activity log — on any request it applies to.
What isn’t billed
- Requests that fail before generating anything — 5xx, no capacity, timeouts.
- Requests rejected for rate limiting or insufficient credit.
- Requests to a model that doesn’t exist.
/v1/models,/v1/keyand/v1/credits.
These still appear in your activity log at $0.00 — you should be able to see our failure rate, not just your successful requests.
Cancelled requests
Billed for the tokens actually produced. The GPU did that work, so it isn’t free — but you are not charged for the generation you cancelled. The row is logged as cancelled with the exact count, so a partial charge is explainable.
Running out
Requests are admitted while your balance is above a small negative floor (typically -$1.00). Beyond it, requests return:
{
"error": {
"message": "Insufficient credits. Your balance is $0.00. Top up at ...",
"type": "insufficient_quota",
"code": "insufficient_credits"
}
}Verifying a bill
Every request has an x-request-id and a corresponding row in your activity log with the token counts, timings and cost. Export it as CSV from the console and the rows sum exactly to the change in your balance — the balance is derived from those rows, so it cannot disagree with them.
We recompute every balance nightly from Σ(credits) − Σ(usage) and alert internally on any discrepancy.