如何判断报错是否由 9Coding 返回
- 先查看请求地址与 request id:请求发往
api.9coding.com且被 9Coding 自身拒绝(例如 Key 无效)时,message末尾带有(request id: …)。带有其他服务特征的报错(见第 2 步),不是 9Coding 返回的。 Missing x-bb-api-key header来自云端浏览器服务 Browserbase:应为该服务配置其自身的 Key(BROWSERBASE_API_KEY),请勿填入 9Coding 的 Key。- 9Coding 的 Key 只用于
https://api.9coding.com:OpenAI 兼容客户端发送Authorization: Bearer,Claude Code 设置ANTHROPIC_BASE_URL与ANTHROPIC_AUTH_TOKEN。
一条工具链往往同时调用多项服务:模型网关、云端浏览器、代码托管、搜索。各项服务的报错出现在同一个终端或对话窗口中,外观相近,读起来都像「认证失败」。排查 Key 之前,应先确认报错由哪一项服务返回:返回方不同,需要检查的 Key 与配置也不同。
待判断的报错
{
"statusCode": 401,
"error": "Unauthorized",
"message": "Missing x-bb-api-key header"
}
{
"error": {
"message": "Incorrect API key provided: sk-9c-ab…wxyz. You can find your API key at https://platform.openai.com/account/api-keys.",
"type": "invalid_request_error",
"param": null,
"code": "invalid_api_key"
}
}
{
"error": {
"code": 400,
"message": "API key not valid. Please pass a valid API key.",
"status": "INVALID_ARGUMENT",
"details": [{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "API_KEY_INVALID",
…
}]
}
}
三条都与认证有关,但都不是 9Coding 返回的:第一条来自 Browserbase,第二条来自 OpenAI 官方 API,第三条来自 Google 的 Gemini API。判断步骤如下。本页的 JSON 范例均已按字段换行排版,… 表示省略的内容。
按这个顺序判断
1 · 查看请求地址与 request id#
9Coding 对外有两个 API,报错格式不同。只有发往这两个地址的请求,才可能得到 9Coding 返回的报错。
推理网关 · api.9coding.com:承载全部模型调用,包括 OpenAI 兼容的 /v1/chat/completions 等端点,以及 Claude Code 使用的 /v1/messages。Key 缺失或无效时返回:
{
"error": {
"code": "",
"message": "Invalid token (request id: 2026…)",
"type": "new_api_error"
}
}
判定依据:请求地址是 api.9coding.com,message 末尾带有 (request id: …);Key 缺失或无效时,type 为 new_api_error。request id 以 UTC 时间开头(形如 2026…,比北京时间早 8 小时),网关响应头 x-oneapi-request-id 中也有同一个 id,用 curl -i 可以查看。部分报错(例如经 9Coding 转发的上游报错)的 message 可能不带 request id。其他中转服务若使用同一套开源网关,也会返回同样格式的报错,因此必须结合请求地址判断。
控制台 API · 9coding.com/api:承载网站与控制台的操作,包括登录、Key 管理、充值与用量查询。模型调用不经过这一 API。未登录或登录状态失效时返回:
{
"message": "missing bearer token",
"success": false
}
判定依据:message 与 success 两个字段并列,success 为 false。这类报错出现在网站与控制台的请求中(例如浏览器开发者工具的网络面板),与模型调用无关;登录状态失效时,重新登录控制台即可恢复。
2 · 对照第三方报错的特征#
以下只列出格式明确、可据此判断来源的几种。
- Browserbase:
Missing x-bb-api-key header
特征:statusCode、error、message三个字段并列;x-bb-api-key是云端浏览器服务 Browserbase 的认证请求头。
处理:为 Browserbase 配置其自身的 Key,见下文。 - OpenAI 官方 API:
Incorrect API key provided
特征:报错指向platform.openai.com,code为invalid_api_key。
处理:请求直接发往了 OpenAI 官方;将 base URL 设为https://api.9coding.com/v1。 - Anthropic 官方 API:
"request_id":"req_…"
特征:顶层带有request_id字段,取值以req_开头;message末尾没有(request id: …)。
处理:请求直接发往了 Anthropic 官方,未经过 9Coding;检查ANTHROPIC_BASE_URL是否生效。 - Google 官方 API:
API key not valid
特征:Google 官方 API(如 Gemini API)的报错,带有"status":"INVALID_ARGUMENT",details中的reason为API_KEY_INVALID。
处理:请求直接发往了 Google 官方,需找出发出这一请求的工具。Gemini CLI 按 Gemini 接入指南设置GOOGLE_GEMINI_BASE_URL;其他直接调用 Google 的工具(例如 Browserbase 的 MCP 服务,见下文)需要 Google 的 Key。 - 客户端本身:
Could not resolve authentication method
特征:客户端在发出请求之前报错,没有 HTTP 响应。
处理:设置ANTHROPIC_AUTH_TOKEN,见 401 Unauthorized。 - 本机或网络:
ECONNREFUSED·ENOTFOUND·ETIMEDOUT
特征:没有状态码,也没有响应体。
处理:见连接错误。
Key 已发送给第三方时:OpenAI、Anthropic、Google 这三种情况下,若请求携带的是 9Coding 的 Key(例如 OpenAI 报错中回显的 Key 以 sk-9c- 开头),这把 Key 已经发送给了对方。修正地址后,建议在 9Coding 控制台删除这把 Key 并重新创建。
3 · 用一条 curl 请求确认 9Coding 一侧#
范例沿用 Claude Code 的变量。这里使用的必须是出错工具实际配置的那把 Key;其他客户端把变量替换为该工具中填写的 Key。
curl -s https://api.9coding.com/v1/models \
-H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN"
curl.exe -s https://api.9coding.com/v1/models `
-H "Authorization: Bearer $env:ANTHROPIC_AUTH_TOKEN"
- 返回模型列表 → 这把 Key 与地址有效。原报错若带
(request id: …),或属于模型不存在、限流、余额不足、上下文超限等情况,仍由 9Coding 一侧返回,按报错速查中的对应页面排查;原报错若是认证类报错且不带 9Coding 的特征,则来自工具链中的其他服务,按第 2 步确认返回方。 - 返回带
(request id: …)的报错 → 由 9Coding 返回。Invalid token表示这把 Key 无效,或请求中没有 Key(变量为空时同样返回这一条),见 401 Unauthorized;其他内容按报错速查中的对应页面排查。 - 没有任何输出 → curl 未取得响应,属于网络问题,见连接错误。
Missing x-bb-api-key header · 来自 Browserbase
{
"statusCode": 401,
"error": "Unauthorized",
"message": "Missing x-bb-api-key header"
}
原因:请求到达了 Browserbase(云端浏览器服务),但没有携带该服务的 Key。x-bb-api-key 是 Browserbase API 的认证请求头(官方文档写作 X-BB-API-Key)。9Coding 的认证不使用这个请求头,也不签发它对应的 Key。
出现场景:Browserbase 官方的 MCP 服务,以及运行在 Browserbase 环境下的 Stagehand,都通过这一 API 启动云端浏览器。在 Claude Code、Cursor 等工具中接入这类组件而未配置 Browserbase 的 Key 时,打开浏览器的那一步会被 Browserbase 拒绝。模型调用与浏览器调用是两条独立的请求:前者发往 9Coding,后者发往 Browserbase,这条报错只来自后者。
处理:在 Browserbase 控制台取得该服务的 API Key,按所用组件的说明配置。Browserbase 的 MCP 服务与 Stagehand 读取环境变量 BROWSERBASE_API_KEY:
export BROWSERBASE_API_KEY="<Browserbase 控制台中的 Key>"
在本机运行的 MCP 服务(npx @browserbasehq/mcp)把 Key 写在该服务配置的 env 中;使用 Browserbase 托管的 MCP 地址(mcp.browserbase.com)时,Key 写在地址的 browserbaseApiKey 一项中。配置后需重启工具:Claude Code 只在启动时读取一次环境变量。
模型 Key 也需单独配置:Browserbase 的 MCP 服务默认使用 Google 的 Gemini 模型,还需要 GEMINI_API_KEY,这一调用直接发往 Google,不经过 9Coding。这里应填写 Google AI Studio 的 Key,请勿填写 9Coding 的 Key。若已按 Gemini 接入指南在系统中把 GEMINI_API_KEY 设为 9Coding 的 Key,应在该 MCP 服务配置的 env 中明确填写 Google 的 Key,避免沿用系统中的值。
请勿把 9Coding 的 Key 填入 x-bb-api-key 或 BROWSERBASE_API_KEY。Browserbase 无法用这把 Key 完成认证,这样做还会把 9Coding 的 Key 发送给第三方服务。若已经填入过,应在 9Coding 控制台删除这把 Key 并重新创建。
9Coding 的正确认证方式
9Coding 的 API Key(形如 sk-9c-…)在控制台的 API Keys 页创建。所有模型调用都发往 https://api.9coding.com,按所用客户端填写:
# OpenAI 兼容 SDK · curl
base URL: https://api.9coding.com/v1
Authorization: Bearer <Key>
# Claude Code
ANTHROPIC_BASE_URL=https://api.9coding.com
ANTHROPIC_AUTH_TOKEN=<Key>
# Gemini CLI
GOOGLE_GEMINI_BASE_URL=https://api.9coding.com
GEMINI_API_KEY=<Key>
完整步骤见 OpenAI SDK、Claude Code 与 Gemini 接入指南。9Coding 的认证不使用 x-bb-api-key,也不签发或保管 Browserbase 等非模型服务的 Key。工具链中的每一项服务,需要分别配置各自的 Key。
提交给客服时请附上
request id;② 请求的地址(端点),例如 api.9coding.com 的 /v1/chat/completions 或 /v1/messages;③ 所用工具或客户端的名称与版本,例如 Claude Code、Cursor 或自行编写的程序;④ 发生时间(注明时区)与模型名。请勿提供 API Key。排查不需要 Key。截图、日志与地址中出现的 Key 或 token(例如地址中的
?key= 部分)应先删除或遮盖;Key 一旦外泄,应在控制台删除并重新创建。
不是 9Coding 返回的报错,在 9Coding 的调用记录中查不到对应条目,需要向返回该报错的服务方反映。
相关报错
- 401 Unauthorized — 9Coding 返回的认证错误
- 连接错误 — 区分网络、代理与端点
- 全部报错速查 — 排查手册总表