---
title: "按厂商列出模型"
description: "列出某个厂商的精选模型。"
canonical: "https://pirouter.ai/zh/docs/api/list-models-by-vendor"
last-updated: "2026-10-13"
lang: "zh"
---

# 按厂商列出模型

列出某个厂商的精选模型。

`GET https://api.pirouter.ai/v1/models/{vendor}`

同一份目录，筛选出模型 ID 以 `{vendor}/` 开头的模型。匹配针对整段厂商名，要求完全一致并区分大小写：`anthro` 匹配不到 `anthropic`，因为前缀匹配会让端点对没有人发布过的名字也给出结果。

厂商下没有可列出的模型时，返回 `404 model_not_found`，不返回空数组：厂商是路径参数，返回 200 等于断言这个厂商存在、只是恰好没有模型。

公开端点：不需要 API key，带了也不会读取。

## 鉴权

这个端点是公开的：不需要 API key，传了也不会读取。

## 路径参数

| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `vendor` | string | 是 | 模型 ID 斜杠左边的部分，精确匹配。 |

## 响应

`200` `application/json`

该厂商的模型（扁平结构，不分页）。

| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `data` | object[] | 是 |  |
| `data[].id` | string | 是 | 模型 ID，格式为 "vendor/model"；即 createChatCompletion 接受的值。 |
| `data[].canonical_slug` | string | 是 | 该模型解析到的锁定版本的模型 ID；模型 ID 本身已是规范写法时，与 `id` 相同。 |
| `data[].hugging_face_id` | string \| null | 是 | 始终为 null。平台没有 Hugging Face 标识；保留这个键是为了让生态里的客户端不必做特殊处理。 |
| `data[].name` | string | 是 | 显示名称。平台记录了训练机构时，以机构名作前缀（"Anthropic: Claude Sonnet 4"）；否则只有显示名称本身。 |
| `data[].description` | string | 是 | 英文的目录描述。按设计只提供一种语言；多语言版本仅供内部使用。 |
| `data[].architecture` | object | 是 | 模型的输入和输出类型，以及分词方式。 |
| `data[].architecture.modality` | string | 是 | 输入和输出模态列表拼接而成，格式为 "in+in->out+out"。 |
| `data[].architecture.input_modalities` | string[] | 是 | 接受的输入模态，按固定顺序排列（text、image、file、audio、video）；text 始终存在。 |
| `data[].architecture.output_modalities` | string[] | 是 | 产生的输出模态。第一项由模型的模式决定（chat 产生 text；embedding 和 rerank 以自身命名），其余由声明的输出能力补充。 |
| `data[].architecture.tokenizer` | string | 是 | 分词器家族，小写（claude、gpt、gemini、llama3 等）。小写是平台的约定；生态里的其他目录对同样的家族使用首字母大写。 |
| `data[].architecture.instruct_type` | string \| null | 是 | 始终为 null。平台不记录提示词模板家族。 |
| `data[].pricing` | object | 是 | 原价，以美元计，用十进制字符串表示以避免浮点误差（正在生效的折扣或渠道价格在 endpoints 视图的 `pricing` 里，不在这里）：token 类按每 token 美元计，按次类按每次调用或每项美元计。键名采用业内通行的计价词汇，由一张表从平台的价格类别映射而来。只会出现这里列出的键。必填的键始终存在，模型不对该类计价时值为 "0"；模型不计价的可选类别不出现，不会写成 "0"。 |
| `data[].pricing.prompt` | string | 是 | 输入文本，按每 token 计，美元。始终存在；模型没有输入文本价格时为 "0"（例如图像或音频模型）。 |
| `data[].pricing.completion` | string | 是 | 输出文本，按每 token 计，美元。始终存在；模型没有输出文本价格时为 "0"（例如 embedding 模型）。 |
| `data[].pricing.request` | string | 否 | 每次请求的固定费用，美元。 |
| `data[].pricing.image` | string | 否 | 输入图像，按每张图像计，美元。 |
| `data[].pricing.image_output` | string | 否 | 输出图像，按每 token 计，美元。 |
| `data[].pricing.audio` | string | 否 | 输入音频，按每 token 计，美元。 |
| `data[].pricing.audio_output` | string | 否 | 输出音频，按每 token 计，美元。 |
| `data[].pricing.input_audio_cache` | string | 否 | 从缓存读取的输入音频，按每 token 计，美元。 |
| `data[].pricing.web_search` | string | 否 | 内置网页搜索，按每次调用计，美元。 |
| `data[].pricing.internal_reasoning` | string | 否 | 推理输出 token，按每 token 计，美元。 |
| `data[].pricing.input_cache_read` | string | 否 | 从缓存读取的输入文本，按每 token 计，美元。 |
| `data[].pricing.input_cache_write` | string | 否 | 写入缓存的输入文本，按每 token 计，美元（厂商默认的缓存 TTL）。 |
| `data[].pricing.input_cache_write_1h` | string | 否 | 按 1 小时 TTL 写入缓存的输入文本，按每 token 计，美元；仅在厂商对这一档单独定价时出现。 |
| `data[].pricing.image_token` | string | 否 | 输入图像，按每 token 计，美元。这是按 token 计价的一档，区别于按整张图像计价的 `image`。 |
| `data[].pricing.overrides` | object[] | 否 | 基础档之上的上下文分档，按 min_prompt_tokens 升序排列（min_prompt_tokens 是提示词上下文长度的下限，以 token 计，含边界值）。在 min_prompt_tokens 不超过请求提示词上下文长度的各档中，请求按 min_prompt_tokens 最大的一档计费；上面的基础价格覆盖第一档以下的所有情况。模型只有单一价格时不出现。每一档只列出它自己声明的类别。各档之间是替换关系，不做合并。所以某一档里缺少某个类别，表示这一档没有重新声明它，不表示这一档把它定价为零。 |
| `data[].pricing.overrides[].min_prompt_tokens` | integer | 是 | 这一档开始生效的提示词上下文长度下限（以 token 计），含边界值。 |
| `data[].pricing.overrides[].prompt` | string | 否 |  |
| `data[].pricing.overrides[].completion` | string | 否 |  |
| `data[].pricing.overrides[].request` | string | 否 |  |
| `data[].pricing.overrides[].image` | string | 否 |  |
| `data[].pricing.overrides[].image_output` | string | 否 |  |
| `data[].pricing.overrides[].audio` | string | 否 |  |
| `data[].pricing.overrides[].audio_output` | string | 否 |  |
| `data[].pricing.overrides[].input_audio_cache` | string | 否 |  |
| `data[].pricing.overrides[].web_search` | string | 否 |  |
| `data[].pricing.overrides[].internal_reasoning` | string | 否 |  |
| `data[].pricing.overrides[].input_cache_read` | string | 否 |  |
| `data[].pricing.overrides[].input_cache_write` | string | 否 |  |
| `data[].pricing.overrides[].input_cache_write_1h` | string | 否 |  |
| `data[].pricing.overrides[].image_token` | string | 否 |  |
| `data[].top_provider` | object | 是 | 模型本身的主要上限，不针对任何一个提供它的渠道。数据取自模型自身的登记信息；按渠道的视图（哪个渠道、什么价格、什么上限）是另一个资源，由 GET /v1/models/{vendor}/{model}/endpoints 提供。 |
| `data[].top_provider.is_moderated` | boolean | 是 | 在模型层面始终为 false。某个渠道是否做内容审核是渠道层面的事实，在 endpoints 视图里给出。 |
| `data[].top_provider.context_length` | integer | 否 | 最大上下文窗口，以 token 计；未声明时不出现。 |
| `data[].top_provider.max_completion_tokens` | integer | 否 | 补全 token 数的上限；未声明时不出现。 |
| `data[].per_request_limits` | object \| null | 是 | 始终为 null。单次请求的限制在路由时决定，不属于目录信息。 |
| `data[].supported_parameters` | string[] | 是 | 该模型接受的请求参数，按平台固定的参数顺序排列。由模型声明的能力推导得出；具体渠道接受的可能更少。 |
| `data[].default_parameters` | object | 是 | 请求未给出时采用的采样默认值；只出现模型声明过的参数。 |
| `data[].supported_voices` | array \| null | 是 | 始终为 null。平台不收录各模型的音色清单。 |
| `data[].knowledge_cutoff` | string \| null | 是 | 训练数据截止日期，日历日期格式（YYYY-MM-DD）；未声明时为 null。它是平台 knowledge_cutoff_date 在接口里的字段名。 |
| `data[].expiration_date` | string \| null | 是 | 厂商的弃用日期（YYYY-MM-DD）；未声明时为 null。这是目录里唯一的弃用信号。过了这个日期，模型还会在目录里保留 30 天。路由从这个日期当天起就拒绝它，所以一个仍在目录里、expiration_date 已过的模型，调用会返回错误。宽限期结束后，它从目录里彻底消失。 |
| `data[].links` | object | 是 | 该模型相关的目录端点，以相对于 API 根路径的路径给出。 |
| `data[].links.details` | string | 是 | 这个模型对应的单模型端点。 |
| `data[].created` | integer | 否 | 厂商发布日期，Unix 时间戳，取该日 UTC 零点。未声明发布日期时不出现。 |
| `data[].context_length` | integer | 否 | 最大上下文窗口，以 token 计。模型未声明时不出现。 |
| `data[].reasoning` | object | 否 | 该模型如何处理扩展思考。不做推理的模型没有这个对象。原因是，一个全为 false 的块会被理解成「能推理，但什么都不支持」，那是另一种含义。 |
| `data[].reasoning.mandatory` | boolean | 是 | 推理无法关闭。 |
| `data[].reasoning.default_enabled` | boolean | 是 | 推理默认开启，除非请求里关闭。 |
| `data[].reasoning.supported_efforts` | string[] | 是 | 接受的 effort 等级，从高到低排列。 |
| `data[].reasoning.supports_max_tokens` | boolean | 是 | 模型接受推理 token 预算，可以替代 effort 等级，也可以与之并用。 |
| `data[].reasoning.default_effort` | string | 否 | 请求未指定时采用的 effort 等级；模型没有默认值时不出现。 |

