# 模型价格与分组接口
> 返回全站模型的价格、能力标签、厂商与分组倍率
> **无需鉴权**，不传 Key 也能调用
> [模型广场](https://api.oairoute.com/pricing)渲染的就是这份数据
这一页面向需要**批量处理价格、做比价或成本预估**的开发者。想在界面上直接挑模型，用[模型广场](https://api.oairoute.com/pricing)更快；想知道费用怎么算出来的，见[计费说明](billing.html)。
`GET /api/pricing`
## 不需要认证
这个接口不校验身份，返回**全站模型目录**，包含当前账号用不到的部分。
这一点和 `/v1/models` 不同：那边只返回你所在分组能用的模型，这边返回全部。两者按 `model_name` 与 `id` 对应。
## 响应
返回体是 `data` 数组，每个模型一项。顶层还有 `vendors`、`group_ratio`、`usable_group`、`supported_endpoint`、`pricing_version` 等辅助表，见本节末尾。
### 身份与能力
- `model_name` (string) — 模型 ID，与[模型列表接口](models.html)返回的 `id` 对应。
- `tags` (string) — 能力标签，逗号分隔。常见取值有 `Reasoning`（推理）、`Tools`（工具调用）、`Files`（文件输入）、`Vision`（图像输入）、`Audio`（音频）、`Open Weights`（开放权重）、`Deprecated`（已弃用），以及 `128K` / `400K` / `1M` 这类上下文窗口标记。部分模型没有标签，按空值处理。
- `description` (string) — 英文说明，介绍模型定位与适用场景。
- `icon` (string) — 厂商图标标识，配合顶层 `vendors` 使用。
- `vendor_id` (integer) — 厂商 ID，对应顶层 `vendors` 数组里的 `id`。
- `supported_endpoint_types` (string[]) — 该模型支持的调用方言，与 `/v1/models` 返回的同名字段一致。
### 计费模式
- `quota_type` (integer) — 计费模式。`0` 按倍率计费，看 `model_ratio`；`1` 按次计费，看 `model_price`。站内按倍率的约占八成，图像与视频多为按次。
- `model_ratio` (number) — 输入倍率，仅 `quota_type=0` 时有效。它相对的是该模型未含分组倍率的基准价，本身不含分组系数；分组系数是另一层，见下方的费用算法。
- `model_price` (number) — 单次调用价格，仅 `quota_type=1` 时有效，图像类模型多用这种。
- `completion_ratio` (number) — 输出倍率，相对输入侧。值为 `8` 表示输出按输入价的 8 倍计。
### 缓存与多模态加价
- `cache_ratio` (number) — 缓存命中的输入倍率，相对 `model_ratio`。常见取值 `0.1`，即命中缓存的输入按正常价的十分之一计。站内约 45 个模型有此字段。
- `create_cache_ratio` (number) — 写入缓存的价格倍率。设为缓存时按这个倍率计费，之后命中才享受 `cache_ratio`。站内约 21 个模型有此字段。
- `image_ratio` (number) — 图像输出的价格倍率，仅对支持图像输出的模型出现。
- `audio_ratio` (number) — 音频输出的价格倍率，仅对支持音频输出的模型出现。
- `audio_completion_ratio` (number) — 音频输出的完成倍率，与 `audio_ratio` 配合使用。
### 分组与阶梯计价
- `enable_groups` (string[]) — 该模型开放的分组。账号所在分组不在列表里，就无法调用这个模型。
- `billing_mode` (string) — 为 `tiered_expr` 时表示阶梯计价，此时会附带 `billing_expr` 给出计算公式。站内约四分之一的模型带此字段。
- `billing_expr` (string) — 计费表达式，按 token 类型分段求值。仅在 `billing_mode` 为 `tiered_expr` 时出现。
- `billing_usage_schema` (object) — 计费用量的结构定义，仅在少数按用量分档计费的模型上出现。
顶层还有几张辅助表：
| 字段 | 内容 |
|---|---|
| `vendors` | 厂商表，含 `id`、`name`、`icon` || 与模型里的 `vendor_id` 对应 |
| `group_ratio` | 各分组的倍率系数。你所在分组的系数以控制台显示的为准 |
| `usable_group` | 分组说明，与 `group_ratio` 的键对应 |
| `supported_endpoint` | 各方言对应的调用路径 |
| `pricing_version` | 本次报价的版本号，可用它判断数据是否变化 |
## 怎么用这些字段算钱
一个按倍率计费的模型，一次调用的实际扣费：
```text
输入单价 = 基准价 × model_ratio
输出单价 = 基准价 × model_ratio × completion_ratio
输入费用 = 输入 token 数     × 输入单价
输出费用 = 输出 token 数     × 输出单价
缓存读费 = 缓存命中 token 数 × 基准价 × model_ratio × cache_ratio
缓存建费 = 写入缓存 token 数 × 基准价 × model_ratio × create_cache_ratio
实际扣费 = (四项之和) × 分组系数
```
`model_ratio` 与 `completion_ratio` 都是相对**基准价**的倍数，不含分组系数；分组系数是最后一层，单独乘。基准价与分组系数都可以在模型广场和 `GET /api/pricing` 里查到，不同分组看到的实际价格不同，差别在分组系数，不在基准价。
按次计费的模型直接用 `model_price` 乘分组系数，不看 token 数。
**分组系数取你自己账号的那一个**，控制台能看到。同一个模型，不同分组下的实际价格不同，但要算你自己的账，只需要乘你所在分组的系数即可。
## 错误码
错误响应的格式、状态码与重试建议见[错误码与限流](../support/errors.html)，常见报错的排查步骤见[常见问题](../support/faq.html)。
## 使用示例
### 只取价格最低的几个模型
按 `model_ratio` 升序取前五个，先看便宜的：
```bash
curl -s https://api.oairoute.com/api/pricing \
  | jq -r '.data | sort_by(.model_ratio) | .[0:5][] | "\(.model_name)\t\(.model_ratio)"'
```
### 筛出支持工具调用的模型
`tags` 是逗号分隔的字符串，用 `contains` 判断：
```bash
curl -s https://api.oairoute.com/api/pricing \
  | jq -r '.data[] | select(.tags | contains("Tools")) | .model_name'
```
### 结合可用清单挑模型
先取账号能用的模型，再按价格排序，得到「能用且便宜」的清单：
```bash
curl -s 'https://api.oairoute.com/v1/models' \
  -H "Authorization: Bearer YOUR_OAIRoute_KEY" > /tmp/models.json
curl -s 'https://api.oairoute.com/api/pricing' > /tmp/pricing.json
jq -r --slurpfile usable /tmp/models.json '
  ($usable[0].data | map(.id)) as $ids
  | .data
  | map(select(.model_name as $m | $ids | index($m)))
  | sort_by(.model_ratio)
  | .[0:5][]
  | "\(.model_name)\t\(.model_ratio)"
' /tmp/pricing.json
```
## 示例
真实返回，截取一个模型与顶层辅助表：
```json
{
  "data": [
    {
      "model_name": "gpt-5.2-2025-12-11",
      "description": "Latest flagship model, strong reasoning and long context",
      "icon": "OpenAI",
      "tags": "Reasoning,Tools,Vision,Files,400K",
      "vendor_id": 6,
      "quota_type": 0,
      "model_ratio": 0.875,
      "model_price": 0,
      "completion_ratio": 8,
      "cache_ratio": 0.1,
      "enable_groups": ["<分组名>"],
      "supported_endpoint_types": ["openai"],
      "pricing_version": "5a90f2b86c08bd983a9a2e6d66c255f4eaef9c4bc934386d2b6ae84ef0ff1f1f"
    }
  ],
  "group_ratio": { "<分组名>": 1.0 },
  "usable_group": { "<分组名>": "<分组说明>" },
  "supported_endpoint": { "openai": "/v1/chat/completions" },
  "success": true
}
```
**cURL**
```
curl --request GET \
  --url https://api.oairoute.com/api/pricing
```
**Python**
```
import requests
resp = requests.get("https://api.oairoute.com/api/pricing")
for m in resp.json()["data"][:5]:
    print(m["model_name"], m["model_ratio"])
```
**JavaScript**
```
const res = await fetch("https://api.oairoute.com/api/pricing");
const { data } = await res.json();
console.log(data.map((m) => `${m.model_name} ${m.model_ratio}`).join("\n"));
```
