Catalog endpoints
OpenRouter provides several endpoints for discovering and inspecting models:Query parameters (GET /api/v1/models)
The primary catalog endpoint accepts the following query parameters:
Modality filtering guide
By default,GET /api/v1/models returns text-output models only. If you omit output_modalities, image generators, embedding models, dedicated speech models, and decision models are excluded.
Pass output_modalities=all to receive the complete multi-modal catalog, or target specific capabilities:
Important distinction: audio vs speech vs transcription
OpenRouter categorizes audio capabilities into three distinct output modalities:
speech: Dedicated Text-to-Speech (TTS) models that run on thePOST /api/v1/audio/speechendpoint (e.g.assemblyai/assemblyai-tts-1,heygen/heygen-voice-1). They return raw binary audio files (MP3, WAV, PCM).transcription: Dedicated Speech-to-Text (STT) models that run on thePOST /api/v1/audio/transcriptionsendpoint (e.g.x-ai/grok-stt-2.0,nvidia/nemotron-3.5-transcribe,openai/whisper-large-v3). They accept audio file uploads and return transcribed text.audio: General conversational multimodal models that process or emit audio chunks viaPOST /api/v1/chat/completionsorPOST /api/v1/responses(e.g.openai/gpt-audio,openai/gpt-audio-mini,google/lyria-3-clip-preview).
Sentinel prices and safe cheapest-model sorting
When building model selectors or cost optimizers, be aware of two sentinel price values in thepricing object:
-1(Dynamic Router models): Routers such asopenrouter/auto,openrouter/auto-code,openrouter/fusion, andtypesafe/jev-routersetpricing.prompt: "-1"andpricing.completion: "-1". Because these models dynamically delegate to underlying models at runtime, their final cost depends on the selected downstream provider.0(Free models and variants): Models ending in:free(e.g.liquid/lfm-2.5-2.6b:free) and experimental preview models set prompt and completion pricing to0.
The naive sort trap
If client code performs a naive numeric sort (models.sort((a, b) => a.pricing.prompt - b.pricing.prompt)), dynamic router models with -1 will sort to the very top, followed by free models with 0. If your application expects a standard paid LLM with direct provider endpoints, sending requests to -1 routers or rate-limited :free variants will produce unexpected routing behavior.
Safe server-side query
To query the cheapest paid production chat models server-side in one call, combine three filters:sort=pricing-low-to-high(orders from lowest price to highest)min_price=0.000001(excludes-1dynamic routers and$0free variants)endpoints=/api/v1/chat/completions(excludes models that only serve batches, embeddings, or media)
TypeScript client-side filtering example
Model identifiers, aliases, and variants
Model identifiers follow structured naming conventions (see Model Variants for details):1. Canonical slugs vs. display IDs
Every model record contains both anid and a canonical_slug:
id: The routable slug used in API requests (e.g.anthropic/claude-3.5-sonnet).canonical_slug: The permanent canonical reference for the underlying model checkpoint (e.g.anthropic/claude-3-5-sonnet-20241022).
anthropic/claude-3-5-sonnet, OpenRouter routes it to anthropic/claude-3.5-sonnet.
2. Rolling aliases (~ prefix)
Aliases prefixed with ~ (e.g. ~deepseek/deepseek-pro-latest, ~typesafe/jev-latest) point dynamically to the latest approved stable version of a model family. Use rolling aliases when you want automatic updates, or use pinned version slugs when reproducibility is critical. See Latest Resolution for details.
3. Catalog variants vs. routing suffixes
OpenRouter distinguishes between catalog variants and request-time routing suffixes:- Catalog variants appear as separate entries in
GET /api/v1/models. They include::free: Free rate-limited endpoints provided for testing and evaluation.:batch: Discounted asynchronous batch processing endpoints.:thinking(deprecated): Reasoning enabled by default on models that previously shipped separate reasoning endpoints (use thereasoningparameter instead).:extended(deprecated): Larger context window on models that previously offered one.
- Routing suffixes do not appear as separate catalog entries. They are modifier flags appended to model IDs at request time on
POST /api/v1/chat/completions::nitro: Prioritizes the lowest latency providers.:floor: Selects the cheapest available provider for the model.:exacto: Sorts providers by quality signals tuned for tool-calling reliability (mapped toProviderSort.Exacto). See Exacto.:online(deprecated): Attaches web search results (use theopenrouter:web_searchserver tool instead).
Inspecting provider endpoints
A single model (such asmeta-llama/llama-3.3-70b-instruct) is frequently hosted across dozens of backend providers (Together, Groq, Fireworks, DeepInfra, Lepton, etc.). To inspect the live providers, pricing, quantizations, and status for a model:
data envelope:
provider request parameter in Chat Completions.