hvoy.ai 第三方价格接口规范
文档目的
本文档定义一个统一的第三方价格接口,供 API 中转站对外实现,供 hvoy.ai 抓取价格数据。
更新时间: 2026-04-19 version: 1.0
接口定义
推荐路径:
GET /api/provider/pricing
返回 Content-Type:
application/json; charset=utf-8
协议原则
- 接口返回的是最终价格,不是内部计费参数。
- 价格单位统一为
CNY / 1M tokens。 - 同一个模型在不同 group 下可以返回多条记录。
- 抓取方使用
model_name + group_name作为匹配键。 - 不支持的价格项可以返回
null,不要返回字符串。 cache_input_price表示缓存读价;cache_create_price和cache_create_price_1h表示缓存写价。
Claude 兼容性说明
参考 Claude 官方定价文档:
按下面映射:
| hvoy 字段 | Claude 对应语义 | GPT 语义 |
|---|---|---|
input_price |
Base input tokens | Input tokens |
output_price |
Output tokens | Output tokens |
cache_input_price |
Cache hits and refreshes | Cached input |
cache_create_price |
5-minute cache writes | \ |
cache_create_price_1h |
1-hour cache writes | \ |
cache_input_price等于 Claude 的cache hits and refreshes。cache_create_price作为通用“缓存写入价”字段,在 Claude 场景下固定映射为5-minute cache writes。cache_create_price_1h用来补充 Claude 的1-hour cache writes。
对非 Claude 或只有单档缓存写价的站点:
- 如果只有一个 cache write price,就填
cache_create_price cache_create_price_1h填null- 如果根本不支持缓存,3 个缓存字段都填
null
标准返回结构
{
"schema_version": "1.0",
"success": true,
"message": "",
"data": {
"currency": "CNY",
"price_unit": "per_1m_tokens",
"site_name": "hvoy",
"site_domain": "hvoy.ai",
"updated_at": "2026-04-22T12:00:00Z",
"models": [
{
"model_name": "claude-sonnet-4-6",
"group_name": "cc",
"input_price": 7.5,
"output_price": 37.5,
"cache_input_price": 0.75,
"cache_create_price": 9.375,
"cache_create_price_1h": 15,
"enabled": true,
"note": ""
}
]
}
}
字段说明
顶层字段
| 字段 | 类型 | 必需 | 说明 | 示例 |
|---|---|---|---|---|
schema_version |
string | 是 | 协议版本号。当前固定为 1.0。 |
"1.0" |
success |
boolean | 是 | 接口是否成功。 | true |
message |
string | 否 | 错误信息或补充说明。成功时建议为空字符串。 | "" |
data |
object | 当 success=true 时必需 |
价格主体。 | {...} |
data 字段
| 字段 | 类型 | 必需 | 说明 | 示例 |
|---|---|---|---|---|
currency |
string | 是 | 币种。当前规范固定为 CNY。 |
"CNY" |
price_unit |
string | 是 | 价格单位。当前规范固定为 per_1m_tokens。 |
"per_1m_tokens" |
site_name |
string | 否 | 站点名称。用于后台排查和展示。 | "hvoy" |
site_domain |
string | 否 | 站点域名。用于来源追踪。 | "hvoy.ai" |
updated_at |
string | 是 | 数据更新时间,ISO 8601 格式,用于判断价格新鲜度。 | "2026-04-22T12:00:00Z" |
models |
array | 是 | 价格列表。每一项代表一个 model + group 组合。 |
[{...}] |
data.models[] 字段
| 字段 | 类型 | 必需 | 说明 | 示例 |
|---|---|---|---|---|
model_name |
string | 是 | 模型稳定标识。它是机器匹配用 ID,不是展示名。需要与抓取方配置的 model_id 匹配。 |
"claude-sonnet-4-6" |
group_name |
string | 是 | 分组稳定标识。它是机器匹配用 ID,不是展示名。需要与抓取方配置的 upstream_channel_name 匹配。 |
"cc" |
input_price |
number | 是 | 输入价格,单位为 CNY / 1M tokens。 |
7.5 |
output_price |
number | null | 否 | 输出价格,单位为 CNY / 1M tokens。 |
37.5 |
cache_input_price |
number | null | 否 | 缓存读价格,单位为 CNY / 1M tokens。在 Claude 场景下应填 cache hits and refreshes。 |
0.75 |
cache_create_price |
number | null | 否 | 缓存写入价格,单位为 CNY / 1M tokens。如果只有单档写价,填这里;Claude 场景下应填 5-minute cache writes。 |
9.375 |
cache_create_price_1h |
number | null | 否 | 1 小时缓存写入价格,单位为 CNY / 1M tokens。仅在像 Claude 这样有单独 1h write 定价时填写。 |
15 |
enabled |
boolean | 否 | 该 model + group 当前是否可售。缺失时默认视为 true。 |
true |
note |
string | 否 | 附加说明,不参与价格计算。 | "活动价" |
字段含义与示例
schema_version
表示当前返回遵循的协议版本。
要求:
- 必须返回
- 当前固定为
"1.0" - 本次新增字段不改变版本号
示例:
"1.0"
success
表示接口本次是否成功返回价格数据。
示例:
truefalse
message
用于返回错误原因或补充说明。
示例:
"""service temporarily unavailable"
data.currency
表示价格币种。当前协议建议固定为人民币。
示例:
"CNY"
data.price_unit
表示价格单位。当前协议建议固定为每 100 万 tokens 的价格。
示例:
"per_1m_tokens"
data.site_name
站点名称,主要用于展示和排查。
示例:
"hvoy"
data.site_domain
站点域名,主要用于标识数据来源。
示例:
"www.hvoy.ai"
data.updated_at
本批价格数据的更新时间,使用 ISO 8601 且必须带时区,例如 "2026-04-19T12:00:00Z"。
要求:
- 必须返回
- 表示当前这批价格数据的生成时间或最后更新时间
- 抓取方可据此判断价格是否过旧
示例:
"2026-04-22T12:00:00Z"
data.models[].model_name
模型稳定标识,是抓取匹配的核心字段之一。
要求:
- 必须是稳定 ID,不是展示标题
- 不应返回中文展示名、营销名、带空格修饰的标题
- 一旦对外发布,不应频繁改名
示例:
"claude-sonnet-4-6""gpt-5.4"
data.models[].group_name
分组稳定标识,是抓取匹配的核心字段之一。
要求:
- 必须是稳定 ID,不是展示标题
- 建议使用站内真正的渠道 key
- 一旦对外发布,不应频繁改名. 改名后, 原来的group会下架, 需要重新抓取,预计要6个小时后进入排行榜.
示例:
"cc""codex""default"
data.models[].input_price
输入价格,必须是最终价格,不应再要求抓取方换算。
示例:
7.51.25
data.models[].output_price
输出价格。如果不区分输入输出价格,可以传与 input_price 相同的值;如果不提供,可传 null。
示例:
37.57.5null
data.models[].cache_input_price
缓存读价格,不是缓存写价格。
兼容约束:
- 如果站点支持 cache read / cache hit 计价,这里填读价
- Claude 场景下,这里应填
cache hits and refreshes - 如果不支持缓存读,传
null
示例:
0.75null
data.models[].cache_create_price
缓存写入价格。
兼容约束:
- 如果站点只有一个 cache write price,就填这里
- Claude 场景下,这里应填
5-minute cache writes - 如果没有写缓存价格,传
null
示例:
9.375null
data.models[].cache_create_price_1h
1 小时缓存写入价格。
兼容约束:
- 仅当服务商存在单独的 1h cache write 定价时填写
- Claude 场景下,这里应填
1-hour cache writes - 大多数非 Claude 服务商可直接传
null
示例:
15null
data.models[].enabled
表示该 model + group 当前是否可售。
语义约束:
true表示该组合当前可售false表示该组合当前明确不可售或临时下线- 如果字段缺失,抓取方默认按
true处理 - 如果某个
model + group组合根本没有出现在返回列表中,表示本接口未提供该组合价格,抓取方应视为未匹配,不应自动推断为下线
建议:
- 如果一个组合已知存在但当前下线,优先保留该记录并返回
enabled: false - 不要通过直接删除该条记录来表达临时下线
示例:
truefalse
data.models[].note
补充说明字段,不参与抓取逻辑。
示例:
"活动价""暂停售卖"
完整返回示例
{
"schema_version": "1.0",
"success": true,
"message": "",
"data": {
"currency": "CNY",
"price_unit": "per_1m_tokens",
"site_name": "hvoy",
"site_domain": "hvoy.ai",
"updated_at": "2026-04-22T12:00:00Z",
"models": [
{
"model_name": "claude-sonnet-4-6",
"group_name": "cc",
"input_price": 7.5,
"output_price": 37.5,
"cache_input_price": 0.75,
"cache_create_price": 9.375,
"cache_create_price_1h": 15,
"enabled": true,
"note": ""
},
{
"model_name": "gpt-5.4",
"group_name": "codex",
"input_price": 1.25,
"output_price": 7.5,
"cache_input_price": 0.125,
"cache_create_price": 0.5,
"cache_create_price_1h": null,
"enabled": true,
"note": ""
}
]
}
}
失败返回示例
{
"schema_version": "1.0",
"success": false,
"message": "service temporarily unavailable"
}
说明:
- 当
success=false时,data可以省略。 - 如果站点希望继续返回
data作为调试信息,也可以保留,但抓取方不应依赖该行为。
抓取匹配规则
hvoy.ai 抓取时按以下方式匹配:
- 读取
data.models列表 - 使用
model_name + group_name匹配本地监控配置 - 读取该条记录的:
input_priceoutput_pricecache_input_pricecache_create_pricecache_create_price_1henabled
因此第三方实现时应保证:
model_name是稳定 ID,不是展示名group_name是稳定 ID,不是展示名- 不同
model + group组合不要重复。如果重复,抓取方只会取其中一条
未匹配语义:
- 如果接口中没有某个
model + group,抓取方应记为未匹配 - 未匹配不等于明确下线
数值约束
建议遵循以下约束:
- 所有价格字段应为 JSON number
- 不要返回字符串数字,例如
"7.5" - 价格不得为负数
- 缺失值使用
null,不要使用空字符串 - 建议保留 2 到 6 位小数
最小可用实现
如果第三方只想先实现一个最小版本,最少可返回:
{
"schema_version": "1.0",
"success": true,
"data": {
"currency": "CNY",
"price_unit": "per_1m_tokens",
"updated_at": "2026-04-22T12:00:00Z",
"models": [
{
"model_name": "claude-sonnet-4-6",
"group_name": "cc",
"input_price": 7.5,
"output_price": 7.5
}
]
}
}
建议后续补充:
cache_input_pricecache_create_pricecache_create_price_1henablednote