halfoff.dev文档
获取密钥
模型 API

模型与价格

所有模型的每类 token 都按官方标价五折计费:输入、输出、缓存读取和缓存写入。了解每次调用的扣费算法,并查询模型列表与价格。

计价规则一句话就能说清:所有模型、每一个 token,都按官方标价的一半收费。未缓存输入、输出(含思考和推理)、缓存读取、缓存写入,一律五折。

价格以美元计,单位是每百万 token。每次调用按模型自己在响应里报告的 token 数计费,调用结束几秒内从预付余额中扣除。

逐类 token 五折#

以 claude-sonnet-5.5 为例,每百万 token:

token 类型官方标价你支付
未缓存输入$2.00$1.00
输出$10.00$5.00
缓存读取$0.10$0.05
缓存写入$2.50$1.25

同样的 ×0.50 系数适用于所有 Claude、GPT 和 Gemini 模型,不论哪个渠道分组、哪种 API 格式。当前模型见本页底部的实时价格表。

计费公式#

一次调用的用量分为四类 token,各有单价。它们在各 API 中的字段如下:

token 类型Anthropic usageOpenAI usageGemini usage
未缓存输入input_tokensprompt_tokens 减去 cached_tokenspromptTokenCount 减去 cachedContentTokenCount
缓存读取cache_read_input_tokensprompt_tokens_details.cached_tokenscachedContentTokenCount
缓存写入cache_creation_input_tokens不报告不报告
输出output_tokens(含思考)completion_tokens(含推理)candidatesTokenCount + thoughtsTokenCount

合起来是:

Text
charge = ( uncached_input × input_price
         + cache_read     × cache_read_price
         + cache_write    × cache_write_price
         + output         × output_price ) ÷ 1,000,000 × multiplier

公式里的单价是模型的官方标价,倍率(multiplier)取自实际响应的渠道分组,该分组会写在响应头 x-halfoff-group 中。三个分组的倍率都是 ×0.50,五折就是这么来的。每笔扣费向上取整到 $0.000001。

GPT 和 Gemini 模型不报告缓存写入,所以对它们而言公式里只有三项。

算一笔账#

在 claude-sonnet-5.5 上进行一段很长的编程对话,其中一轮的大部分历史都命中了缓存:

token 类型token 数你支付(每百万)费用
未缓存输入3,000$1.00$0.003000
缓存读取50,000$0.05$0.002500
缓存写入1,500$1.25$0.001875
输出1,200$5.00$0.006000
合计$0.013375

如果这 54,500 个输入 token 一个都没命中缓存,光输入部分就要 $0.054500,而不是 $0.007375。缓存和五折可以叠加,提高命中率的方法见提示缓存。

查询模型和价格#

GET /v1/models 返回你当前能调用的所有模型,包括上下文长度、你的价格(官方标价的一半),以及为其提供服务的分组。它不需要密钥,OpenAI 和 Anthropic 的 SDK 都可以用 client.models.list() 读取。

curl https://halfoff.dev/v1/models

节选的响应:

Response
{
  "object": "list",
  "data": [
    {
      "id": "gemini-3.1-pro",
      "object": "model",
      "type": "model",
      "display_name": "Gemini 3.1 Pro",
      "created": 1700000000,
      "created_at": "2025-01-01T00:00:00Z",
      "owned_by": "Google",
      "context_length": 1048576,
      "pricing": {
        "input": 1,
        "output": 6,
        "cache_read": 0.1,
        "cache_write": 0.1875,
        "unit": "USD per 1M tokens"
      },
      "groups": ["gemini-value"]
    },
    {
      "id": "claude-sonnet-5.5",
      "object": "model",
      "type": "model",
      "display_name": "Claude Sonnet 5.5",
      "created": 1700000000,
      "created_at": "2025-01-01T00:00:00Z",
      "owned_by": "Anthropic",
      "context_length": 1000000,
      "pricing": {
        "input": 1,
        "output": 5,
        "cache_read": 0.05,
        "cache_write": 1.25,
        "unit": "USD per 1M tokens"
      },
      "groups": ["claude-value"]
    }
  ],
  "has_more": false,
  "first_id": "claude-fable-5.1",
  "last_id": "gpt-5.6-luna"
}
字段含义
id请求时使用的 ID。其他写法也能解析,见模型 ID。
owned_by厂商:Anthropic、OpenAI 或 Google。
context_length最大上下文窗口,单位 token。
pricing.input未缓存输入 token 的单价。
pricing.output输出 token 的单价,含思考和推理 token。
pricing.cache_read从提示缓存读取的输入 token 的单价。
pricing.cache_write写入缓存的输入 token 的单价。null 表示缓存写入按普通输入计费。
pricing.unit固定为 USD per 1M tokens。
groups为该模型提供服务的渠道分组。
created、created_at固定占位值,用于兼容 SDK。

pricing 中的数字已经是你的实际单价:官方标价 × ×0.50。GET /v1beta/models 以 Gemini 的格式返回同样的模型,不含价格。

不收费的情况#

  • 在到达模型之前就被拒绝的请求:密钥无效、模型不在允许范围、余额不足、触发限流、JSON 格式错误。
  • 在所有渠道上都失败的请求,以及失败后改由其他渠道重试的那几次尝试。只有最终给出响应的那次尝试计费。
  • POST /v1/messages/count_tokens 和 Gemini 的 :countTokens。
  • 查询模型列表。

取消或中断的流#

提前关闭流时,只按截至那一刻已生成的内容计费,同样是五折单价。输入按流中已报告的数量计;若未报告,按你的请求约每四个字符一个 token 估算。输出取「已报告的数量」与「已发送给你的文本约每四个字符一个 token」两者中的较大值。

模型长时间无响应、被网关切断的流,计费方式相同:按你实际收到的内容计费。见流式输出。

在哪里查看扣费#

日志列出每次调用的 token 数和费用。模型广场显示每个模型在各分组下已乘倍率的价格,以及实时可用状态。余额与充值见账单,用量报表见用量。

实时价格表#

下表实时读取 GET /v1/models,显示的是你在每百万 token 上的实际单价,即官方标价的一半。

模型上下文输入输出缓存读取缓存写入

实时数据来自 GET /v1/models · 每百万 token 美元价格