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:

FormExampleNotes
author/modelopenai/gpt-4oRecommended. The segment before the first / is the model author.
bare modelgpt-4oAccepted; 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/models

A 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.completion are USD-per-token decimal strings (so "0.000003" is $3.00 per million prompt tokens).
  • name currently mirrors id (it is not yet a human-pretty label).
  • created is the listing's created_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: 1 header pinning the catalog shape.

The onlist/auto default

Caution

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:

SuffixEffectEquivalent to
:floorPrefer the cheapest providerprovider.sort: "price"
:nitroPrefer the fastest providerprovider.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"}]}'
Caution

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).