OpenPAI 的所有 API 都需要鉴权。鉴权信息携带在 请求头(Header) 中,不要放在 URL query 里。
OpenAI 兼容协议
Authorization: Bearer sk-XXXXXXXXXXXXXXXX
curl https://openp.ai/v1/chat/completions \
-H "Authorization: Bearer $OPENPAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-5.5","messages":[{"role":"user","content":"hi"}]}'
Claude Messages 协议
x-api-key: sk-XXXXXXXXXXXXXXXX
anthropic-version: 2023-06-01
curl https://openp.ai/v1/messages \
-H "x-api-key: $OPENPAI_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model":"claude-opus-4-8",
"max_tokens":1024,
"messages":[{"role":"user","content":"hi"}]
}'
SDK 通常会自动添加 anthropic-version,直接用 SDK 时无需手填。
Gemini 原生协议
x-goog-api-key: sk-XXXXXXXXXXXXXXXX
curl "https://openp.ai/v1beta/models/gemini-3.1-pro-preview:generateContent" \
-H "x-goog-api-key: $OPENPAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents":[{"role":"user","parts":[{"text":"hi"}]}]
}'
Gemini 也兼容 query 参数式鉴权(?key=sk-...),但 不建议 这种方式 —— URL 会被代理日志记录。
失败示例
| 状态 | 原因 |
|---|
401 invalid_api_key | 密钥不存在 / 被禁用 / 格式错误 / 末尾包含换行 |
401 expired_api_key | 令牌已过期 |
403 insufficient_quota | 账户或令牌额度不足 |
403 ip_not_allowed | 来源 IP 不在该令牌白名单 |
403 model_not_allowed | 该令牌没有调用此模型的权限 |
排查方法:
- 复制
X-OpenPAI-Request-Id 头。
- 控制台 → 日志 → 搜索该 Request ID,查看失败原因详情。
密钥保管
- 不要 把密钥提交到 Git 或粘贴到聊天 / Issue。
- 使用环境变量 / Secret Manager 注入。
- 怀疑泄露立即在控制台禁用并重新生成。
- 为不同应用 / 环境创建独立令牌,便于细粒度追踪。