GET /protocol 提供自己的端點參考,涵蓋該閘道的登入、推論、受管設定、模型探索和遙測端點。這是與本指南分開的文件。
- 若要為您的組織推出現有或第三方閘道,請參閱推出 LLM 閘道
- 如果您是使用獲得的認證向閘道驗證 Claude Code 的個別開發人員,請參閱將 Claude Code 連線至 LLM 閘道
- API 格式和每種格式要提供的端點
- 依連線方法的用戶端行為:模型 ID、
anthropic-beta值、請求欄位和預設值在格式和 Claude apps gateway 登入之間的差異 - 請求標頭:哪些必須到達上游,以及您的閘道可以使用哪些
- 回應標頭:要傳回什麼以便停滯偵測、重試和使用量限制顯示能夠運作
- 系統提示屬性區塊及其與提示快取的互動方式
- 功能傳遞:移除標頭或本體欄位時會中斷的功能
- 模型探索
- 轉發不變:將其逐位元組傳遞至上游
- 使用:閘道可能會讀取它以進行路由、屬性或追蹤,不需要轉發它
API 格式
閘道必須向 Claude Code 用戶端公開以下至少一種 API 格式。用戶端會選擇一種格式,並使用下表「選擇者」欄中的變數將 Claude Code 指向您的閘道。 Google Cloud 的 Agent Platform 是 Google Cloud 的 Claude 端點,前身為 Vertex AI;其變數名稱保留VERTEX 拼寫。
Foundry 和 AWS 上的 Claude Platform
Microsoft Foundry 和 AWS 上的 Claude Platform 實作 Anthropic Messages 格式。Claude Code 透過自己的變數ANTHROPIC_FOUNDRY_BASE_URL 和 ANTHROPIC_AWS_BASE_URL 路由到它們,但閘道在任一前面實作上述 Anthropic Messages 列。閘道在 AWS 上的 Claude Platform 前面也必須轉發 anthropic-workspace-id 標頭,該平台在每個請求上都需要。
選用端點和啟動流量
權杖計數端點是唯一的選用端點:當它們不存在時,Claude Code 會回退到基於字元的內容使用估計。 根據路徑而非完整 URL 進行比對:- 推論請求發佈到
/v1/messages?beta=true - Google Cloud 的 Agent Platform 方法尾碼附加到發佈者模型路徑,如
/projects/{project}/locations/{location}/publishers/anthropic/models/{model}:streamRawPredict
HEAD /api/hello 連線預熱探測,當設定了 HTTP 代理或用戶端憑證時,Claude Code 會跳過此探測。Amazon Bedrock 格式閘道會收到 GET /inference-profiles?type=SYSTEM_DEFINED 請求,以及當設定的模型是推論設定檔時,GET /inference-profiles/{profile} 查詢。
快速模式可用性檢查永遠不會出現在閘道日誌中:它直接呼叫 api.anthropic.com 而不是遵循 ANTHROPIC_BASE_URL,因此在阻止直接出站到 api.anthropic.com 的網路上,快速模式可能會報告連線錯誤,而透過閘道的推論會繼續運作。WebFetch 網域安全檢查也直接呼叫 api.anthropic.com。在代理和 LLM 閘道後面使用快速模式涵蓋恢復它的變數。
串流
串流推論回應。Claude Code 在到達時讀取串流,因此如果您的閘道在轉發前緩衝完整回應,Claude Code 會停滯。 當用戶端使用 Amazon Bedrock 格式時,不修改地轉發InvokeModelWithResponseStream 回應本體及其 Content-Type: application/vnd.amazon.eventstream 標頭,並且不要將串流轉換為伺服器發送事件。請參閱閘道或代理後面的串流錯誤。
也轉發保活 ping。在透過 ANTHROPIC_BASE_URL 或 ANTHROPIC_AWS_BASE_URL 的連線上,Claude Code 計算您的閘道轉發的每一位元組,包括 SSE ping 事件和註解行,並預設在 300 秒內中止無聲的串流。上游的 ping 是長思考暫停期間唯一的流量,因此如果您的閘道剝離或緩衝它們,Claude Code 會在這些暫停期間中止串流;自動重試涵蓋根據回應進度有多遠而中止的串流報告。完全不發送 ping 的上游(例如 Amazon Bedrock 的二進位事件串流)在這些暫停期間沒有任何東西可轉發。從這樣的上游轉譯時,在無聲間隙期間發出您自己的 ping 事件。透過 ANTHROPIC_BEDROCK_BASE_URL、ANTHROPIC_VERTEX_BASE_URL 或 ANTHROPIC_FOUNDRY_BASE_URL 到達的閘道不會被此位元組級監視狗包裝,即使它們轉發 Anthropic Messages 格式;在那裡,5 分鐘閒置逾時會改為中止無聲串流,在 ANTHROPIC_BEDROCK_BASE_URL 連線上,您可以使用 CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK 新增位元組監視狗。
與上游的格式不匹配
用戶端使用的格式決定了您的閘道接收的內容。常見的失敗模式是用戶端發送到您的閘道的格式與其後面的上游提供者接受的格式不匹配。- 當用戶端使用 Amazon Bedrock 或 Google Cloud 的 Agent Platform 格式時,Claude Code 只發送那些提供者接受的完整功能集的子集
- 當用戶端使用 Anthropic Messages 格式時,Claude Code 發送完整集,即使您的閘道轉發到 Amazon Bedrock 或 Google Cloud 的 Agent Platform 上游
連線方法如何改變用戶端行為
開發人員連線到您的閘道的方式決定了 Claude Code 傳送的模型 ID、anthropic-beta 值和請求欄位,以及它套用的預設值。您的閘道會看到以下三種用戶端行為之一:
- Amazon Bedrock 或 Agent Platform 格式:開發人員設定
CLAUDE_CODE_USE_BEDROCK=1搭配ANTHROPIC_BEDROCK_BASE_URL,或CLAUDE_CODE_USE_VERTEX=1搭配ANTHROPIC_VERTEX_BASE_URL,指向您的閘道。Claude Code 使用該提供者的模型 ID、請求欄位和預設值。 - Anthropic Messages 格式:開發人員將
ANTHROPIC_BASE_URL設定為您的閘道。Claude Code 將閘道視為 Claude API,無法判斷您轉發到哪個上游。 - Claude apps 閘道登入:開發人員登入 Claude apps 閘道。該閘道使用 Anthropic Messages 格式,但可以路由到任何上游,因此 Claude Code 只傳送 Amazon Bedrock 和 Agent Platform 也接受的
anthropic-beta值和模型功能假設。
按連線方法的請求和預設值
下表比較三種連線方法,每行一個行為。它省略了 Microsoft Foundry 和 Claude Platform on AWS,它們也使用 Anthropic Messages 格式,但 Claude Code 透過自己的變數到達它們。如需這些,請參閱 Microsoft Foundry 和 Claude Platform on AWS 頁面。
如需每個連線支援的功能以及它預設傳送給 Anthropic 的遙測,請參閱 功能可用性 和 按 API 提供者的預設行為。
無法識別的模型 ID 的設定
兩個用戶端設定會改變 Claude Code 對無法識別的模型 ID 的假設,無論開發人員使用哪種連線方法:- 內容視窗:Claude Code 假設 200K,或當 ID 帶有
[1m]時為 1M。若要宣告實際視窗,請參閱 更正閘道或自訂模型 ID 的視窗 - 功能:若要給閘道別名提供其背後模型的功能,請在您分發的設定中使用
modelOverrides項目將該模型的 Anthropic ID 對應到您的別名。如需ANTHROPIC_DEFAULT_*_MODEL_SUPPORTED_CAPABILITIES變數適用的位置,請參閱 功能傳遞
請求標頭
Claude Code 在 API 請求上包含這些標頭。標頭名稱在線路上不區分大小寫。轉發anthropic-version 和 anthropic-beta 不變,加上當上游是 AWS 上的 Claude Platform 時的 anthropic-workspace-id;其餘的 gateway 可以使用以進行路由、歸屬和追蹤,不需要轉發。
子代理 ID 在每次生成時都會新生成。隊友代理(代理團隊的命名成員)在重新連接時重複使用穩定的基於名稱的 ID。在兩種情況下,ID 都識別一個代理,而不是一個人或設備,因此不要將代理 ID 標頭視為使用者識別碼。
如果您的開發人員設定了
ANTHROPIC_CUSTOM_HEADERS,這些標頭也會出現在請求上。
Gateway 提示標頭
Claude Code 也可以傳送路由提示:gateway 或路由器可以用來排程、快取或歸屬請求的每個請求事實。需要 Claude Code v2.1.273 或更新版本。 請求是否攜帶它們取決於 Claude Code 將其傳送到何處:- 直接連接到 Anthropic API:預設傳送
- 自訂基礎 URL:預設關閉,因為拒絕未知標頭的代理會導致請求失敗。若要接收它們,請為您的開發人員設定
CLAUDE_CODE_GATEWAY_HINT_HEADERS=1,例如在受管設定的env區塊中 - 任何其他後端,包括 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 和 AWS 上的 Claude Platform:僅在設定
CLAUDE_CODE_GATEWAY_HINT_HEADERS=1時傳送
CLAUDE_CODE_GATEWAY_HINT_HEADERS 設定為 0 會停止每個連接上的標頭。
標頭只攜帶下面列出的內容:固定詞彙、工具名稱和持續時間,永遠不會是提示文字或檔案內容。每個值都是可列印的 ASCII。
在解析
x-claude-code-prev-tool-durations 之前,請檢查 Claude Code 如何建立該值以及它遺漏了什麼:
- 項目:每個執行的工具呼叫一個,按其結果被收集的順序,以整毫秒為單位
- 上限:Claude Code 最多傳送 32 個項目和 4 KB,保留第一個項目
- 編碼:工具名稱是百分比編碼的,涵蓋
%、;、=、逗號、空格和任何超出可列印 ASCII 的字元 - 解析:在
;上分割,然後在=上分割,並解碼每個名稱 - 缺失:壓縮呼叫、側面請求和新提示的第一個請求永遠不會攜帶它。不要將缺失的標頭讀作執行無工具的回合
- 時間:每個時間都排除了權限提示和 hooks,平行工具呼叫各自報告自己的時間,因此項目不會加起來等於請求之間的間隙
作為開放清單轉發
將標頭和請求體欄位視為開放清單,而不是封閉清單。Claude Code 在版本中獲得功能,它們作為新的anthropic-beta 值、新的請求體欄位以及偶爾新的 anthropic-* 或 x-claude-code-* 標頭到達。
轉發到 Anthropic 格式上游時,傳遞 anthropic-* 請求標頭和請求體欄位不變,而不是將您今天看到的列入允許清單。固定到觀察清單的 gateway 會移除下一個功能的標頭或欄位,並在引入它的版本上破壞它。
例外是非 Anthropic 上游(如 Amazon Bedrock 或 Google Cloud 的 Agent Platform),其中橋接架構差異是 gateway 的工作;請參閱功能傳遞。
回應標頭
Claude Code 讀取這些回應標頭以偵測停滯的串流、決定是否以及何時重試,以及顯示使用量限制。該表列出每個標頭應返回的內容。同時未修改地轉發錯誤回應本體,以便 Claude Code 的能力拒絕復原可以符合上游的錯誤措辭。系統提示歸屬區塊
Claude Code 在系統提示前面加上一個簡短的歸屬區塊,其中包含用戶端版本和從對話衍生的指紋。api.anthropic.com 端點在處理前移除該區塊,因此它不會影響第一方提示快取;任何其他上游都會將其作為提示的一部分接收。
該移除是位置性的,因此只有在 gateway 轉發 system 陣列保持不變時才有效。若要在不遺失其他系統內容的情況下將區塊排除在提示之外:
- 完全按照接收的方式轉發
system陣列,將區塊保持在最前面:在前面加上另一個系統區塊、重新排序陣列或將其轉換為單一字串會破壞移除,區塊隨後會到達模型和提示快取鍵。 - 將區塊保持在自己的陣列項目中:端點將以歸屬標頭開頭的合併區塊視為完整的歸屬並刪除合併到其中的所有內容,包括系統提示的其餘部分。
- 如果您的 gateway 必須重新塑造系統內容,請設定
CLAUDE_CODE_ATTRIBUTION_HEADER=0以便 Claude Code 省略該區塊。Anthropic 和雲提供者的 Claude 端點讀取該區塊以進行歸屬,因此要省略它,請在用戶端而不是在 gateway 中移除或移動它。
0:
- 請求進入
api.anthropic.com,ANTHROPIC_BASE_URL未設定或命名該主機,且未選擇第三方提供者。 - 作用中的認證不是 Anthropic 設定檔或聯盟認證。
0 也會從分類器請求中移除該區塊。在 v2.1.229 之前,此例外不存在:設定 0 會從這些分類器請求中移除該區塊,當 API 拒絕未識別的請求時,auto mode 在它發送給分類器的每個動作上都會失敗。
從 Claude Code v2.1.181 開始,當請求通過自訂基礎 URL 路由時,該區塊在對話的生命週期內是穩定的,因此以完整請求體為鍵的 gateway 端提示快取可以在不禁用它的情況下工作,且您的 gateway 轉發到的任何提供者都會接收穩定的提示前綴。在 v2.1.181 之前,該區塊包含每個請求的令牌,在請求的開始處改變了系統提示。在這些版本上,當您的 gateway 執行以下任一操作時,請設定 CLAUDE_CODE_ATTRIBUTION_HEADER=0:
- 實現以請求體為鍵的提示快取。
- 將請求轉發到第三方提供者,例如 Amazon Bedrock、Microsoft Foundry 或 Google Cloud 的 Agent Platform,採用 Anthropic Messages 格式或提供者自己的格式,其中變化的前綴會減少該提供者上的提示快取重複使用。
功能傳遞
Claude Code 將ANTHROPIC_BASE_URL gateway 視為 Anthropic 格式端點,並向其發送它發送給 api.anthropic.com 的測試版標頭和請求體欄位,除了為直接連接保留的一小組診斷和預設值,例如下面涵蓋的細粒度工具串流預設。該集合因版本而異,因此不要依賴其內容。
添加請求體欄位的功能將它們與測試版標頭配對,該對一起傳遞。移除標頭同時傳遞請求體的 gateway,或將 Anthropic 格式請求體轉發到具有不同架構的上游,會產生硬 400 錯誤;只有當兩個部分一起不存在時,功能才會安靜地關閉。重寫或編輯請求體以進行內容檢查的 gateway 會以與移除相同的方式破壞配對,因此請在不修改的情況下檢查。該表注意了功能偏離配對的位置。
細粒度工具串流是直接連接預設值之一:每當請求通過自訂基礎 URL 路由時,它預設為關閉,當開發人員設定 CLAUDE_CODE_ENABLE_FINE_GRAINED_TOOL_STREAMING=1 時,gateway 會接收它。
ANTHROPIC_DEFAULT_*_MODEL_SUPPORTED_CAPABILITIES 變數僅在提供者配置中聲明模型功能:CLAUDE_CODE_USE_BEDROCK、CLAUDE_CODE_USE_VERTEX、CLAUDE_CODE_USE_FOUNDRY 和 CLAUDE_CODE_USE_MANTLE。它們在 ANTHROPIC_BASE_URL gateway 後面沒有效果。
自動重試和錯誤轉發
Claude Code 在上游拒絕後的行為取決於被拒絕的內容:- 當上游拒絕
thinking欄位、中途對話系統訊息或這類訊息上的cache_control標記時,Claude Code 會重試請求並為對話的其餘部分禁用被拒絕的功能 - 當上游拒絕思考簽名時,包括以
400拒絕其中區塊bound to a different conversation時,Claude Code 會從請求中移除較早的思考區塊、重試,並將它們排除在每個後續請求之外。新回應仍包含思考 - 當 gateway 或其上游將顧問工具項目在
tools中拒絕為無法識別的工具類型時,Claude Code 會重試一次請求,不包含該項目及其anthropic-beta值。對該基礎 URL 的後續請求會將顧問排除在外,直到 Claude Code 退出,且/advisor對開發人員在該時間內不可用。Claude Code 通過400或422回應識別此拒絕,其訊息在Input tag後命名工具類型,例如Input tag 'advisor_20260301'。在 v2.1.280 之前,Claude Code 沒有重試此拒絕 - Claude Code 不會重試上下文管理或工具架構欄位的拒絕,因此這些
400錯誤會到達開發人員
bound to a different conversation 拒絕來自 API 的保留思考檢查,當 system、tools 或較早的 messages 內容與產生思考的請求不同時,該檢查會失敗。重寫任何該內容的 gateway 可能會導致拒絕本身;程式庫、代理和 gateway涵蓋要逐字轉發的內容。
重試邏輯與上游的錯誤措辭相匹配,因此不修改地轉發錯誤回應體。在自己的信封中包裝上游錯誤的 gateway 會破壞恢復路徑,即使它保留了狀態碼,除非信封的訊息攜帶穩定的 capability_rejected: 令牌。Claude 應用程式 gateway 為雲端提供者的錯誤措辭替換這些令牌,例如 capability_rejected: prompt_too_long。
禁用預發佈功能
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 停止 Claude Code 在每個提供者上發送預發佈功能及其請求體欄位,包括上下文管理和測試版工具欄位。該變數不影響自適應推理,後者由模型而不是測試版選擇。它永遠不會抑制訂閱驗證所需的 OAuth 功能。
在 Claude Code v2.1.227 或更新版本上,您的組織可以通過受管設定在此變數下保持 MCP 工具搜尋開啟。Claude Code 在該覆蓋就位時發送的內容取決於您如何連接:
- 在直接連接上,或通過設定了
ANTHROPIC_BASE_URL的 gateway,Claude Code 繼續發送工具搜尋測試版標頭、defer_loading工具欄位和tool_reference區塊,並移除其餘部分 - 在雲端提供者上,或通過 Claude 應用程式 gateway 登入,覆蓋沒有效果
模型發現
當ANTHROPIC_BASE_URL 指向公開 Anthropic Messages 格式的 gateway 時,Claude Code 可以在啟動時查詢 gateway 的 /v1/models 端點,並將返回的模型添加到 /model 選擇器。如果您或您的管理員在 modelPicker 陣容中設定 replaceBuiltInOptions,Claude Code 會從選擇器中隱藏發現的模型。
開發人員通過在自己的環境中或通過受管設定設定 CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1 來啟用它。預設情況下發現是關閉的,以便由共享 API 金鑰支持的 gateway 不會向每個使用者公開金鑰可以存取的每個模型。
發現何時運行
發現僅適用於 Anthropic Messages 格式。當以下情況時不運行:- 設定了任何
CLAUDE_CODE_USE_*提供者變數,即使也設定了ANTHROPIC_BASE_URL ANTHROPIC_BASE_URL未設定或指向api.anthropic.com
請求和回應
請求是GET /v1/models?limit=1000,超時時間為 3 秒,任何重定向都被視為失敗,因此認證不會洩露給重定向目標。回應緩慢或重定向 /v1/models 的 gateway,即使是 http 到 https,也會無聲地失敗發現;在配置的基礎 URL 處直接提供端點。
若要給緩慢的 gateway 更長的時間,請設定 CLAUDE_CODE_GATEWAY_MODEL_DISCOVERY_TIMEOUT_MS。該變數需要 Claude Code v2.1.269 或更新版本。
Claude Code 使用以下兩個認證標頭發送發現請求,並省略其值無法解析的標頭。發送兩個標頭需要 Claude Code v2.1.248 或更新版本。較早的版本在設定 ANTHROPIC_AUTH_TOKEN 時僅發送 Authorization,否則僅發送 x-api-key。
Authorization:ANTHROPIC_AUTH_TOKEN作為持有人令牌,否則apiKeyHelper值作為持有人令牌。在這種情況下,Claude Code 會等待幫助程式返回後再發送請求。x-api-key:Claude Code 解析的 API 金鑰,例如ANTHROPIC_API_KEY。當幫助程式值是唯一的認證時,此標頭也會攜帶它,因此該值會在兩個標頭中到達。
ANTHROPIC_CUSTOM_HEADERS 的任何標頭。當自訂標頭具有非空值時,Claude Code 會發送它來代替同名的內建標頭,不區分大小寫地匹配名稱。
當兩個認證標頭的值都無法解析時,Claude Code 會跳過發現,並在 claude --debug 工作階段的偵錯日誌中寫入 [gatewayDiscovery] skipped 行。如果您僅通過 ANTHROPIC_CUSTOM_HEADERS 提供認證,Claude Code 仍會跳過發現。
Claude Code 從回應的 data 陣列中的每個條目讀取 id、可選的 display_name 和可選的 description:
id 中的任何位置包含 claude 或 anthropic 時保留條目,不區分大小寫,並忽略其餘的。提供者前綴的 ID(例如 vertex_ai/claude-sonnet-4-6 或 bedrock/anthropic.claude-sonnet-4-5)通過篩選器;不包含任何一個子字符串的 ID 則不通過。在 v2.1.223 之前,Claude Code 僅在其 id 以 claude 或 anthropic 開頭時保留條目,這隱藏了提供者前綴的 ID。
選擇器條目和快取
選擇器是當開發人員在 Claude Code 中運行/model 時打開的互動式模型清單。每個發現的條目在 gateway 發送與 id 不同的條目時使用 display_name 作為其名稱。否則,當 Claude Code 識別 id 時,條目會顯示模型的名稱,當它不識別時顯示 id。例如,具有 id my-gateway-claude-sonnet-4-6 且沒有 display_name 的條目顯示為 Sonnet 4.6。
發現僅添加 availableModels 受管設定 允許的模型。
每個條目也會顯示模型的 description,折疊為一行。沒有 description 的條目改為讀取「來自 gateway」。在 v2.1.257 之前,每個發現的條目都讀取「來自 gateway」。
當發現的 ID 與選擇器中已有的列匹配時,它不會獲得自己的列:
- 相同 ID:發現的 ID 完全匹配現有列的 ID,或兩個 ID 是同一 Fable 版本的拼寫。
- 與內建別名相同的模型:當發現的明確 ID 命名內建別名目前解析到的模型時,選擇器僅顯示別名列。例如,當
sonnet解析為claude-sonnet-5時,發現的claude-sonnet-5會折疊到sonnet列中,而發現的claude-sonnet-4-6仍會獲得自己的列。在 v2.1.197 之前,Claude Code 沒有將這些 ID 折疊到內建列中,因此claude-sonnet-5也會獲得自己的「來自 gateway」列。
~/.claude/cache/gateway-models.json,或在 Windows 上 %USERPROFILE%\.claude\cache\gateway-models.json,並在每次啟動時刷新。如果您設定 CLAUDE_CONFIG_DIR,快取會改為位於該目錄下。如果請求失敗或 gateway 未實現 /v1/models,選擇器會回退到上次啟動的快取清單或內建模型清單。如果您的 gateway 在不匹配發現篩選器的別名下提供 Claude 模型,開發人員可以使用模型配置變數手動添加這些別名。
相關資源
有關 gateway 文件集的其餘部分和基礎 API 參考:- Gateway 概述:什麼是 gateway 以及如何在 Claude 應用程式 gateway 和其他產品之間進行選擇
- 其他 LLM gateway:如何推出您的組織執行的 gateway 以及它如何與 claude.ai 訂閱互動
- 為您的組織推出 LLM gateway:使用此指南的管理員檢查清單
- 將 Claude Code 連接到 LLM gateway:每個開發人員的配置和故障排除表
- 測試版標頭參考:目前的
anthropic-beta值集合 - Messages API:Anthropic 格式 gateway 實現的 API 格式