用户账号 API
baozi 个人用户(登录后)查询自己的资料 + 管理自己的 API Token。
核心场景:登录 baozi → 拿个人 user info → 创/查/禁用个人 API Token → 用 Token 调 baozi 模型。
鉴权
所有 /api/me/* 接口都需要 baozi 用户登录(OIDC)。
| 鉴权方式 | 适用 |
|---|---|
Cookie baozi_token |
浏览器调用(自动带) |
Authorization: Bearer <baozi_token> |
服务端调用 |
1. 查询当前用户
GET /api/me
返回当前登录用户的基本信息。
请求:无 body。
响应 200:
{
"success": true,
"data": {
"id": 42,
"username": "zhangsan",
"email": "zhangsan@example.com",
"display_name": "张三",
"avatar_url": "https://...",
"created_at": 1730000000000,
"tier": "free"
}
}
错误码:
| HTTP | code | 含义 |
|---|---|---|
| 401 | AUTH_REQUIRED |
未登录或 token 无效 |
2. 创个人 API Token
POST /api/me/token
为当前用户创建一个 baozi 平台 API Token,可用于调 baozi 模型(OpenAI 兼容协议)。
请求 body:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name |
string | 是 | Token 名称,仅作标识 |
model_limits |
string[] | 否 | 限制可调模型,逗号分隔;空=不限 |
expired_time |
number | 否 | Unix 毫秒;-1=永不过期;默认 -1 |
示例:
curl -X POST https://baozi.ohoooho.com/api/me/token \
-H "Authorization: Bearer $BAOZI_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "my-app-key", "expired_time": -1}'
响应 200:
{
"success": true,
"data": {
"id": 123,
"key": "sk-baozi-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"name": "my-app-key",
"expired_time": -1,
"created_at": 1730000000000
}
}
⚠️ key 字段仅在创建时返回一次,请妥善保存。
错误码:
| HTTP | code | 含义 |
|---|---|---|
| 400 | MISSING_NAME |
未传 name |
| 401 | AUTH_REQUIRED |
未登录 |
| 429 | RATE_LIMITED |
Token 创建过快 |
3. 查询个人 Token 列表
GET /api/me/tokens
请求:无 body。
查询参数:
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
limit |
number | 20 | 最多返回条数 |
offset |
number | 0 | 跳过条数 |
响应 200:
{
"success": true,
"data": {
"items": [
{
"id": 123,
"name": "my-app-key",
"key_preview": "sk-baozi-xxxxxx...xxxx",
"expired_time": -1,
"created_at": 1730000000000,
"status": 1
}
],
"total": 1
}
}
Token 完整 key 不会再次返回,只会返回 key_preview(首 6 + 尾 4 字符)。
status 含义:
| 值 | 含义 |
|---|---|
| 1 | 启用 |
| 2 | 禁用 |
| 4 | 已过期 |
完整示例:浏览器登录 → 创 Token → 调模型
// 1. 浏览器走 OIDC 登录(baozi 内部会自动处理)
// 登录成功后,浏览器自动带 baozi_token cookie
// 2. 创个人 Token
const r = await fetch("/api/me/token", {
method: "POST",
headers: { "Content-Type": "application/json" },
credentials: "include", // 带 baozi_token cookie
body: JSON.stringify({ name: "my-app" }),
});
const { data: { key } } = await r.json();
// 3. 用 Token 调 baozi 模型(OpenAI 兼容协议)
const chat = await fetch("https://llm.ohoooho.com/v1/chat/completions", {
method: "POST",
headers: {
Authorization: `Bearer ${key}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "gpt-4o-mini",
messages: [{ role: "user", content: "你好" }],
}),
});
联系 baozi
文档不全?发邮件到 support@ohoooho.com 或在飞书群里 @ 闲云。