## 错误

| 状态码 | 错误码 | 说明 |
| --- | --- | --- |
| `404` | `model_not_found` | 该厂商下没有可列出的模型（`model_not_found`）。 |
| `default` | `internal_error` | 平台侧的意外故障（`internal_error`）。 |

错误体

```json
{
  "error": {
    "code": "model_not_found",
    "message": "string"
  }
}
```

## 请求示例

cURL

```bash
curl https://api.pirouter.ai/v1/models/anthropic
```

Python

```python
import requests

response = requests.get("https://api.pirouter.ai/v1/models/anthropic")
print(response.json())
```

TypeScript

```ts
const response = await fetch('https://api.pirouter.ai/v1/models/anthropic')
console.log(await response.json())
```

## 响应示例

`200` `application/json`

```json
{
  "data": [
    {
      "id": "anthropic/claude-sonnet-5.5",
      "canonical_slug": "anthropic/claude-sonnet-5.5",
      "hugging_face_id": null,
      "name": "string",
      "description": "string",
      "architecture": {
        "modality": "text+image+file->text",
        "input_modalities": [
          "string"
        ],
        "output_modalities": [
          "string"
        ],
        "tokenizer": "claude",
        "instruct_type": null
      },
      "pricing": {
        "prompt": "0.000003",
        "completion": "0.000015"
      },
      "top_provider": {
        "is_moderated": false
      },
      "per_request_limits": null,
      "supported_parameters": [
        "string"
      ],
      "default_parameters": {},
      "supported_voices": null,
      "knowledge_cutoff": "2025-03-01",
      "expiration_date": "2026-12-31",
      "links": {
        "details": "/v1/models/anthropic/claude-sonnet-5.5"
      }
    }
  ]
}
```
