Se você tentou apontar o Claude Code para DeepSeek V4, OpenRouter ou outro provedor de modelo de terceiros, talvez tenha encontrado este erro: Invalid custom3p enterprise config. Ele aparece antes da primeira chamada útil à API e normalmente indica que o Claude Code não conseguiu validar sua configuração de endpoint personalizado.
Neste guia, você verá o que custom3p significa, como diagnosticar a falha e como corrigir as seis causas mais comuns. O foco é configurar o Claude Code com gateways como OpenRouter, LiteLLM, vLLM local ou proxies corporativos.
Resumo
Invalid custom3p enterprise config significa que o Claude Code não conseguiu validar um provedor de terceiros configurado via ANTHROPIC_BASE_URL.
Na prática, verifique nesta ordem:
- Remova
/v1do final deANTHROPIC_BASE_URL. - Use a variável de autenticação correta:
ANTHROPIC_AUTH_TOKENouANTHROPIC_API_KEY. - Valide o JSON em
~/.claude/settings.json. - Confirme que o onboarding foi concluído em
~/.claude.json. - Garanta que seu gateway encaminha os cabeçalhos necessários.
- Verifique se não há política corporativa sobrescrevendo sua configuração.
A correção mais comum é ajustar a URL base.
O que custom3p significa
O Claude Code pode rotear chamadas por diferentes modos:
| Modo | Como é acionado |
|---|---|
| API Anthropic padrão | Nenhuma substituição definida |
| Amazon Bedrock | CLAUDE_CODE_USE_BEDROCK=1 |
| Google Vertex AI | CLAUDE_CODE_USE_VERTEX=1 |
| Microsoft Foundry | CLAUDE_CODE_USE_FOUNDRY=1 |
| Terceiros personalizados |
ANTHROPIC_BASE_URL aponta para outro endpoint |
custom3p é o rótulo interno usado pelo Claude Code para endpoints não-Anthropic, como:
- OpenRouter
- LiteLLM
- vLLM local
- gateways corporativos
- proxies compatíveis com a API Anthropic
Quando ANTHROPIC_BASE_URL aponta para um host personalizado, o Claude Code executa uma validação antes de enviar a primeira requisição real. Se essa validação falhar, ele retorna:
Invalid custom3p enterprise config
Esse erro é de configuração. Não é, por si só, um bloqueio de política.
Por que esse erro ficou mais comum
Em abril de 2026, a Anthropic bloqueou o uso de assinaturas Claude Pro e Max por ferramentas agenticas de terceiros que falsificavam o ID de cliente do Claude Code. Ferramentas que roteavam sessões do Claude Code por backends próprios pararam de funcionar.
Isso é diferente do cenário deste artigo.
Aqui estamos tratando do suporte oficial do Claude Code para provedores de terceiros por meio de ANTHROPIC_BASE_URL. Desenvolvedores passaram a usar esse caminho para rotear o loop de agente por backends mais baratos, como DeepSeek V4 Pro via OpenRouter.
Um tópico no Reddit documentou a execução do Claude Code com o DeepSeek V4 Pro via OpenRouter, com custo de US$ 0,87 por milhão de tokens de saída versus US$ 15 da Anthropic. Projetos como o DeepClaude empacotaram esse fluxo em comandos mais simples.
A parte sensível é que o Claude Code exige uma configuração válida de provedor personalizado. Um campo errado já pode acionar Invalid custom3p enterprise config.
Causa 1: /v1 no final de ANTHROPIC_BASE_URL
Este é o erro mais frequente.
O Claude Code adiciona automaticamente /v1/messages à URL configurada. Se você já inclui /v1 na URL base, o caminho final vira /v1/v1/messages, geralmente resultando em 404.
Errado
export ANTHROPIC_BASE_URL="https://api.openrouter.ai/api/v1"
export ANTHROPIC_BASE_URL="https://litellm.yourcompany.com/v1"
Correto
export ANTHROPIC_BASE_URL="https://api.openrouter.ai/api"
export ANTHROPIC_BASE_URL="https://litellm.yourcompany.com"
Como testar
Execute:
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"}]}'
Interprete assim:
-
200: endpoint encontrado e requisição aceita. -
400: endpoint existe, mas o corpo pode estar inválido. -
404: provavelmente sua URL base está errada ou contém/v1duplicado.
Causa 2: variável de credencial errada
O Claude Code usa variáveis diferentes conforme o tipo de autenticação esperado pelo gateway.
| Variável | Cabeçalho enviado | Quando usar |
|---|---|---|
ANTHROPIC_API_KEY |
x-api-key |
Gateways que esperam chave no formato Anthropic |
ANTHROPIC_AUTH_TOKEN |
Authorization: Bearer |
LiteLLM, OpenRouter e gateways estilo OAuth/bearer token |
OpenRouter
OpenRouter normalmente espera bearer token:
export ANTHROPIC_AUTH_TOKEN="sk-or-sua-chave-openrouter"
export ANTHROPIC_BASE_URL="https://openrouter.ai/api"
Evite:
export ANTHROPIC_API_KEY="sk-or-sua-chave-openrouter"
Nesse caso, o Claude Code enviaria x-api-key, que pode não ser o cabeçalho esperado pelo OpenRouter.
LiteLLM
export ANTHROPIC_AUTH_TOKEN="sk-litellm-sua-chave-virtual"
export ANTHROPIC_BASE_URL="https://seu-servidor-litellm:4000"
vLLM ou gateway próprio com chave de API
export ANTHROPIC_API_KEY="sua-chave-aqui"
export ANTHROPIC_BASE_URL="https://seu-servidor-vllm"
Confirme na documentação do seu gateway qual cabeçalho ele espera.
Causa 3: settings.json malformado
Se você configura o Claude Code via ~/.claude/settings.json, qualquer erro de JSON impede a leitura correta da configuração.
Erro: vírgula no final
{
"env": {
"ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
"ANTHROPIC_AUTH_TOKEN": "sk-or-sua-chave",
}
}
JSON não permite vírgula após o último campo.
Erro: aspas curvas
Evite aspas copiadas de editores ricos, como:
{
"env": {
“ANTHROPIC_BASE_URL”: “https://openrouter.ai/api”
}
}
Use aspas ASCII normais:
{
"env": {
"ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
"ANTHROPIC_AUTH_TOKEN": "sk-or-sua-chave-openrouter"
}
}
Valide antes de iniciar
Com Python:
python3 -c "import json, os; json.load(open(os.path.expanduser('~/.claude/settings.json')))" \
&& echo "JSON válido"
Ou com jq:
jq . ~/.claude/settings.json
Se a validação falhar, corrija o JSON antes de investigar o gateway.
Causa 4: onboarding não concluído em nova instalação
Em novas instalações, o Claude Code pode verificar ~/.claude.json antes de carregar ~/.claude/settings.json.
Verifique:
cat ~/.claude.json | python3 -m json.tool 2>/dev/null | grep hasCompletedOnboarding
Se hasCompletedOnboarding estiver ausente ou false, o Claude Code pode ignorar sua configuração personalizada e tentar o fluxo padrão.
Correção
Edite ~/.claude.json:
{
"hasCompletedOnboarding": true,
"primaryApiKey": "sk-placeholder"
}
O campo primaryApiKey funciona como placeholder nesse cenário. Use um valor que comece com sk- para passar pela validação de formato. Depois reinicie o Claude Code.
Causa 5: gateway não encaminha os cabeçalhos necessários
O Claude Code pode enviar cabeçalhos usados para negociação de recursos. Se um proxy ou gateway remove esses cabeçalhos, a validação pode falhar.
Cabeçalhos importantes:
anthropic-beta
anthropic-version
X-Claude-Code-Session-Id
No LiteLLM, esse encaminhamento funciona por padrão em versões recentes como v1.82.9+.
Em proxies customizados ou nginx, configure explicitamente:
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;
}
Se você não consegue encaminhar anthropic-beta, teste iniciar o Claude Code com:
export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
Isso desativa recursos experimentais que dependem desse handshake, mas mantém o loop principal do agente funcionando.
Causa 6: conflito com política corporativa
Em planos Claude Team ou Enterprise, configurações gerenciadas podem ter prioridade sobre:
- variáveis de ambiente
~/.claude/settings.json- configuração local de modelos
- URLs base personalizadas
Verifique se há configurações gerenciadas:
ls ~/.claude/managed-settings.json 2>/dev/null \
&& echo "Configurações gerenciadas encontradas"
Ou dentro do Claude Code:
/status
Se Managed settings estiver ativo, peça ao administrador para:
- permitir o domínio do gateway;
- incluir os IDs de modelos em
availableModels; - liberar URLs base personalizadas;
- revisar restrições aplicadas a provedores externos.
Em implantações corporativas, as configurações gerenciadas podem ficar em:
/Library/Application Support/ClaudeCode/managed-settings.json
no macOS, ou caminho equivalente no Windows/Linux.
Configurações completas funcionando
Claude Code + OpenRouter + DeepSeek V4 Pro
OpenRouter expõe uma API compatível com Anthropic. Uma configuração típica em ~/.claude/settings.json:
{
"env": {
"ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
"ANTHROPIC_AUTH_TOKEN": "sk-or-sua-chave-openrouter",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek/deepseek-v4-pro",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek/deepseek-v4-pro",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek/deepseek-v4-pro"
}
}
A substituição de modelo é importante porque o Claude Code pode continuar usando nomes como claude-sonnet-4-6 mesmo após alterar a URL base.
Sem fixar o modelo, o gateway pode receber uma requisição para claude-sonnet-4-6, o que pode ser aceito, rejeitado ou roteado de forma inesperada dependendo do provedor.
Observação: OpenRouter pode não implementar todos os detalhes da especificação de streaming da Anthropic para chamadas de ferramentas. O loop principal do agente funciona, mas cadeias complexas de ferramentas podem falhar em casos específicos. Veja o status de compatibilidade do OpenRouter.
Claude Code + LiteLLM
LiteLLM é uma opção prática quando você quer rotear modelos sem mudar a configuração do Claude Code a cada provedor.
Exemplo de config.yaml do LiteLLM:
model_list:
- model_name: claude-sonnet-4-6
litellm_params:
model: deepseek/deepseek-v4
api_key: "sk-sua-chave-deepseek"
- model_name: claude-opus-4-7
litellm_params:
model: deepseek/deepseek-v4-pro
api_key: "sk-sua-chave-deepseek"
Configuração do Claude Code em ~/.claude/settings.json:
{
"env": {
"ANTHROPIC_BASE_URL": "http://localhost:4000",
"ANTHROPIC_AUTH_TOKEN": "sk-litellm-sua-chave"
}
}
Nesse fluxo:
- O Claude Code envia
claude-sonnet-4-6. - O LiteLLM intercepta o nome do modelo.
- O LiteLLM roteia para
deepseek/deepseek-v4.
Assim você evita configurar ANTHROPIC_DEFAULT_SONNET_MODEL no Claude Code.
Claude Code + vLLM local
Para inferência local com vLLM, inicie o servidor:
python -m vllm.entrypoints.openai.api_server \
--model deepseek-ai/DeepSeek-V3 \
--dtype auto \
--api-key local-key \
--port 8000
Depois configure o Claude Code:
export ANTHROPIC_BASE_URL="http://localhost:8000"
export ANTHROPIC_API_KEY="local-key"
export ANTHROPIC_DEFAULT_SONNET_MODEL="deepseek-ai/DeepSeek-V3"
Como depurar o erro
Se as correções anteriores não resolverem, rode o Claude Code em modo debug:
claude --debug 2>&1 | head -100
Procure por:
-
Sending request to:— mostra a URL final chamada. -
Response status:— mostra o status HTTP retornado. -
enterprise config error:— mostra a falha interna de validação.
Também teste manualmente a requisição para o gateway:
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"}]
}'
Se o gateway retornar:
-
200: a chamada básica funciona. -
401ou403: problema de autenticação. -
404: URL incorreta. -
422: corpo ou modelo inválido.
Nesse caso, o problema provavelmente está no gateway ou na forma como ele interpreta a requisição.
Testando APIs com Apidog
Ao depurar provedores de terceiros, o Apidog ajuda a inspecionar requisições e respostas exatas no seu gateway LLM.
Um fluxo prático:
- Crie uma nova coleção.
- Configure a URL base do gateway.
- Adicione uma requisição
POST /v1/messages. - Salve cabeçalhos como variáveis de coleção:
anthropic-versionanthropic-betaAuthorization
- Compare respostas entre OpenRouter, LiteLLM, vLLM ou outro gateway sem reiniciar o Claude Code a cada teste.
Isso é útil para confirmar se seu proxy encaminha cabeçalhos como anthropic-beta e X-Claude-Code-Session-Id antes de investigar a configuração local do Claude Code.
Configurações relacionadas do Claude Code
Desativar dependência de cabeçalho beta
Se seu gateway não consegue encaminhar cabeçalhos personalizados:
export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
Isso reduz a dependência do handshake beta. O loop principal do agente continua disponível, mas alguns recursos experimentais podem não funcionar.
Descoberta de modelos via gateway
A partir do Claude Code v2.1.129, você pode habilitar descoberta de modelos:
export CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1
O Claude Code consulta /v1/models na inicialização e adiciona modelos ao seletor /model.
Apenas modelos com IDs começando por claude ou anthropic são adicionados automaticamente. Para modelos como DeepSeek, configure manualmente:
export ANTHROPIC_DEFAULT_SONNET_MODEL="deepseek/deepseek-v4-pro"
Modelo personalizado no seletor
Para adicionar uma opção manual ao seletor /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 mais barato que Claude Opus"
Isso facilita alternar para um modelo do gateway dentro das opções disponíveis.
Guias relacionados
Se você está explorando Claude Code com backends personalizados, estes guias complementam o tema:
- Como Escrever Arquivos AGENTS.md para Equipes de Desenvolvimento de API — configure o comportamento do Claude Code para sua stack.
- Ruflo: Orquestração Multi-Agente para Claude Code — adicione enxames, memória persistente e ferramentas MCP.
- Obtenha API Claude Gratuita e Ilimitada via Puter.js — alternativa baseada em navegador para apps cliente.
- Melhores LLMs Locais 2026 — opções para inferência local via vLLM.
FAQ
Usar um provedor de terceiros com Claude Code viola os termos da Anthropic?
Não necessariamente. A Anthropic documenta o uso de ANTHROPIC_BASE_URL para roteamento por Bedrock, Vertex AI, Foundry e gateways personalizados.
O que foi bloqueado em abril de 2026 foi o uso de ferramentas de terceiros que falsificavam o ID de cliente do Claude Code para acessar a API da Anthropic usando preços de assinatura. Usar seu próprio gateway ou um provedor como OpenRouter com sua própria chave de API é outro cenário.
O loop de agente do Claude Code funciona com DeepSeek V4 Pro?
O loop principal funciona: edição de arquivos, comandos shell e tarefas multi-etapas.
Limitações comuns em provedores de terceiros:
- ferramentas de servidor MCP podem não funcionar;
- entrada de imagem/visão pode não estar disponível;
- streaming de chamadas de ferramenta pode variar conforme o gateway.
Se seu fluxo depende desses recursos, use a API Anthropic ou integrações suportadas como Bedrock/Vertex.
Por que o erro fala em enterprise config se não estou em plano corporativo?
enterprise config é um rótulo interno usado pelo Claude Code para configuração de provedor personalizado. Ele não significa, por si só, que você precisa de plano Enterprise.
Posso alternar entre Anthropic e um provedor de terceiros na mesma sessão?
Não. A URL base é lida na inicialização.
Para trocar de provedor:
- Encerre o Claude Code.
- Altere variáveis de ambiente ou
settings.json. - Inicie uma nova sessão.
Ferramentas como DeepClaude automatizam parte desse fluxo com flags como --backend ds ou --backend anthropic.
Meu gateway está atrás de firewall corporativo. O Claude Code suporta proxy?
Sim. Configure HTTPS_PROXY antes de iniciar:
export HTTPS_PROXY="http://seu-proxy:8080"
export ANTHROPIC_BASE_URL="https://seu-gateway-interno"
Se houver interceptação TLS, adicione o certificado CA corporativo:
export NODE_EXTRA_CA_CERTS="/caminho/para/seu-bundle-ca-corporativo.pem"
Meu curl funciona, mas o Claude Code falha. O que muda?
O Claude Code pode fazer uma requisição prévia de validação que seu curl não reproduz.
Rode:
claude --debug
Compare:
- URL final;
- cabeçalhos;
- modelo enviado;
- corpo JSON;
- status HTTP;
- resposta do gateway.
Diferenças comuns:
- ausência de
anthropic-beta; - ausência de
X-Claude-Code-Session-Id; - autenticação enviada no cabeçalho errado;
- modelo não suportado pelo gateway.
Conclusão
Invalid custom3p enterprise config é um erro de validação de configuração. Corrija primeiro a URL base removendo /v1, depois valide autenticação, JSON, onboarding, cabeçalhos do gateway e políticas gerenciadas.
Checklist rápido:
# 1. URL sem /v1
export ANTHROPIC_BASE_URL="https://openrouter.ai/api"
# 2. Auth correta para bearer token
export ANTHROPIC_AUTH_TOKEN="sk-or-sua-chave"
# 3. Modelo explícito quando necessário
export ANTHROPIC_DEFAULT_SONNET_MODEL="deepseek/deepseek-v4-pro"
# 4. Debug
claude --debug
Depois que a configuração é validada, o Claude Code consegue executar o loop de agente pelo backend escolhido. OpenRouter, LiteLLM e vLLM cobrem muitos casos de uso; as principais limitações continuam sendo ferramentas MCP, visão e detalhes de compatibilidade de streaming.

Top comments (0)