Como Corrigir Erro 'Invalid custom3p enterprise config' no Código Claude

Ashley Innocent

Ashley Innocent

11 maio 2026

Como Corrigir Erro 'Invalid custom3p enterprise config' no Código Claude

Apidog para empresas

Implantação local

SSO & RBAC

Conforme SOC 2

Explorar Apidog Enterprise

Se você tentou direcionar o Claude Code para o DeepSeek V4, OpenRouter, ou qualquer outro provedor de modelo de terceiros, você provavelmente se deparou com isso: Invalid custom3p enterprise config. O erro é críptico, a documentação não o explica claramente, e ele te impede de fazer algo que o Claude Code oficialmente suporta.

Este guia detalha exatamente o que "custom3p" significa, as seis razões mais comuns para a falha da configuração, e correções passo a passo para cada uma. Se você está tentando executar o loop de agente do Claude Code através do DeepSeek ou de um gateway LLM como o LiteLLM, você encontrará exemplos de configuração funcionando aqui.

botão

RESUMO

Invalid custom3p enterprise config significa que o Claude Code não consegue validar sua configuração de provedor de terceiros. "custom3p" é o rótulo interno do Claude Code para qualquer endpoint de API não-Anthropic configurado via ANTHROPIC_BASE_URL. As causas mais comuns são: /v1 no final da URL base, variável de credencial errada, settings.json malformado, e integração incompleta em uma nova instalação. Corrija o formato da URL primeiro, pois isso resolve aproximadamente 60% dos casos.

O que "custom3p" realmente significa

O Claude Code roteia as requisições através de um de quatro 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 qualquer outra coisa

A última linha é "custom3p", terceiros personalizados. Quando ANTHROPIC_BASE_URL é definido para um host não-Anthropic (LiteLLM, OpenRouter, um servidor vLLM local, um gateway corporativo), o Claude Code rotula internamente esse caminho como "custom3p" e executa uma verificação de validação antes da primeira chamada de API.

Se essa verificação falhar, você recebe: Invalid custom3p enterprise config.

O erro é anterior às restrições de 2026 da Anthropic sobre ferramentas de terceiros. É um erro de validação de configuração, não um bloqueio de política, o que significa que você pode corrigi-lo.

Por que os desenvolvedores estão encontrando este erro agora

Em abril de 2026, a Anthropic bloqueou o acesso à assinatura Claude Pro e Max para ferramentas agenticas de terceiros que estavam falsificando o ID de cliente do Claude Code. Ferramentas como o OpenClaw, que roteavam sessões do Claude Code através de seus próprios backends, pararam de funcionar da noite para o dia.

Essa é uma questão separada do que este artigo aborda.

O que aconteceu a seguir é o motivo pelo qual você está lendo isso: desenvolvedores começaram a usar o suporte oficial a provedores de terceiros do Claude Code para rotear através de backends mais baratos. Um tópico no Reddit documentou a mudança do loop de agente do Claude Code para o DeepSeek V4 Pro via OpenRouter, a $0,87 por milhão de tokens de saída versus os $15 da Anthropic, o que representa uma redução de custo de aproximadamente 17 vezes. Projetos como o DeepClaude empacotaram isso em uma configuração de um único comando.

A pegadinha: o suporte oficial a provedores de terceiros da Anthropic exige uma configuração corporativa correta. Erre um campo e você receberá Invalid custom3p enterprise config. A maioria dos guias online ou omite a configuração corporativa ou mostra o formato de URL errado.

Causa raiz 1: /v1 no final de ANTHROPIC_BASE_URL

Este é o erro mais comum. O Claude Code adiciona automaticamente /v1/messages à URL que você define. Se sua URL base já inclui /v1, o caminho final se torna /v1/v1/messages, o que retorna um 404.

Errado:

export ANTHROPIC_BASE_URL="https://api.openrouter.ai/api/v1"

Errado:

export ANTHROPIC_BASE_URL="https://litellm.yourcompany.com/v1"

Correto:

export ANTHROPIC_BASE_URL="https://api.openrouter.ai/api"

Correto:

export ANTHROPIC_BASE_URL="https://litellm.yourcompany.com"

Para verificar a URL final que o Claude Code está acessando, execute este 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"}]}'

Um 200 ou 400 (requisição inválida, mas o endpoint existe) significa que a URL está correta. Um 404 significa que você ainda tem o problema do /v1.

Causa raiz 2: Variável de credencial errada

O Claude Code usa duas variáveis de ambiente diferentes para autenticação dependendo do contexto, e misturá-las faz com que a configuração corporativa falhe na validação silenciosamente.

