DEV Community

Cover image for Cara Mengatasi Error 'Invalid custom3p enterprise config' di Claude Code
Walse
Walse

Posted on • Originally published at apidog.com

Cara Mengatasi Error 'Invalid custom3p enterprise config' di Claude Code

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.

Coba Apidog hari ini

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
Enter fullscreen mode Exit fullscreen mode

Penyebab paling umum:

  1. ANTHROPIC_BASE_URL memakai trailing /v1
  2. Salah memilih ANTHROPIC_AUTH_TOKEN vs ANTHROPIC_API_KEY
  3. ~/.claude/settings.json tidak valid
  4. Instalasi baru belum menyelesaikan onboarding
  5. Gateway tidak meneruskan header yang dibutuhkan
  6. 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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

ke URL dasar yang Anda set.

Jika Anda sudah memasukkan /v1 di ANTHROPIC_BASE_URL, path akhirnya menjadi:

/v1/v1/messages
Enter fullscreen mode Exit fullscreen mode

Hasilnya biasanya 404.

Salah

export ANTHROPIC_BASE_URL="https://api.openrouter.ai/api/v1"
Enter fullscreen mode Exit fullscreen mode
export ANTHROPIC_BASE_URL="https://litellm.yourcompany.com/v1"
Enter fullscreen mode Exit fullscreen mode

Benar

export ANTHROPIC_BASE_URL="https://api.openrouter.ai/api"
Enter fullscreen mode Exit fullscreen mode
export ANTHROPIC_BASE_URL="https://litellm.yourcompany.com"
Enter fullscreen mode Exit fullscreen mode

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"}]}'
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

Jangan gunakan ini untuk OpenRouter jika gateway Anda mengharapkan bearer token:

export ANTHROPIC_API_KEY="sk-or-kunci-openrouter-anda"
Enter fullscreen mode Exit fullscreen mode

Karena Claude Code akan mengirim header:

x-api-key: sk-or-kunci-openrouter-anda
Enter fullscreen mode Exit fullscreen mode

bukan:

Authorization: Bearer sk-or-kunci-openrouter-anda
Enter fullscreen mode Exit fullscreen mode

LiteLLM

export ANTHROPIC_AUTH_TOKEN="sk-litellm-kunci-virtual-anda"
export ANTHROPIC_BASE_URL="https://server-litellm-anda:4000"
Enter fullscreen mode Exit fullscreen mode

Gateway DeepSeek atau vLLM lokal dengan API key

export ANTHROPIC_API_KEY="kunci-anda-di-sini"
export ANTHROPIC_BASE_URL="https://server-vllm-anda"
Enter fullscreen mode Exit fullscreen mode

Selalu cek dokumentasi gateway untuk memastikan header autentikasi yang diharapkan.

Penyebab 3: settings.json salah format

Jika konfigurasi disimpan di:

~/.claude/settings.json
Enter fullscreen mode Exit fullscreen mode

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",
  }
}
Enter fullscreen mode Exit fullscreen mode

JSON tidak mengizinkan koma terakhir.

Salah: smart quotes

{
  "env": {
    “ANTHROPIC_BASE_URL”: “https://openrouter.ai/api”
  }
}
Enter fullscreen mode Exit fullscreen mode

Gunakan tanda kutip biasa:

"
Enter fullscreen mode Exit fullscreen mode

bukan smart quotes.

Benar

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
    "ANTHROPIC_AUTH_TOKEN": "sk-or-kunci-openrouter-anda"
  }
}
Enter fullscreen mode Exit fullscreen mode

Validasi file JSON

Dengan Python:

python3 -c "import json, os; json.load(open(os.path.expanduser('~/.claude/settings.json')))" && echo "JSON valid"
Enter fullscreen mode Exit fullscreen mode

Dengan jq:

jq . ~/.claude/settings.json
Enter fullscreen mode Exit fullscreen mode

