Skip to content

模型与价格查询接口 ​

公开匿名的模型清单与公示价聚合接口,遵循 OpenRouter Providers 规范,可被第三方价格聚合平台或客户端程序化抓取。

概述 ​

/v1/models/pricing 是一个公开匿名的聚合接口,输出平台当前可用的所有模型及其对外公示价。响应遵循 OpenRouter Providers 规范,可被任意第三方平台或客户端程序化抓取。

该接口是「对外公示价」入口,不带任何用户身份。返回的价格是默认分组(default)的最终成交价(USD),与匿名抓取场景一致。登录后的真实付费价会叠加用户分组、等级折扣等上下文,请以控制台价格页为准。

适用场景 ​

场景说明
第三方价格聚合价格聚合平台抓取本平台模型清单与公示价
客户端展示第三方应用、Bot、SDK 展示可用模型列表
监控告警监控本平台模型 / 价格的变更

接口定义 ​

项值
URLhttps://api.calgine.com.cn/v1/models/pricing
方法GET
鉴权无(公开匿名)
限流每 IP 严格限流
缓存服务端 60 秒缓存;响应附 Cache-Control: public, max-age=60

请求示例 ​

bash
curl https://api.calgine.com.cn/v1/models/pricing
python
import requests

resp = requests.get("https://api.calgine.com.cn/v1/models/pricing", timeout=10)
data = resp.json()["data"]
for m in data[:3]:
    print(m["id"], m["pricing"])
js
const resp = await fetch("https://api.calgine.com.cn/v1/models/pricing");
const { data } = await resp.json();
console.log(data.slice(0, 3).map((m) => ({ id: m.id, pricing: m.pricing })));
go
package main

import (
	"encoding/json"
	"net/http"
)

type ModelEntry struct {
	ID      string                 `json:"id"`
	Name    string                 `json:"name"`
	Pricing map[string]interface{} `json:"pricing"`
}

func main() {
	resp, _ := http.Get("https://api.calgine.com.cn/v1/models/pricing")
	defer resp.Body.Close()
	var body struct{ Data []ModelEntry }
	_ = json.NewDecoder(resp.Body).Decode(&body)
	_ = body
}

响应结构 ​

顶层结构始终用 data 数组包裹:

json
{
  "data": [
    {
      "id": "gpt-4o",
      "name": "GPT-4o",
      "created": 1715558400,
      "input_modalities": ["text", "image"],
      "output_modalities": ["text"],
      "quantization": "unknown",
      "context_length": 128000,
      "max_output_length": 16384,
      "pricing": {
        "prompt": "0.0000025",
        "completion": "0.00001",
        "request": "0",
        "image": "0",
        "input_cache_read": "0.00000125"
      },
      "supported_sampling_parameters": [
        "temperature", "top_p", "frequency_penalty", "presence_penalty",
        "stop", "seed", "max_tokens", "logit_bias", "response_format",
        "tools", "tool_choice", "parallel_tool_calls", "logprobs", "top_logprobs"
      ],
      "supported_features": ["tools", "json_mode", "structured_outputs", "logprobs"]
    }
  ]
}

顶层字段 ​

字段类型说明
dataArray<Model>模型条目数组;空数组表示当前无可对外公示的模型

Model 对象字段 ​

字段类型必选说明
idstring✅模型唯一标识,调用 /v1/chat/completions 时使用该值
namestring✅显示名称(如 GPT-4o),未配置时回退为 id
createdint64✅模型发布时间(Unix 秒)
input_modalitiesstring[]✅支持的输入模态,至少包含 text
output_modalitiesstring[]✅支持的输出模态,至少包含 text
quantizationstring✅量化方式(fp16 / fp8 / bf16 / int8 / unknown)
context_lengthint✅上下文窗口最大 token 数
max_output_lengthint✅单次响应最大输出 token 数
pricingPricing✅定价对象,详见下方
pricing_tiersPricing[]分层定价数组(最多 1 个元素,仅在显式标注阈值后输出)
supported_sampling_parametersstring[]✅支持的采样参数(如 temperature、top_p 等)
supported_featuresstring[]✅支持的功能枚举(见下方表)
deprecation_datestring计划废弃日期(ISO 8601,YYYY-MM-DD)
hugging_face_idstring开源模型对应 Hugging Face 仓库 ID

Pricing 对象字段 ​

所有价格以美元(USD)字符串表示。token 类字段单位为 USD / token,扁平类字段单位见说明列。

字段类型必选单位说明
promptstring✅USD / input token输入 token 单价
completionstring✅USD / output token输出 token 单价
requeststring✅USD / request每请求固定费用(按次模型使用)
imagestring✅USD / image图像生成单价(按张)
audiostringUSD / audio音频生成单价(按段)
videostringUSD / video视频生成单价(按段)
web_searchstringUSD / query内置 Web 搜索工具调用单价
internal_reasoningstringUSD / reasoning token推理 token 单价(o1 / Claude thinking 系列)
input_cache_readstringUSD / token缓存命中读取单价
input_cache_writestringUSD / token缓存写入单价(取最贵窗口公示)
min_contextinttokens仅 pricing_tiers 元素使用,标识触发该层定价的最小上下文长度
  • 缺省字段在响应中可能返回 "0"(基础四字段 prompt / completion / request / image 始终存在),或直接省略(可选字段)
  • "0" 既可能代表「免费」,也可能代表「该模型不支持此维度」,请结合 supported_features 与 supported_sampling_parameters 综合判断