Variável Enviada como Quando usar
ANTHROPIC_API_KEY cabeçalho x-api-key Gateways com formato Anthropic que esperam autenticação por chave de API
ANTHROPIC_AUTH_TOKEN cabeçalho Authorization: Bearer Gateways estilo OAuth, LiteLLM, a maioria das configurações OpenRouter

OpenRouter, por exemplo, espera um token de portador (bearer token):

export ANTHROPIC_AUTH_TOKEN="sk-or-sua-chave-openrouter"
export ANTHROPIC_BASE_URL="https://openrouter.ai/api"

Usar ANTHROPIC_API_KEY com OpenRouter envia um cabeçalho x-api-key que o OpenRouter ignora — a requisição falha na autenticação, e o Claude Code relata isso como uma configuração corporativa inválida.

Para LiteLLM:

export ANTHROPIC_AUTH_TOKEN="sk-litellm-sua-chave-virtual"
export ANTHROPIC_BASE_URL="https://seu-servidor-litellm:4000"

Para um gateway DeepSeek ou um servidor vLLM local rodando com uma chave de API:

export ANTHROPIC_API_KEY="sua-chave-aqui"
export ANTHROPIC_BASE_URL="https://seu-servidor-vllm"

Verifique a documentação de autenticação do seu gateway para confirmar qual cabeçalho ele espera.

Causa raiz 3: settings.json malformado

Se você está definindo a URL base e as credenciais em ~/.claude/settings.json em vez de variáveis de ambiente, erros de formatação JSON fazem com que a configuração corporativa falhe antes que qualquer requisição seja feita.

Os erros mais comuns:

Vírgula no final (JSON inválido):

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
    "ANTHROPIC_AUTH_TOKEN": "sk-or-sua-chave",  ← vírgula no final
  }
}

Aspas curvas/inteligentes (copiar-colar da documentação ou Word):

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://openrouter.ai/api"  ← aspas erradas
  }
}

Formato correto:

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
    "ANTHROPIC_AUTH_TOKEN": "sk-or-sua-chave-openrouter"
  }
}

Valide seu arquivo de configurações antes de iniciar o Claude Code:

python3 -c "import json; json.load(open('~/.claude/settings.json'.replace('~', __import__('os').path.expanduser('~'))))" && echo "JSON válido"

Ou use jq:

jq . ~/.claude/settings.json

Um erro de análise aqui significa que a validação da configuração corporativa nunca é concluída — o Claude Code não consegue ler a configuração, então ele sinaliza tudo como inválido.

Causa raiz 4: Nova instalação não concluiu a integração (onboarding)

O Claude Code verifica em ~/.claude.json se hasCompletedOnboarding: true antes de ler a configuração corporativa de settings.json. Em uma nova instalação, esta flag não está definida, então o Claude Code pula sua configuração de terceiros personalizada e tenta autenticar através de seu fluxo padrão — o que falha se você não tiver uma assinatura Anthropic configurada.

Verifique seu estado atual:

cat ~/.claude.json | python3 -m json.tool 2>/dev/null | grep hasCompletedOnboarding

Se essa chave estiver faltando ou for falsa, o Claude Code está no modo de integração e sua configuração corporativa em settings.json não será lida.

Correção: Adicione a flag de integração a ~/.claude.json:

{
  "hasCompletedOnboarding": true,
  "primaryApiKey": "sk-placeholder"
}

O valor de primaryApiKey é um placeholder — ele é substituído pela sua configuração corporativa. Defina-o para qualquer coisa começando com sk- para passar na verificação de formato. Após salvar, reinicie o Claude Code.

Causa raiz 5: Gateway não encaminha os cabeçalhos necessários

A validação da configuração corporativa do Claude Code inclui um handshake de recursos — ele envia um cabeçalho anthropic-beta para o gateway para negociar quais capacidades estão disponíveis. Se o seu gateway remover este cabeçalho, o Claude Code receberá uma resposta que não corresponde ao que ele espera, e relata Invalid custom3p enterprise config.

Cabeçalhos necessários que seu gateway deve encaminhar:

anthropic-beta
anthropic-version
X-Claude-Code-Session-Id

Para LiteLLM, isso funciona por padrão desde a v1.82.9+. Para proxies personalizados ou configurações nginx, adicione o encaminhamento de cabeçalhos 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 pode modificar o gateway para encaminhar o cabeçalho beta, defina isso antes de iniciar:

export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1

Isso instrui o Claude Code a pular recursos que exigem o cabeçalho beta para que as requisições sejam bem-sucedidas através de gateways que não podem encaminhá-lo. Você perde acesso a alguns recursos experimentais, mas o loop de agente principal funciona.

Causa raiz 6: Conflito de política corporativa

