BUZZ AI Gateway
文档 · 指南 · 鉴权

鉴权

每次访问 /v1/* 都需要带 API key。BUZZ 同时接受三种鉴权 header,所以 Anthropic、OpenAI、Google GenAI 三家官方 SDK 都能直接使用 —— 只要把 base URL 指到 https://buzzai.cc,原有鉴权代码不用改。

三种 header 写法

Header说明对应 SDK
Authorization: Bearer <KEY> 推荐默认形态,与 BUZZ 其他 REST 接口风格统一。 OpenAI SDK 默认;Anthropic SDK 显式设置时也可用。
Authorization: Bearer sk-<KEY> sk- 前缀会被服务端自动剥离。 方便复用已有 sk- 风格 key 的基础设施。
x-api-key: <KEY> 与 Anthropic SDK 默认 header 一致,即插即用。 Anthropic SDK 默认。
x-goog-api-key: <KEY> Google GenAI 兼容路径下接受,Gemini 官方 SDK 不改代码即可指向 BUZZ。 Google GenAI SDK 默认。

哪种顺手就用哪种,鉴权完成之后行为完全一致 —— 四种 header 解析到的都是同一把 key。

anthropic-version 在 BUZZ 上是可选的。 缺失时 BUZZ 会自动补 2023-06-01 再转发上游。如果想保留可移植到 Anthropic 直连的能力,建议显式带上(Anthropic 自己要求必须带)。

什么时候用哪种?

原则:跟着 SDK 的默认行为走,不要改 SDK 的请求层。

Anthropic SDK

官方 anthropic(Python)和 @anthropic-ai/sdk(Node)默认发 x-api-key。把 base URL 指到 BUZZ 即可:

from anthropic import Anthropic

client = Anthropic(
    base_url="https://buzzai.cc",
    api_key="",
)
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  baseURL: "https://buzzai.cc",
  apiKey: process.env.BUZZ_API_KEY,
});

OpenAI SDK(走 /v1/chat/completions)

OpenAI SDK 默认发 Authorization: Bearer ...。配合 OpenAI 兼容的 /v1/chat/completions 路径使用:

from openai import OpenAI

client = OpenAI(
    base_url="https://buzzai.cc/v1",
    api_key="",
)

resp = client.chat.completions.create(
    model="claude-sonnet-4-6",
    messages=[{"role": "user", "content": "ping"}],
)

Google GenAI SDK

官方 google-genai SDK 默认发 x-goog-api-key。BUZZ 在 Gemini 兼容路径上识别这个 header,SDK 不改代码就能复用 BUZZ key 调网关上的 Gemini 兼容模型。

curl / 自写 HTTP 客户端

原始 HTTP 调用最省心的写法是 Authorization: Bearer —— 跟 BUZZ 其他 REST 接口(billing 等非 relay 端点)写法一致,代码风格统一。

curl -X POST https://buzzai.cc/v1/messages \
  -H "Authorization: Bearer $BUZZ_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{ "model": "claude-haiku-4-5-20251001", "max_tokens": 32, "messages": [{"role":"user","content":"ping"}] }'

SDK Header 速查表

工具 / SDK默认鉴权 headerBUZZ 推荐
Anthropic Python / Node SDKx-api-key用 SDK 默认即可
OpenAI Python / Node SDKAuthorization: Bearer用 SDK 默认,目标路径 /v1/chat/completions
Google GenAI SDKx-goog-api-key用 SDK 默认即可
Claude Code CLI环境变量 ANTHROPIC_AUTH_TOKEN + ANTHROPIC_BASE_URL详见 Claude Code 指南
curl / 自写客户端Authorization: Bearer <KEY>

API key 管理

Key 在用户后台 Tokens 页面管理。同样的操作可以通过 /api/token/* 用 session 或 access token 鉴权来做(注意:这里的 access token 与 sk- relay key 不是同一种鉴权)。

每把 key 可配置的字段

字段类型含义
namestring用户自定义名称,最多 50 字符,后台列表和搜索使用。
expired_timeint (Unix 秒)过期时间。-1 表示永不过期。
unlimited_quotabooltrue = 不设单 key 额度;false 时必须填 remain_quota
remain_quotaint剩余可用额度。当 unlimited_quota 为 false 时必填且 ≥ 0。
model_limits_enabledbool是否启用单 key 模型白名单。
model_limitsstring逗号分隔的可调用模型 ID 列表;留空表示该 group 下全部模型可用。
allow_ipsstring | null换行分隔的 IP 白名单;留空 / null 不限制。
groupstring默认走的上游 channel 分组。
vendor_routesJSON string可选,按厂商指定 group,如 {"claude":"aws","openai":"gpt-direct"}。空则回退到 group

状态值

Code含义
1Enabled — 接受请求
2Disabled — 手动暂停
3Expired — 已过 expired_time
4Exhausted — remain_quota 归零(仅 unlimited_quota 为 false 时触发)

生命周期:创建 / 取出 / 轮换 / 删除

创建

用后台表单或 POST /api/token/ 创建 key。Key 由后端生成,创建接口本身不会回显完整值。要拿到完整 key,在后台点行内复制按钮,或调 POST /api/token/<id>/key。列表接口出于安全只返回 mask 形态,例如 OnyH**********esAm

取出

把完整 key 当一次性密钥处理:复制一次,放进秘密管理器或环境变量,不要再贴回后台、聊天工具、文档。

轮换

轮换流程:新建一把 key → 部署到所有用旧 key 的位置 → 删旧 key。BUZZ 不支持原地刷新 key,只能"删一把建一把"。

删除

支持软删:DELETE /api/token/<id>。批量删除走 POST /api/token/batch,body 形如 {"ids":[1,2,3]}

安全最佳实践

不要 commit .env 项目第一次提交前就把 .env 和本地秘密文件加进 .gitignore。配套写一个 .env.example 用占位值列出需要的变量名。

鉴权错误

HTTPerror.type原因处理
401buzz_errorAPI key 缺失或无效重新 export BUZZ_API_KEY;检查有没有多余引号;确认后台里这把 key 还在。
403permission_error当前 IP 不在 key 的白名单内,或 key 已被禁用更新 allow_ips,或把 key 改回 status 1。
403permission_error该 key 没有访问目标 group / model 的权限调整 key 的 group / model_limits,或换一个被允许的模型。

BUZZ 网关侧错误响应包络:

{
  "error": {
    "type": "buzz_error",
    "message": "Invalid token... (request id: 202605260713594...)"
  }
}

Anthropic 透传错误保持官方原样,顶层带 request_id

相关链接