OP

openrouter-model-catalog

Provides tools to query and filter the OpenRouter model catalog via CLI.

Install

mkdir -p .claude/skills/openrouter-model-catalog && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/9024" && unzip -o skill.zip -d .claude/skills/openrouter-model-catalog && rm skill.zip

Installs to .claude/skills/openrouter-model-catalog

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Query, filter, and select from OpenRouter''s 400+ model catalog. Use
68 charsno explicit “when” trigger
Intermediate

Key capabilities

  • Query the OpenRouter model catalog
  • Filter models by capabilities
  • Compare model pricing
  • Check provider endpoints for models
  • Identify free models
  • Sort models by prompt price

How it works

The skill queries the OpenRouter API to retrieve a catalog of models, then processes the JSON response to filter and display model attributes like pricing and capabilities.

Inputs & outputs

You give it
API endpoint for models, optional filter parameters
You get back
JSON data of models, filtered lists, or specific model details

When to use openrouter-model-catalog

  • Browsing available LLMs
  • Comparing model pricing
  • Filtering models by tool-calling capability
  • Checking model context window limits

About this skill

OpenRouter Model Catalog

Overview

Query the GET /api/v1/models endpoint to browse 400+ models, filter by capabilities, compare pricing, and check provider endpoints. No API key required for the models endpoint.

Prerequisites

  • curl and jq for the command-line catalog queries — GET /api/v1/models itself requires no auth
  • An OpenRouter API key exported as OPENROUTER_API_KEY only for the Special Routers completion example — see the openrouter-install-auth skill for setup
  • Python 3.8+ with requests for filtering, plus the OpenAI SDK for the openrouter/auto example (pip install requests openai)

Instructions

  1. List the catalog per List All Models: curl -s https://openrouter.ai/api/v1/models | jq '.data | length'; add ?supported_parameters=tools to filter to tool-calling models.
  2. Read Model Object Shape to interpret each entry — pricing.prompt/pricing.completion are per token (multiply by 1M for readable rates), plus context_length, top_provider.max_completion_tokens, and architecture.modality.
  3. Filter programmatically per Python: Query and Filter — free models, tool-calling models, cheapest paid models sorted by prompt price, and 128K+ context models.
  4. Compare per-provider pricing and quantization for a single model via GET /api/v1/models/{id}/endpoints per List Providers for a Model.
  5. Pick behavior with a suffix per Model Variants (:free, :nitro, :floor, :extended, :thinking), or delegate selection entirely to openrouter/auto per Special Routers.
  6. Sanity-check choices against the Popular Model Quick Reference, but always verify live pricing via /api/v1/models — prices change frequently.

List All Models

# Full catalog (no auth required)
curl -s https://openrouter.ai/api/v1/models | jq '.data | length'
# → 400+

# Filter to text output models only
curl -s "https://openrouter.ai/api/v1/models?supported_parameters=tools" | jq '.data | length'

Model Object Shape

{
  "id": "anthropic/claude-3.5-sonnet",
  "name": "Claude 3.5 Sonnet",
  "description": "Anthropic's most intelligent model...",
  "context_length": 200000,
  "pricing": {
    "prompt": "0.000003",
    "completion": "0.000015",
    "image": "0.0048",
    "request": "0"
  },
  "top_provider": {
    "context_length": 200000,
    "max_completion_tokens": 8192,
    "is_moderated": false
  },
  "per_request_limits": null,
  "architecture": {
    "modality": "text+image->text",
    "tokenizer": "Claude",
    "instruct_type": null
  }
}

Key fields:

  • pricing.prompt / pricing.completion -- cost per token (not per million; multiply by 1M for readable rates)
  • context_length -- max input tokens
  • top_provider.max_completion_tokens -- max output tokens
  • architecture.modality -- text->text, text+image->text, etc.

Python: Query and Filter

import requests

models = requests.get("https://openrouter.ai/api/v1/models").json()["data"]

# Find all free models
free_models = [m for m in models if m["pricing"]["prompt"] == "0"]
print(f"Free models: {len(free_models)}")

# Models with tool calling support
# (query with supported_parameters)
tool_models = requests.get(
    "https://openrouter.ai/api/v1/models?supported_parameters=tools"
).json()["data"]
print(f"Tool-calling models: {len(tool_models)}")