Se você está em um plano Claude Team ou Enterprise e seu administrador implantou configurações gerenciadas, essas configurações têm prioridade sobre todo o resto — incluindo seu ~/.claude/settings.json e variáveis de ambiente. Uma política gerenciada que restringe availableModels ou bloqueia URLs base personalizadas causa Invalid custom3p enterprise config mesmo quando sua configuração local está correta.

Verifique se as configurações gerenciadas estão ativas:

ls ~/.claude/managed-settings.json 2>/dev/null && echo "Configurações gerenciadas encontradas"

Ou de dentro do Claude Code:

/status

Se "Managed settings" aparecer como ativo, você precisa conversar com seu administrador. Eles podem:

Para implantações corporativas que você controla, as configurações gerenciadas ficam em /Library/Application Support/ClaudeCode/managed-settings.json (macOS) ou no caminho equivalente no Windows/Linux.

Configurações funcionando completamente

Claude Code + OpenRouter (DeepSeek V4 Pro)

OpenRouter expõe uma API compatível com Anthropic. Esta configuração executa o loop completo do agente do Claude Code através do DeepSeek V4 Pro:

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 do nome do modelo é necessária porque o Claude Code padroniza para claude-sonnet-4-6 mesmo quando você mudou a URL base. Sem fixar o modelo, a requisição chega ao OpenRouter pedindo por claude-sonnet-4-6, o que pode ter sucesso (OpenRouter também suporta Claude) ou pode ser roteado incorretamente dependendo do seu plano.

Nota: OpenRouter não implementa totalmente a especificação de streaming da Anthropic para chamadas de ferramentas — os argumentos de chamada de função podem chegar vazios em alguns casos extremos. O loop principal do agente funciona, mas cadeias complexas de várias ferramentas podem falhar. Acompanhe o status de compatibilidade do OpenRouter para atualizações.

Claude Code + LiteLLM (qualquer provedor)

LiteLLM é o gateway mais compatível para Claude Code — ele lida com o encaminhamento de cabeçalhos corretamente e suporta o roteamento de modelos entre modelos OpenAI, Anthropic, Vertex, Bedrock e Hugging Face.

LiteLLM config.yaml:

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"

Claude Code ~/.claude/settings.json:

{
  "env": {
    "ANTHROPIC_BASE_URL": "http://localhost:4000",
    "ANTHROPIC_AUTH_TOKEN": "sk-litellm-sua-chave"
  }
}

Com essa configuração, o Claude Code envia claude-sonnet-4-6 no campo do modelo. O LiteLLM intercepta isso e o roteia para o DeepSeek V4, então você não precisa substituir os nomes dos modelos na configuração do Claude Code.

Claude Code + vLLM local

Para inferência de modelo local com vLLM, inicie o servidor no modo compatível com Anthropic:

python -m vllm.entrypoints.openai.api_server \
  --model deepseek-ai/DeepSeek-V3 \
  --dtype auto \
  --api-key local-key \
  --port 8000

Então 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"

Depurando o erro

Se nenhuma das correções acima funcionar, execute o Claude Code com o registro de depuração:

claude --debug 2>&1 | head -100

A saída de depuração mostra a URL exata que está sendo chamada, os cabeçalhos enviados e a resposta recebida. Procure por:

Para depuração do lado do gateway, teste a requisição exata que o Claude Code envia:

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"}]
  }'

Um gateway válido retorna 200 com a estrutura da mensagem. Se você receber 401, 403 ou 422, é um problema de autenticação ou formato do lado do gateway — não um problema de configuração do Claude Code.

Testando APIs com Apidog

Ao depurar integrações de provedores de terceiros, o Apidog facilita a inspeção de requisições e respostas exatas que passam pelo seu gateway LLM. Você pode criar uma coleção para o endpoint /v1/messages do seu gateway, salvar modelos de requisição funcionando e comparar respostas entre provedores sem precisar executar o Claude Code novamente a cada vez.

botão

Baixe o Apidog e crie uma nova coleção apontando para a URL do seu gateway. Adicione os cabeçalhos anthropic-version, anthropic-beta e Authorization como variáveis de nível de coleção — assim, você pode testar diferentes configurações de gateway alterando uma variável em vez de editar cada requisição.

Isso é especialmente útil ao depurar os problemas de encaminhamento de cabeçalhos que acionam Invalid custom3p enterprise config. Você pode confirmar quais cabeçalhos seu gateway passa antes de perder tempo procurando por bugs na configuração do Claude Code.

Configurações relacionadas do Claude Code que vale a pena conhecer

Desativar dependência de cabeçalho beta

Alguns gateways corporativos não conseguem encaminhar cabeçalhos personalizados. Se essa for a sua situação:

export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1