supported_features 枚举 ​

值含义
tools支持工具调用(Function Calling)
reasoning支持推理过程(reasoning_content / thinking)
json_mode支持 JSON 模式输出
structured_outputs支持结构化输出(Schema 约束)
logprobs支持返回 token 对数概率
web_search支持内置 Web 搜索工具

三种计费模式的映射 ​

平台支持三种计费模式(详见 产品定价),全部能映射到 OpenRouter 规范字段:

内部计费模式输出字段说明
按 Tokenprompt / completion / internal_reasoning / input_cache_read / input_cache_write / web_search文本、Embedding 等模型;token 单价由「USD / 百万 token」换算为「USD / token」
按次image / video / audio / request按单位类型自动路由:图像生成 → image,视频生成 → video,音乐/语音 → audio,其它 → request
按秒request / video / audio按典型用例秒数(如 30 秒)换算为「每请求公示价」;实际计费仍按真实秒数 × 单价,对账不会偏移

价格计算说明 ​

公示价计算公式:

final_usd = base_price × group_ratio × currency_factor
  • base_price:后台配置的官方报价
  • group_ratio:默认分组(default)的分组倍率
  • currency_factor:若 base 配置为 CNY 则按汇率换算为 USD,配置为 USD 则保持不变
  • 不包含:代理商加价、用户等级折扣、用户专属倍率、时间段倍率、运行时动态因子

登录用户的实际付费可能与公示价不同:如果用户属于其它分组、有等级折扣、或在代理商域名下访问,价格会有差异。匿名抓取只反映平台对外公示的基础价。

分层定价 ​

某些模型在不同上下文长度区间有不同单价(如 Gemini Pro 系列在长上下文档位价格上调)。这类模型的「高档价格」通过 pricing_tiers 数组输出:

json
{
  "id": "gemini-2.5-pro",
  "pricing": {
    "prompt": "0.00000125",
    "completion": "0.00001",
    "request": "0",
    "image": "0"
  },
  "pricing_tiers": [
    {
      "min_context": 200000,
      "prompt": "0.0000025",
      "completion": "0.000015",
      "request": "0",
      "image": "0"
    }
  ]
}
  • pricing 是基础层(阈值最低的那档)
  • pricing_tiers[i] 是高档;当请求总输入 tokens ≥ min_context 时按此层计费
  • 当前最多返回 1 个高档

切档维度 ​

阈值匹配按**「总输入 tokens」**进行,包含缓存与多模态:纯文本输入、文本缓存(cache_read / cache_create)、图片/音频/视频输入及其缓存读取,全部计入总输入。

匹配规则 ​

从大到小匹配:取满足 total >= min 的档中阈值最大的那档,全量按命中档单价计费(与官方厂商一致,不是阶梯递进)。不命中任何档时走基础档。

数据更新与缓存 ​

维度说明
服务端缓存进程内缓存 60 秒;模型/价格变更后最多延迟 1 分钟生效
客户端缓存响应附 Cache-Control: public, max-age=60,CDN 与浏览器可安全缓存 1 分钟
建议抓取频率≥ 5 分钟一次;高频抓取会被限流

与其它接口的区别 ​

接口用途鉴权
/v1/models/pricing本接口:对外公示价(OpenRouter 规范)公开
/v1/modelsOpenAI SDK 兼容的模型 ID 列表需 Token
控制台价格页前端价格展示(带用户上下文)登录

常见问题 ​

为什么返回的价格和我实际付费的不一样?

公示价是匿名场景下「默认分组」的最终成交价。如果您属于其它分组、有等级折扣、或在代理商域名下访问,实际付费会有差异。登录后请以控制台价格页展示的价格为准。

为什么某些字段是 "0"?

"0" 既可能表示「免费」,也可能表示「该模型不支持此维度」。请结合 supported_features 与 supported_sampling_parameters 判断模型能力,不要仅凭 pricing 字段推断功能支持情况。

按秒计费的模型(TTS / 视频)如何换算?

OpenRouter 规范不支持 per_second 字段,平台按「典型用例秒数」(默认 30 秒)将 每秒单价 × 秒数 换算为 request / video / audio 字段的公示价。实际计费始终按真实秒数 × 单价,不会因换算而多扣或少扣。

抓取频率有限制吗?

接口有每 IP 严格限流。建议抓取频率不高于每 5 分钟一次,并利用响应头 Cache-Control: max-age=60 做客户端缓存。

可以筛选 vendor / modality 吗?

当前接口不支持过滤参数,始终返回全部正常状态的模型。客户端可在拿到 data 数组后自行按 supported_features / input_modalities 等字段过滤。