Appearance
令牌模型用量查询
按令牌(KEY)维度查询该令牌在指定时间窗口内、按模型聚合的用量,供外部对账系统定时拉取:
- 每个模型的请求数量
- 每个模型的总输入 / 输出 token
- 每个模型的缓存命中 token(读 / 写,v3 新增)
- 每个模型的输入合计 token(含缓存,跨协议归一口径,v3 新增)
- 每个模型的消费额度(quota)与退款额度(金额对账用)
调用方持被查令牌本身调用(key 即接口鉴权凭证)。
接口定义
text
GET /api/log/token/usage
Authorization: Bearer <你的令牌 key>- 与模型调用使用同一 key、同一
Authorization头格式(sk-前缀可带可不带) - 该接口只读,不产生用量、不扣费
请求示例(curl)
查询固定窗口(2026-08-25 00:00:00 ~ 01:00:00,东八区):
bash
curl -s -G "https://stonerollai.com/api/log/token/usage" \
--data-urlencode "start=2026-08-25 00:00:00" \
--data-urlencode "end=2026-08-25 01:00:00" \
-H "Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxx"定时增量拉取(最近 1 小时,Linux):
bash
END=$(date '+%Y-%m-%d %H:%M:%S')
START=$(date -d '-1 hour' '+%Y-%m-%d %H:%M:%S')
curl -s -G "https://stonerollai.com/api/log/token/usage" \
--data-urlencode "start=${START}" \
--data-urlencode "end=${END}" \
-H "Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxx"macOS / BSD 的 date 用法:
date -v-1H '+%Y-%m-%d %H:%M:%S'。 参数值含空格,示例使用--data-urlencode自动编码;手工拼 URL 时空格需写成%20。
请求参数(Query)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
start | string | 是 | 窗口起点,格式 YYYY-MM-DD HH:MM:SS(东八区),包含 |
end | string | 是 | 窗口终点,格式同上,不包含 |
- 两个参数均必填
- 窗口为左闭右开
[start, end):end时刻的数据归属下一窗口,定时增量拉取不重不漏 - 单次查询跨度最长 7 天,超出返回提示
- 查询前服务端会预估命中行数,超过 200,000 行时拒绝执行并提示缩小窗口(响应
message携带实际预估行数)
响应
HTTP 200,标准信封:
json
{
"success": true,
"message": "",
"data": {
"token": {
"token_id": 74,
"token_name": "reconciliation-key-01",
"user_id": 37
},
"start_timestamp": 1787587200,
"end_timestamp": 1787590800,
"models": [
{
"model_name": "kimi-k3",
"request_count": 1579,
"prompt_tokens": 1234567,
"cache_tokens": 234567,
"cache_creation_tokens": 12345,
"input_tokens_total": 1481479,
"completion_tokens": 234567,
"quota": 9876543,
"refund_count": 2,
"refund_quota": 1234
},
{
"model_name": "glm-5.2",
"request_count": 633,
"prompt_tokens": 234567,
"cache_tokens": 34567,
"cache_creation_tokens": 0,
"input_tokens_total": 234567,
"completion_tokens": 34567,
"quota": 4567890,
"refund_count": 0,
"refund_quota": 0
}
],
"summary": {
"request_count": 2212,
"prompt_tokens": 1469134,
"cache_tokens": 269134,
"cache_creation_tokens": 12345,
"input_tokens_total": 1716046,
"completion_tokens": 269134,
"quota": 14444433,
"refund_count": 2,
"refund_quota": 1234
}
}
}字段说明:
| 字段 | 说明 |
|---|---|
data.token | 令牌核对信息(token_id / token_name / user_id),供外部系统落库比对 |
data.start_timestamp / end_timestamp | 实际生效的窗口(unix 秒),与请求的 start / end(东八区)一一对应 |
models[].model_name | 模型名;空字符串 "" 表示无模型名的日志条目(一并纳入以保证总量平衡) |
models[].request_count | 该模型计费成功的请求数 |
models[].prompt_tokens / completion_tokens | 该模型总输入 / 输出 token(prompt 口径见下方「输入 token 口径」) |
models[].cache_tokens | 该模型缓存命中(读) token 合计(v3 新增) |
models[].cache_creation_tokens | 该模型缓存写 token 合计(无缓存写的模型为 0;v3 新增) |
models[].input_tokens_total | 输入合计(含缓存读 + 缓存写,跨协议归一口径),对账输入总量以此为准(v3 新增) |
models[].quota | 该模型消费额度(正数) |
models[].refund_count / refund_quota | 该模型退款条数与退款额度(正数,为冲抵额) |
models 排序 | 按 request_count 降序 |
summary | 全模型合计(校验和用) |
净消耗 = quota − refund_quota(按模型或用 summary 均可)。
输入 token 口径(v3 起提供归一字段)
prompt_tokens 的语义随通道协议而不同(平台按协议原样落库,不改历史数据):
| 通道协议 | prompt_tokens 含义 | 缓存位置 |
|---|---|---|
| OpenAI 兼容 / Gemini 等 | 已含缓存命中(缓存是其子集) | cache_tokens |
| Claude 协议(Anthropic 语义) | 不含缓存(净输入) | 读在 cache_tokens,写在 cache_creation_tokens |
因此不同来源的 prompt_tokens 直接相加没有一致口径。跨协议对账请使用归一字段:
text
input_tokens_total = anthropic 语义行:prompt_tokens + cache_tokens + cache_creation_tokens
其余语义行: prompt_tokens(已含缓存,不重复加)- 同一模型混走两种协议时,
input_tokens_total已按行归一后求和,可直接对账 - 需要净输入(不含缓存)时:净输入 ≈
input_tokens_total − cache_tokens − cache_creation_tokens(仅 anthropic 语义行严格成立;OpenAI 语义行的 prompt 本就含缓存,减出的是净输入下界) - 金额(quota)计费不受此影响:平台计费已按协议归一,v3 前后金额口径不变
错误
| HTTP | success | 场景 |
|---|---|---|
| 200 | false | 参数问题:缺 start / end、格式错误、start ≥ end、跨度超过 7 天、命中行数超过 200,000;message 说明原因 |
| 401 | false | 未提供令牌 / 令牌无效 / 令牌已被禁用 |
| 403 | false | 令牌所属用户被禁用 |
| 429 | false | 触发限流 |
| 500 | false | 数据库错误 |
注意:过期、额度耗尽的令牌仍可查询(对账需要历史可查);只有显式禁用(或所属用户被禁)才拒绝。
频率建议
- 接口启用限流保护,超频返回 429
- 对账定时任务建议:间隔 ≥ 1 秒、按小时窗口增量拉取
- 窗口衔接:本轮
end= 下轮start,正好接上左闭右开约定
额度(quota)换算
quota 为平台统一计费单位,换算美元:
text
USD = quota / quota_per_unitquota_per_unit 公开可查:GET /api/status → data.quota_per_unit(默认 500000)。建议每次任务开始时取一次并随结果落库。
变更约定与记录
- 响应字段只增不改不删;新增字段视为兼容变更
- 聚合口径变更会同步更新本文档并标注版本
- 接口无分页:单令牌使用的模型数量有限,全量返回
- 需要按行的明细数据时,使用日志明细导出(含同口径的 缓存读 / 缓存写 / 输入合计 列)
| 版本 | 日期 | 变更 |
|---|---|---|
| v3 | 2026-09-01 | 行级与 summary 新增 cache_tokens / cache_creation_tokens / input_tokens_total(跨协议输入归一口径,见「输入 token 口径」);既有字段含义不变 |
| v2 | 2026-08-25 | start / end 改为必填日期字符串(YYYY-MM-DD HH:MM:SS,东八区);新增跨度 ≤ 7 天与单次 200,000 行保护 |
| v1 | 2026-08-25 | 首次发布 |