API 密钥
为每个应用单独签发 Half Off Dev 密钥,限定消费额、调用频率和可用模型,随时轮换或吊销,不影响线上服务。
调用 Claude、GPT 和 Gemini,你的代码只需要一个 Half Off Dev 密钥,价格是官方的一半。所有密钥从同一个预付费余额扣费,但每个密钥可以有自己的限制:某个脚本失控,也只会耗掉这个密钥允许的额度,不会拖垮其他业务。密钥数量不限。
新建密钥#
打开密钥页面
进入控制台的 API 密钥,点击 新建密钥。
起名并选择分组
名字最好能看出密钥用在哪里,比如
support-bot-prod、nightly-evals。渠道分组 一般保持 自动 — 最优可用;只有当这个密钥的所有请求都必须走同一个分组时,才选 Claude · Value、GPT · Value 或 Gemini · Value。详见渠道分组。按需设置限制
在 额度与限制 中可以限制消费金额、请求频率、并发数、可用模型和有效期。各项含义见下表。除分组外,其他设置以后都能改。
立即复制密钥
点击 创建 后,页面顶部的横幅会显示完整密钥,仅此一次。马上复制,或者点击 接入客户端…,直接用它配置 Claude Code、Codex CLI 等客户端。点击 完成 之后,列表里只显示开头几位,例如
ho-a1b2c3…。
完整密钥只出现一次
Half Off Dev 只存密钥的哈希值,不存原文,所以没人能再把它显示出来。密钥丢了,只能吊销后重新创建。
密钥设置项#
| 设置 | 默认 | 作用 |
|---|---|---|
| 名称 | — | 最多 60 个字符,显示在密钥列表和日志每条请求旁边。 |
| 渠道分组 | 自动 | 把该密钥的全部请求固定在一个渠道分组。自动 会为每个请求挑选当前最优的可用分组。创建后不能修改。 |
| 消费上限(美元) | 不限 | 该密钥累计最多能花多少钱,按整美元设置。它不会按月清零,是终身上限,不是月度预算。 |
| 过期日期 | 永不 | 这一天结束后(按你浏览器所在时区)密钥失效。 |
| 每分钟请求数 | 不限 | 该密钥每分钟最多发起多少个模型请求。 |
| 最大并发请求数 | 不限 | 该密钥同一时刻最多有多少个请求在进行。流式请求直到最后一个字节都计入。 |
| 仅允许指定模型 | 全部模型 | 该密钥能调用的模型白名单。claude-sonnet-5-5 这类别名按它实际指向的模型判断。 |
密钥列表里能看到每个密钥的分组、限制、累计 已消费 和 最近使用 时间。
触发限制时返回什么#
请求在到达模型之前就会被 Half Off Dev 拒绝:不扣费,不写入日志,错误格式与你调用的接口一致。
| 原因 | 状态码 | Anthropic type | OpenAI type | 消息 |
|---|---|---|---|---|
| 已过有效期 | 401 | authentication_error | authentication_error | This API key has expired |
| 已吊销 | 401 | authentication_error | authentication_error | Invalid or revoked API key |
| 模型不在白名单内 | 403 | permission_error | permission_denied | This API key is not allowed to use 'gpt-6.1-sol'. |
| 消费上限已用完 | 402 | billing_error | insufficient_quota | This API key has reached its spend limit. |
| 每分钟请求数或并发数超限 | 429 | rate_limit_error | rate_limit_exceeded | This API key has reached its rate or concurrency limit. |
调用 Gemini 接口时状态码相同,错误体采用 Gemini 的格式。由密钥限制引起的 429 会带 Retry-After 响应头,告诉你需要等待几秒。
下面是消费上限触发时,两种 SDK 收到的错误体:
{
"type": "error",
"error": {
"type": "billing_error",
"message": "This API key has reached its spend limit."
}
}消费上限在请求开始时检查。已经开始的请求会正常跑完,所以密钥的 已消费 可能略微超过上限。其余错误体以及何时该重试,见错误。
修改密钥#
点击密钥上的 编辑,可以改名称、消费上限、过期日期、频率和并发限制、模型白名单。修改对下一个请求立即生效。把某一项清空,就等于取消这项限制。
唯一不能改的是渠道分组。想换分组,就在目标分组里新建一个密钥,然后轮换过去。
无缝轮换#
- 新建一个分组和限制都相同的密钥。
- 把它部署到应用或密钥管理服务里。
- 观察旧密钥的 最近使用 时间,直到它不再变化。
- 吊销旧密钥。
建议定期轮换;有权限的同事离职时轮换;怀疑泄露时立刻轮换。
吊销密钥#
点击 吊销,再点 确认吊销。从下一个请求开始该密钥就会被拒绝,且无法恢复。它仍以灰色留在列表里,保留消费记录,历史请求也仍在日志中。
接入编程客户端#
每个密钥都有 接入客户端 按钮,提供 Claude Code、Codex CLI、Gemini CLI、Cherry Studio、DeepChat 和 AionUI 的现成配置,支持的应用还能一键导入。各客户端的详细步骤见集成。
控制成本的好习惯#
- 一个应用、一个环境,各用一个密钥。 生产、预发、CI 和本机分开,消费按密钥一目了然,吊销其中一个也不影响别的。
- 无人值守的任务一定要设上限。 批处理、CI 流水线、重试循环都可能失控。消费上限兜住成本,每分钟请求数限制让失控的循环慢下来。
- 只开放用得到的模型。 用小模型做工单分类的密钥,没必要能调用最大的模型。
- 临时密钥设好过期日。 演示、外包、试用的密钥到期自动失效,不用再记着去吊销。
- 密钥只放在服务端。 不要把它打包进网页或移动端代码,从你自己的服务器调用 Half Off Dev。参阅认证。