Troubleshooting · 报错来源

如何判断报错是否由 9Coding 返回

30 秒版
  1. 先查看请求地址与 request id:请求发往 api.9coding.com 且被 9Coding 自身拒绝(例如 Key 无效)时,message 末尾带有 (request id: …)。带有其他服务特征的报错(见第 2 步),不是 9Coding 返回的。
  2. Missing x-bb-api-key header 来自云端浏览器服务 Browserbase:应为该服务配置其自身的 Key(BROWSERBASE_API_KEY),请勿填入 9Coding 的 Key。
  3. 9Coding 的 Key 只用于 https://api.9coding.com:OpenAI 兼容客户端发送 Authorization: Bearer,Claude Code 设置 ANTHROPIC_BASE_URL 与 ANTHROPIC_AUTH_TOKEN。

一条工具链往往同时调用多项服务:模型网关、云端浏览器、代码托管、搜索。各项服务的报错出现在同一个终端或对话窗口中,外观相近,读起来都像「认证失败」。排查 Key 之前,应先确认报错由哪一项服务返回:返回方不同,需要检查的 Key 与配置也不同。

待判断的报错

以下均不是 9Coding 返回的
{
  "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 缺失或无效时返回:

范例 · HTTP 401
{
  "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。未登录或登录状态失效时返回:

范例 · HTTP 401
{
  "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。

macOS / Linux 终端
curl -s https://api.9coding.com/v1/models \
  -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN"
Windows PowerShell
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,按所用客户端填写:

地址与 Key 的位置
# 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 的调用记录中查不到对应条目,需要向返回该报错的服务方反映。

相关报错