Credits & usage
Credits are the single currency across GenzoAI. The API and the Studio draw from the same balance, so there is no separate API wallet to top up and no way for one surface to be priced differently from the other.
How a call is billed
- Check — the flat cost for that modality and provider is compared against your balance. Too low and the request is refused before it reaches the provider.
- Deduct — the cost is taken up front, so the charge is exact and known before the call runs.
- Refund on failure — if the provider errors, the full amount is returned automatically.
If the upstream call fails, the entire hold is released and you are charged nothing. You are never billed for a failed generation.
GET /v1/credits/estimate already returns the figure you will
actually be charged.
Checking your balance
{
"balance": 184320,
"monthly_allocation": 200000,
"next_reset_at": "2026-09-01T00:00:00Z"
}
Estimating before you spend
Get the cost of a request without running it — useful for showing users a price, or for gating expensive calls behind a confirmation.
curl "https://api.genzoai.com/v1/credits/estimate?type=text&provider=anthropic&model=claude-opus-5&max_tokens=2000" \ -H "Authorization: Bearer $GENZO_API_KEY" # => { "estimated_credits": 810, "worst_case_credits": 940 }
Usage and transactions
| Endpoint | Returns |
|---|---|
| GET /v1/credits/stats | Aggregated spend by day, model and modality |
| GET /v1/credits/transactions | Itemised ledger — every debit, refund and allocation |
Each generation's own cost is also on the generation record itself, as
credits_used, alongside tokens_input and
tokens_output — so you can attribute spend per feature without
reconciling against the ledger.
Where credits come from
- Your plan — a monthly allocation that resets on your billing date. Unused plan credits do not roll over.
- Top-up packages — bought as needed. These do not expire and are consumed only after the monthly allocation is exhausted.
Running out
A request that would exceed your available balance is rejected with 402
before any upstream call is made — you cannot go negative, and a runaway loop cannot
generate a surprise invoice.
{
"error": {
"type": "insufficient_credits",
"message": "Insufficient credits. Required: 810, available: 220.",
"required": 810,
"available": 220
}
}
Balance is checked before the upstream provider is called, so a request that cannot be paid for never reaches the vendor and never partially charges you.
Controlling spend
- Use one key per environment and revoke promptly on exposure — a per-key monthly credit ceiling is planned but not yet available, so a key can spend the account balance.
- Choose the cheapest model that passes your evals — the spread between tiers is large.
- Cap
max_tokensto what you actually render — it bounds the response, though today the credit cost is flat per modality. - Watch
GET /v1/credits/statsper model to find where spend concentrates.