Quotaflow
llms.txtOpenAPIDashboard
Billing & offers

How billing works

Quotaflow charges per token against your organization balance, which is the only spendable money account for customer-organization keys. Project budgets are reporting targets, not separate wallets. Per-model unit prices are returned by the authenticated /models response and listed on each model's reference page — treat those as the source of truth for exact rates.

What you are charged for

Caching

A prompt cache hit (cache-read tokens) is billed at a lower rate than normal input tokens, and cache writes are priced separately. Exact cache rates differ by model and are part of each model's pricing — see /models and the model reference pages.

Post-settlement corrections

Occasionally a request is served and its settlement does not complete at the time. If we charge for it later, the charge is attributed to the period and the model of the original request — it raises that period's usage totals instead of appearing as a separate entry dated the day the correction was applied. The "Charged to wallet" figure on your wallet page for a period therefore includes any corrections that belong to requests served in that period.

Downloading a statement

The console's Usage page offers a Monthly statement: pick a month, download a CSV.

A statement is one whole calendar month, and the month is cut at UTC midnight — not at your local midnight, and not at ours. Two people in different time zones downloading the same month therefore receive the same rows, and the same month downloaded again next year still means the same period. The period is stated beside the picker as the half-open interval it is: 2026-01-01T00:00:00Z — 2026-02-01T00:00:00Z, where the end bound is exclusive.

The file has one row per model plus a final TOTAL row, and every row repeats the period, so a statement stays readable after it is renamed or pasted beside another one.

ColumnWhat it is
period_start_utc, period_end_utcThe statement period. The end bound is exclusive.
modelThe model the row accounts for. TOTAL on the last row.
requestsRequests for that model whose charge has settled into the period. A request served but not yet settled is absent until its charge is applied.
input_tokens, output_tokens, cache_creation_tokens, cache_read_tokens, total_tokensTokens metered in the period. The TOTAL row leaves the two cache columns empty: the account totals carry one combined cache figure rather than the split.
cost_usdThe list price of that traffic. Amounts are written to ten decimal places, the precision charges are stored at, so a fraction-of-a-cent line is never rounded away to zero.
actual_cost_usdThe charge for that traffic after any discount that applies to your account. This is the usage book's figure; the wallet ledger is the record of money that moved, and the two differ only in the rare case where a charge exceeded the admission hold taken for the request.

A statement covers your whole account — every API key and every project in the scope the page is showing. It is not narrowed by the API-key, model, or window filters set on the Usage page above it; those filter the request log, not the statement.

A statement is a read of a period, not a snapshot frozen when you downloaded it. Because a post-settlement correction (see above) is attributed to the period of the original request, re-downloading a past month can produce a slightly larger total than an earlier download of the same month did. The period has not moved; a charge that belongs inside it landed late.

<Note>

The TOTAL row is the account total for the period as our billing read reports it, not a sum of the rows above it. The two are separate reads taken moments apart, so for a period still accruing they will not always agree to the cent — a request settling between them lands in one and not the other. Both figures go into the file unchanged. For a closed period they should agree; if they do not, send us the file.

</Note>

Reconciling a statement against your request log

The statement and the console's request log take the same period bounds, so a month's statement and that month's log can be made to describe the same requests. Two things have to match, not one:

  1. The window. Set the Usage window to the two instants the statement names — the control accepts an instant, and a value carrying an offset such as 2026-01-01T00:00:00Z is used exactly as written.
  2. The filters. Clear the API-key and model filters. The statement always covers the whole account, so a log narrowed to one key is a smaller population than the file no matter how well the periods line up.

<Warning>

This does not extend to GET /v1/usage, the usage summary an API key can read. That endpoint accepts start_date and end_date as whole dates only, resolved in our server's time zone, and an RFC3339 value there is ignored in favour of its default 30-day window rather than rejected. Do not reconcile a UTC statement against it.

</Warning>

Exporting every request (CSV)

The statement above has one row per model. When you need to reconcile request by request, the Usage page also offers Export all requests (CSV): pick a month and request the export. It is built in the background; the Exports list beside the button shows its progress and offers Download once it is ready.

ColumnWhat it is
time_utcWhen the request was made, in UTC.
request_idThe request's identifier, as shown in the request log.
api_key_nameThe name of the API key that made the request.
modelThe model the request was billed under.
input_tokens, output_tokens, cache_read_tokens, cache_write_tokensTokens metered for the request.
input_cost_usd, output_cost_usd, cache_read_cost_usd, cache_write_cost_usd, other_cost_usdThe list-price cost of each component of the request.
official_cost_usdThe request's total at official list prices.

Where to find exact prices

<Note>

This page describes billing *behavior*. It intentionally does not hard-code per-model unit prices, which live in /models and the model reference pages so they stay authoritative.

</Note>