接口概述
余额查询 API 用于读取当前账户的剩余额度、已使用额度、请求次数和用户分组。它适合接入后台监控、余额告警、账务排查脚本和内部运营面板。
此接口使用系统令牌 AccessToken 认证,不是普通模型调用用的 API Key。AccessToken 权限更高,生产环境请放在服务端密钥管理系统或环境变量中,不要下发到浏览器或客户端 App。
获取 Authorization
打开系统令牌
在账户设置中选择「系统令牌」,按页面提示进行密码验证。
保存 AccessToken
令牌生成后请立即复制到安全位置。生成新令牌后,旧令牌可能立即失效。
不要在代码仓库、前端页面、日志、截图或工单里暴露完整 AccessToken。向技术支持排查时,只保留 Header 名称、请求时间、HTTP 状态码和已打码的令牌片段即可。
接口信息
| 项目 | 说明 |
|---|
| 接口 URL | https://api.laozhang.ai/api/user/self |
| 请求方法 | GET |
| 认证方式 | Authorization Header |
| 请求参数 | 无 |
| 响应格式 | JSON;使用 cURL 时建议加 --compressed |
请求说明
| Header 名称 | 必填 | 说明 |
|---|
Authorization | 是 | 系统令牌 AccessToken,直接填写令牌字符串 |
Accept | 否 | 建议设置为 application/json |
Content-Type | 否 | 建议设置为 application/json |
请求参数
此接口不需要 Query 参数,也不需要请求体。生产代码中不要把余额阈值、告警渠道或业务标签拼到接口 URL 上;这些应保存在你的监控系统配置里。
响应说明
成功响应示例
{
"success": true,
"message": null,
"data": {
"id": 19489,
"username": "demo_user",
"display_name": "demo_user",
"role": 1,
"status": 1,
"email": "",
"quota": 24997909,
"used_quota": 10027091,
"request_count": 339,
"group": "svip",
"ModelFixedPrice": []
}
}
核心响应字段
| 字段名 | 类型 | 说明 |
|---|
success | Boolean | 请求是否成功 |
message | String / null | 错误信息;成功时通常为 null |
data.username | String | 用户名 |
data.display_name | String | 显示名称 |
data.quota | Integer | 当前剩余额度,适合做告警阈值 |
data.used_quota | Integer | 已使用额度 |
data.request_count | Integer | 累计请求次数 |
data.group | String | 当前账户分组 |
data.ModelFixedPrice | Array | 模型价格列表;只查余额时可以忽略 |
data.access_token | String | 敏感字段;如果返回,请不要写入普通日志 |
接口可能随账户状态返回更多字段。开发时请只依赖业务需要的核心字段,并允许响应中出现未知字段,避免因为新增字段导致解析失败。
额度与金额计算
接口返回的 quota 单位是「额度」,不是直接的美元金额。当前余额展示按以下规则换算:
| 计算项 | 公式 | 示例 |
|---|
| 剩余美元余额 | quota ÷ 50 万 | 24997909 ÷ 50 万 = 49.995818,约等于 50.00 USD |
| 已使用美元额度 | used_quota ÷ 50 万 | 10027091 ÷ 50 万 = 20.054182,约等于 20.05 USD |
| 历史总额度 | (quota + used_quota) ÷ 50 万 | 示例约等于 70.05 USD |
也就是说,50 万额度约等于 1 USD。如果接口返回 quota: 24997909,用户当前可用余额约为 50.00 USD。
余额展示可以按上述公式计算;模型实际扣费仍要以当前模型价格、账户分组、调用日志和控制台展示为准。生产告警建议同时保存原始 quota 和换算后的美元金额,避免后续排查时丢失精度。
代码示例
cURL
jq 提取
Python
Node.js
export LAOZHANG_ACCESS_TOKEN='YOUR_ACCESS_TOKEN'
curl --compressed -s 'https://api.laozhang.ai/api/user/self' \
-H 'Accept: application/json' \
-H "Authorization: ${LAOZHANG_ACCESS_TOKEN}" \
-H 'Content-Type: application/json'
--compressed 会让 cURL 自动处理 gzip 响应。如果少了这个选项,终端可能显示乱码,jq 也可能报 Invalid numeric literal。export LAOZHANG_ACCESS_TOKEN='YOUR_ACCESS_TOKEN'
curl --compressed -s 'https://api.laozhang.ai/api/user/self' \
-H 'Accept: application/json' \
-H "Authorization: ${LAOZHANG_ACCESS_TOKEN}" \
-H 'Content-Type: application/json' | \
jq '.data | {
quota,
remaining_usd: (.quota / (50 * 10000)),
used_quota,
used_usd: (.used_quota / (50 * 10000)),
request_count,
group
}'
import os
import requests
token = os.environ["LAOZHANG_ACCESS_TOKEN"]
response = requests.get(
"https://api.laozhang.ai/api/user/self",
headers={
"Accept": "application/json",
"Authorization": token,
"Content-Type": "application/json",
},
timeout=10,
)
response.raise_for_status()
payload = response.json()
account = payload["data"]
quota_unit_per_usd = 50 * 10000
print("quota:", account["quota"])
print("remaining_usd:", round(account["quota"] / quota_unit_per_usd, 2))
print("used_quota:", account["used_quota"])
print("used_usd:", round(account["used_quota"] / quota_unit_per_usd, 2))
print("request_count:", account["request_count"])
print("group:", account.get("group"))
Python requests 会自动处理 gzip 解压。const token = process.env.LAOZHANG_ACCESS_TOKEN;
const response = await fetch("https://api.laozhang.ai/api/user/self", {
method: "GET",
headers: {
Accept: "application/json",
Authorization: token,
"Content-Type": "application/json",
},
});
if (!response.ok) {
throw new Error(`Balance query failed: HTTP ${response.status}`);
}
const payload = await response.json();
const account = payload.data;
const quotaUnitPerUsd = 50 * 10000;
console.log({
quota: account.quota,
remaining_usd: Number((account.quota / quotaUnitPerUsd).toFixed(2)),
used_quota: account.used_quota,
used_usd: Number((account.used_quota / quotaUnitPerUsd).toFixed(2)),
request_count: account.request_count,
group: account.group,
});
错误响应
HTTP 401 - 认证失败
{
"success": false,
"message": "Unauthorized"
}
常见原因是 Authorization 为空、令牌复制不完整、令牌已失效,或误用了普通 API Key。
HTTP 403 - 权限不足
{
"success": false,
"message": "Forbidden"
}
常见原因是当前令牌无权访问账户信息接口,或账户状态需要人工确认。
响应乱码或 jq 报错
如果 cURL 返回乱码,或 jq 报 Invalid numeric literal,通常是 gzip 响应没有被解压。请确认命令包含 --compressed。
监控接入建议
- 用环境变量或密钥管理服务保存
LAOZHANG_ACCESS_TOKEN
- 设置合理超时时间,例如 10 秒
- 避免高频轮询;一般余额监控不需要秒级请求
- 告警里记录
quota、换算后的 remaining_usd、used_quota、request_count、请求时间和 HTTP 状态码
- 不要在日志中记录完整
Authorization、access_token 或账户敏感字段
相关文档