如何判斷報錯是否由 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 返回的認證錯誤
- 連線錯誤 — 區分網路、代理與端點
- 全部報錯速查 — 排查手冊總表