From openrouter
Queries OpenRouter for 300+ AI models' pricing, context lengths, capabilities, throughput, provider latency/uptime. Scripts to list, search, compare, resolve names, find optimal providers.
npx claudepluginhub openrouterteam/skills --plugin openrouterThis skill uses the workspace's default tool permissions.
Discover, search, and compare the 300+ AI models available on OpenRouter. Query live data including pricing, context lengths, per-provider latency and uptime, throughput, supported modalities, and supported parameters.
Queries OpenRouter's 400+ LLM catalog API to list, filter by pricing/context/tools, and compare models/providers. Use for model selection in AI apps.
Tests LLM models via OpenRouter using bash script, measuring latency, cost, token usage, and outputs. Supports model ID formats, :nitro/:online modifiers, rankings, and provider comparisons for optimal selection.
Compares AI and LLM models on benchmarks, capabilities, cost, latency, context window, and task-specific fit to help select optimal models for production use cases and budgets.
Share bugs, ideas, or general feedback.
Discover, search, and compare the 300+ AI models available on OpenRouter. Query live data including pricing, context lengths, per-provider latency and uptime, throughput, supported modalities, and supported parameters.
The OPENROUTER_API_KEY environment variable is optional for most scripts. It is only required for get-endpoints.ts (provider performance data). Get a key at https://openrouter.ai/keys
cd <skill-path>/scripts && npm install
Pick the right script based on what the user is asking:
| User wants to... | Script | Example |
|---|---|---|
| See all available models | list-models.ts | "What models does OpenRouter have?" |
| Find recently added models | list-models.ts --sort newest | "What are the newest models?" |
| Find cheapest models | list-models.ts --sort price | "What's the cheapest model?" |
| Find highest throughput models | list-models.ts --sort throughput | "Which models have the most output capacity?" |
| Find models in a category | list-models.ts --category X | "Best programming models?" |
| Search by name | search-models.ts "query" | "Do they have Claude?" |
| Resolve an informal model name | resolve-model.ts "query" | "Use the nano banana 2.0 model" |
| Find image-capable models | search-models.ts --modality image | "Which models accept images?" |
| Compare specific models | compare-models.ts A B | "Compare Claude vs GPT-4o" |
| Compare by throughput | compare-models.ts A B --sort throughput | "Which has higher throughput, Claude or GPT-4o?" |
| Check provider performance | get-endpoints.ts "model-id" | "Which provider is fastest for Claude?" |
| Find fastest provider | get-endpoints.ts "model-id" --sort throughput | "Fastest provider for Claude Sonnet?" |
| Find lowest-latency provider | get-endpoints.ts "model-id" --sort latency | "Lowest latency provider for GPT-4o?" |
| Check model availability | get-endpoints.ts "model-id" | "Is Claude Sonnet 4 up right now?" |
Resolve an informal or vague model name to an exact OpenRouter model ID using fuzzy matching:
cd <skill-path>/scripts && npx tsx resolve-model.ts "claude sonnet"
cd <skill-path>/scripts && npx tsx resolve-model.ts "gpt 4o mini"
cd <skill-path>/scripts && npx tsx resolve-model.ts "llama 3.1"
Results include a confidence level and score:
| Confidence | Score | Action |
|---|---|---|
high (≥0.85) | Use the model directly — the match is unambiguous | |
medium (≥0.55) | Confirm with the user before proceeding | |
low (≥0.30) | Suggest the matches and ask the user to clarify |
Two-step workflow: First resolve the informal name with resolve-model.ts, then feed the resolved id into other scripts (compare-models.ts, get-endpoints.ts, etc.).
cd <skill-path>/scripts && npx tsx list-models.ts
Server-side category filtering:
cd <skill-path>/scripts && npx tsx list-models.ts --category programming
Categories: programming, roleplay, marketing, marketing/seo, technology, science, translation, legal, finance, health, trivia, academia
cd <skill-path>/scripts && npx tsx list-models.ts --sort newest # Recently added first
cd <skill-path>/scripts && npx tsx list-models.ts --sort price # Cheapest first
cd <skill-path>/scripts && npx tsx list-models.ts --sort context # Largest context first
cd <skill-path>/scripts && npx tsx list-models.ts --sort throughput # Most output tokens first
Models with upcoming expiration_date values trigger a stderr warning.
cd <skill-path>/scripts && npx tsx search-models.ts "claude"
cd <skill-path>/scripts && npx tsx search-models.ts --modality image
cd <skill-path>/scripts && npx tsx search-models.ts "gpt" --modality text
Modalities: text, image, audio, file
Compare two or more models side-by-side with pricing in per-million-tokens format. Uses exact ID matching — openai/gpt-4o matches only that model, not variants like gpt-4o-mini.
cd <skill-path>/scripts && npx tsx compare-models.ts "anthropic/claude-sonnet-4" "openai/gpt-4o"
cd <skill-path>/scripts && npx tsx compare-models.ts "anthropic/claude-sonnet-4" "openai/gpt-4o" "google/gemini-2.5-pro" --sort price
Sort options: price (cheapest first), context (largest first), speed/throughput (most output tokens first)
Get per-provider latency, uptime, and throughput for any model:
cd <skill-path>/scripts && npx tsx get-endpoints.ts "anthropic/claude-sonnet-4"
cd <skill-path>/scripts && npx tsx get-endpoints.ts "anthropic/claude-sonnet-4" --sort throughput
cd <skill-path>/scripts && npx tsx get-endpoints.ts "openai/gpt-4o" --sort latency
Sort options: throughput (fastest tokens/sec first), latency (lowest p50 ms first), uptime (most reliable first), price (cheapest first)
Returns for each provider:
operational or degradedGET /api/v1/models returns { data: Model[] }. For full field reference, see the Models reference.
Query parameters (all optional):
| Parameter | Example | Effect |
|---|---|---|
category | ?category=programming | Server-side category filter |
supported_parameters | ?supported_parameters=tools | Only models supporting this parameter |
Tips for working with the response:
model.supported_parameters (e.g. .includes("tools")), or filter server-side with ?supported_parameters=tools.model.architecture.input_modalities / model.architecture.output_modalities.knowledge_cutoff and expiration_date are date strings or null.links.details points to the per-provider endpoints API for that model. GET /api/v1/models/{author}/{slug}/endpoints returns { data: { id, name, endpoints: Endpoint[] } }.status: 0 = operational, non-zero = degraded.latency_last_30m / throughput_last_30m: percentile objects with p50, p75, p90, p99.The scripts below reformat the raw API data. When calling the API directly (e.g. via fetch), refer to the OpenAPI spec for field names.
A subset of the raw API fields — the scripts run formatModel() which drops canonical_slug, hugging_face_id, default_parameters, knowledge_cutoff, and links. If you need those fields, call the API directly.
{
"id": "anthropic/claude-sonnet-4",
"name": "Anthropic: Claude Sonnet 4",
"context_length": 1000000,
"max_completion_tokens": 64000,
"per_request_limits": null,
"pricing_per_million_tokens": {
"prompt": "$3.00",
"completion": "$15.00",
"cached_input": "$0.30"
},
"modalities": { "input": ["text", "image"], "output": ["text"] },
"supported_parameters": ["max_tokens", "temperature", "..."],
"is_moderated": false
}
{
"model_id": "anthropic/claude-sonnet-4",
"model_name": "Anthropic: Claude Sonnet 4",
"total_providers": 5,
"endpoints": [
{
"provider": "Anthropic",
"tag": "anthropic",
"status": "operational",
"uptime_30m": "100.00%",
"latency_30m_ms": { "p50": 800, "p75": 1200, "p90": 2000, "p99": 5000 },
"throughput_30m_tokens_per_sec": { "p50": 45, "p75": 55, "p90": 65, "p99": 90 },
"context_length": 1000000,
"max_completion_tokens": 64000,
"pricing_per_million_tokens": { "prompt": "$3.00", "completion": "$15.00", "cached_input": "$0.30" },
"supports_implicit_caching": true,
"supported_parameters": ["max_tokens", "temperature", "tools", "..."]
}
]
}
| Field | Meaning |
|---|---|
pricing.prompt / pricing.completion | Cost per token in USD. Multiply by 1,000,000 for per-million-token pricing |
context_length | Max total tokens (input + output) |
top_provider.max_completion_tokens | Max output tokens from the best provider |
top_provider.is_moderated | Whether content moderation is applied |
per_request_limits | Per-request token limits (when non-null) |
supported_parameters | API parameters the model accepts (e.g., tools, structured_outputs, reasoning, web_search_options) |
created | Unix timestamp — use for sorting by recency |
expiration_date | Non-null means the model is being deprecated |
latency_30m_ms.p50 | Median response latency over last 30 min |
throughput_30m_tokens_per_sec.p50 | Median generation speed over last 30 min |
uptime_30m | Provider availability percentage over last 30 min |
resolve-model.ts first, then feed the resolved id into other scriptstools, structured_outputs, reasoning, web_search_optionsexpiration_date as deprecated