搜索文档...

开始输入以搜索文档

平台指南

平台 API

在代码中读取目录、价格、你的余额和你的用量。

除了发送提示词之外的一切都在这里:有哪些模型、每家供应商怎么收费、你已经花了多少,以及你持有哪些密钥。它们全都在你发送补全请求的同一个 api 主机上返回 JSON。

目录和价格接口是公开的,完全不需要凭据。任何涉及你自己账户的接口都需要凭据,而凭据有两种。

两者不能互换。API 密钥读不到你的余额,访问令牌也发不出补全请求。

凭据形如可访问
API 密钥sk-...推理、模型列表,以及该密钥自身的用量计数。
访问令牌29 到 32 个字符,无前缀你的账户:余额、密钥管理、用量日志。

两者都放在同一个请求头里,Authorization: Bearer 后面跟上取值。除此之外不读取任何内容。较早的示例会加上 New-Api-User 请求头,该头会被忽略,也不存在 cookie 回退。

即使某个接口不带凭据也会响应,也请带上这个请求头。访问账户类路由时若不带凭据,请求可能在到达我们之前就被拦下校验,而校验返回的是 HTML 而不是 JSON。

打开设置,在安全一节中找到 API 访问,然后生成一个。它只显示一次。只有在登录状态下才能创建,因此脚本无法自行签发。

同一时间只能持有一个访问令牌。生成新的会静默作废旧的,仍在使用旧令牌的一切都会停止工作。

请像对待密码一样对待它。它能花钱、创建密钥并读取你的历史记录。脚本不再需要它时,请在同一个页面吊销它。

一次公开请求就会返回全部模型,价格已换算成每百万 token 的美元金额。不用密钥,不用注册。

bash
curl https://api.unorouter.com/api/pricing/catalog
json
{
  "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 接口返回的是原始比率而不是美元,体积也要大上数倍。

大多数模型由多家供应商以不同价位提供。查询单个模型就能看到全部。

bash
curl "https://api.unorouter.com/api/pricing/catalog/model?model=glm-5.3"
json
{
  "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 给出每家供应商的倍率,价格由它推算得出:

text
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 密钥。

bash
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。

一次调用就会返回你的账户,其中包括还剩多少可花。

bash
curl https://api.unorouter.com/api/user/self \
  -H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"
json
{
  "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 显示其中一个的明文。

bash
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 在省略时会保留原值,其他任何省略的字段都会被写回为空。

你自己的请求历史支持分页和筛选。

bash
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
参数含义
type1 充值,2 消费,3 管理,5 错误,6 退款,7 登录。省略则返回全部。
start_timestamp, end_timestampUnix 秒。两者相隔不得超过十年。
model_name, token_name, group缩小到单个模型、单个密钥或单个供应商分组。
request_id, upstream_request_id用我们的 id 或供应商的 id 查找单条请求。

加上 p 和 page_size 进行分页,每页上限是 100。同级接口 /api/log/self/stat 只返回相同筛选条件下的总计:花费、每分钟请求数和每分钟 token 数。

若要在没有访问令牌的情况下读取某个密钥的剩余额度,就用该密钥本身进行认证:

bash
curl https://api.unorouter.com/api/usage/token/ \
  -H "Authorization: Bearer $UNOROUTER_API_KEY"
json
{
  "object": "token_usage",
  "name": "SillyTavern",
  "total_granted": 500000,
  "total_used": 231900,
  "total_available": 268100,
  "unlimited_quota": false,
  "model_limits_enabled": false,
  "expires_at": 0
}

账户类接口会把内容包一层。分页接口包两层。

json
{ "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。