Claude CodeをDeepSeek V4、OpenRouter、またはその他のサードパーティモデルプロバイダーに接続しようとした際、おそらく`Invalid custom3p enterprise config`というエラーに遭遇したことでしょう。このエラーは不可解であり、ドキュメントでも明確に説明されておらず、Claude Codeが公式にサポートしている機能を妨げます。
このガイドでは、「custom3p」が正確に何を意味するのか、設定が失敗する最も一般的な6つの理由、そしてそれぞれの段階的な修正方法を詳しく解説します。DeepSeekやLiteLLMのようなLLMゲートウェイを通じてClaude Codeのエージェントループを実行しようとしている場合、ここで動作する設定例を見つけることができます。
まとめ
`Invalid custom3p enterprise config`は、Claude Codeがサードパーティプロバイダーの設定を検証できないことを意味します。「custom3p」は、`ANTHROPIC_BASE_URL`を介して設定されたAnthropic以外のAPIエンドポイントに対するClaude Codeの内部ラベルです。最も一般的な原因は、ベースURL末尾の`/v1`、誤った認証情報変数、不正な形式の`settings.json`、および新規インストールでのオンボーディング未完了です。まずURL形式を修正することで、およそ60%のケースが解決します。
「custom3p」とは一体何を意味するのか
Claude Codeはリクエストを以下の4つのモードのいずれかを通じてルーティングします。
| モード | トリガー方法 |
|---|---|
| Anthropic API (デフォルト) | オーバーライド設定なし |
| Amazon Bedrock | CLAUDE_CODE_USE_BEDROCK=1 |
| Google Vertex AI | CLAUDE_CODE_USE_VERTEX=1 |
| Microsoft Foundry | CLAUDE_CODE_USE_FOUNDRY=1 |
| カスタムサードパーティ | ANTHROPIC_BASE_URLがそれ以外のものを指す場合 |
最後の行は「custom3p」、すなわちカスタムサードパーティです。`ANTHROPIC_BASE_URL`がAnthropic以外のホスト(LiteLLM、OpenRouter、ローカルvLLMサーバー、企業のゲートウェイ)に設定されている場合、Claude Codeはそのパスを内部的に「custom3p」とラベル付けし、最初API呼び出しの前に検証チェックを実行します。
このチェックが失敗すると、`Invalid custom3p enterprise config`が表示されます。
このエラーは、Anthropicが2026年にサードパーティハーネスに課した制限よりも前から存在します。これは設定検証エラーであり、ポリシーによるブロックではないため、修正が可能です。
なぜ開発者は今、このエラーに直面しているのか
2026年4月、Anthropicは、Claude CodeクライアントIDを偽装してClaude ProおよびMaxのサブスクリプションアクセスを取得していたサードパーティのagenticツールへのアクセスをブロックしました。Claude Codeセッションを独自のバックエンド経由でルーティングしていたOpenClawのようなツールは、一夜にして機能しなくなりました。
これは、この記事がカバーする内容とは別の問題です。
その次に起こったこと、それが皆さんがこの記事を読んでいる理由です。開発者たちは、Claude Codeの*公式の*サードパーティプロバイダーサポートを利用して、より安価なバックエンド経由でルーティングし始めました。Redditスレッドでは、Claude CodeのエージェントループをOpenRouter経由でDeepSeek V4 Proに切り替えることが記録されており、出力トークン100万あたり$0.87とAnthropicの$15を比較すると、約17倍のコスト削減になります。DeepClaudeのようなプロジェクトは、これを1つのコマンドでセットアップできるようにパッケージ化しました。
しかし問題は、Anthropicの公式サードパーティプロバイダーサポートには、正しいエンタープライズ設定が必要であるということです。1つのフィールドを間違えると、`Invalid custom3p enterprise config`に遭遇します。ほとんどのオンラインガイドは、エンタープライズ設定をスキップするか、誤ったURL形式を示しています。
根本原因1:`ANTHROPIC_BASE_URL`末尾の`/v1`
これは最もよくある間違いです。Claude Codeは、設定したURLに自動的に`/v1/messages`を追加します。ベースURLにすでに`/v1`が含まれている場合、最終的なパスは`/v1/v1/messages`となり、404エラーが返されます。
誤り:
export ANTHROPIC_BASE_URL="https://api.openrouter.ai/api/v1"
誤り:
export ANTHROPIC_BASE_URL="https://litellm.yourcompany.com/v1"
正しい:
export ANTHROPIC_BASE_URL="https://api.openrouter.ai/api"
正しい:
export ANTHROPIC_BASE_URL="https://litellm.yourcompany.com"
Claude Codeが実際にアクセスしている最終的なURLを確認するには、以下のcurlを実行してください。
curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
"${ANTHROPIC_BASE_URL}/v1/messages" \
-d '{"model":"claude-sonnet-4-6","max_tokens":1,"messages":[{"role":"user","content":"hi"}]}'
`200`または`400`(不正なリクエストだがエンドポイントは存在する)が返される場合、URLは正しいです。`404`が返される場合、まだ`/v1`の問題が残っています。
根本原因2:誤った認証情報変数
Claude Codeは、状況に応じて2つの異なる環境変数を使用して認証を行います。これらを混同すると、エンタープライズ設定の検証がサイレントに失敗します。
| 変数 | 送信形式 | 使用タイミング |
|---|---|---|
ANTHROPIC_API_KEY |
x-api-keyヘッダー |
APIキー認証を想定するAnthropic形式のゲートウェイ |
ANTHROPIC_AUTH_TOKEN |
Authorization: Bearerヘッダー |
OAuth形式のゲートウェイ、LiteLLM、ほとんどのOpenRouter設定 |
例えば、OpenRouterはベアラートークンを想定しています。
export ANTHROPIC_AUTH_TOKEN="sk-or-your-openrouter-key"
export ANTHROPIC_BASE_URL="https://openrouter.ai/api"
OpenRouterで`ANTHROPIC_API_KEY`を使用すると、OpenRouterが無視する`x-api-key`ヘッダーが送信され、リクエストの認証が失敗し、Claude Codeはそれを無効なエンタープライズ設定として報告します。
LiteLLMの場合:
export ANTHROPIC_AUTH_TOKEN="sk-litellm-your-virtual-key"
export ANTHROPIC_BASE_URL="https://your-litellm-server:4000"
DeepSeekゲートウェイまたはAPIキーで実行されているローカルvLLMサーバーの場合:
export ANTHROPIC_API_KEY="your-key-here"
export ANTHROPIC_BASE_URL="https://your-vllm-server"
使用しているゲートウェイの認証ドキュメントを確認し、どのヘッダーを想定しているかを確かめてください。
根本原因3:`settings.json`の形式が不正
`~/.claude/settings.json`で環境変数ではなくベースURLと認証情報を設定している場合、JSONの書式設定エラーが原因で、リクエストが送信される前にエンタープライズ設定が失敗します。
最もよくある間違い:
末尾のカンマ(不正なJSON):
{
"env": {
"ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
"ANTHROPIC_AUTH_TOKEN": "sk-or-your-key", ← 末尾のカンマ
}
}
カール/スマートクォート(ドキュメントやWordからのコピペ):
{
"env": {
"ANTHROPIC_BASE_URL": "https://openrouter.ai/api" ← 誤ったクォート
}
}
正しい形式:
{
"env": {
"ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
"ANTHROPIC_AUTH_TOKEN": "sk-or-your-openrouter-key"
}
}
Claude Codeを起動する前に設定ファイルを検証してください:
python3 -c "import json; json.load(open('~/.claude/settings.json'.replace('~', __import__('os').path.expanduser('~'))))" && echo "Valid JSON"
または`jq`を使用します:
jq . ~/.claude/settings.json
ここでパースエラーが発生した場合、エンタープライズ設定の検証が完了しません。Claude Codeは設定を読み取れないため、設定全体を無効としてフラグを立てます。
根本原因4:新規インストールでオンボーディングが完了していない
Claude Codeは、`settings.json`からエンタープライズ設定を読み込む前に、`~/.claude.json`で`hasCompletedOnboarding: true`を確認します。新規インストールではこのフラグが設定されていないため、Claude Codeはカスタムサードパーティ設定をスキップし、標準フローを通じて認証を試みます。Anthropicサブスクリプションが設定されていない場合、これは失敗します。
現在の状態を確認してください:
cat ~/.claude.json | python3 -m json.tool 2>/dev/null | grep hasCompletedOnboarding
そのキーが存在しないかfalseの場合、Claude Codeはオンボーディングモードであり、`settings.json`のエンタープライズ設定は読み込まれません。
修正方法: オンボーディングフラグを`~/.claude.json`に追加します:
{
"hasCompletedOnboarding": true,
"primaryApiKey": "sk-placeholder"
}
`primaryApiKey`の値はプレースホルダーです。これはエンタープライズ設定によって上書きされます。フォーマットチェックを通過させるために、`sk-`で始まる任意の値を設定してください。保存後、Claude Codeを再起動します。
根本原因5:ゲートウェイが必要なヘッダーを転送していない
Claude Codeのエンタープライズ設定検証には、機能のハンドシェイクが含まれます。これは、利用可能な機能について交渉するために`anthropic-beta`ヘッダーをゲートウェイに送信します。ゲートウェイがこのヘッダーを削除すると、Claude Codeは期待する応答と一致しない応答を受け取り、`Invalid custom3p enterprise config`を報告します。
ゲートウェイが転送する必要がある必須ヘッダー:
anthropic-beta
anthropic-version
X-Claude-Code-Session-Id
LiteLLMでは、v1.82.9以降ではデフォルトで機能します。カスタムプロキシやnginxの設定では、ヘッダー転送を明示的に追加してください:
location /v1/ {
proxy_pass http://backend;
proxy_set_header anthropic-beta $http_anthropic_beta;
proxy_set_header anthropic-version $http_anthropic_version;
proxy_set_header X-Claude-Code-Session-Id $http_x_claude_code_session_id;
}
ベータヘッダーを転送するようにゲートウェイを修正できない場合は、起動前にこれを設定してください:
export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
これにより、Claude Codeはベータヘッダーを必要とする機能をスキップし、ベータヘッダーを転送できないゲートウェイ経由でもリクエストが成功するようになります。一部の実験的機能にはアクセスできなくなりますが、コアエージェントループは機能します。
根本原因6:エンタープライズポリシーの競合
TeamまたはEnterprise Claudeプランをご利用で、管理者が管理設定をデプロイしている場合、それらの設定は`~/.claude/settings.json`や環境変数を含む他のすべてよりも優先されます。`availableModels`を制限したり、カスタムベースURLをブロックしたりする管理ポリシーは、ローカル設定が正しくても`Invalid custom3p enterprise config`を引き起こします。
管理設定が有効かどうかを確認します:
ls ~/.claude/managed-settings.json 2>/dev/null && echo "管理設定が見つかりました"
またはClaude Codeの中から:
/status
「管理設定」が有効と表示されている場合、管理者に相談する必要があります。管理者は次のいずれかの対応が可能です:
- 許可されたベースURLにゲートウェイドメインを追加する
- ゲートウェイのモデルIDを含む`availableModels`リストを作成する
- カスタムベースURLの制限からあなたを除外する
自分で管理するエンタープライズデプロイメントの場合、管理設定は`/Library/Application Support/ClaudeCode/managed-settings.json` (macOS) またはWindows/Linuxの同等のパスに配置されます。
完全な動作構成例
Claude Code + OpenRouter (DeepSeek V4 Pro)
OpenRouterはAnthropic互換APIを公開しています。この構成は、DeepSeek V4 Proを通じてClaude Codeの完全なエージェントループを実行します。
`~/.claude/settings.json`内:
{
"env": {
"ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
"ANTHROPIC_AUTH_TOKEN": "sk-or-your-openrouter-key",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek/deepseek-v4-pro",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek/deepseek-v4-pro",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek/deepseek-v4-pro"
}
}
Claude CodeはベースURLを変更した場合でもデフォルトで`claude-sonnet-4-6`を使用するため、モデル名のオーバーライドが必要です。モデルを固定しない場合、リクエストは`claude-sonnet-4-6`を要求してOpenRouterに到達します。これは成功する可能性もありますが(OpenRouterもClaudeをサポートしているため)、プランによっては正しくルーティングされない場合があります。
注:OpenRouterは、ツール呼び出しに関するAnthropicのストリーミング仕様を完全に実装していません。一部のエッジケースでは、関数呼び出しの引数が空で届く可能性があります。主要なエージェントループは機能しますが、複雑なマルチツールチェーンが中断される可能性があります。更新については、OpenRouterの互換性ステータスを追跡してください。
Claude Code + LiteLLM (任意のプロバイダー)
LiteLLMはClaude Codeにとって最も互換性の高いゲートウェイです。ヘッダー転送を正しく処理し、OpenAI、Anthropic、Vertex、Bedrock、Hugging Faceモデル間でのモデルルーティングをサポートします。
LiteLLM `config.yaml`:
model_list:
- model_name: claude-sonnet-4-6
litellm_params:
model: deepseek/deepseek-v4
api_key: "sk-your-deepseek-key"
- model_name: claude-opus-4-7
litellm_params:
model: deepseek/deepseek-v4-pro
api_key: "sk-your-deepseek-key"
Claude Code `~/.claude/settings.json`:
{
"env": {
"ANTHROPIC_BASE_URL": "http://localhost:4000",
"ANTHROPIC_AUTH_TOKEN": "sk-litellm-your-key"
}
}
この設定では、Claude Codeはモデルフィールドに`claude-sonnet-4-6`を送信します。LiteLLMがこれを傍受し、DeepSeek V4にルーティングするため、Claude Codeの設定でモデル名をオーバーライドする必要はありません。
Claude Code + ローカルvLLM
vLLMによるローカルモデル推論の場合、Anthropic互換モードでサーバーを起動します:
python -m vllm.entrypoints.openai.api_server \
--model deepseek-ai/DeepSeek-V3 \
--dtype auto \
--api-key local-key \
--port 8000
次にClaude Codeを設定します:
export ANTHROPIC_BASE_URL="http://localhost:8000"
export ANTHROPIC_API_KEY="local-key"
export ANTHROPIC_DEFAULT_SONNET_MODEL="deepseek-ai/DeepSeek-V3"
エラーのデバッグ
上記の修正のいずれも機能しない場合は、デバッグロギングを有効にしてClaude Codeを実行してください:
claude --debug 2>&1 | head -100
デバッグ出力には、呼び出された正確なURL、送信されたヘッダー、および受信した応答が表示されます。以下を探してください:
Sending request to:— ベースURLを確認Response status:— ゲートウェイからのHTTPステータスenterprise config error:— 内部検証メッセージ
ゲートウェイ側のデバッグの場合、Claude Codeが送信する正確なリクエストをテストしてください:
curl -v -X POST "${ANTHROPIC_BASE_URL}/v1/messages" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${ANTHROPIC_AUTH_TOKEN}" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: max-tokens-3-5-sonnet-2024-07-15" \
-d '{
"model": "claude-sonnet-4-6",
"max_tokens": 10,
"messages": [{"role": "user", "content": "hi"}]
}'
有効なゲートウェイは、メッセージ構造を含む200を返します。401、403、または422を受け取った場合、それはゲートウェイ側の認証またはフォーマットの問題であり、Claude Codeの設定の問題ではありません。
ApidogでAPIをテストする
サードパーティプロバイダーの統合をデバッグする場合、Apidogを使用すると、LLMゲートウェイを通過する正確なリクエストとレスポンスを簡単に検査できます。ゲートウェイの`/v1/messages`エンドポイントのコレクションを作成し、動作するリクエストテンプレートを保存し、Claude Codeを毎回再実行することなくプロバイダー間でレスポンスを比較できます。
Apidogをダウンロードし、ゲートウェイURLを指す新しいコレクションを作成します。`anthropic-version`、`anthropic-beta`、および`Authorization`ヘッダーをコレクションレベル変数として追加します。そうすることで、すべてのリクエストを編集する代わりに1つの変数を変更するだけで、異なるゲートウェイ構成をテストできます。

