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