运维与计费/API Key 用量统计

查询用于本次鉴权的 API Key 按 model 汇总的请求数、token 用量和费用。

API Key 用量统计

通过 API Key 用量统计接口,查询用于本次鉴权的 API Key 在指定 UTC+8 日期范围内按 model 汇总的请求数、token 用量和费用。接口只返回当前 API Key 自身的数据;不接受调用方指定其他 API Key、用户、工作区或游标。

本接口返回按 model 聚合的统计结果。如需逐条调用记录,应使用 API Key 用量查询 接口。

接口说明

项目值
方法GET
路径/v1/api-key/usage-stats
API 地址https://unigateway.ai/v1/api-key/usage-stats
鉴权Authorization: Bearer <YOUR_API_KEY>
响应格式application/json

注意:/v1/api-key/usage-stats 是 API Key 管理专用接口,必须使用 https://unigateway.ai,不能使用常规的 https://api.unigateway.ai API 地址。

响应包含 Cache-Control: no-store,不应缓存响应内容。

准备工作与鉴权

请前往 UniGateway API Keys 创建或获取 API Key。

将 API Key 保存为服务端环境变量。不要将 API Key 写入浏览器前端代码、日志、公开仓库或导出文件:

export UNIGATEWAY_API_KEY="<YOUR_API_KEY>"

Windows PowerShell:

$env:UNIGATEWAY_API_KEY = "<YOUR_API_KEY>"

请求使用普通 UniGateway API Key。Bearer token 所代表的 API Key 同时决定查询范围,接口不会接受或覆盖为其他 API Key、用户、工作区或游标。

查询用量统计

GET /v1/api-key/usage-stats

日期范围

统计按 UTC+8 自然日计算,不支持时区参数。未传日期参数时,接口查询当前 UTC+8 日期。

传入方式规则
date=YYYY-MM-DD查询该 UTC+8 自然日。
date=YYYY-MM-DDTHH:mm:ssZ查询该 UTC 时刻所在的 UTC+8 自然日。
start_date 与 end_date必须同时使用 YYYY-MM-DD 提供;范围包含结束日,并自动扩展至 UTC+8 日首和日末。最长 366 天。

date 接受 YYYY-MM-DD 和 YYYY-MM-DDTHH:mm:ssZ 两种格式。秒级格式只接受大写 Z,不接受时区偏移和小数秒。start_date 与 end_date 使用 YYYY-MM-DD;秒级格式只在起止时刻恰好对齐 UTC+8 日首和日末时接受,否则返回 USAGE_STATS_RANGE_MUST_ALIGN_UTC8_DAY。不能将 date 与 start_date 或 end_date 同时使用。可查询最近 366 个 UTC+8 自然日,不能查询未来日期。

例如,start_date=2026-09-01 与 end_date=2026-09-04 实际统计 2026-08-31T16:00:00Z 至 2026-09-04T15:59:59Z。传入 date=2026-09-04T23:59:59Z 时,该时刻位于 2026-09-05 UTC+8 日,接口统计 2026-09-04T16:00:00Z 至 2026-09-05T15:59:59Z。

查询参数

参数类型必填默认值说明
datestring否当前 UTC+8 日期查询一个 UTC+8 自然日。不能与 start_date、end_date 同用。
start_datestring条件必填-使用 YYYY-MM-DD,必须与 end_date 同时提供。
end_datestring条件必填-使用 YYYY-MM-DD,必须与 start_date 同时提供,范围包含结束日。
sort_bystring否tokensmodel 排序方式:tokens 或 cost。
limitinteger否50返回的 model 数,范围为 1 至 100。
offsetinteger否0分页偏移,范围为 0 至 100000。
modelTypesarray<string>否全部按 model 类型筛选。
modelNamesarray<string>否全部按 model 名称精确筛选。

modelTypes 也接受 model_types、modelType、model_type 及其带 [] 的形式;modelNames 同样接受 model_names、modelName、model_name 及其带 [] 的形式。

