账户与目录 API
查询密钥可用的模型、剩余额度,以及公开价格目录。
| 端点 | 鉴权 | 返回内容 |
|---|---|---|
GET /v1/models | 密钥(两种头均可) | 这把密钥所含分组提供的模型 |
GET /v1/usage | 密钥(仅 Bearer) | 这把密钥还能花多少,以及它的额度 |
GET /api/v1/models/pricing | 无需鉴权 | 带牌价的公开模型目录 |
三个端点都不计费,也都不要求余额为正。
列出模型
GET /v1/models 接受 Authorization: Bearer sk-… 或 x-api-key: sk-…;GET /v1/usage 只认 Authorization: Bearer sk-…。
curl https://api.hop-base.com/v1/models \
-H "Authorization: Bearer sk-your-key"列表只包含密钥所含分组的模型(包含多个分组时为全部分组的并集),一次返回完整列表(不分页)。OpenAI 兼容分组的密钥拿到 OpenAI 格式的列表:
{
"object": "list",
"data": [
{
"id": "gpt-6-astra",
"object": "model",
"created": 1790222400,
"owned_by": "hopbase",
"capabilities": ["chat", "reasoning"],
"context_window": 1050000,
"context_length": 1050000,
"max_input_tokens": 1050000,
"max_output_tokens": 128000
}
]
}Claude 分组的密钥拿到 Anthropic 格式:
{
"object": "list",
"data": [
{
"id": "claude-sonnet-5-5",
"object": "model",
"type": "model",
"display_name": "Claude Sonnet 5.5",
"created_at": "2026-09-28T00:00:00Z"
}
],
"has_more": false,
"first_id": "claude-sonnet-5-5",
"last_id": "claude-haiku-4-5-20251001"
}| 字段 | 类型 | 含义 |
|---|---|---|
data[].id | string | 请求里要传的模型 ID,也是唯一应该依赖的字段 |
data[].capabilities | string[] | 例如 chat、reasoning、image_generation |
data[].image_only | boolean | 图片模型为 true,其他模型不返回 |
data[].context_window、context_length、max_input_tokens | integer,Token | 同一个值的三种写法,照顾不同客户端;未公布时不返回 |
data[].max_output_tokens | integer,Token | 未公布时不返回 |
data[].created | integer,Unix 秒 | 本次响应的时间,不是发布日期 |
data[].display_name、created_at | string | 仅 Claude 分组;created_at 是模型发布日期(RFC 3339) |
has_more、first_id、last_id 只为兼容 SDK 保留:列表从不分页,不要拿它们翻页。除 id 外,部分模型可能缺少其他字段;遇到不认识的字段按可选处理。
余额与计价币种:USD
自 2026-10-01 起,账户余额、密钥额度、扣费与使用记录一律以美元(USD)计价:模型按官方美元价乘以分组倍率扣费,控制台与 GET /v1/usage 显示的都是美元金额。
- 已有余额:切换时已按固定比例换算为美元,可用量不变;分组价格与密钥都不变。
- 单次扣费:为兼容已接入的程序,响应里的
cost与X-HopBase-Cost仍是同一笔扣费的人民币金额(最多 6 位小数),currency恒为CNY;实际从余额扣除的美元金额读cost_usd与X-HopBase-Cost-USD,与「使用记录」一致。见扣费。 - 充值:付款币种、手续费与到账金额以「充值」页付款前显示的为准,手续费单独列出、不计入到账金额;人民币对公转账或线下充值的到账美元金额以客服确认为准。
余额与额度
curl https://api.hop-base.com/v1/usage \
-H "Authorization: Bearer sk-your-key"下例是一把额度为 $10、已用 $2 的密钥:
{
"is_active": true,
"balance": 8,
"remaining": 8,
"unit": "USD",
"ledger_currency": "USD",
"balance_cny": 54.4,
"balance_usd": 8,
"quota": {
"remaining": 8,
"api_key_remaining": 8,
"total": 10,
"used": 2,
"unlimited": false,
"remaining_cny": 54.4,
"remaining_usd": 8,
"api_key_remaining_cny": 54.4,
"api_key_remaining_usd": 8,
"total_cny": 68,
"total_usd": 10,
"used_cny": 13.6,
"used_usd": 2
}
}| 字段 | 类型 | 含义 |
|---|---|---|
balance | number,美元 | 这把密钥此刻还能花的额度,取值规则见表下 |
remaining | number,美元 | 与 balance 相同 |
is_active | boolean | balance 大于 0 时为 true |
unit | string | 恒为 "USD",与 ledger_currency 一致 |
ledger_currency | string | 不带后缀的金额的币种,为 "USD"(2026-10-01 之前为 "CNY") |
quota.remaining | number,美元 | 与 balance 相同 |
quota.api_key_remaining | number,美元 | 这把密钥的剩余额度;密钥没设额度时等于账户余额 |
quota.total | number,美元 | 密钥额度;0 表示密钥没设额度 |
quota.used | number,美元 | 这把密钥累计已扣费金额 |
quota.unlimited | boolean | 密钥没设额度时为 true |
balance 的取值规则:
- 密钥没设额度:即账户余额。
- 密钥设了额度:即密钥剩余额度。
- 团队成员与部门的密钥还会再按成员、部门本期剩余额度封顶。
不带后缀的金额指 balance、remaining、quota.remaining、quota.api_key_remaining、quota.total、quota.used。
每个金额都另有人民币与美元两个带后缀的字段:
| 字段 | 类型 | 含义 |
|---|---|---|
balance_cny、balance_usd | number | balance 的人民币与美元金额 |
quota.remaining_cny、quota.remaining_usd | number | quota.remaining 的人民币与美元金额 |
quota.api_key_remaining_cny、quota.api_key_remaining_usd | number 或 null | quota.api_key_remaining 的人民币与美元金额;密钥没设额度时为 null |
quota.total_cny、quota.total_usd | number 或 null | quota.total 的人民币与美元金额;密钥没设额度时为 null |
quota.used_cny、quota.used_usd | number | quota.used 的人民币与美元金额 |
balance、remaining 和不带后缀的 quota.* 都是美元金额,与控制台余额和「使用记录」里显示的数字一致。需要人民币时读带后缀的 _cny 字段:对应 _usd 金额的人民币金额(固定换算,不是实时汇率)。金额最多保留 8 位小数。2026-10-01 之前这些字段是人民币数值(当时 ledger_currency 为 "CNY"),按 ledger_currency 或 _cny / _usd 字段对账的脚本无需修改。
设了额度的密钥仍然从账户余额里扣费:账户余额先用完时,即使这里的 balance 显示还有额度,请求也会返回 402。
这个端点不使用标准错误结构,出错时返回如下:
| 情况 | 状态码 | message |
|---|---|---|
没传密钥,或不是 sk- 开头的密钥 | 401 | "missing or invalid api key" |
| 密钥不存在或已停用 | 401 | "invalid api key" |
| 密钥已过期 | 200 | "api key expired" |
| 团队成员已停用 | 200 | "member disabled" |
第一种 401 的完整响应体:
{"is_active": false, "balance": 0, "message": "missing or invalid api key"}这两种 200 响应同样带 ledger_currency 和 balance_cny / balance_usd(均为 0)。
请以 is_active 判断,不要只看 HTTP 状态码。逐笔扣费明细请在控制台「使用记录」查看。
单次请求、单个任务与单条记录的扣费
同步请求与异步任务的每笔扣费都给出两种币种:cost_usd 是实际从余额扣除的美元金额,与控制台「使用记录」里这一条相同;cost 是同一笔扣费的人民币金额,为兼容已接入的程序恒为人民币,因此 currency 恒为 CNY。cost_usd 最多 8 位小数,cost 取 6 位。
同步请求(对话、生图、语音)
计费的同步请求在三个响应头里返回本次实际扣费:
| 响应头 | 含义 |
|---|---|
X-HopBase-Cost | 本次请求扣费的人民币金额(与 X-HopBase-Cost-USD 为同一笔扣费),如 0.0816 |
X-HopBase-Cost-USD | 本次请求实际从余额扣除的美元金额,与使用记录里这一条相同,如 0.012 |
X-HopBase-Currency | X-HopBase-Cost 的币种,恒为 CNY |
非流式的 JSON 响应还会在根对象的 usage 里带同样的 cost、cost_usd 与 currency:
{
"id": "chatcmpl-abc",
"object": "chat.completion",
"model": "gpt-5.6-sol",
"choices": [{ "index": 0, "message": { "role": "assistant", "content": "ok" }, "finish_reason": "stop" }],
"usage": { "prompt_tokens": 9, "completion_tokens": 1, "total_tokens": 10, "cost": 0.001197, "cost_usd": 0.000176, "currency": "CNY" }
}- 响应原本没有
usage时会新增一个,例如语音合成POST /v1/t2a_v2的 JSON 响应。usage里原有的字段(如 xAI 的cost_in_usd_ticks)保持不变。 usage已经带有cost、cost_usd或currency、或者不是对象时,响应体保持原样,请读响应头。- 二进制响应(如语音合成返回的音频)只有响应头。
- 流式(SSE)响应都不带:响应头在生成开始前已经发出,最后的用量事件原样下发。流式请求的扣费请在控制台「使用记录」查看。
- 生图耗时超过约 40 秒时,服务端会先发出 200 响应头再写保活空白,此时响应头里没有扣费,请读响应体的
usage.cost/usage.cost_usd。 - 没有扣费的响应(如模型列表、未计费的错误)都不带。失败的请求仍产生扣费时,错误响应带响应头,错误体保持原样。
- HopBase 自动重试时只对最终完成的那一次计费,返回的就是这一次的金额。多分组密钥按实际服务的分组计价。
- 设置了销售倍率的密钥,返回的是从你余额实际扣除的金额,不含加价。
- 客户端在响应到达前断开时,本次仍按实际用量计费,可在「使用记录」查看。
异步任务查询(图片与视频)
任务结束后,根对象的 usage 带 cost_usd(本任务实际从余额扣除的美元金额)、cost(同一笔扣费的人民币金额)与 currency(cost 的币种,恒为 CNY)。0 表示失败且未扣费;单查任务时只有创建任务的密钥能看到这些字段。
{
"id": "vt-1",
"status": "completed",
"usage": { "cost": 3.4, "cost_usd": 0.5, "currency": "CNY" }
}任务列表(如不带任务 ID 的 GET /v1/video/tasks)里,每个终态任务的 usage 也带同样的 cost、cost_usd 与 currency。列表按账户列出,同一账户其他密钥创建的任务同样带金额。
控制台使用记录
「使用记录」页面读取 GET /api/v1/user/usage 与 GET /api/v1/user/usage/stats(控制台登录鉴权,不接受 sk- 密钥)。
每条记录带 ledger_currency(2026-10-01 起为 USD)、cost_cny、cost_usd,即这条记录扣费的人民币与美元金额;页面按美元显示。
统计结果带 ledger_currency、total_charged_cny、total_charged_usd,by_model、by_key、by_group、by_department、by_member 的每一项带 cost_cny / cost_usd。
统计里原有的 total_cost 是乘分组倍率之前的官方美元原价,不是你的扣费;扣费请看 total_charged_*。
公开模型目录
curl https://api.hop-base.com/api/v1/models/pricing无需密钥。响应允许任意站点跨域读取,最多缓存 5 分钟(Cache-Control: public, max-age=300)。价格是未乘分组倍率的美元牌价;各模型你实际支付的价格见登录后的模型广场。
{
"code": 0,
"message": "ok",
"data": [
{
"platform": "openai",
"models": [
{
"id": "gpt-6-astra",
"name": "GPT-6 Astra",
"context_window": 1050000,
"capabilities": ["chat", "reasoning"],
"vendor": "openai",
"category": "chat",
"input": 10,
"cached_input": 1,
"output": 50,
"long_context": {
"threshold": 272000,
"input_multiplier": 2,
"cached_multiplier": 2,
"output_multiplier": 1.5
},
"price_unit": "token"
}
]
},
{
"platform": "minimax",
"models": [
{
"id": "speech-2.8-hd",
"name": "MiniMax Speech 2.8 HD",
"capabilities": ["tts"],
"vendor": "minimax",
"series": "minimax-speech",
"category": "audio",
"input": 100,
"output": 0,
"price_unit": "character"
}
]
}
]
}| 字段 | 类型 | 含义 |
|---|---|---|
code | integer | 成功为 0 |
data[].platform | string | 模型接入所属的协议族,不是模型厂商 |
models[].id | string | 要传的模型 ID |
models[].name | string | 显示名称 |
models[].vendor | string | 模型厂商,例如 openai、google;可能不返回 |
models[].series | string | 控制台里把多个版本归为一组所用的系列;可能不返回 |
models[].category | string | chat、image、video、audio 或 embedding |
models[].capabilities | string[] | 例如 chat、reasoning、image_generation、image_edit、video_generation、tts |
models[].context_window | integer,Token | 未公布时不返回 |
models[].price_unit | string | 本条目所有价格的计量单位,取值见下表 |
models[].input、cached_input、output | number,美元 / price_unit | 不适用缓存时不返回 cached_input;语音模型只用 input |
models[].long_context | object | 有长上下文档位时返回,规则见表下 |
models[].image | object | 按分辨率档位的每张价格,例如 {"1k": …, "2k": …, "4k": …} |
models[].video_tokens | object | 按档位的视频价格,单位跟随 price_unit |
platform 例如 openai、claude、gemini、kling;模型厂商看 vendor。
price_unit | 价格单位 |
|---|---|
token | 每百万 Token |
second | 每秒视频 |
image | 每张图 |
character | 每百万计费字符 |
输入 Token 超过 threshold 时,整笔请求按 input_multiplier / cached_multiplier / output_multiplier 计费。
video_tokens 按分辨率、有无声音、有无参考素材分档。price_unit 为 token 时是每百万视频 Token,为 second 时是每秒。键名是历史沿用。
同一模型通过多个分组提供时,可能出现在多个 platform 下。今后可能新增字段,不认识的字段请忽略。
响应头
| 响应头 | 何时返回 | 含义 |
|---|---|---|
x-request-id | 每个响应 | 本次请求的 ID,反馈问题时请附上 |
Retry-After | 并发上限触发的 429;已知等待时间的 429 与 503 | 重试前需等待的秒数 |
Retry-After-Ms | 并发上限触发的 429,以及其他已知等待时间的 429 | 同一等待时间,单位毫秒 |
X-HopBase-Cost | 计费的同步请求(非流式) | 本次请求扣费的人民币金额,见扣费 |
X-HopBase-Cost-USD | 同 X-HopBase-Cost | 本次请求实际从余额扣除的美元金额 |
X-HopBase-Currency | 同 X-HopBase-Cost | X-HopBase-Cost 的币种,恒为 CNY |
HopBase 不会在响应头里返回你的并发上限、在途请求数或剩余余额。余额请用 GET /v1/usage 查询,上限见并发、超时与计费。部分模型响应会带有自身的限流头(x-ratelimit-*、anthropic-ratelimit-*),它们描述的不是你账户或密钥的上限,不要据此限流。