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.zipInstalls 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. UseKey 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
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
curlandjqfor the command-line catalog queries —GET /api/v1/modelsitself requires no auth- An OpenRouter API key exported as
OPENROUTER_API_KEYonly for the Special Routers completion example — see theopenrouter-install-authskill for setup - Python 3.8+ with
requestsfor filtering, plus the OpenAI SDK for theopenrouter/autoexample (pip install requests openai)
Instructions
- List the catalog per List All Models:
curl -s https://openrouter.ai/api/v1/models | jq '.data | length'; add?supported_parameters=toolsto filter to tool-calling models. - Read Model Object Shape to interpret each entry —
pricing.prompt/pricing.completionare per token (multiply by 1M for readable rates), pluscontext_length,top_provider.max_completion_tokens, andarchitecture.modality. - Filter programmatically per Python: Query and Filter — free models, tool-calling models, cheapest paid models sorted by prompt price, and 128K+ context models.
- Compare per-provider pricing and quantization for a single model via
GET /api/v1/models/{id}/endpointsper List Providers for a Model. - Pick behavior with a suffix per Model Variants (
:free,:nitro,:floor,:extended,:thinking), or delegate selection entirely toopenrouter/autoper Special Routers. - 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 tokenstop_provider.max_completion_tokens-- max output tokensarchitecture.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:
| Suffix | Effect | Example |
|---|---|---|
:free | Free tier (where available) | google/gemma-2-9b-it:free |
:nitro | Sort providers by throughput (faster) | anthropic/claude-3.5-sonnet:nitro |
:floor | Sort providers by price (cheapest) | openai/gpt-4o:floor |
:extended | Extended context window | anthropic/claude-3.5-sonnet:extended |
:thinking | Enable extended reasoning | anthropic/claude-3.5-sonnet:thinking |
Special Routers
| Model ID | Behavior |
|---|---|
openrouter/auto | Auto-selects best model for your prompt (powered by NotDiamond) |
openrouter/free | Routes 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 ID | Context | Cost (prompt/completion per 1M) |
|---|---|---|
google/gemma-2-9b-it:free | 8K | Free |
meta-llama/llama-3.1-8b-instruct | 128K | ~$0.06 / $0.06 |
anthropic/claude-3-haiku | 200K | $0.25 / $1.25 |
openai/gpt-4o-mini | 128K | $0.15 / $0.60 |
anthropic/claude-3.5-sonnet | 200K | $3.00 / $15.00 |
openai/gpt-4o | 128K | $2.50 / $10.00 |
openai/o1 | 200K | $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, andarchitecturefields - 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/autorequests,response.modelreveals 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
| Issue | Cause | Fix |
|---|---|---|
| Model ID not found at request time | Model renamed, removed, or typo | Re-query /api/v1/models; use exact ID from catalog |
| Stale pricing | Cached catalog data outdated | Refresh catalog hourly; pricing updates dynamically |
| Empty results with filter | No models match the filter criteria | Broaden 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/modelsfor deprecation notices and new model additions - Use
supported_parametersquery 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
- Examples | Errors
- Models Docs | Models API | Model Variants
Prerequisites
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.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| openrouter-model-catalog (this skill) | 0 | 25d | Review | Intermediate |
| korean-public-data-api | 5 | 9mo | No flags | Intermediate |
| apollo-data-handling | 1 | 25d | Caution | Intermediate |
| azure-ai-contentunderstanding-py | 1 | 27d | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by jeremylongshore
View all by jeremylongshore →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
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".
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".
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".
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".
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".