Guides
Balance & receipts
You pay per call from a prepaid balance, at each model’s token price. No subscription. Every charge, and every refused or failed request, gets a receipt.
Your balance
Your account holds one balance in USD, and every key on the account spends from it. You can see it on the Wallet page.
| How it’s topped up | Status |
|---|---|
| Credited for you during early access | Today |
| ETH or USDG on Robinhood Chain mainnet, credited after block confirmations | Today |
| ETH or USDC on Base mainnet, credited after block confirmations | Today |
Whatever you deposit, the balance is kept in US dollars. ETH is converted at the rate when the deposit is credited; USDG and USDC count 1:1. A 3% deposit fee is kept and the rest is credited, so $100 sent adds $97. Gas for a deposit is paid in ETH on the network you send it from.
Withdrawals
Withdrawing unused balance isn’t part of the first release.Before a request runs
Inferiq works out the most the request could cost: the prompt’s size, plus max_tokens (or the model’s default when you don’t send one), at the model’s prices. If your balance can’t cover that, the request fails with insufficient_balance before the model is called, and costs nothing.
Coding tools often leave max_tokens unset. The model then defaults to 8,000 output tokens, which makes the worst case larger than what you’ll usually pay. If your balance is low, setting max_tokens in your tool lets requests through.
What you’re charged
After the model answers, you pay for the tokens actually used, at the prices on the model page:
- input_tokens
- Every prompt token, at the input price. History your tool resends counts too.
- output_tokens
- Tokens the model wrote, at the output price, including the reasoning it did before answering.
- Cost is rounded up to the next millionth of a dollar, never more.
- A request that fails, or is refused before the model is called, costs $0 and still gets a receipt.
- If you disconnect mid-stream, you pay for what was generated. That receipt’s
usage.sourceisestimated. - Failed attempts before a retry are not charged. Only the attempt that answered is.
Holds
While a request runs, its worst case is held from your balance, so requests running at once can’t take it below zero. The hold is released when the receipt is written. A fix run holds its quoted maximum the same way. Your available balance is your balance minus what’s held.Limits
| Limit | Set where | When it’s hit |
|---|---|---|
| Daily spend per key | When creating the key | budget_exceeded (402) until 00:00 UTC |
| Requests per minute per key | Gateway default, 120 | rate_limit_exceeded (429) with a retry-after header |
| Monthly spending limit | Usage & limits | budget_exceeded (402) when “stop at the limit” is on; otherwise a warning |
| Your balance | Wallet | insufficient_balance (402) |
Receipts
Every chat request writes one receipt. Its ID is in the x-inferiq-receipt-id header and shares its random part with the request ID (req_X ↔ rcpt_X). The charge and the receipt are written in the same database transaction, so a receipt always matches your balance.
{
"id": "rcpt_QXt5TzjNYPURUd0",
"object": "receipt",
"request_id": "req_QXt5TzjNYPURUd0",
"kind": "gateway.request",
"status": "ok",
"error_code": null,
"requested_model": "inferiq/balanced",
"served_model": "qwen/qwen3.8-27b",
"provider": "qwen",
"stream": false,
"attempts": [
{ "model": "qwen/qwen3.8-27b", "provider": "qwen", "status": "ok", "error_code": null, "duration_ms": 2140 }
],
"usage": {
"input_tokens": 52,
"output_tokens": 118,
"cache_read_tokens": 0,
"cache_write_tokens": 0,
"source": "provider"
},
"cost": { "usd": "0.001284", "micro_usd": 1284 },
"balance": { "before_usd": "41.371284", "after_usd": "41.370000" },
"timing": {
"started_at": "2026-10-16T14:32:01.204Z",
"finished_at": "2026-10-16T14:32:03.371Z",
"duration_ms": 2167,
"overhead_ms": 27
},
"api_key": { "id": "key_vc3bd6vzQKDQBF7a", "name": "laptop" }
}- status
ok,errororcancelled(you disconnected)- attempts
- Every model tried, in order, with its outcome and duration.
- usage.source
providerwhen the provider reported tokens,estimatedwhen it couldn’t,nonewhen nothing ran.- cost
- As a decimal string in USD and as whole micro-dollars.
- balance
- Before and after this charge.
- timing.overhead_ms
- Time spent inside Inferiq, not waiting on the provider.
Receipts never contain your prompt or the model’s answer. Fix agent receipts have kind: "fix.run" and a fix object with the run ID, agent, tier, the error’s first line and the quote. The amount held is the quote’s maximum. See Fix agents.
Reading receipts via API
List your receipts newest first, up to 100 per page. Receipts are private to your account: any of your keys can read them, and no one else’s can.
curl "$INFERIQ_BASE_URL/receipts?limit=20" \
-H "Authorization: Bearer $INFERIQ_API_KEY"
{
"object": "list",
"data": [ { "id": "rcpt_…", "object": "receipt", … } ],
"has_more": true
}
# Next page: pass the oldest started_at you have
curl "$INFERIQ_BASE_URL/receipts?limit=20&before=2026-10-16T14:32:01.204Z" …