# Sort by prompt price (cheapest first, excluding free)
paid = [m for m in models if float(m["pricing"]["prompt"]) > 0]
paid.sort(key=lambda m: float(m["pricing"]["prompt"]))
for m in paid[:10]:
    cost_per_m = float(m["pricing"]["prompt"]) * 1_000_000
    print(f"  ${cost_per_m:.2f}/M tokens — {m['id']} ({m['context_length']//1000}K ctx)")

# Filter by context length (128K+)
large_ctx = [m for m in models if m["context_length"] >= 128_000]
print(f"128K+ context models: {len(large_ctx)}")

List Providers for a Model

# See all providers and their pricing for a specific model
curl -s "https://openrouter.ai/api/v1/models/anthropic/claude-3.5-sonnet/endpoints" | jq '.data[] | {
  provider: .provider_name,
  price_prompt: .pricing.prompt,
  price_completion: .pricing.completion,
  context_length: .context_length,
  quantization: .quantization
}'

Model Variants

Append a suffix to any model ID for variant behavior:

SuffixEffectExample
:freeFree tier (where available)google/gemma-2-9b-it:free
:nitroSort providers by throughput (faster)anthropic/claude-3.5-sonnet:nitro
:floorSort providers by price (cheapest)openai/gpt-4o:floor
:extendedExtended context windowanthropic/claude-3.5-sonnet:extended
:thinkingEnable extended reasoninganthropic/claude-3.5-sonnet:thinking

Special Routers

Model IDBehavior
openrouter/autoAuto-selects best model for your prompt (powered by NotDiamond)
openrouter/freeRoutes to free models only
# Let OpenRouter pick the best model
response = client.chat.completions.create(
    model="openrouter/auto",
    messages=[{"role": "user", "content": "Write a SQL query to find duplicate emails"}],
    max_tokens=200,
)
print(f"Auto-selected: {response.model}")  # Shows which model was chosen

Popular Model Quick Reference

Model IDContextCost (prompt/completion per 1M)
google/gemma-2-9b-it:free8KFree
meta-llama/llama-3.1-8b-instruct128K~$0.06 / $0.06
anthropic/claude-3-haiku200K$0.25 / $1.25
openai/gpt-4o-mini128K$0.15 / $0.60
anthropic/claude-3.5-sonnet200K$3.00 / $15.00
openai/gpt-4o128K$2.50 / $10.00
openai/o1200K$15.00 / $60.00

Prices change frequently. Always verify via /api/v1/models.

Output

  • Raw catalog JSON: one object per model with id, context_length, pricing, top_provider, and architecture fields
  • Filtered console listings, e.g. counts of free / tool-calling / 128K+ models and cheapest-paid lines like $0.06/M tokens — meta-llama/llama-3.1-8b-instruct (128K ctx)
  • Per-provider endpoint rows for one model: provider_name, prompt/completion pricing, context_length, quantization
  • For openrouter/auto requests, response.model reveals which model the router actually selected

Examples

Fetch the catalog once, then slice it three ways with the filters from Python: Query and Filter:

models = requests.get("https://openrouter.ai/api/v1/models").json()["data"]
free = [m for m in models if m["pricing"]["prompt"] == "0"]
large = [m for m in models if m["context_length"] >= 128_000]
print(f"Total: {len(models)}, free: {len(free)}, 128K+: {len(large)}")
# Total: 267, free: 12, 128K+: 45   (counts drift as the catalog changes)

The same pass sorted by prompt price surfaces the cheapest paid options — meta-llama/llama-3-8b-instruct: $0.05/1M prompt tokens leads the list in the worked run. More worked examples: references/examples.md.

Error Handling

IssueCauseFix
Model ID not found at request timeModel renamed, removed, or typoRe-query /api/v1/models; use exact ID from catalog
Stale pricingCached catalog data outdatedRefresh catalog hourly; pricing updates dynamically
Empty results with filterNo models match the filter criteriaBroaden the filter; check parameter spelling

Enterprise Considerations

  • Cache the model catalog with 1-hour TTL (model availability changes infrequently)
  • Build a model allowlist for your organization to restrict which models teams can use
  • Monitor /api/v1/models for deprecation notices and new model additions
  • Use supported_parameters query filter to ensure models support features you need (tools, JSON mode, etc.)
  • Compare providers via the endpoints API to find the cheapest or fastest provider for each model

References

Prerequisites