これは、`Invalid custom3p enterprise config`をトリガーするヘッダー転送の問題をデバッグする際に特に役立ちます。Claude Codeの設定でバグを探す時間を無駄にする前に、ゲートウェイがどのヘッダーを通過させるかを確認できます。
知っておくべきClaude Code関連設定
ベータヘッダー依存を無効にする
一部のエンタープライズゲートウェイはカスタムヘッダーを転送できません。それがあなたの状況である場合:
export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
これにより、エンタープライズ設定の検証からベータ機能ハンドシェイクが削除されます。エージェントループは引き続き機能しますが、ベータヘッダーによって制限される機能(一部の拡張思考バリアント、特定のツール呼び出し形式)にはアクセスできなくなります。
ゲートウェイ検出機能付きモデルピッカー
Claude Code v2.1.129以降では、ゲートウェイのモデルリストから`/model`ピッカーを自動的に設定できます:
export CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1
Claude Codeは起動時にゲートウェイの`/v1/models`エンドポイントをクエリし、検出されたモデルをピッカーに追加します。`claude`または`anthropic`で始まるIDを持つモデルのみが追加されます。DeepSeekのような他のモデルについては、`ANTHROPIC_DEFAULT_SONNET_MODEL`で手動で固定してください。
カスタムモデルピッカーエントリ
他の設定に影響を与えることなく、単一のカスタムモデルをピッカーに追加します:
export ANTHROPIC_CUSTOM_MODEL_OPTION="deepseek/deepseek-v4-pro"
export ANTHROPIC_CUSTOM_MODEL_OPTION_NAME="DeepSeek V4 Pro"
export ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION="Claude Opusより17倍安価"
これは`/model`ピッカーの下部に表示され、セッション中にゲートウェイモデルとデフォルトのClaudeモデルを簡単に切り替えることができます。
関連ガイド
カスタムモデルバックエンドでClaude Codeのエージェント機能を検討している場合、以下の記事が関連するトピックをカバーしています:
- API開発チーム向けのAGENTS.mdファイルの書き方 — 特定のスタックに合わせてClaude Codeの動作を設定する
- Ruflo: Claude Codeのためのマルチエージェントオーケストレーション — スウォーム、永続メモリ、100以上のMCPツールをClaude Codeに追加する
- Puter.js経由で無料かつ無制限のClaude APIを入手 — クライアントアプリを構築している場合のブラウザベースの代替手段
- 2026年版最高のローカルLLM — vLLMを通じてローカルで推論を実行したい場合
よくある質問
Claude Codeでサードパーティプロバイダーを使用することはAnthropicの規約に違反しますか?
いいえ。Anthropicは、Bedrock、Vertex AI、Foundry、およびカスタムゲートウェイ経由のルーティングに関する`ANTHROPIC_BASE_URL`パターンを文書化し、公式にサポートしています。2026年4月にAnthropicがブロックしたのは、Claude CodeクライアントIDを*偽装して*Anthropic自身のAPIにサブスクリプション料金でアクセスしようとするサードパーティツールでした。独自のゲートウェイやOpenRouterのようなプロバイダーを独自のAPIキーで使用することは、まったく別の話です。
Claude CodeのエージェントループはDeepSeek V4 Proで動作しますか?
コアとなるループ(ファイル編集、シェルコマンド、複数ステップのタスク)は動作します。サードパーティプロバイダー経由では動作しないものが2つあります:MCPサーバーツールと画像/ビジョン入力です。これらの機能が必要な場合は、Anthropic APIまたはBedrock/Vertexを使用する必要があります。
エンタープライズプランではないのに、なぜエラーが「エンタープライズ設定」と表示されるのですか?
Claude Codeは、サブスクリプションのティアに関係なく、すべてのサードパーティプロバイダー設定に「エンタープライズ設定」というラベルを使用します。これはコードレベルのラベルであり、プランの制限ではありません。無料またはProティアの個人開発者もカスタムサードパーティプロバイダーを設定して使用できます。
セッション中にAnthropicとサードパーティプロバイダーを切り替えることはできますか?
単一のセッション内ではできません。ベースURLは起動時に読み込まれます。プロバイダーを切り替えるには、Claude Codeを終了し、環境変数または設定を変更して、新しいセッションを開始します。DeepClaudeツールは、環境切り替えを処理するCLIフラグ(`--backend ds`、`--backend anthropic`)でこれをラップしています。
私のゲートウェイは企業ファイアウォールの背後にあります。Claude Codeはプロキシ設定をサポートしていますか?
はい。起動前に`HTTPS_PROXY`を設定してください:
export HTTPS_PROXY="http://your-proxy:8080"
export ANTHROPIC_BASE_URL="https://your-internal-gateway"
企業プロキシによるTLSインターセプトの場合、CA証明書を追加してください:
export NODE_EXTRA_CA_CERTS="/path/to/corporate-ca-bundle.pem"
curlテストは機能するのにエラーが表示されます。何が違うのですか?
Claude Codeは、curlでは再現されない追加のプリフライト検証リクエストを行います。`--debug`オプションを付けてClaude Codeを実行し、正確なプリフライトリクエストを確認し、curlテストと比較してください。一般的な違いは、`anthropic-beta`ヘッダー、`X-Claude-Code-Session-Id`ヘッダー、および検証リクエストの正確なJSONボディ形式です。
結論
`Invalid custom3p enterprise config`は設定検証エラーであり、ポリシーによるブロックではありません。まず`ANTHROPIC_BASE_URL`の形式(`/v1`を削除)を修正し、次に認証情報変数(`ANTHROPIC_AUTH_TOKEN`と`ANTHROPIC_API_KEY`)を確認し、`settings.json`のJSONエラーを検証し、新規インストールでオンボーディングが完了していることを確認してください。
設定が検証されると、Claude Codeの完全なエージェントループは選択したバックエンドを通じて実行されます。OpenRouterまたはLiteLLM経由のDeepSeek V4 Proは、Anthropic APIのコストのわずかな一部でClaude Codeのユースケースの大部分をカバーします。主な制限はMCPツールとビジョン入力であり、これらにはAnthropic APIが必要です。
