Jika Anda mengarahkan Claude Code ke DeepSeek V4, OpenRouter, LiteLLM, vLLM, atau penyedia model pihak ketiga lain, error ini mungkin muncul: Invalid custom3p enterprise config. Artinya Claude Code gagal memvalidasi konfigurasi provider non-Anthropic sebelum request pertama dikirim.
Panduan ini menjelaskan arti custom3p, penyebab umum error tersebut, dan langkah implementasi untuk memperbaikinya. Fokusnya: konfigurasi Claude Code dengan gateway LLM seperti OpenRouter, LiteLLM, DeepSeek, atau vLLM lokal.
TL;DR
Invalid custom3p enterprise config berarti Claude Code tidak bisa memvalidasi konfigurasi penyedia pihak ketiga.
custom3p adalah label internal Claude Code untuk endpoint API non-Anthropic yang dikonfigurasi lewat:
ANTHROPIC_BASE_URL
Penyebab paling umum:
-
ANTHROPIC_BASE_URLmemakai trailing/v1 - Salah memilih
ANTHROPIC_AUTH_TOKENvsANTHROPIC_API_KEY -
~/.claude/settings.jsontidak valid - Instalasi baru belum menyelesaikan onboarding
- Gateway tidak meneruskan header yang dibutuhkan
- Ada konflik kebijakan enterprise/managed settings
Mulai dari URL dulu. Menghapus trailing /v1 biasanya menyelesaikan sebagian besar kasus.
Apa arti sebenarnya custom3p
Claude Code merutekan request melalui beberapa mode:
| Mode | Cara terpicu |
|---|---|
| API Anthropic default | Tidak ada override |
| Amazon Bedrock | CLAUDE_CODE_USE_BEDROCK=1 |
| Google Vertex AI | CLAUDE_CODE_USE_VERTEX=1 |
| Microsoft Foundry | CLAUDE_CODE_USE_FOUNDRY=1 |
| Pihak ketiga kustom |
ANTHROPIC_BASE_URL menunjuk ke endpoint lain |
Mode terakhir adalah custom3p, singkatan dari custom third-party provider.
Saat Anda mengatur ANTHROPIC_BASE_URL ke host non-Anthropic seperti LiteLLM, OpenRouter, vLLM lokal, atau gateway internal perusahaan, Claude Code menjalankan validasi konfigurasi sebelum API call pertama.
Jika validasi gagal, Anda mendapatkan:
Invalid custom3p enterprise config
Ini adalah error konfigurasi, bukan pemblokiran kebijakan. Jadi biasanya bisa diperbaiki dari sisi environment, JSON config, atau gateway.
Mengapa banyak developer mengalami error ini
Pada April 2026, Anthropic memblokir akses langganan Claude Pro dan Max untuk alat agen pihak ketiga yang memalsukan ID klien Claude Code. Tool seperti OpenClaw yang merutekan sesi Claude Code melalui backend mereka sendiri berhenti berfungsi.
Itu masalah berbeda.
Yang dibahas di sini adalah penggunaan dukungan provider pihak ketiga resmi Claude Code. Banyak developer mulai merutekan Claude Code melalui backend yang lebih murah, misalnya DeepSeek V4 Pro melalui OpenRouter. Thread komunitas juga membahas biaya sekitar $0.87 per juta token output dibandingkan $15 dari Anthropic. Proyek seperti DeepClaude mengemas setup ini menjadi satu perintah.
Masalahnya: dukungan resmi ini tetap membutuhkan konfigurasi enterprise/custom provider yang valid. Satu field salah bisa memicu Invalid custom3p enterprise config.
Penyebab 1: trailing /v1 di ANTHROPIC_BASE_URL
Ini penyebab paling sering.
Claude Code otomatis menambahkan path:
/v1/messages
ke URL dasar yang Anda set.
Jika Anda sudah memasukkan /v1 di ANTHROPIC_BASE_URL, path akhirnya menjadi:
/v1/v1/messages
Hasilnya biasanya 404.
Salah
export ANTHROPIC_BASE_URL="https://api.openrouter.ai/api/v1"
export ANTHROPIC_BASE_URL="https://litellm.yourcompany.com/v1"
Benar
export ANTHROPIC_BASE_URL="https://api.openrouter.ai/api"
export ANTHROPIC_BASE_URL="https://litellm.yourcompany.com"
Verifikasi endpoint
Jalankan test berikut:
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"}]}'
Interpretasi hasil:
| Status | Arti |
|---|---|
200 |
Endpoint benar dan request diterima |
400 |
Endpoint ada, body/header mungkin belum tepat |
404 |
URL salah, biasanya karena /v1 dobel |
401 / 403
|
Masalah autentikasi |
Penyebab 2: variabel kredensial salah
Claude Code memakai dua variabel autentikasi berbeda:
| Variabel | Header yang dikirim | Cocok untuk |
|---|---|---|
ANTHROPIC_API_KEY |
x-api-key |
Gateway format Anthropic yang memakai API key |
ANTHROPIC_AUTH_TOKEN |
Authorization: Bearer |
OpenRouter, LiteLLM, gateway OAuth/bearer token |
Jika gateway mengharapkan bearer token tetapi Anda memakai ANTHROPIC_API_KEY, request akan gagal walaupun key-nya benar.
OpenRouter
OpenRouter biasanya memakai bearer token:
export ANTHROPIC_AUTH_TOKEN="sk-or-kunci-openrouter-anda"
export ANTHROPIC_BASE_URL="https://openrouter.ai/api"
Jangan gunakan ini untuk OpenRouter jika gateway Anda mengharapkan bearer token:
export ANTHROPIC_API_KEY="sk-or-kunci-openrouter-anda"
Karena Claude Code akan mengirim header:
x-api-key: sk-or-kunci-openrouter-anda
bukan:
Authorization: Bearer sk-or-kunci-openrouter-anda
LiteLLM
export ANTHROPIC_AUTH_TOKEN="sk-litellm-kunci-virtual-anda"
export ANTHROPIC_BASE_URL="https://server-litellm-anda:4000"
Gateway DeepSeek atau vLLM lokal dengan API key
export ANTHROPIC_API_KEY="kunci-anda-di-sini"
export ANTHROPIC_BASE_URL="https://server-vllm-anda"
Selalu cek dokumentasi gateway untuk memastikan header autentikasi yang diharapkan.
Penyebab 3: settings.json salah format
Jika konfigurasi disimpan di:
~/.claude/settings.json
Claude Code harus bisa membaca JSON tersebut sebelum menjalankan validasi provider.
Salah: trailing comma
{
"env": {
"ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
"ANTHROPIC_AUTH_TOKEN": "sk-or-kunci-anda",
}
}
JSON tidak mengizinkan koma terakhir.
Salah: smart quotes
{
"env": {
“ANTHROPIC_BASE_URL”: “https://openrouter.ai/api”
}
}
Gunakan tanda kutip biasa:
"
bukan smart quotes.
Benar
{
"env": {
"ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
"ANTHROPIC_AUTH_TOKEN": "sk-or-kunci-openrouter-anda"
}
}
Validasi file JSON
Dengan Python:
python3 -c "import json, os; json.load(open(os.path.expanduser('~/.claude/settings.json')))" && echo "JSON valid"
Dengan jq:
jq . ~/.claude/settings.json
Jika parsing gagal, Claude Code tidak akan sampai ke tahap request API.
Penyebab 4: instalasi baru belum menyelesaikan onboarding
Claude Code mengecek:
~/.claude.json
dan mencari flag:
"hasCompletedOnboarding": true
Pada instalasi baru, flag ini bisa belum ada. Akibatnya Claude Code masuk mode onboarding dan tidak membaca konfigurasi custom provider dari settings.json.
Cek status onboarding
cat ~/.claude.json | python3 -m json.tool 2>/dev/null | grep hasCompletedOnboarding
Jika key tidak ada atau bernilai false, tambahkan konfigurasi berikut.
Perbaikan
Edit ~/.claude.json:
{
"hasCompletedOnboarding": true,
"primaryApiKey": "sk-placeholder"
}
primaryApiKey hanya placeholder. Nilainya akan digantikan konfigurasi provider Anda. Gunakan nilai yang diawali sk- agar lolos validasi format.
Setelah itu restart Claude Code.
Penyebab 5: gateway tidak meneruskan header yang dibutuhkan
Claude Code melakukan handshake fitur dengan mengirim beberapa header ke gateway.
Header penting yang sebaiknya diteruskan:
anthropic-beta
anthropic-version
X-Claude-Code-Session-Id
Jika gateway menghapus header ini, respons yang diterima Claude Code bisa tidak sesuai ekspektasi dan memicu:
Invalid custom3p enterprise config
Contoh konfigurasi 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;
}
Untuk LiteLLM, penerusan header ini berfungsi secara default sejak v1.82.9+.
Jika gateway tidak bisa meneruskan header beta
Set variabel ini sebelum menjalankan Claude Code:
export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
Ini meminta Claude Code melewati fitur yang membutuhkan header beta. Loop agen inti tetap berjalan, tetapi beberapa fitur eksperimental tidak tersedia.
Penyebab 6: konflik kebijakan enterprise
Jika Anda memakai paket Team atau Enterprise Claude, admin bisa menerapkan managed settings yang mengalahkan konfigurasi lokal.
Managed settings dapat membatasi:
availableModels- URL dasar kustom
- provider tertentu
- konfigurasi environment
Cek apakah managed settings aktif:
ls ~/.claude/managed-settings.json 2>/dev/null && echo "Pengaturan terkelola ditemukan"
Atau dari dalam Claude Code:
/status
Jika managed settings aktif, minta admin untuk:
- menambahkan domain gateway ke daftar URL yang diizinkan
- menambahkan ID model gateway ke
availableModels - memberi pengecualian untuk custom base URL
Untuk deployment yang Anda kontrol, file managed settings biasanya berada di:
/Library/Application Support/ClaudeCode/managed-settings.json
di macOS, atau path setara di Windows/Linux.
Konfigurasi kerja lengkap
Claude Code + OpenRouter + DeepSeek V4 Pro
Gunakan konfigurasi ini di:
~/.claude/settings.json
{
"env": {
"ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
"ANTHROPIC_AUTH_TOKEN": "sk-or-kunci-openrouter-anda",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek/deepseek-v4-pro",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek/deepseek-v4-pro",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek/deepseek-v4-pro"
}
}
Override model diperlukan karena Claude Code default-nya tetap mengirim model seperti:
claude-sonnet-4-6
meskipun Anda sudah mengubah ANTHROPIC_BASE_URL.
Tanpa override model, request bisa tetap meminta model Claude di OpenRouter, atau dirutekan tidak sesuai ekspektasi.
Catatan kompatibilitas: OpenRouter belum sepenuhnya mengimplementasikan semua detail streaming Anthropic untuk tool call. Pada beberapa kasus tepi, argumen function call bisa kosong. Loop agen utama tetap berjalan, tetapi chain multi-tool kompleks dapat bermasalah. Pantau status kompatibilitas OpenRouter untuk pembaruan.
Claude Code + LiteLLM
LiteLLM cocok jika Anda ingin gateway yang menangani routing model lintas provider.
Contoh config.yaml LiteLLM:
model_list:
- model_name: claude-sonnet-4-6
litellm_params:
model: deepseek/deepseek-v4
api_key: "sk-kunci-deepseek-anda"
- model_name: claude-opus-4-7
litellm_params:
model: deepseek/deepseek-v4-pro
api_key: "sk-kunci-deepseek-anda"
Konfigurasi Claude Code di ~/.claude/settings.json:
{
"env": {
"ANTHROPIC_BASE_URL": "http://localhost:4000",
"ANTHROPIC_AUTH_TOKEN": "sk-litellm-kunci-anda"
}
}
Dengan setup ini, Claude Code tetap mengirim:
claude-sonnet-4-6
Lalu LiteLLM memetakan model tersebut ke DeepSeek V4. Anda tidak perlu override nama model di Claude Code.
Claude Code + vLLM lokal
Untuk inferensi lokal dengan vLLM, jalankan server terlebih dahulu:
python -m vllm.entrypoints.openai.api_server \
--model deepseek-ai/DeepSeek-V3 \
--dtype auto \
--api-key local-key \
--port 8000
Lalu konfigurasi Claude Code:
export ANTHROPIC_BASE_URL="http://localhost:8000"
export ANTHROPIC_API_KEY="local-key"
export ANTHROPIC_DEFAULT_SONNET_MODEL="deepseek-ai/DeepSeek-V3"
Checklist debugging
Jika error masih muncul, gunakan urutan ini.
1. Cek environment aktif
env | grep -E 'ANTHROPIC|CLAUDE'
Pastikan tidak ada konfigurasi lama yang tertinggal, terutama:
ANTHROPIC_BASE_URL
ANTHROPIC_API_KEY
ANTHROPIC_AUTH_TOKEN
ANTHROPIC_DEFAULT_SONNET_MODEL
2. Cek URL final
echo "${ANTHROPIC_BASE_URL}/v1/messages"
Pastikan tidak menjadi:
/v1/v1/messages
3. Jalankan Claude Code dengan debug log
claude --debug 2>&1 | head -100
Cari bagian:
Sending request to:Response status:enterprise config error:
Ini biasanya menunjukkan apakah masalah ada di URL, header, auth, atau body request.
4. Replikasi request dengan curl
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"}]
}'
Jika gateway memakai x-api-key, gunakan:
curl -v -X POST "${ANTHROPIC_BASE_URL}/v1/messages" \
-H "Content-Type: application/json" \
-H "x-api-key: ${ANTHROPIC_API_KEY}" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-sonnet-4-6",
"max_tokens": 10,
"messages": [{"role": "user", "content": "hi"}]
}'
Interpretasi:
| Status | Kemungkinan penyebab |
|---|---|
200 |
Gateway valid |
400 / 422
|
Body atau model tidak sesuai |
401 |
Token/key salah |
403 |
Akses ditolak |
404 |
URL/path salah |
5xx |
Masalah gateway/backend |
Menguji API dengan Apidog
Saat melakukan debug integrasi provider pihak ketiga, Apidog membantu Anda menguji request dan response gateway LLM tanpa harus menjalankan Claude Code berulang kali.
Buat collection untuk endpoint:
/v1/messages
Lalu simpan header sebagai variable tingkat collection:
anthropic-version
anthropic-beta
Authorization
x-api-key
Dengan begitu, Anda bisa mengganti gateway, token, atau model dari satu tempat.
Ini berguna untuk memastikan apakah gateway meneruskan header seperti:
anthropic-beta
anthropic-version
X-Claude-Code-Session-Id
sebelum Anda mencari masalah di konfigurasi Claude Code.
Konfigurasi Claude Code terkait
Nonaktifkan dependency header beta
Jika gateway enterprise Anda tidak bisa meneruskan custom header:
export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
Efeknya:
- validasi lebih sederhana
- loop agen tetap berjalan
- beberapa fitur eksperimental tidak tersedia
Aktifkan discovery model gateway
Mulai Claude Code v2.1.129, Anda bisa meminta Claude Code mengambil daftar model dari gateway:
export CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1
Claude Code akan memanggil:
/v1/models
Namun hanya model dengan ID yang diawali claude atau anthropic yang otomatis masuk ke pemilih /model.
Untuk model seperti DeepSeek, set manual:
export ANTHROPIC_DEFAULT_SONNET_MODEL="deepseek/deepseek-v4-pro"
Tambahkan opsi model kustom
Untuk menambahkan satu model ke pemilih /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="17x lebih murah dari Claude Opus"
Model akan muncul di bagian bawah selector /model.
Panduan terkait
Jika Anda mengeksplorasi Claude Code dengan backend model kustom, baca juga:
- Cara Menulis File AGENTS.md untuk Tim Pengembangan API — konfigurasikan perilaku Claude Code untuk stack Anda
- Ruflo: Orkestrasi Multi-Agen untuk Claude Code — tambahkan swarm, memori persisten, dan 100+ tool MCP ke Claude Code
- Dapatkan API Claude Gratis Tanpa Batas melalui Puter.js — alternatif berbasis browser jika Anda membangun aplikasi klien
- LLM Lokal Terbaik 2026 — jika Anda ingin menjalankan inferensi lokal melalui vLLM
FAQ
Apakah memakai provider pihak ketiga dengan Claude Code melanggar ketentuan Anthropic?
Tidak. Anthropic mendokumentasikan pola ANTHROPIC_BASE_URL untuk routing melalui Bedrock, Vertex AI, Foundry, dan gateway kustom.
Yang diblokir pada April 2026 adalah tool pihak ketiga yang memalsukan ID klien Claude Code untuk mengakses API Anthropic dengan harga langganan. Menggunakan gateway sendiri atau provider seperti OpenRouter dengan API key sendiri adalah kasus berbeda.
Apakah loop agen Claude Code berfungsi dengan DeepSeek V4 Pro?
Loop inti berfungsi:
- edit file
- menjalankan shell command
- tugas multi-step
- refactor kode
- debugging
Namun ada batasan melalui provider pihak ketiga:
- tool server MCP tidak didukung
- input gambar/vision tidak didukung
Jika workflow Anda membutuhkan MCP atau vision, gunakan API Anthropic, Bedrock, atau Vertex.
Mengapa error menyebut enterprise config padahal saya bukan user enterprise?
Claude Code memakai istilah enterprise config untuk konfigurasi provider pihak ketiga. Itu label internal, bukan berarti fitur tersebut hanya untuk paket Enterprise.
Developer individual tetap bisa memakai custom provider selama konfigurasi valid.
Bisa beralih antara Anthropic dan provider pihak ketiga di tengah sesi?
Tidak dalam satu sesi.
ANTHROPIC_BASE_URL dibaca saat startup. Untuk mengganti provider:
- keluar dari Claude Code
- ubah environment atau
settings.json - mulai sesi baru
Tool seperti DeepClaude mengemas proses ini dengan flag CLI seperti:
--backend ds
--backend anthropic
Gateway saya di belakang firewall. Apakah Claude Code mendukung proxy?
Ya. Set proxy sebelum menjalankan Claude Code:
export HTTPS_PROXY="http://proxy-anda:8080"
export ANTHROPIC_BASE_URL="https://gateway-internal-anda"
Jika proxy perusahaan melakukan TLS interception, tambahkan CA bundle:
export NODE_EXTRA_CA_CERTS="/path/to/corporate-ca-bundle.pem"
Curl berhasil, tetapi Claude Code tetap error. Apa bedanya?
Claude Code bisa mengirim request validasi tambahan yang tidak Anda replikasi di curl.
Jalankan:
claude --debug
Lalu bandingkan:
- URL final
- header
anthropic-beta - header
X-Claude-Code-Session-Id - header auth
- body JSON
- nama model
Perbedaan kecil di header atau model sering cukup untuk memicu error validasi.
Kesimpulan
Invalid custom3p enterprise config adalah error validasi konfigurasi, bukan pemblokiran provider.
Urutan perbaikannya:
- Hapus trailing
/v1dariANTHROPIC_BASE_URL - Pastikan memakai
ANTHROPIC_AUTH_TOKENatauANTHROPIC_API_KEYsesuai gateway - Validasi
~/.claude/settings.json - Pastikan onboarding Claude Code sudah selesai
- Pastikan gateway meneruskan header yang dibutuhkan
- Cek managed settings jika memakai Team atau Enterprise
Setelah konfigurasi valid, Claude Code dapat menjalankan loop agen melalui backend pilihan Anda seperti OpenRouter, LiteLLM, DeepSeek, atau vLLM lokal. Batasan utama provider pihak ketiga tetap sama: MCP dan input vision membutuhkan backend Anthropic/Bedrock/Vertex yang kompatibel.

Top comments (0)