curljqPython 3.8+ with requestsOpenAI SDK

Limitations

  • Model IDs may change
  • Pricing updates dynamically
  • Empty results if no models match filter criteria

How it compares

This skill programmatically queries and filters the OpenRouter model catalog, providing structured data for comparison, unlike manually browsing the OpenRouter website.

Compared to similar skills

openrouter-model-catalog side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
openrouter-model-catalog (this skill)025dReviewIntermediate
korean-public-data-api59moNo flagsIntermediate
apollo-data-handling125dCautionIntermediate
azure-ai-contentunderstanding-py127dReviewIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

More by jeremylongshore

View all by jeremylongshore

analyzing-logs

jeremylongshore

Analyze application logs to detect performance issues, identify error patterns, and improve stability by extracting key insights.

14123

ollama-setup

jeremylongshore

Configure auto-configure Ollama when user needs local LLM deployment, free AI alternatives, or wants to eliminate hosted API costs. Trigger phrases: "install ollama", "local AI", "free LLM", "self-hosted AI", "replace OpenAI", "no API costs". Use when appropriate context detected. Trigger with relevant phrases based on skill purpose.

1167

backtesting-trading-strategies

jeremylongshore

Backtest crypto and traditional trading strategies against historical data. Calculates performance metrics (Sharpe, Sortino, max drawdown), generates equity curves, and optimizes strategy parameters. Use when user wants to test a trading strategy, validate signals, or compare approaches. Trigger with phrases like "backtest strategy", "test trading strategy", "historical performance", "simulate trades", "optimize parameters", or "validate signals".

1071

generating-database-seed-data

jeremylongshore

Process this skill enables AI assistant to generate realistic test data and database seed scripts for development and testing environments. it uses faker libraries to create realistic data, maintains relational integrity, and allows configurable data volumes. u... Use when working with databases or data models. Trigger with phrases like 'database', 'query', or 'schema'.

1033

cursor-codebase-indexing

jeremylongshore

Execute set up and optimize Cursor codebase indexing. Triggers on "cursor index setup", "codebase indexing", "index codebase", "cursor semantic search". Use when working with cursor codebase indexing functionality. Trigger with phrases like "cursor codebase indexing", "cursor indexing", "cursor".

885

testing-mobile-apps

jeremylongshore

Execute mobile app testing on iOS and Android devices/simulators. Use when performing specialized testing. Trigger with phrases like "test mobile app", "run iOS tests", or "validate Android functionality".

810

You might also like

korean-public-data-api

swszz

Extract API request/response schema from Korean Public Data Portal (data.go.kr) documentation pages and generate structured JSON representation

596

apollo-data-handling

jeremylongshore

Apollo.io data management and compliance. Use when handling contact data, implementing GDPR compliance, or managing data exports and retention. Trigger with phrases like "apollo data", "apollo gdpr", "apollo compliance", "apollo data export", "apollo data retention", "apollo pii".

12

azure-ai-contentunderstanding-py

microsoft

Azure AI Content Understanding SDK for Python. Use for multimodal content extraction from documents, images, audio, and video. Triggers: "azure-ai-contentunderstanding", "ContentUnderstandingClient", "multimodal analysis", "document extraction", "video analysis", "audio transcription".

12

azure-ai-document-intelligence-dotnet

microsoft

Azure AI Document Intelligence SDK for .NET. Extract text, tables, and structured data from documents using prebuilt and custom models. Use for invoice processing, receipt extraction, ID document analysis, and custom document models. Triggers: "Document Intelligence", "DocumentIntelligenceClient", "form recognizer", "invoice extraction", "receipt OCR", "document analysis .NET".

03

fireflies-core-workflow-a

jeremylongshore

Execute Fireflies.ai primary workflow: Core Workflow A. Use when implementing primary use case, building main features, or core integration tasks. Trigger with phrases like "fireflies main workflow", "primary task with fireflies".

12

fireflies-cost-tuning

jeremylongshore

Optimize Fireflies.ai costs through tier selection, sampling, and usage monitoring. Use when analyzing Fireflies.ai billing, reducing API costs, or implementing usage monitoring and budget alerts. Trigger with phrases like "fireflies cost", "fireflies billing", "reduce fireflies costs", "fireflies pricing", "fireflies expensive", "fireflies budget".

12

Search skills

Search the agent skills registry