Skip to main content
Chat completions are billed in credits at per-token rates surfaced on each model row at GET /v1/models under the chat_pricing block. The rate is the caller’s effective rate — any per-team override is already applied. See the dedicated LLM pricing guide for the per-1K math and worked examples.

What you pay for

Each chat completion is billed across up to three buckets, depending on the model: Customers can compute credits-per-1K by dividing credits_per_M by 1000. The response usage block reports each bucket and the rolled-up credits_charged:
credits_charged is the exact amount deducted from your team’s balance. Check it on every response — it’s the source of truth for the billing line.

Hold-and-commit (credits are reserved before dispatch)

Submitting a chat completion places a hold on your team balance sized at (estimated_input_tokens × 1.10) + (max_tokens × output_rate). The hold ensures the request can’t run if you can’t afford the worst case. When the response completes:
  • Actuals come back in usage.
  • The hold is replaced by the actual credits_charged.
  • Any unused hold is released back to your balance.
If actuals exceed the hold (rare — the 10% input margin and max_tokens upper bound usually cover it), the overage is committed up to your team’s balance_negative_floor. The default floor is 0 — overages beyond that are absorbed by the platform and logged for follow-up. Enterprise contracts can set a per-team negative floor; contact support if your workload needs one.

The pricing-version pin

Every chat completion snapshots the rate-card version at request time. breakdown.pricing_version on the response is the version that was applied. Admin can update chat-model rates between published Aurous-Version releases, but the price actually charged is whatever was in force when the request was created — not whatever the latest rates are at the moment you read the response.

Mutability asymmetry vs. images and videos

Chat, embedding, image, and video rates are all mutable without an Aurous-Version bump. Admin can update any of them at any time; image rates are per-tier (size_tier) and DB-driven, video rates are per-model and DB-driven. The per-request charge is still deterministic in every case — each request snapshots the rate in force when it was created, and that snapshot is what you’re charged: Why: rates track provider tuning, new models, and per-model markup changes that don’t justify a new version pin every time. If you want the rate snapshot at the moment your client made a request, call GET /v1/models (chat, embedding, video) or POST /v1/images/estimate (images) immediately beforehand and store the relevant pricing block next to your request. The inferences.llm_pricing_version field on each completion row is the audit-trail proof that the rate you were quoted is the rate you paid.

Estimating cost before dispatch

Two ways to budget:
  1. Hand math — multiply expected token counts by the per-million rates on /v1/models. The per-1K rate is chat_pricing.input.credits_per_M / 1000 (and likewise for output). See LLM pricing for the full formula.
  2. Run a dry call — submit the request with max_tokens: 1 and read usage.prompt_tokens from the response. The input cost is then (prompt_tokens / 1_000_000) × chat_pricing.input.credits_per_M. The 1-token output charge is negligible.
A typical short conversational turn on aurous-grow-2.0-pro lands around 0.2–0.4 credits. Long-context analytical turns with reasoning can push past 1 credit. The live /v1/models response carries the current per-model rates.

Refunds and partial charges

The policy is: you pay for what was delivered.

Idempotency and billing

For non-streamed requests, an Idempotency-Key replays the cached response — including the original credits_charged — for 24 hours. You will NOT be double-charged for a retried key. See Idempotency for the full semantics.

Where to read rates

  • GET /v1/models — per-model chat_pricing / embedding_pricing (the caller’s effective rate, including any per-team override) plus capability metadata.
  • LLM pricing guide — per-1K math, examples, and the mutability story in long form.

Common questions

Are cached prompts cheaper? Some providers cache stable prefixes and discount the input rate for cache hits. When a hit happens, the response usage will reflect the reduced charge on breakdown.input_credits; the platform handles cache accounting transparently. Can I see usage trends? Yes — GET /v1/usage aggregates credits by day/key/model. The dashboard’s usage tab visualizes the same data. What if I’m rate-limited? Token throughput is limited per team (TPM bucket). Hitting it returns 429 tpm_rate_limit_exceeded with Retry-After. The TPM is in addition to the per-minute request bucket (RPM); both apply.