OpenRouter AI Model Catalog
Pricing
from $1.00 / 1,000 ai model catalog records
OpenRouter AI Model Catalog
Search the public AI model catalog by provider, name, modality, pricing, and context length. Export clean model metadata for research, routing, and cost comparison.
OpenRouter Model Catalog | Prices, Context & Modalities
Search the public OpenRouter model catalog for model identifiers, readable names, provider prefixes, context windows, supported inputs and outputs, supported parameters, and input/output pricing. This actor returns metadata: it does not send inference prompts, benchmark answers, or guarantee that a listed endpoint is presently available. Use the catalog for inventory, model discovery, procurement comparisons, spreadsheet reporting, and periodic change detection.
Start with a narrow query, inspect a few rows, and only then increase maxItems. A nonempty query, a provider filter, or freeOnly: true supplies the discovery scope. A blank query without any filter is not a supported broad-discovery request. Model counts and metadata can change between runs; no example name, price, or context window is a permanent offer.
Quick start
- Open the Input tab, keep the sample
claudesearch, and choose a small result limit. - Start the actor and inspect the terminal run state as well as the Dataset tab.
- Review model identifiers, price units, context limits, and supported modalities before exporting.
- Download JSON for complete arrays and
modelJson; use CSV or Excel for the flattened comparison columns. - Store the run timestamp alongside your export if you need a reproducible comparison.
{"query":"claude","maxItems":3,"sortBy":"default","freeOnly":false}
A provider-focused discovery input can leave the query blank:
{"query":"","provider":"openai","maxItems":100,"sortBy":"default","freeOnly":false}
To discover zero-input/zero-output-price models, use an explicit free-model filter:
{"query":"","freeOnly":true,"maxItems":20,"sortBy":"cheapest-input"}
These are input examples, not guarantees that every filter currently matches a particular number of models. maxItems is an upper bound rather than a promise. Sorting a selected result set does not prove that a returned model is globally cheapest or best.
Input reference
The exact deployed input schema is reproduced below so that integrations can retain enum values, types, limits, and defaults without guessing. The form/API schema may reject an out-of-range number or a wrong JSON type before a run starts. That platform-level rejection is separate from runtime handling of a valid JSON input that has an unsupported search scope or no matches.
{"title": "OpenRouter Model Catalog Search","type": "object","schemaVersion": 1,"description": "Search public model metadata, compare input/output prices, and filter free models. Each returned model is one billable dataset item.","properties": {"query": {"title": "Search models","type": "string","description": "Optional text search across model ID, name, and description.","editor": "textfield","default": "claude","prefill": "claude","sectionCaption": "Search"},"provider": {"title": "Provider filter","type": "string","description": "Optional provider prefix such as anthropic, openai, google, meta-llama, or qwen.","editor": "textfield","sectionCaption": "Filters"},"freeOnly": {"title": "Free models only","type": "boolean","description": "When enabled, keep models with both input and output prices set to zero.","editor": "checkbox","default": false,"prefill": false,"sectionCaption": "Filters"},"maxItems": {"title": "Maximum results","type": "integer","minimum": 1,"maximum": 1000,"description": "Maximum number of matching models to return from the public catalog.","editor": "number","default": 100,"prefill": 100,"sectionCaption": "Limits"},"sortBy": {"title": "Sort by","type": "string","enum": ["default","cheapest-input","largest-context"],"description": "Keep the upstream order, sort by lowest input cost, or sort by largest context window.","editor": "select","default": "default","prefill": "default","sectionCaption": "Sorting"}},"required": []}
query
A text search across model ID, name, and description. Prefer a distinctive family or identifier fragment. A blank query is only useful when another supported discovery filter supplies the scope. Preserve the query in your exported report rather than treating two differently scoped runs as identical inventories.
provider
A provider-prefix filter such as openai, anthropic, google, meta-llama, or qwen. The catalog provider prefix identifies a model family namespace; it is not a verified serving-location, endpoint-health, or legal vendor-selection assertion. Check the model record and your chosen inference service separately.
freeOnly
When true, retain models whose input and output token prices are both zero in the metadata. This is not a promise of unlimited free inference, free actor execution, or zero price for optional requests, image/audio processing, tools, and other non-token services. Preserve that distinction in customer-facing reports.
maxItems
The maximum number of matching rows requested. Its schema range is 1 through 1000 and its default is 100. Matching availability, plan rules, and configured spending limits can mean fewer rows. Review the active Apify price and spending limit before scheduling larger inventories or repeated exports.
sortBy
Choose default, cheapest-input, or largest-context exactly as written. Default preserves catalog order; cheapest-input focuses on input-token cost rather than total workload cost; largest-context emphasizes the advertised context window rather than output quality. None of these is a model recommendation or a benchmark ranking.
Output reference and export contract
Each useful result is one model metadata row. Important comparison values are flattened into top-level fields so the Apify table and CSV/Excel export do not hide them behind nested JSON. modelJson retains the richer model object as a JSON string; parse it once when you need deeper pricing overrides, defaults, or architecture detail. Do not interpret a missing optional field as zero, false, or an unsupported capability. Preserve null explicitly in your own integrations.
The following field reference combines the deployed schema with a real validation row. Examples are observations from one run, not fixed defaults. Additional upstream metadata may be retained in modelJson; the overview table intentionally shows a smaller set of comparison columns. JSON export is the safest choice when you need the complete record rather than only those displayed columns.
id — Model ID
Type: "string". Provider/model identifier.
Use as the model-level join key within a catalog snapshot. Compare identifiers rather than display names when detecting a rename or a changed description.
Observed value in one validation row: "openai/gpt-6.1-sol-pro". The example is not a guarantee that every model supplies this value.
canonicalSlug — Canonical slug
Type: ["string", "null"]. Canonical catalog slug when supplied.
Keep separately from the short ID. Canonical identifiers may contain a dated variant and should not be silently normalized into a different model.
Observed value in one validation row: "openai/gpt-6.1-sol-pro-20260929". The example is not a guarantee that every model supplies this value.
huggingFaceId — Hugging Face ID
Type: ["string", "null"]. Related model repository when supplied.
A related repository identifier when supplied. A null value is unknown, not evidence that no repository exists.
Observed value in one validation row: null. The example is not a guarantee that every model supplies this value.
name — Model name
Type: "string". Human-readable model name.
A human-readable label for reports. It can change and is not the stable deduplication key.
Observed value in one validation row: "OpenAI: GPT-6.1 Sol Pro". The example is not a guarantee that every model supplies this value.
provider — Provider
Type: ["string", "null"]. Provider prefix derived from model ID.
The prefix derived from the model identifier. Keep the namespace distinct from a separately selected hosting endpoint.
Observed value in one validation row: "openai". The example is not a guarantee that every model supplies this value.
description — Description
Type: ["string", "null"]. Public model description.
Public descriptive metadata, potentially shortened. Treat it as model documentation, not a verified capability benchmark.
Observed value in one validation row: "GPT-6.1 Sol Pro is the same underlying model as [GPT-6.1 Sol](https://openrouter.ai/openai/gpt-6.1-sol), served with reasoning.modeset topro for higher-quality responses on complex tasks. **Cost note:** pro mode spends far more...". The example is not a guarantee that every model supplies this value.
contextLength — Context length
Type: ["integer", "null"]. Maximum context length in tokens.
Advertised context capacity in tokens. Budget your actual prompt and completion against your selected endpoint separately.
Observed value in one validation row: 1050000. The example is not a guarantee that every model supplies this value.
modality — Modality
Type: ["string", "null"]. Input/output modality summary.
A concise input-to-output summary. Read the modality arrays too when building interface controls or filters.
Observed value in one validation row: "text+image+file->text". The example is not a guarantee that every model supplies this value.
inputModalities — Input modalities
Type: "array". Optional catalog metadata; preserve the returned type and null values.
Accepted input categories in the catalog metadata. Preserve the array instead of reducing multimodal support to one string.
Observed value in one validation row: ["file", "image", "text"]. The example is not a guarantee that every model supplies this value.
outputModalities — Output modalities
Type: "array". Optional catalog metadata; preserve the returned type and null values.
Advertised output categories. Do not assume text output implies image or audio generation.
Observed value in one validation row: ["text"]. The example is not a guarantee that every model supplies this value.
tokenizer — Tokenizer
Type: ["string", "null"]. Optional catalog metadata; preserve the returned type and null values.
Catalog tokenizer label when supplied. Use your serving service tokenizer for exact production token accounting.
Observed value in one validation row: "GPT". The example is not a guarantee that every model supplies this value.
inputPricePerToken — Input price/token
Type: ["string", "null"]. Optional catalog metadata; preserve the returned type and null values.
Input token price retained as a string to preserve precision. Convert with a decimal-safe approach for calculations.
Observed value in one validation row: "0.000002". The example is not a guarantee that every model supplies this value.
outputPricePerToken — Output price/token
Type: ["string", "null"]. Optional catalog metadata; preserve the returned type and null values.
Output token price retained as a string. It differs from input cost and matters when estimating long completions.
Observed value in one validation row: "0.00001". The example is not a guarantee that every model supplies this value.
inputPricePerMillionUsd — Input price / 1M tokens
Type: ["number", "null"]. Optional catalog metadata; preserve the returned type and null values.
Flattened input price in USD per one million tokens. Do not confuse the unit with the per-token string.
Observed value in one validation row: 2. The example is not a guarantee that every model supplies this value.
outputPricePerMillionUsd — Output price / 1M tokens
Type: ["number", "null"]. Optional catalog metadata; preserve the returned type and null values.
Flattened output price in USD per one million tokens. Combine with your workload output-token estimate, not only prompt size.
Observed value in one validation row: 10. The example is not a guarantee that every model supplies this value.
imagePricePerToken — Image price/token
Type: ["string", "null"]. Optional catalog metadata; preserve the returned type and null values.
Optional image-related metadata price. Null means the field was not supplied, not that images are free.
Observed value in one validation row: null. The example is not a guarantee that every model supplies this value.
audioPricePerToken — Audio price/token
Type: ["string", "null"]. Optional catalog metadata; preserve the returned type and null values.
Optional audio-related metadata price. Confirm actual audio billing units and conditions with the selected inference service.
Observed value in one validation row: null. The example is not a guarantee that every model supplies this value.
cacheReadPricePerToken — Cache read price/token
Type: ["string", "null"]. Optional catalog metadata; preserve the returned type and null values.
Optional cache-read token price. A reported discount does not guarantee that your requests will hit a cache.
Observed value in one validation row: "0.0000001". The example is not a guarantee that every model supplies this value.
topProviderName — Top provider
Type: ["string", "null"]. Optional catalog metadata; preserve the returned type and null values.
Optional top-provider label. Preserve null and avoid inventing an endpoint name from the model namespace.
Observed value in one validation row: null. The example is not a guarantee that every model supplies this value.
topProviderContextLength — Provider context length
Type: ["integer", "null"]. Optional catalog metadata; preserve the returned type and null values.
Provider-specific advertised context length when present. Retain separately from the general model context value.
Observed value in one validation row: 1050000. The example is not a guarantee that every model supplies this value.
maxCompletionTokens — Max completion tokens
Type: ["integer", "null"]. Optional catalog metadata; preserve the returned type and null values.
Advertised maximum completion tokens when supplied. This is not the maximum prompt length.
Observed value in one validation row: 128000. The example is not a guarantee that every model supplies this value.
isModerated — Moderated
Type: ["boolean", "null"]. Optional catalog metadata; preserve the returned type and null values.
Optional moderation flag in the metadata. Neither true nor false is a complete safety or compliance evaluation.
Observed value in one validation row: true. The example is not a guarantee that every model supplies this value.
supportedParameters — Supported parameters
Type: "array". Optional catalog metadata; preserve the returned type and null values.
Advertised parameter names. Preserve the full array and check your chosen endpoint before relying on every optional parameter.
Observed value in one validation row: ["include_reasoning", "max_completion_tokens", "max_tokens", "reasoning", "reasoning_effort", "response_format", "seed", "structured_outputs", "tool_choice", "tools", "verbosity"]. The example is not a guarantee that every model supplies this value.
created — Created timestamp
Type: ["integer", "null"]. Optional catalog metadata; preserve the returned type and null values.
Catalog creation timestamp when supplied. It is not this actor run time and should not replace your snapshot timestamp.
Observed value in one validation row: 1790702886. The example is not a guarantee that every model supplies this value.
knowledgeCutoff — Knowledge cutoff
Type: ["string", "null"]. Optional catalog metadata; preserve the returned type and null values.
Optional model knowledge-cutoff metadata. Null does not establish a cutoff, and a reported cutoff is not a freshness guarantee.
Observed value in one validation row: null. The example is not a guarantee that every model supplies this value.
expirationDate — Expiration date
Type: ["string", "null"]. Optional catalog metadata; preserve the returned type and null values.
Optional catalog expiration metadata. Check it when maintaining inventories, but do not infer indefinite availability from null.
Observed value in one validation row: null. The example is not a guarantee that every model supplies this value.
isFree — Free input/output
Type: "boolean". Optional catalog metadata; preserve the returned type and null values.
True when both input and output prices are zero under the catalog rule. It does not include every possible fee or access restriction.
Observed value in one validation row: false. The example is not a guarantee that every model supplies this value.
modelUrl — Model URL
Type: "string". Optional catalog metadata; preserve the returned type and null values.
The public model information page associated with the identifier. It is not an inference API URL.
Observed value in one validation row: "https://openrouter.ai/models/openai/gpt-6.1-sol-pro". The example is not a guarantee that every model supplies this value.
modelJson — Full model JSON
Type: "string". Optional catalog metadata; preserve the returned type and null values.
The full model object serialized as a JSON string. Parse once, retain optional fields, and check nested pricing overrides before cost-sensitive decisions.
Observed value in one validation row: "{\"id\":\"openai/gpt-6.1-sol-pro\",\"canonical_slug\":\"openai/gpt-6.1-sol-pro-20260929\",\"hugging_face_id\":null,\"name\":\"OpenAI: GPT-6.1 Sol Pro\",\"created\":1790702886,\"description\":\"GPT-6.1 Sol Pro is the same underlying model a… (abbreviated; see full example below). The example is not a guarantee that every model supplies this value.
Real output example
The following is one row from a validated provider-filtered run that returned 100 unique model IDs. It is an observed snapshot, not a standing availability or price claim.
{"id": "openai/gpt-6.1-sol-pro","name": "OpenAI: GPT-6.1 Sol Pro","isFree": false,"created": 1790702886,"modality": "text+image+file->text","modelUrl": "https://openrouter.ai/models/openai/gpt-6.1-sol-pro","provider": "openai","modelJson": "{\"id\":\"openai/gpt-6.1-sol-pro\",\"canonical_slug\":\"openai/gpt-6.1-sol-pro-20260929\",\"hugging_face_id\":null,\"name\":\"OpenAI: GPT-6.1 Sol Pro\",\"created\":1790702886,\"description\":\"GPT-6.1 Sol Pro is the same underlying model as [GPT-6.1 Sol](https://openrouter.ai/openai/gpt-6.1-sol), served with `reasoning.mode` set to `pro` for higher-quality responses on complex tasks. **Cost note:** pro mode spends far more...\",\"context_length\":1050000,\"architecture\":{\"modality\":\"text+image+file->text\",\"input_modalities\":[\"file\",\"image\",\"text\"],\"output_modalities\":[\"text\"],\"tokenizer\":\"GPT\",\"instruct_type\":null},\"pricing\":{\"prompt\":\"0.000002\",\"completion\":\"0.00001\",\"web_search\":\"0.01\",\"input_cache_read\":\"0.0000001\",\"input_cache_write\":\"0.0000025\",\"overrides\":[{\"min_prompt_tokens\":272000,\"prompt\":\"0.000004\",\"completion\":\"0.000015\",\"input_cache_read\":\"0.0000002\",\"input_cache_write\":\"0.000005\"}]},\"top_provider\":{\"context_length\":1050000,\"max_completion_tokens\":128000,\"is_moderated\":true},\"per_request_limits\":null,\"supported_parameters\":[\"include_reasoning\",\"max_completion_tokens\",\"max_tokens\",\"reasoning\",\"reasoning_effort\",\"response_format\",\"seed\",\"structured_outputs\",\"tool_choice\",\"tools\",\"verbosity\"],\"default_parameters\":{\"temperature\":null,\"top_p\":null,\"top_k\":null,\"frequency_penalty\":null,\"presence_penalty\":null,\"repetition_penalty\":null},\"supported_voices\":null,\"knowledge_cutoff\":null,\"expiration_date\":null,\"links\":{\"details\":\"/api/v1/models/openai/gpt-6.1-sol-pro-20260929/endpoints\"},\"reasoning\":{\"mandatory\":true,\"default_enabled\":true,\"supported_efforts\":[\"max\",\"xhigh\",\"high\",\"medium\",\"low\"],\"default_effort\":\"medium\"}}","tokenizer": "GPT","description": "GPT-6.1 Sol Pro is the same underlying model as [GPT-6.1 Sol](https://openrouter.ai/openai/gpt-6.1-sol), served with `reasoning.mode` set to `pro` for higher-quality responses on complex tasks. **Cost note:** pro mode spends far more...","isModerated": true,"canonicalSlug": "openai/gpt-6.1-sol-pro-20260929","contextLength": 1050000,"huggingFaceId": null,"expirationDate": null,"inputModalities": ["file","image","text"],"knowledgeCutoff": null,"topProviderName": null,"outputModalities": ["text"],"audioPricePerToken": null,"imagePricePerToken": null,"inputPricePerToken": "0.000002","maxCompletionTokens": 128000,"outputPricePerToken": "0.00001","supportedParameters": ["include_reasoning","max_completion_tokens","max_tokens","reasoning","reasoning_effort","response_format","seed","structured_outputs","tool_choice","tools","verbosity"],"cacheReadPricePerToken": "0.0000001","inputPricePerMillionUsd": 2,"outputPricePerMillionUsd": 10,"topProviderContextLength": 1050000}
Scheduling, delivery and integration
Use Apify schedules for periodic inventory snapshots and the Apify API for programmatic runs. Read the final run state before reading the complete dataset. Store the query, filters, capture time, dataset identifier, and model identifier in your own report. A snapshot can tell you that metadata changed; it cannot by itself distinguish a temporary catalog correction, an endpoint outage, or an actual model retirement.
For JSON pipelines, keep the top-level columns and parse modelJson only when deeper metadata is needed. For a spreadsheet, start with ID, name, provider, context length, input/output per-million USD, modalities, free flag, and model page URL. Keep decimal price strings as text until you deliberately choose numeric conversion; spreadsheet automatic formatting can otherwise hide small costs or round them to zero. Preserve null values instead of filling them with zero.
If you compare two snapshots, join by id and inspect changed fields individually. Use readable names for labels, not joins. Keep old snapshots if you need an audit trail, but do not treat the actor as a time-travel API for historical prices. The actor fetches catalog metadata for the current request. Your own snapshot storage creates the history.
This actor does not accept or submit an inference prompt. A catalog row is not evidence that a model passed your evaluation, that tool calls work reliably, that its output is safe for a particular domain, or that all advertised parameters are accepted by every serving endpoint. Run a separate, appropriately scoped evaluation before adopting a model in production.
Pricing and run outcomes
Each returned model is a billable result item under the actor's active Apify pricing. Check the current Pricing tab rather than relying on a permanently quoted dollar amount in documentation. The inference price fields inside a model row describe model usage metadata; they are not the actor's extraction fee. Set an Apify run spending limit when testing and re-check prices before large schedules.
Successful results finish with SUCCEEDED and store one item per result. Empty/not-found or invalid-input runs finish with SUCCEEDED without billable result items. Genuine platform, proxy, upstream, or code failures are marked FAILED rather than hidden as a successful empty result.
This runtime policy does not override form/API input-schema validation: a malformed type or an out-of-range maxItems can be rejected before any run exists. A real upstream failure is not converted into an empty success merely to make an automation dashboard green. Inspect run state and any OUTPUT error information before deciding whether to retry.
A free-plan daily allowance and paid-plan treatment are handled by the shared service policy. A zero inference-token price in a returned row does not bypass actor pricing, platform limits, or configured spending limits. Customer-facing failures contain an actionable summary, not private service diagnostics.
FAQ — English
1. Does this actor run model inference?
No. It searches and exports metadata. It does not submit prompts, generate completions, benchmark quality, or validate an inference endpoint.
2. What does one output item represent?
One matching model record. A useful dataset contains model rows, not status placeholders or error rows masquerading as models.
3. Can I search by provider?
Yes. Use provider prefixes such as openai or anthropic. A prefix identifies the model namespace, not a verified serving location or production endpoint.
4. Can the query be blank?
Use a provider filter or freeOnly:true when intentionally leaving query blank. A blank unfiltered discovery request is not a supported scope.
5. What is the maxItems range?
The input schema permits integer values from 1 through 1000. It is an upper bound, and fewer matching records may be available.
6. Which sorting options exist?
default, cheapest-input, and largest-context. They are exact enum values, and none is a model-quality ranking.
7. Does freeOnly mean the actor is free?
No. It filters zero input/output token-price models in metadata. Actor extraction pricing and any other inference fees remain distinct.
8. Are metadata prices guaranteed quotes?
No. They are catalog observations. Availability, overrides, context-dependent tiers, optional services, and serving terms can differ or change.
9. How do I compare token price units?
Use the per-million-USD fields for a common comparison unit. Preserve per-token strings when precision matters, and include both input and output workload estimates.
10. Can image, audio, or cache costs be missing?
Yes. Optional values may be null. Missing does not mean free, unavailable, or unsupported; confirm billing and capability separately.
11. What is modelJson?
The fuller model object serialized as a JSON string. Parse it once when inspecting nested architecture, parameter defaults, or pricing overrides.
12. Should I deduplicate by name?
No. Join and deduplicate by id within a snapshot. Names are readable labels and may change independently of the identifier.
13. What does contextLength mean?
An advertised context token capacity. It is not output quality, guaranteed memory, or the maxCompletionTokens field.
14. Does supportedParameters guarantee endpoint support?
No. It reports catalog metadata. Validate the specific serving endpoint and your actual request before depending on optional parameters.
15. How should I handle null fields?
Preserve null as unknown or not supplied. Do not replace unknown prices with zero or unknown moderation state with false.
16. Can I export to a spreadsheet?
Yes. The flattened comparison fields are suitable for CSV/Excel. JSON retains arrays and the complete modelJson string more reliably.
17. Can I build a historical price report?
Store your own timestamped exports and compare them by id. The actor retrieves current metadata, not arbitrary historical snapshots.
18. What happens when the input is invalid?
Schema-invalid values may be rejected before starting. Runtime-handled invalid scope produces a customer-facing outcome without billable result rows.
19. Should I retry every empty response?
No. Inspect run state and the input/filter scope first. A handled no-match result differs from a real failed upstream request.
20. Can I use this for procurement or routing decisions?
Use it as a metadata input to your decision, not the entire decision. Confirm prices, evaluate quality, check serving availability, and retain the snapshot timestamp.
Related actors
- Website Contact Extractor — structured public contact details.
- Airbnb Stay Search Scraper — stay-search metadata for travel research.
- Google Hotels Search — hotel price/rating metadata for comparison reports.
These are separate tools with separate inputs and pricing. A related-actor link is not a requirement to run the model catalog.
中文说明
这是什么工具?
本工具搜索并导出 OpenRouter 的公开模型目录元数据,包括模型标识、名称、提供方前缀、上下文窗口、输入输出形式、支持的参数及 token 价格。它用于目录整理、模型发现、采购比较、表格报告和定期变更检测。它不发送推理提示词,不生成回答,不做质量评测,也不保证某个服务端点当前可用。
先用明确的关键词和较小的 maxItems 验证结果,再提高规模。模型数量、价格和能力说明可能随目录更新而变化;示例不是长期价格报价或可用性承诺。请把运行时间、查询和筛选条件一并保存在自己的报告中。
快速开始
- 打开 Input 页面,使用示例 claude 查询,并先请求少量结果。
- 启动运行,同时查看最终状态和 Dataset,不能只看进程是否结束。
- 检查 ID、价格单位、上下文窗口和输入输出形式。
- 表格比较可导出 CSV/Excel;需要完整数组和嵌套对象时优先使用 JSON。
- 做历史比较时自行保存带时间戳的快照,并使用 id 连接记录。
{"query":"claude","maxItems":3,"sortBy":"default","freeOnly":false}
按提供方发现模型时可以把 query 留空,但必须保留明确的筛选范围:
{"query":"","provider":"openai","maxItems":100,"sortBy":"default","freeOnly":false}
发现零输入和零输出 token 价格模型的示例:
{"query":"","freeOnly":true,"maxItems":20,"sortBy":"cheapest-input"}
示例只说明输入形式,不承诺当前一定存在指定数量的匹配结果。maxItems 是上限而不是承诺;排序也不意味着模型在全球最便宜或质量最好。
输入参数
query
模型 ID、名称和描述的文本搜索。建议先使用明确的模型家族或标识片段。空查询需要其他发现筛选条件,不要把范围不同的两次运行当成相同目录快照。
provider
按提供方前缀筛选,例如 openai、anthropic、google、meta-llama、qwen。前缀代表模型命名空间,不证明实际服务端点、地理位置、在线状态或合规资格。
freeOnly
为 true 时保留输入和输出 token 价格均为零的模型。它不承诺无限免费推理,也不代表本 actor 免费,图片、音频、工具或其他服务可能有独立价格。
maxItems
请求返回的最大匹配行数。schema 范围为 1 到 1000,默认 100。匹配数量、套餐规则和支出上限可能导致实际行数较少;批量调度之前先核对当前收费和支出限制。
sortBy
仅使用 default、cheapest-input、largest-context。前者保留目录顺序,后两者分别关注输入成本和上下文窗口;它们不是完整工作负载成本排名,也不是模型质量评测。
表单及 API 使用以下 schema。类型不正确或数值越界时,平台可能在运行开始之前直接拒绝输入,这与运行期间处理没有匹配结果的情况不同。
{"title": "OpenRouter Model Catalog Search","type": "object","schemaVersion": 1,"description": "Search public model metadata, compare input/output prices, and filter free models. Each returned model is one billable dataset item.","properties": {"query": {"title": "Search models","type": "string","description": "Optional text search across model ID, name, and description.","editor": "textfield","default": "claude","prefill": "claude","sectionCaption": "Search"},"provider": {"title": "Provider filter","type": "string","description": "Optional provider prefix such as anthropic, openai, google, meta-llama, or qwen.","editor": "textfield","sectionCaption": "Filters"},"freeOnly": {"title": "Free models only","type": "boolean","description": "When enabled, keep models with both input and output prices set to zero.","editor": "checkbox","default": false,"prefill": false,"sectionCaption": "Filters"},"maxItems": {"title": "Maximum results","type": "integer","minimum": 1,"maximum": 1000,"description": "Maximum number of matching models to return from the public catalog.","editor": "number","default": 100,"prefill": 100,"sectionCaption": "Limits"},"sortBy": {"title": "Sort by","type": "string","enum": ["default","cheapest-input","largest-context"],"description": "Keep the upstream order, sort by lowest input cost, or sort by largest context window.","editor": "select","default": "default","prefill": "default","sectionCaption": "Sorting"}},"required": []}
输出字段、价格单位和完整数据
每条有效结果代表一个模型。常用比较值位于顶层,便于 Apify 表格及 CSV/Excel 使用;modelJson 保存更完整对象的 JSON 字符串,需要时解析一次即可。不要把缺失字段转换为零或 false。null 表示未提供或未知,不能据此断言模型不支持某项能力或该能力免费。
以下字段清单来自部署的 schema。字段值和示例可能随目录变化。概览表只展示部分比较列,完整 JSON 导出仍保留其他顶层字段以及 modelJson。进行成本分析时同时检查输入、输出、缓存、图片、音频和嵌套价格覆盖,而不是仅看一个数字。
id — Model ID
Schema 类型:"string"。模型级连接键;比较快照时按此字段匹配,不要按显示名称去重。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
canonicalSlug — Canonical slug
Schema 类型:["string", "null"]。更完整的目录标识,可能包含日期版本;不要擅自合并或改写。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
huggingFaceId — Hugging Face ID
Schema 类型:["string", "null"]。目录提供的相关模型仓库标识;为空不证明仓库不存在。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
name — Model name
Schema 类型:"string"。便于阅读的显示名称;它不是稳定连接键,可能随目录更新。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
provider — Provider
Schema 类型:["string", "null"]。模型标识中的提供方命名空间;不等同于实际推理端点。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
description — Description
Schema 类型:["string", "null"]。公开模型说明,可能被缩短;不是经过验证的质量评测。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
contextLength — Context length
Schema 类型:["integer", "null"]。标称上下文 token 容量;不是最大输出长度或质量保证。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
modality — Modality
Schema 类型:["string", "null"]。简短的输入到输出形式说明;同时查看输入输出数组。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
inputModalities — Input modalities
Schema 类型:"array"。输入类别数组;不要把多模态能力压缩成单个类别。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
outputModalities — Output modalities
Schema 类型:"array"。输出类别数组;文本输出不自动意味着图像或音频生成。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
tokenizer — Tokenizer
Schema 类型:["string", "null"]。目录中的 tokenizer 标签;生产 token 计数以实际服务为准。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
inputPricePerToken — Input price/token
Schema 类型:["string", "null"]。每个输入 token 的价格字符串;保留精度后再进行数值转换。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
outputPricePerToken — Output price/token
Schema 类型:["string", "null"]。每个输出 token 的价格字符串;与输入费用分别计算。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
inputPricePerMillionUsd — Input price / 1M tokens
Schema 类型:["number", "null"]。每一百万输入 token 的美元价格;注意与每 token 单位区分。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
outputPricePerMillionUsd — Output price / 1M tokens
Schema 类型:["number", "null"]。每一百万输出 token 的美元价格;根据实际输出量估算。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
imagePricePerToken — Image price/token
Schema 类型:["string", "null"]。可选图片价格元数据;为空不代表图片处理免费。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
audioPricePerToken — Audio price/token
Schema 类型:["string", "null"]。可选音频价格元数据;需要另行核对实际计费单位和条件。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
cacheReadPricePerToken — Cache read price/token
Schema 类型:["string", "null"]。可选缓存读取价格;存在折扣不保证请求会命中缓存。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
topProviderName — Top provider
Schema 类型:["string", "null"]。可选目录标签;不要从 namespace 猜测一个不存在的端点名称。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
topProviderContextLength — Provider context length
Schema 类型:["integer", "null"]。提供方层面的上下文值;与模型整体上下文值分开保留。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
maxCompletionTokens — Max completion tokens
Schema 类型:["integer", "null"]。标称最大输出 token 数;不是输入提示词容量。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
isModerated — Moderated
Schema 类型:["boolean", "null"]。可选审核标记;不能用一个布尔值替代安全或合规评估。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
supportedParameters — Supported parameters
Schema 类型:"array"。目录中列出的参数名称数组;实际端点仍需要验证。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
created — Created timestamp
Schema 类型:["integer", "null"]。目录记录的创建时间戳;不能当作本次抓取时间。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
knowledgeCutoff — Knowledge cutoff
Schema 类型:["string", "null"]。可选知识截止时间;为空不代表任何特定截止日期。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
expirationDate — Expiration date
Schema 类型:["string", "null"]。可选到期信息;为空不证明模型将无限期可用。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
isFree — Free input/output
Schema 类型:"boolean"。目录中输入与输出 token 价格均为零;不覆盖全部费用或访问限制。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
modelUrl — Model URL
Schema 类型:"string"。公开模型信息页面;不是推理 API 地址。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
modelJson — Full model JSON
Schema 类型:"string"。更完整对象的 JSON 字符串;检查嵌套默认值、架构和价格覆盖。保留该字段的原始类型及 null;不要为了表格整洁而填入未经验证的默认值。跨快照比较时同时保留查询、筛选和采集时间。
一条真实验证记录
下列记录来自一次按提供方筛选并返回 100 个不同模型 ID 的验证运行。这里只展示一条记录;这是一次观察,不是固定报价、能力承诺或未来可用性保证。
{"id": "openai/gpt-6.1-sol-pro","name": "OpenAI: GPT-6.1 Sol Pro","isFree": false,"created": 1790702886,"modality": "text+image+file->text","modelUrl": "https://openrouter.ai/models/openai/gpt-6.1-sol-pro","provider": "openai","modelJson": "{\"id\":\"openai/gpt-6.1-sol-pro\",\"canonical_slug\":\"openai/gpt-6.1-sol-pro-20260929\",\"hugging_face_id\":null,\"name\":\"OpenAI: GPT-6.1 Sol Pro\",\"created\":1790702886,\"description\":\"GPT-6.1 Sol Pro is the same underlying model as [GPT-6.1 Sol](https://openrouter.ai/openai/gpt-6.1-sol), served with `reasoning.mode` set to `pro` for higher-quality responses on complex tasks. **Cost note:** pro mode spends far more...\",\"context_length\":1050000,\"architecture\":{\"modality\":\"text+image+file->text\",\"input_modalities\":[\"file\",\"image\",\"text\"],\"output_modalities\":[\"text\"],\"tokenizer\":\"GPT\",\"instruct_type\":null},\"pricing\":{\"prompt\":\"0.000002\",\"completion\":\"0.00001\",\"web_search\":\"0.01\",\"input_cache_read\":\"0.0000001\",\"input_cache_write\":\"0.0000025\",\"overrides\":[{\"min_prompt_tokens\":272000,\"prompt\":\"0.000004\",\"completion\":\"0.000015\",\"input_cache_read\":\"0.0000002\",\"input_cache_write\":\"0.000005\"}]},\"top_provider\":{\"context_length\":1050000,\"max_completion_tokens\":128000,\"is_moderated\":true},\"per_request_limits\":null,\"supported_parameters\":[\"include_reasoning\",\"max_completion_tokens\",\"max_tokens\",\"reasoning\",\"reasoning_effort\",\"response_format\",\"seed\",\"structured_outputs\",\"tool_choice\",\"tools\",\"verbosity\"],\"default_parameters\":{\"temperature\":null,\"top_p\":null,\"top_k\":null,\"frequency_penalty\":null,\"presence_penalty\":null,\"repetition_penalty\":null},\"supported_voices\":null,\"knowledge_cutoff\":null,\"expiration_date\":null,\"links\":{\"details\":\"/api/v1/models/openai/gpt-6.1-sol-pro-20260929/endpoints\"},\"reasoning\":{\"mandatory\":true,\"default_enabled\":true,\"supported_efforts\":[\"max\",\"xhigh\",\"high\",\"medium\",\"low\"],\"default_effort\":\"medium\"}}","tokenizer": "GPT","description": "GPT-6.1 Sol Pro is the same underlying model as [GPT-6.1 Sol](https://openrouter.ai/openai/gpt-6.1-sol), served with `reasoning.mode` set to `pro` for higher-quality responses on complex tasks. **Cost note:** pro mode spends far more...","isModerated": true,"canonicalSlug": "openai/gpt-6.1-sol-pro-20260929","contextLength": 1050000,"huggingFaceId": null,"expirationDate": null,"inputModalities": ["file","image","text"],"knowledgeCutoff": null,"topProviderName": null,"outputModalities": ["text"],"audioPricePerToken": null,"imagePricePerToken": null,"inputPricePerToken": "0.000002","maxCompletionTokens": 128000,"outputPricePerToken": "0.00001","supportedParameters": ["include_reasoning","max_completion_tokens","max_tokens","reasoning","reasoning_effort","response_format","seed","structured_outputs","tool_choice","tools","verbosity"],"cacheReadPricePerToken": "0.0000001","inputPricePerMillionUsd": 2,"outputPricePerMillionUsd": 10,"topProviderContextLength": 1050000}
调度、导出和结果处理
可以通过 Apify 调度定期建立快照,也可以用 API 启动运行。先确认最终运行状态,再读取完整 Dataset。自己的报告应保存 query、provider、freeOnly、sortBy、运行时间及模型 ID。两次快照发生变化,可能代表目录修正、描述更新、价格变化或模型下架;仅靠元数据不能确定某个推理端点的真实健康状态。
JSON 导出最适合保存数组和完整对象。CSV/Excel 适合比较平铺字段,但自动数字格式可能把非常小的价格四舍五入为零。先保留每 token 的字符串,明确选择计算精度后再转换。不要把 null 填为零,或把未提供的审核状态填为 false。
历史分析由你保存的快照形成,本工具不会按任意过去日期查询历史价格。按 id 连接两次结果,并分别检查名称、价格、上下文和参数的变化。显示名称用于阅读,不适合作为稳定连接键。
收费和运行状态
每个有效模型结果按当前 Apify 价格计费,请查看 Pricing 页面和支出限制。本条记录中的推理 token 价格不是 actor 的抓取费用;freeOnly 也不代表本工具免费或推理无限免费。
Successful results finish with SUCCEEDED and store one item per result. Empty/not-found or invalid-input runs finish with SUCCEEDED without billable result items. Genuine platform, proxy, upstream, or code failures are marked FAILED rather than hidden as a successful empty result.
上述英文规则描述运行期间的处理:有效结果写入 Dataset,处理过的无结果或输入问题不会写入收费模型行;真正的平台、上游或代码故障保持 FAILED。表单/API schema 的拒绝可能发生在运行创建之前,不能把两种情况混为一谈。错误信息只提供面向用户的摘要,不包含私有服务诊断。
中文 FAQ
1. 是否调用模型推理?
不调用。本工具搜索模型元数据,不发送提示词、不生成回答、不进行质量测试。
2. 每条结果是什么?
一个匹配的模型记录。状态、错误或空占位对象不应被当作模型结果。
3. 能否按提供方筛选?
可以使用 openai、anthropic 等前缀。它们代表目录命名空间,不证明实际服务地区或端点在线。
4. query 可以为空吗?
可以,但应提供 provider 或启用 freeOnly。空查询且无筛选的发现请求不受支持。
5. maxItems 的范围?
schema 允许 1 到 1000 的整数,默认 100。这是返回上限,不保证始终有足够匹配。
6. 支持哪些排序?
仅支持 default、cheapest-input、largest-context。排序不代表质量排名或完整工作负载成本排名。
7. freeOnly 是否代表 actor 免费?
不是。它检查模型输入输出 token 价格,actor 抓取费用和其他推理费用仍然独立。
8. 元数据价格是否为保证报价?
不是。目录观察可能变化,实际服务可能有覆盖、分层、访问限制或可选功能收费。
9. 怎样比较价格单位?
使用每百万 token 的美元字段进行统一比较;需要精度时保留每 token 字符串,并考虑输入和输出量。
10. 图片、音频、缓存价格能为空吗?
能。缺失不等于免费,也不能证明功能不支持,应另行确认能力和收费。
11. modelJson 是什么?
更完整对象序列化后的 JSON 字符串;需要嵌套价格、默认参数或架构时解析一次即可。
12. 是否按模型名称去重?
不要。使用 id 作为快照内连接和去重键,名称只是可变的显示标签。
13. contextLength 代表什么?
标称上下文 token 容量,不是质量、永久记忆或最大输出长度。
14. supportedParameters 是否保证每个端点支持?
不保证。它是目录描述,实际生产请求仍需在所选端点验证。
15. 如何处理 null?
保留为未知或未提供,不能改成零价格、false 审核状态或能力不存在。
16. 可以导出表格吗?
可以。平铺字段方便 CSV/Excel 比较,JSON 更完整地保留数组和 modelJson。
17. 能否生成历史价格报告?
自行保存带时间戳的导出并按 id 比较;工具本身检索当前元数据,而非任意过去日期。
18. 错误输入如何处理?
schema 错误可能在开始前被拒绝;运行期间处理的范围问题不会产生收费模型行。
19. 空响应都要重试吗?
不要。先看运行状态和筛选条件,处理过的无匹配结果与真实上游失败不同。
20. 能用于采购或自动路由吗?
可作为决策输入,但不要作为唯一依据。还需核对费用、质量、端点可用性,并保留快照时间。
相关工具
- Website Contact Extractor:整理公开联系资料。
- Airbnb Stay Search Scraper:住宿搜索元数据。
- Google Hotels Search:酒店价格和评分元数据。
这些工具分别使用自己的输入和收费规则;运行模型目录不需要先运行任何相关工具。