平台 API
在代码中读取目录、价格、你的余额和你的用量。
除了发送提示词之外的一切都在这里:有哪些模型、每家供应商怎么收费、你已经花了多少,以及你持有哪些密钥。它们全都在你发送补全请求的同一个 api 主机上返回 JSON。
目录和价格接口是公开的,完全不需要凭据。任何涉及你自己账户的接口都需要凭据,而凭据有两种。
两者不能互换。API 密钥读不到你的余额,访问令牌也发不出补全请求。
| 凭据 | 形如 | 可访问 |
|---|---|---|
| API 密钥 | sk-... | 推理、模型列表,以及该密钥自身的用量计数。 |
| 访问令牌 | 29 到 32 个字符,无前缀 | 你的账户:余额、密钥管理、用量日志。 |
两者都放在同一个请求头里,Authorization: Bearer 后面跟上取值。除此之外不读取任何内容。较早的示例会加上 New-Api-User 请求头,该头会被忽略,也不存在 cookie 回退。
即使某个接口不带凭据也会响应,也请带上这个请求头。访问账户类路由时若不带凭据,请求可能在到达我们之前就被拦下校验,而校验返回的是 HTML 而不是 JSON。
打开设置,在安全一节中找到 API 访问,然后生成一个。它只显示一次。只有在登录状态下才能创建,因此脚本无法自行签发。
同一时间只能持有一个访问令牌。生成新的会静默作废旧的,仍在使用旧令牌的一切都会停止工作。
请像对待密码一样对待它。它能花钱、创建密钥并读取你的历史记录。脚本不再需要它时,请在同一个页面吊销它。
一次公开请求就会返回全部模型,价格已换算成每百万 token 的美元金额。不用密钥,不用注册。
curl https://api.unorouter.com/api/pricing/catalog{
"counts": { "models": 239, "free": 134, "paid": 105, "vendors": 50 },
"first_free_model": "glm-5.3:free",
"vendors": [{ "vendor_id": 4, "vendor_name": "Zhipu", "icon": "Zhipu.Color" }],
"models": [
{
"model_name": "glm-5.3",
"vendor": "Zhipu",
"type": "text",
"is_free": false,
"online": true,
"input_price": 0.05103,
"output_price": 0.160382187,
"original_input_price": 1.26,
"original_output_price": 3.960054,
"tags": "Text,Reasoning,Tools,Cache",
"supported_endpoint_types": ["openai", "anthropic"],
"uptime_24h": 99.965,
"success_rate": 95,
"avg_latency_ms": 11062
}
]
}input_price 和 output_price 是你今天实际会付的价格,取自当前提供该模型且最便宜的供应商。original_input_price 和 original_output_price 是厂商自己的标价,两者之差就是折扣。is_free 标记永不收费的模型,online 标记此刻有供应商在线的模型。
另有两个更小的同类接口:/api/pricing/counts 只返回总数,开销小到可以轮询;/api/pricing/vendors 返回厂商列表。较早的 /api/pricing 接口返回的是原始比率而不是美元,体积也要大上数倍。
大多数模型由多家供应商以不同价位提供。查询单个模型就能看到全部。
curl "https://api.unorouter.com/api/pricing/catalog/model?model=glm-5.3"{
"model_name": "glm-5.3",
"model_ratio": 0.63,
"completion_ratio": 3.1429,
"cache_ratio": 0.1857,
"input_price": 0.05103,
"output_price": 0.160382187,
"grid_min_ratio": 0.0405,
"auto_chain": ["a7-bbgt-2846-glm-5.3", "a7-kkl-3731-glm-5.3", "a7-4069-glm-5.3"],
"group_ratio": {
"a7-bbgt-2846-glm-5.3": 0.0405,
"a7-kkl-3731-glm-5.3": 0.0911,
"a7-4069-glm-5.3": 0.1214
},
"enable_groups": ["a7-bbgt-2846-glm-5.3", "a7-kkl-3731-glm-5.3"]
}auto_chain 是路由尝试它们的顺序,最便宜的排在前面。group_ratio 给出每家供应商的倍率,价格由它推算得出:
input $/1M = model_ratio * 2 * group_ratio
output $/1M = input * completion_ratio
cached $/1M = input * cache_ratio
glm-5.3 on a7-bbgt-2846: 0.63 * 2 * 0.0405 = $0.05103 / 1M in
0.05103 * 3.1429 = $0.16038 / 1M out这些分组名称和你给密钥绑定的是同一套,参见 分组固定
OpenAI 兼容的列表接口,是大多数客户端在你点击连接时调用的接口。它需要 API 密钥。
curl https://api.unorouter.com/v1/models \
-H "Authorization: Bearer $UNOROUTER_API_KEY"它只返回该密钥实际能用的模型,所以免费档的密钥看到的模型比已充值的少。每一项还带有 context_length 和 max_output_tokens,这是原生 OpenAI 不提供的。
路径是 /v1/models。去掉 /v1 到达的是一个网页而不是 API,客户端会报成 JSON 解析错误,提示遇到了意外的 doctype。
一次调用就会返回你的账户,其中包括还剩多少可花。
curl https://api.unorouter.com/api/user/self \
-H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"{
"success": true,
"message": "",
"data": {
"id": 12345,
"username": "you",
"group": "default",
"quota": 265000,
"used_quota": 4231900,
"request_count": 1884,
"aff_code": "ABC123"
}
}金额以额度单位计,而不是美元。500,000 个单位等于 1 美元,所以上面的余额是 0.53 美元。要显示成金额就除以 500,000。
quota 是你还能花的额度。used_quota 和 request_count 是只增不减的累计总量,所以 used_quota 并不是任何数值和你余额之间的差。
先列出你的密钥,再按 id 显示其中一个的明文。
curl "https://api.unorouter.com/api/token/?p=1&page_size=20" \
-H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"
curl -X POST https://api.unorouter.com/api/token/42/key \
-H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"列表会把每个密钥值都打码,所以显示明文是一次单独的调用。该调用有频率限制,并会记入你的审计日志。
创建密钥返回 success,但不返回密钥本身。先创建,列出以找到它的 id,再显示明文。更新密钥会返回更新后的对象,但请提交完整对象:只有 cross_group_retry、group_mapping 和 auto_groups 在省略时会保留原值,其他任何省略的字段都会被写回为空。
你自己的请求历史支持分页和筛选。
curl -G https://api.unorouter.com/api/log/self \
-H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN" \
-d p=1 \
-d page_size=100 \
-d type=2 \
-d start_timestamp=1789344000 \
-d model_name=glm-5.3| 参数 | 含义 |
|---|---|
type | 1 充值,2 消费,3 管理,5 错误,6 退款,7 登录。省略则返回全部。 |
start_timestamp, end_timestamp | Unix 秒。两者相隔不得超过十年。 |
model_name, token_name, group | 缩小到单个模型、单个密钥或单个供应商分组。 |
request_id, upstream_request_id | 用我们的 id 或供应商的 id 查找单条请求。 |
加上 p 和 page_size 进行分页,每页上限是 100。同级接口 /api/log/self/stat 只返回相同筛选条件下的总计:花费、每分钟请求数和每分钟 token 数。
若要在没有访问令牌的情况下读取某个密钥的剩余额度,就用该密钥本身进行认证:
curl https://api.unorouter.com/api/usage/token/ \
-H "Authorization: Bearer $UNOROUTER_API_KEY"{
"object": "token_usage",
"name": "SillyTavern",
"total_granted": 500000,
"total_used": 231900,
"total_available": 268100,
"unlimited_quota": false,
"model_limits_enabled": false,
"expires_at": 0
}账户类接口会把内容包一层。分页接口包两层。
{ "success": true, "message": "", "data": { ... } }
{ "success": true, "message": "", "data": {
"page": 1, "page_size": 20, "total": 137, "items": [ ... ]
} }公开的目录接口是例外,直接返回对象本身,没有外层包装。
大多数失败仍然返回 HTTP 200,只是把 success 置为 false,并附上说明原因的消息。请检查这个字段,而不是状态码。
认证是例外,会返回真实的状态码:凭据错误返回 401 和 AUTH_UNAUTHORIZED,令牌过期返回 AUTH_TOKEN_EXPIRED,登出之后返回 AUTH_SESSION_REVOKED;账户无权调用该路由时返回 403 AUTH_INSUFFICIENT_PRIVILEGE。