Provider Pricing API

与 Hvoy 1.0/1.1 兼容的中转站价格接口参考,适用于 NewAPI、Sub2API 以及自研中转站。

XTokenChecker 会优先抓取站长提交的 Hvoy 兼容价格 API。如果没有填写,我们会尝试访问站点根域名下的 /api/provider/pricing;仍然不可用时,才回退到价格页规则解析。

推荐站长直接实现这个结构化接口。它比抓 HTML 价格页稳定,也更容易把 NewAPI / Sub2API 里的渠道、倍率、分组价格映射成可比较的最终售价。

接口路径

GET /api/provider/pricing
Content-Type: application/json; charset=utf-8

接口应返回人民币最终售价。XTokenChecker 使用稳定的 model_name + group_name 组合匹配模型和渠道。

最小响应示例

{
  "schema_version": "1.1",
  "success": true,
  "message": "",
  "data": {
    "currency": "CNY",
    "price_unit": "per_1m_tokens",
    "site_name": "example",
    "site_domain": "example.com",
    "updated_at": "2026-07-15T00: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-image-2",
        "group_name": "image",
        "price_unit": "per_call",
        "unit_price": 0.2,
        "enabled": true,
        "note": "按次计费"
      }
    ]
  }
}

字段规则

字段规则
schema_version必需。当前推荐 1.1,兼容 1.0。
success必需。接口是否成功生成价格数据。
data.currency必需。固定使用 CNY。
data.price_unit必需。支持 per_1m_tokens 和 per_call。
data.updated_at必需。带时区的 ISO 8601 时间,推荐 UTC。
data.models必需。每一项代表一个模型和分组组合。
model_name必需。稳定模型 ID,例如 gpt-5.4、claude-sonnet-4-6。
group_name必需。稳定渠道或分组 ID,例如 official、cc、vip。发布后不要频繁改名。
input_priceToken 计费时必需。单位为 CNY / 1M input tokens。
output_priceToken 计费时建议填写。单位为 CNY / 1M output tokens。未知可传 null。
cache_input_price可选。缓存读价格。
cache_create_price可选。缓存写价格,Claude 场景通常对应 5-minute cache writes。
cache_create_price_1h可选。Claude 1-hour cache writes;其他模型通常可传 null。
unit_priceprice_unit 为 per_call 时必需。单位为 CNY / 次。
enabled可选,默认 true。已知临时下线的组合请返回 false。
note可选。只做展示和排查,不参与价格计算。

价格必须是 JSON number,不能传字符串数字。缺少某个 model_name + group_name 组合只表示未匹配,不会被自动判断为明确下线。

可选签名

如果你的价格接口不希望完全公开,可以启用 Hvoy 兼容签名。

X-Hvoy-Ts: 1747886400
X-Hvoy-Sign: 9f0f4d7f6a5a648242cc0d2e4c2cfc0d4d79cf50615a5c1304f8cbea57c478c4

签名计算方式:

sign = hex(HMAC-SHA256(auth_secret, X-Hvoy-Ts))

建议服务端只接受当前时间前后 60 秒内的时间戳。在线抓取测试使用固定测试密钥:

hvoy_provider_pricing_test_secret_v1_20260522

NewAPI 站点适配建议

很多中转站基于 NewAPI 或其分支。建议在你自己的后端新增一个公开只读接口,将内部价格配置转换成上面的标准响应。

可优先读取这些信息源:

  • 模型可用性:从 NewAPI 的模型列表、渠道配置或对外 /v1/models 结果获得。
  • 渠道分组:用渠道分组、模型倍率分组、用户组价格或自定义分组生成稳定的 group_name。
  • Token 价格:把倍率、补全倍率、分组倍率换算成 CNY / 1M tokens 后返回 input_price 和 output_price。
  • 图片或按次模型:用 price_unit: "per_call" 和 unit_price 返回每次调用价格。

不要直接让抓取方登录后台页面。后台字段、表格列名和页面结构在不同分支里差异很大,稳定性不如你主动输出 JSON。

Sub2API 站点适配建议

Sub2API 系统通常也会有模型映射、分组或订阅套餐倍率。建议把最终对用户生效的售卖价格导出为 Provider Pricing API。

可按以下顺序生成价格:

  1. 读取当前公开可售模型和分组。
  2. 将模型别名统一成稳定 model_name,例如把展示名映射为 OpenAI / Claude 兼容模型 ID。
  3. 将套餐倍率、模型倍率、渠道倍率折算成最终 CNY 价格。
  4. 对临时不可售的组合保留记录并返回 enabled: false。

如果你的站点只公开 HTML 价格页,XTokenChecker 可以尝试规则解析,但建议同时提供结构化接口,避免页面改版导致价格抓取失败。

自测流程

  1. 在站点部署 GET /api/provider/pricing。
  2. 打开 在线抓取测试。
  3. 输入完整 HTTPS URL,例如 https://example.com/api/provider/pricing。
  4. 如果启用了签名,请先用测试密钥通过验签,再到站长后台填写正式签名密钥。
  5. 返回结果中至少应有一个 models[] 项能和你提交的模型列表匹配。

常见错误

  • input_price 或 output_price 写成字符串,例如 "7.5"。
  • updated_at 没有时区。
  • model_name 使用展示名,导致无法稳定匹配。
  • group_name 经常变化,导致历史价格断裂。
  • Token 价格和按次价格混用,但没有设置 price_unit。
  • 返回的是官方原价,而不是站点实际对用户售卖的最终价。