Skip to content

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 upStatus
Credited for you during early accessToday
ETH or USDG on Robinhood Chain mainnet, credited after block confirmationsToday
ETH or USDC on Base mainnet, credited after block confirmationsToday

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.source is estimated.
  • 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

LimitSet whereWhen it’s hit
Daily spend per keyWhen creating the keybudget_exceeded (402) until 00:00 UTC
Requests per minute per keyGateway default, 120rate_limit_exceeded (429) with a retry-after header
Monthly spending limitUsage & limitsbudget_exceeded (402) when “stop at the limit” is on; otherwise a warning
Your balanceWalletinsufficient_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.

GET /v1/receipts/{id}
{
  "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, error or cancelled (you disconnected)
attempts
Every model tried, in order, with its outcome and duration.
usage.source
provider when the provider reported tokens, estimated when it couldn’t, none when 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.

GET /v1/receipts
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" …