Models

Every listed model has a price per million tokens and, when known, a context length. What you see is what the next request costs.

The list

GET /v1/models is the catalog for a key. An agent with no key reads the same wholesale rate card from GET https://app.klinn.dev/api/v1/models, in price.promptUsdPerM and price.completionUsdPerM.

Prices can change at any time. Pages are 100 models. Pass nextCursor back as cursor. q filters by name.

The Models page shows the public list price next to ours where there is one. Popular models usually cost less than it; a price above it is marked "above list".

uncensored: true marks a model with fewer content restrictions. It is a tag, not a filter: Klinn filters and moderates no model.

kind says how a model is called. A chat model answers /v1/chat/completions. A decisions model answers typed questions about a text at its endpoint, a path on the API host: /v1/systemone is https://api.klinn.dev/v1/systemone. See Decisions.

curl https://api.klinn.dev/v1/models -H "Authorization: Bearer $KLINN_API_KEY"
curl "https://app.klinn.dev/api/v1/models?q=claude&limit=20"

What a request was charged

Every keyed chat answer carries its price in x-price-per-million: prompt, completion, cache_read and cache_write, in USD per million tokens. cache_write is the prompt price × 1.25, or × 2 with a cache_control ttl of 1h. A model with long-context tiers also gets x-price-long-context, one tier per element, lowest first: a tier prices the whole request when the request's input tokens, cached ones included, pass above. usage.cost is what the request was charged, in USD. A stream sends it in the usage chunk, with stream_options.include_usage. Reasoning models spend output tokens thinking: give them a max_tokens of 1,000 or more. Reasoning tokens are billed as output.

x-price-per-million: prompt=2.4; completion=12; cache_read=0.24; cache_write=3
x-price-long-context: above=200000; prompt=4.8; completion=18; cache_read=0.48; cache_write=6

A decisions answer is billed on input tokens only. Its header is x-price-per-million: input=…, in USD per million input tokens, and usage.cost is what the call was charged.