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 的呼叫記錄中查不到對應條目,需要向返回該報錯的服務方反映。

相關報錯