model 类型为 claude、gemini、gpt、qwen、deepseek 或 other,大小写不敏感。每个筛选参数最多可传入 100 个值,每个值最多 256 个字符。省略筛选参数或传入空数组,均表示不按该维度筛选。

筛选参数支持重复参数、逗号分隔或 JSON 字符串数组:

modelTypes=gpt,claude
modelTypes=gpt&modelTypes=claude
modelTypes=["gpt","claude"]

不支持 token_id、user_id、organizationId、cursor 等其他参数,传入时返回参数错误。

cURL 请求示例

以下请求查询 2026 年 9 月 1 日至 4 日的统计,按 token 用量排序,返回前 50 个 model:

curl -G 'https://unigateway.ai/v1/api-key/usage-stats' \
  -H "Authorization: Bearer $UNIGATEWAY_API_KEY" \
  --data-urlencode 'start_date=2026-09-01' \
  --data-urlencode 'end_date=2026-09-04' \
  --data-urlencode 'sort_by=tokens' \
  --data-urlencode 'limit=50' \
  --data-urlencode 'offset=0'

以下请求仅统计 gpt 与 claude 类型的 model,并按费用排序:

curl -G 'https://unigateway.ai/v1/api-key/usage-stats' \
  -H "Authorization: Bearer $UNIGATEWAY_API_KEY" \
  --data-urlencode 'date=2026-09-04' \
  --data-urlencode 'modelTypes=gpt,claude' \
  --data-urlencode 'sort_by=cost'

成功响应

{
  "date_range": {
    "start_date": "2026-08-31T16:00:00Z",
    "end_date": "2026-09-04T15:59:59Z",
    "time_zone": "UTC+8"
  },
  "sort_by": "tokens",
  "currency": "USD",
  "api_key": {
    "name": "Production",
    "key_prefix": "sk-prod",
    "status": "ACTIVE",
    "request_count": "42",
    "total_tokens": "125000",
    "text_input_tokens": "90000",
    "text_output_tokens": "35000",
    "cache_tokens": "0",
    "cache_creation_tokens_5m": null,
    "cache_creation_tokens_1h": null,
    "total_cost": "3.750000000000"
  },
  "models": [
    {
      "rank": 1,
      "model_id": "gpt-5",
      "model_type": "gpt",
      "model_name": "gpt-5",
      "request_count": "42",
      "total_tokens": "125000",
      "text_input_tokens": "90000",
      "text_output_tokens": "35000",
      "cache_tokens": "0",
      "cache_creation_tokens_5m": null,
      "cache_creation_tokens_1h": null,
      "total_cost": "3.750000000000"
    }
  ],
  "total": 1,
  "limit": 50,
  "offset": 0,
  "has_more": false
}

响应字段

字段类型说明
date_range.start_date / date_range.end_datestring实际统计范围,以 UTC 时间戳返回。
date_range.time_zonestring统计时区,固定为 UTC+8。
sort_bystring当前排序依据:tokens 或 cost。
currencystring聚合金额币种,当前为 USD。
api_key.namestring / null当前鉴权 API Key 的名称。
api_key.key_prefixstring / null当前鉴权 API Key 的非敏感前缀。
api_key.statusstring当前鉴权 API Key 的状态。
api_key.request_count / api_key.total_tokensstring按当前 model 筛选条件汇总的请求数和总 token 数。
api_key.text_input_tokens / api_key.text_output_tokensstring按当前 model 筛选条件汇总的文本输入和文本输出 token 数。
api_key.cache_tokensstring按当前 model 筛选条件汇总的缓存 token 数。
api_key.cache_creation_tokens_5m / api_key.cache_creation_tokens_1hstring / null按当前 model 筛选条件汇总的 5 分钟和 1 小时缓存创建 token 数;不适用或数据不可用时为 null。
api_key.total_coststring按当前 model 筛选条件汇总的费用。
modelsarray<object>当前页的 model 分组。
models[].rankinteger筛选后的全局排名,不受 offset 影响。
models[].model_idstring / nullmodel ID;数据不可用时为 null,不保证在不同分组中唯一。
models[].model_type / models[].model_namestringmodel 类型和名称。
models[].request_count / models[].total_tokensstring该 model 分组的请求数和总 token 数。
models[].text_input_tokens / models[].text_output_tokensstring该 model 分组的文本输入和文本输出 token 数。
models[].cache_tokensstring该 model 分组的缓存 token 数。
models[].cache_creation_tokens_5m / models[].cache_creation_tokens_1hstring / null该 model 分组的 5 分钟和 1 小时缓存创建 token 数;不适用或数据不可用时为 null。
models[].total_coststring该 model 分组的费用。
totalinteger筛选后 model 分组的总数。
limit / offsetinteger当前页大小与分页偏移。
has_moreboolean是否还有下一页。

