DEV Community

Cover image for Como Corrigir Erro 'Invalid custom3p enterprise config' no Código Claude
Lucas
Lucas

Posted on • Originally published at apidog.com

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

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.

Experimente o Apidog hoje

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:

  1. Remova /v1 do final de ANTHROPIC_BASE_URL.
  2. Use a variável de autenticação correta: ANTHROPIC_AUTH_TOKEN ou ANTHROPIC_API_KEY.
  3. Valide o JSON em ~/.claude/settings.json.
  4. Confirme que o onboarding foi concluído em ~/.claude.json.
  5. Garanta que seu gateway encaminha os cabeçalhos necessários.
  6. 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
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode
export ANTHROPIC_BASE_URL="https://litellm.yourcompany.com/v1"
Enter fullscreen mode Exit fullscreen mode

Correto

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

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

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 /v1 duplicado.

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

Evite:

export ANTHROPIC_API_KEY="sk-or-sua-chave-openrouter"
Enter fullscreen mode Exit fullscreen mode

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

vLLM ou gateway próprio com chave de API

export ANTHROPIC_API_KEY="sua-chave-aqui"
export ANTHROPIC_BASE_URL="https://seu-servidor-vllm"
Enter fullscreen mode Exit fullscreen mode

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

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

Use aspas ASCII normais:

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

Valide antes de iniciar

Com Python:

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

Ou com jq:

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

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

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

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

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

Se você não consegue encaminhar anthropic-beta, teste iniciar o Claude Code com:

export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
Enter fullscreen mode Exit fullscreen mode

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

Ou dentro do Claude Code:

/status
Enter fullscreen mode Exit fullscreen mode

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

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

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

Configuração do Claude Code em ~/.claude/settings.json:

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

Nesse fluxo:

  1. O Claude Code envia claude-sonnet-4-6.
  2. O LiteLLM intercepta o nome do modelo.
  3. 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
Enter fullscreen mode Exit fullscreen mode

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

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

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

Se o gateway retornar:

  • 200: a chamada básica funciona.
  • 401 ou 403: 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:

  1. Crie uma nova coleção.
  2. Configure a URL base do gateway.
  3. Adicione uma requisição POST /v1/messages.
  4. Salve cabeçalhos como variáveis de coleção:
    • anthropic-version
    • anthropic-beta
    • Authorization
  5. 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
Enter fullscreen mode Exit fullscreen mode

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

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

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

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:

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:

  1. Encerre o Claude Code.
  2. Altere variáveis de ambiente ou settings.json.
  3. 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"
Enter fullscreen mode Exit fullscreen mode

Se houver interceptação TLS, adicione o certificado CA corporativo:

export NODE_EXTRA_CA_CERTS="/caminho/para/seu-bundle-ca-corporativo.pem"
Enter fullscreen mode Exit fullscreen mode

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

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

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)