Skip to main content
The OpenRouter Models API provides programmatic access to metadata, capabilities, context limits, pricing, and provider endpoints for every model available on OpenRouter. The catalog updates continuously as providers deploy new models, adjust pricing, and add hardware endpoints.

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:
  1. speech: Dedicated Text-to-Speech (TTS) models that run on the POST /api/v1/audio/speech endpoint (e.g. assemblyai/assemblyai-tts-1, heygen/heygen-voice-1). They return raw binary audio files (MP3, WAV, PCM).
  2. transcription: Dedicated Speech-to-Text (STT) models that run on the POST /api/v1/audio/transcriptions endpoint (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.
  3. audio: General conversational multimodal models that process or emit audio chunks via POST /api/v1/chat/completions or POST /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 the pricing object:
  1. -1 (Dynamic Router models): Routers such as openrouter/auto, openrouter/auto-code, openrouter/fusion, and typesafe/jev-router set pricing.prompt: "-1" and pricing.completion: "-1". Because these models dynamically delegate to underlying models at runtime, their final cost depends on the selected downstream provider.
  2. 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 to 0.

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 -1 dynamic routers and $0 free 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 an id 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).
OpenRouter automatically resolves known aliases. If you request 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 the reasoning parameter 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 to ProviderSort.Exacto). See Exacto.
    • :online (deprecated): Attaches web search results (use the openrouter:web_search server tool instead).

Inspecting provider endpoints

A single model (such as meta-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:
The response nests the model record and endpoint records under the top-level data envelope:
Use endpoint metadata when you want to pin requests to specific providers or enforce quantization standards using the provider request parameter in Chat Completions.