models 按 sort_by 选定指标降序排列;选定指标相同时,以另一项指标降序排列。api_key 总计会应用 model 筛选,但不受分页影响。request_count、所有 token 字段和 total_cost 均以字符串返回;金额单位为 USD。total_tokens、输入、输出和缓存 token 字段均应直接使用服务端返回值,不要在客户端相加或推导。处理金额时应使用高精度十进制类型,避免二进制浮点精度误差。

错误处理与频率限制

错误响应示例:

{
  "error": {
    "code": "INVALID_USAGE_STATS_QUERY",
    "message": "limit must be between 1 and 100",
    "param": null,
    "type": "BadRequest"
  }
}
HTTP 状态码说明处理方式
400查询参数无效。检查日期格式、日期范围、筛选值与分页范围,移除不支持的参数。
401API Key 缺失、无效、已归档,或不满足接口鉴权条件。在服务端加载当前有效的普通 API Key 后重试。
403API Key、工作区或子账号已被禁用。在 UniGateway 控制台检查状态和访问控制,修正后重新验证。
429超出限流。降低并发,等待后重试。
500服务内部错误。使用有限次数的指数退避重试;持续失败时保留错误时间和请求参数以便排查。

400 响应的 code 可用于区分原因:

error.code常见原因
INVALID_USAGE_STATS_QUERY日期格式或参数组合无效、筛选值不支持、分页值越界、传入了不支持的参数。
USAGE_STATS_RANGE_MUST_ALIGN_UTC8_DAYstart_date 或 end_date 使用秒级时间但未对齐 UTC+8 日首或日末。

每个 API Key 每分钟最多可请求 120 次。轮询或批量查询应控制并发;收到 429 时避免立即重复请求。

常见问题

Q: 为什么不能查询同一账户下其他 API Key 的统计?

该接口始终以 Authorization 中的普通 API Key 作为查询对象,不接受 token_id、用户、工作区或其他 API Key 参数。请在服务端切换为需要查询的 API Key,重新发起相同请求;不要将 API Key 放入 URL 或客户端代码。

Q: 日期查询为什么返回 400 Bad Request?

检查 date、start_date 和 end_date 是否使用 YYYY-MM-DD,或 date 是否使用 YYYY-MM-DDTHH:mm:ssZ,并确认秒级格式使用大写 Z、不含时区偏移和小数秒。同时确认没有将 date 与范围参数同时传入。范围查询必须同时提供 start_date 与 end_date,结束日期不能早于开始日期,且不能查询未来日期或超过 366 天的范围。修正后重新执行请求。

Q: USAGE_STATS_RANGE_MUST_ALIGN_UTC8_DAY 怎么处理?

start_date 和 end_date 的秒级取值必须正好落在 UTC+8 日首和日末,即 16:00:00Z 与 15:59:59Z。推荐改用 YYYY-MM-DD,接口会自动扩展到 UTC+8 日首和日末。

Q: Key 总计为什么与当前页 models 的合计不同?

api_key 总计应用当前 model 筛选条件,但不受 limit 和 offset 分页影响;models 只包含当前页。请继续按 has_more 与 offset 获取后续页,或根据需求调整分页参数。