Isso remove o handshake de recursos beta da validação da configuração corporativa. O loop do agente ainda funciona; você perde acesso a recursos protegidos pelo cabeçalho beta (algumas variantes de pensamento estendido, certos formatos de chamada de ferramenta).

Seletor de modelo com descoberta de gateway

A partir do Claude Code v2.1.129, você pode preencher o seletor /model automaticamente a partir da lista de modelos do seu gateway:

export CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1

O Claude Code consulta o endpoint /v1/models do seu gateway na inicialização e adiciona os modelos descobertos ao seletor. Apenas modelos com IDs começando com claude ou anthropic são adicionados — para outros modelos como o DeepSeek, fixe-os manualmente com ANTHROPIC_DEFAULT_SONNET_MODEL.

Entrada personalizada no seletor de modelos

Adicione um único modelo personalizado ao seletor sem afetar outras configurações:

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 aparece na parte inferior do seletor /model, facilitando a troca entre o modelo do seu gateway e o modelo padrão do Claude no meio da sessão.

Guias relacionados

Se você está explorando as capacidades de agente do Claude Code com backends de modelo personalizados, esses posts cobrem tópicos adjacentes:

FAQ

Usar um provedor de terceiros com o Claude Code é contra os termos da Anthropic?

Não. A Anthropic documenta e suporta oficialmente o padrão ANTHROPIC_BASE_URL para roteamento através de Bedrock, Vertex AI, Foundry e gateways personalizados. O que a Anthropic bloqueou em abril de 2026 foram ferramentas de terceiros falsificando o ID de cliente do Claude Code para acessar a própria API da Anthropic a preços de assinatura. Usar seu próprio gateway ou um provedor como o OpenRouter com sua própria chave de API é algo totalmente diferente.

O loop de agente do Claude Code funciona com o DeepSeek V4 Pro?

O loop principal funciona — edição de arquivos, comandos de shell, tarefas multi-etapas. Duas coisas não funcionam através de provedores de terceiros: ferramentas de servidor MCP e entrada de imagem/visão. Se seu fluxo de trabalho precisa disso, você precisa permanecer na API Anthropic ou Bedrock/Vertex.

Por que o erro diz “enterprise config” quando não estou em um plano corporativo?

O Claude Code usa o rótulo "enterprise config" para qualquer configuração de provedor de terceiros, independentemente do seu nível de assinatura. É um rótulo de nível de código, não uma restrição de plano. Desenvolvedores individuais nos planos gratuito ou Pro podem configurar e usar provedores de terceiros personalizados.

Posso alternar entre Anthropic e um provedor de terceiros no meio da sessão?

Não dentro de uma única sessão. A URL base é lida na inicialização. Para trocar de provedores, saia do Claude Code, altere suas variáveis de ambiente ou configurações, e inicie uma nova sessão. A ferramenta DeepClaude encapsula isso em uma flag CLI (--backend ds, --backend anthropic) que lida com a troca de ambiente para você.

Meu gateway está atrás de um firewall corporativo. O Claude Code suporta configuração de proxy?

Sim. Defina HTTPS_PROXY antes de iniciar:

export HTTPS_PROXY="http://seu-proxy:8080"
export ANTHROPIC_BASE_URL="https://seu-gateway-interno"

Para interceptação TLS por um proxy corporativo, adicione seu certificado CA:

export NODE_EXTRA_CA_CERTS="/caminho/para/seu-bundle-ca-corporativo.pem"

O erro aparece mesmo que meu teste curl funcione. O que é diferente?

O Claude Code faz uma requisição adicional de validação prévia que o curl não replica. Execute o Claude Code com --debug para ver a requisição prévia exata e compare-a com seu teste curl. Diferenças comuns: o cabeçalho anthropic-beta, o cabeçalho X-Claude-Code-Session-Id e o formato exato do corpo JSON para a requisição de validação.

Conclusão

Invalid custom3p enterprise config é um erro de validação de configuração, não um bloqueio de política. Corrija o formato de ANTHROPIC_BASE_URL primeiro (remova o /v1), depois verifique sua variável de credencial (ANTHROPIC_AUTH_TOKEN vs. ANTHROPIC_API_KEY), valide seu settings.json para erros de JSON e certifique-se de que a integração (onboarding) foi concluída em novas instalações.

Uma vez que a configuração seja validada, o loop completo do agente do Claude Code é executado através do seu backend escolhido. DeepSeek V4 Pro via OpenRouter ou LiteLLM cobre a maioria dos casos de uso do Claude Code por uma fração dos custos da API Anthropic — as principais limitações são as ferramentas MCP e a entrada de visão, que exigem a API Anthropic.

botão

Pratique o design de API no Apidog

Descubra uma forma mais fácil de construir e usar APIs