Jika parsing gagal, Claude Code tidak akan sampai ke tahap request API.

Penyebab 4: instalasi baru belum menyelesaikan onboarding

Claude Code mengecek:

~/.claude.json
Enter fullscreen mode Exit fullscreen mode

dan mencari flag:

"hasCompletedOnboarding": true
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Jika key tidak ada atau bernilai false, tambahkan konfigurasi berikut.

Perbaikan

Edit ~/.claude.json:

{
  "hasCompletedOnboarding": true,
  "primaryApiKey": "sk-placeholder"
}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Jika gateway menghapus header ini, respons yang diterima Claude Code bisa tidak sesuai ekspektasi dan memicu:

Invalid custom3p enterprise config
Enter fullscreen mode Exit fullscreen mode

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;
}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

Atau dari dalam Claude Code:

/status
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

di macOS, atau path setara di Windows/Linux.

Konfigurasi kerja lengkap

Claude Code + OpenRouter + DeepSeek V4 Pro

Gunakan konfigurasi ini di:

~/.claude/settings.json
Enter fullscreen mode Exit fullscreen mode
{
  "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"
  }
}
Enter fullscreen mode Exit fullscreen mode

Override model diperlukan karena Claude Code default-nya tetap mengirim model seperti:

claude-sonnet-4-6
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

Konfigurasi Claude Code di ~/.claude/settings.json:

{
  "env": {
    "ANTHROPIC_BASE_URL": "http://localhost:4000",
    "ANTHROPIC_AUTH_TOKEN": "sk-litellm-kunci-anda"
  }
}
Enter fullscreen mode Exit fullscreen mode

Dengan setup ini, Claude Code tetap mengirim:

claude-sonnet-4-6
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

Checklist debugging

Jika error masih muncul, gunakan urutan ini.

1. Cek environment aktif

env | grep -E 'ANTHROPIC|CLAUDE'
Enter fullscreen mode Exit fullscreen mode

Pastikan tidak ada konfigurasi lama yang tertinggal, terutama:

ANTHROPIC_BASE_URL
ANTHROPIC_API_KEY
ANTHROPIC_AUTH_TOKEN
ANTHROPIC_DEFAULT_SONNET_MODEL
Enter fullscreen mode Exit fullscreen mode

2. Cek URL final

echo "${ANTHROPIC_BASE_URL}/v1/messages"
Enter fullscreen mode Exit fullscreen mode

Pastikan tidak menjadi:

/v1/v1/messages
Enter fullscreen mode Exit fullscreen mode

3. Jalankan Claude Code dengan debug log

claude --debug 2>&1 | head -100
Enter fullscreen mode Exit fullscreen mode

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"}]
  }'
Enter fullscreen mode Exit fullscreen mode

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"}]
  }'
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Lalu simpan header sebagai variable tingkat collection:

anthropic-version
anthropic-beta
Authorization
x-api-key
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Claude Code akan memanggil:

/v1/models
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

Model akan muncul di bagian bawah selector /model.

Panduan terkait

Jika Anda mengeksplorasi Claude Code dengan backend model kustom, baca juga:

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:

  1. keluar dari Claude Code
  2. ubah environment atau settings.json
  3. mulai sesi baru

Tool seperti DeepClaude mengemas proses ini dengan flag CLI seperti:

--backend ds
--backend anthropic
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

Jika proxy perusahaan melakukan TLS interception, tambahkan CA bundle:

export NODE_EXTRA_CA_CERTS="/path/to/corporate-ca-bundle.pem"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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:

  1. Hapus trailing /v1 dari ANTHROPIC_BASE_URL
  2. Pastikan memakai ANTHROPIC_AUTH_TOKEN atau ANTHROPIC_API_KEY sesuai gateway
  3. Validasi ~/.claude/settings.json
  4. Pastikan onboarding Claude Code sudah selesai
  5. Pastikan gateway meneruskan header yang dibutuhkan
  6. 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)