Skip to main content
GET
LLM Token Prices over a date range
Needs historical access to this data, which is granted separately from access to current values — so a token may be able to read today’s figures but not last year’s. How far back you can read is reported by /metadata as history_starts_at.
Results are paged. Follow meta.next until it is null, and send nothing alongside it — the link already carries your filters, dates and ordering. See Paging.

Example

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Query Parameters

start
string | null

Window start, inclusive (ISO 8601 datetime, or a bare date = start of that day UTC). Default: end minus 90 days.

end
string | null

Window end, exclusive (ISO 8601 datetime, or a bare date = that whole day, i.e. the bound becomes the following midnight UTC). Default: now. Consecutive windows tile with no overlap: start=2026-06-01&end=2026-06-07 then start=2026-06-08&end=2026-06-14.

canonical_model_id
string | null

Canonical model id, exact match — &lt;lab>/&lt;family> as resolved from the model catalog. Comma-separated list accepted (max 20). Values are listed by this data type's /metadata.

Example:

"anthropic/claude-opus-4-8"

base_product_key
string | null

Identity hash: every observation of one priced thing over time, across price changes. Obtain it from a previous response — it is the natural anchor for history drill-down.

product_key
string | null

Snapshot identity hash: one exact observation (identity + time + price).

lab
string | null

Model creator, exact match (lower-case). Comma-separated list accepted (max 20). A refinement, not an anchor: pair it with a model id, or list models from /metadata.

Example:

"anthropic"

metric
string | null

What is priced, exact match. Comma-separated list accepted (max 20). Example: input_text_token,output_text_token

Example:

"output_text_token"

source
string | null

Aggregator the price was read from, exact match. Comma-separated list accepted. One of openrouter, litellm, models_dev, artificial_analysis.

price_type
string | null

Kind of price, exact match: list (a provider's published catalogue), marketplace (a marketplace's own rate), measured (observed by a third-party evaluator). Comma-separated list accepted.

provider
string | null

Serving host, exact match (lower-case). Comma-separated list accepted. Null on rows from a marketplace or a measurement rather than a named host.

modality
string | null

Model modality, exact match. Comma-separated list accepted. Example: text,multimodal

min_price_per_mtok
number | null

Only rows priced at >= this many USD/1M tokens (inclusive).

Required range: x >= 0
max_price_per_mtok
number | null

Only rows priced at <= this many USD/1M tokens (inclusive).

Required range: x >= 0
exclude_outliers
boolean
default:false

Drop rows flagged is_price_outlier (>20x the cross-source median for the same model, metric and unit — in practice a source unit error). Default false: the data is served as recorded, with the flag on every row.

sort_by
string | null

Sort field. One of: canonical_model_id, metric, price_per_mtok, source, valid_from. Default: valid_from.

sort_order
string | null

Sort direction: asc or desc. Default: desc.

page_size
integer
default:100

Rows per page (max 1000).

Required range: 1 <= x <= 1000
page_token
string | null

Opaque token token from a previous response's meta.next. It carries the whole request — filters, ordering, window and position — so supply it alone; the only parameter that may accompany it is page_size. Do not construct or parse these; the format is not part of the contract.

Response

Successful Response

data
TokenPriceRow · object[]
required

The rows in this page, ordered as meta.sort reports.

meta
HistoryMeta · object
required

/history, which additionally reports the window it queried.