Models
A model is identified by an author/model id (the same scheme OpenRouter uses). The catalog
aggregates every model offered by active providers — you pick the model, and provider
routing decides which provider fulfills it.
Model ids
You can pass either form as the model field in a request body:
| Form | Example | Notes |
|---|---|---|
author/model | openai/gpt-4o | Recommended. The segment before the first / is the model author. |
| bare model | gpt-4o | Accepted; resolved against the catalog. |
The author/model id refers to the model author (e.g. openai, anthropic) — not to
the provider fulfilling the request. Providers are addressed separately through the
provider object.
Listing models
GET /v1/models returns the catalog in the OpenAI/OpenRouter list shape. It is public —
no authentication required — and is cached for about 60 seconds. There is one entry per
(author, model) aggregated across active, ready listings.
curl https://onlist.io/v1/modelsA response looks like this:
{
"object": "list",
"data": [
{
"id": "anthropic/claude-sonnet-4-20250514",
"name": "anthropic/claude-sonnet-4-20250514",
"owned_by": "anthropic",
"canonical_slug": "anthropic/claude-sonnet-4-20250514",
"created": 1730000000,
"context_length": 200000,
"pricing": { "prompt": "0.000003", "completion": "0.000015" },
"supported_parameters": ["tools", "reasoning", "structured_outputs"]
}
]
}
A few honest details about the fields:
pricing.prompt/pricing.completionare USD-per-token decimal strings (so"0.000003"is $3.00 per million prompt tokens).namecurrently mirrorsid(it is not yet a human-pretty label).createdis the listing'screated_at(when a provider listed the model on Onlist), not the model's release date — a deliberate divergence from OpenRouter.- The response carries an
X-Onlist-Catalog-Version: 1header pinning the catalog shape.
The onlist/auto default
onlist/auto (and the OpenRouter alias openrouter/auto) resolve to one static
platform-default model. They do not inspect your prompt and pick the best model
per request. These sentinels are request-side routing values — they never appear in the
GET /v1/models data[]. Sending an auto sentinel to an endpoint that doesn't support
it returns 422.
Model suffixes
You can append a sort suffix to the model id. A suffix overrides provider.sort:
| Suffix | Effect | Equivalent to |
|---|---|---|
:floor | Prefer the cheapest provider | provider.sort: "price" |
:nitro | Prefer the fastest provider | provider.sort: "throughput" |
# Route to the cheapest provider for this model
curl https://onlist.io/v1/chat/completions \
-H "Authorization: Bearer YOUR_ONLIST_TOKEN" \
-H "Content-Type: application/json" \
-d '{"model": "openai/gpt-4o:floor", "messages": [{"role": "user", "content": "hi"}]}'
OpenRouter's :online suffix (and the plugins field for web search / file parsing) are
not supported on Onlist — they are a no-op. Don't rely on them.
Next steps
- Provider routing — Choose which provider fulfills a model: only, sort, allow, max_price.
- Streaming — Stream responses over Server-Sent Events.
- Usage & cost — Token usage, and where cost actually lives.
- OpenAPI spec — Full request and response schemas, including GET /v1/models (YAML download).