1

Instalando o Claude Code no Windows e conectando à Crazyrouter (do erro 403 ao funcionamento)

Instalando o Claude Code no Windows e conectando à Crazyrouter (do erro 403 ao funcionamento)

Quando instalei o Claude Code (ferramenta de codificação com IA) pela primeira vez no Windows, travei no mesmo ponto que muita gente: o terminal mostrava o número de versão normalmente, mas ao rodar claude eu só recebia 403.

A causa real não foi versão antiga nem rede ruim — foi um nome de variável errado na configuração. Abaixo refiz toda a cadeia na ordem certa, com prints reais dos erros e o que cada passo verifica.

Testado em Windows 10/11 com PowerShell. YOUR_CRAZYROUTER_API_KEY é um placeholder — troque pela sua chave (API Key / chave de acesso).

Três conceitos que não podem se misturar

NomeO que éO que fazemos
Claude CodePrograma no PC que lê arquivos e escreve código no terminalInstalar e confirmar que roda
ModeloServiço que respondeEscolher um visível e compatível
Crazyrouter APIEntrada de terceiros usada aquiCriar Key, preencher Base URL, checar modelo e log

O Claude Code não é o modelo. Instalá-lo não te dá assinatura oficial nem créditos automáticos na Crazyrouter.

Versão aparece normalmente, mas ao iniciar ainda acessa api.anthropic.com e recebe 403

Esse print é o ponto de partida: instalar com sucesso e chamar com sucesso são duas verificações diferentes. O número de versão só prova a primeira.

Parte 1: instalar até rodar

Abra o PowerShell e confirme com claude --version. A instalação nativa oficial não exige Node.js:

irm https://claude.ai/install.ps1 | iex

Se o script falhar ou retornar HTML/<script>/captcha, pare — você não tem o script de instalação. Use o caminho npm (requer Node.js 22+).

O script oficial retorna uma página HTML; o iex tenta executá-la como comando e mostra vários erros de JavaScript

A dica: o erro cita <script>, var, ||, && — coisas de HTML/JS. O PowerShell não está "quebrado"; ele está interpretando uma página web como script.

Pelo npm:

node --version
npm.cmd --version
npm.cmd install -g @anthropic-ai/claude-code
claude.cmd --version

Usei npm.cmd em vez de npm para evitar o .ps1 e a política de execução. O pacote correto é sempre @anthropic-ai/claude-code (sem npm no fim).

Dois comandos npm colaram juntos e o nome virou @anthropic-ai/claude-codenpm, inexistente (erro E404)

Se aparecer E404, leia o nome do pacote caractere por caractere antes de culpar a rede. No meu caso, dois comandos grudaram e o nome ficou @anthropic-ai/claude-codenpm.

Parte 2: conectar à Crazyrouter API

Crie uma API Key dedicada no console e anote-a. Atenção à distinção entre entrada web e entrada de API:

UsoEndereçoOnde preencher
Conta/registrohttps://crazyrouter.comnavegador
Base URL (endereço raiz da API) do Claude Codehttps://cn.crazyrouter.comANTHROPIC_BASE_URL
Lista de modeloshttps://cn.crazyrouter.com/v1/modelschecagem
Anthropic Messageshttps://cn.crazyrouter.com/v1/messagesrequisição do cliente

Preencha o endereço raiz, não /v1/messages — o oposto de clientes compatíveis com OpenAI (que exigem /v1). Copiar errado gera 404 ou /v1/v1/messages.

Abra/crie %USERPROFILE%\.claude\settings.json e salve (não cole JSON no PowerShell):

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://cn.crazyrouter.com",
    "ANTHROPIC_AUTH_TOKEN": "YOUR_CRAZYROUTER_API_KEY"
  }
}

Por que ANTHROPIC_AUTH_TOKEN e não ANTHROPIC_API_KEY? Eles enviam cabeçalhos diferentes:

VariávelCabeçalho enviadoUso
ANTHROPIC_API_KEYx-api-key: <key>API oficial Anthropic
ANTHROPIC_AUTH_TOKENAuthorization: Bearer <token>gateway compatível

Com ANTHROPIC_API_KEY, o cliente segue o canal oficial e ignora seu ANTHROPIC_BASE_URL — daí o 403 mesmo com endereço configurado. Não coloque as duas credenciais "por segurança".

Para checar a configuração sem expor a Key:

$settingsPath = Join-Path $env:USERPROFILE '.claude\settings.json'
$ccSettings = Get-Content -Raw -LiteralPath $settingsPath | ConvertFrom-Json
[pscustomobject]@{
    BaseURL = $ccSettings.env.ANTHROPIC_BASE_URL
    HasAuthToken = -not [string]::IsNullOrWhiteSpace([string]$ccSettings.env.ANTHROPIC_AUTH_TOKEN)
}

Para listar modelos com sua Key:

$crBase = ([string]$ccSettings.env.ANTHROPIC_BASE_URL).TrimEnd('/')
$crHeaders = @{ Authorization = "Bearer $($ccSettings.env.ANTHROPIC_AUTH_TOKEN)" }
(Invoke-RestMethod -Uri "$crBase/v1/models" -Headers $crHeaders -Method Get -TimeoutSec 30).data | Select-Object id

Copie o ID exato retornado. Depois adicione "model": "YOUR_MODEL_ID" ao settings.json e reinicie o terminal.

Parte 3: a primeira pergunta que prova que funcionou

Em um diretório de teste, rode claude -p "Responda apenas OK.". Esperado: um OK completo. Em seguida, confira o log de uso no console (tempo, modelo, status).

Cadeia com prova: comando roda + configuração parseável + resposta completa + log bate.

Parte 4: 403 e outros erros

Failed to connect to api.anthropic.com: Status 403:

  1. Status 403 → resposta do servidor, não falha de rede.
  2. Host é api.anthropic.com → o cliente ignorou sua config.
  3. Logo, o problema é para onde a requisição vai e com qual credencial, não a instalação.

Verifique em ordem: diretório da configuração, settings.json parseável, CLAUDE_CONFIG_DIR, sessão reiniciada, configuração de projeto com prioridade maior e login oficial/CC Switch interferindo.

ConnectionRefused (ex.: 127.0.0.1:7890) é falha de conexão local — teste a porta antes de culpar a Key:

Test-NetConnection 127.0.0.1 -Port 7890
Test-NetConnection cn.crazyrouter.com -Port 443

Registro de teste real (28/09/2026)

ItemResultado
SOWindows 10
TerminalWindows PowerShell
Node.jsv22.22.2
npm10.9.7
Claude Code2.1.281
Base URLhttps://cn.crazyrouter.com
GET /v1/modelsHTTP 200, 161 modelos
POST /v1/messagesHTTP 200, OK, stop_reason=end_turn
response idmsg_011CfVJqbN2DVuqoYqgLcdNE
tokensentrada 18 / saída 4
ida-e-volta (API)11569 ms
cliente Claude Codeexit 0, is_error=false, success, 5103 ms
session ida7a76f08-fa36-4a36-8787-3f2b24dad626

Corpo usado (HTTP request body, não settings.json):

{
  "model": "claude-fable-5-1",
  "max_tokens": 32,
  "messages": [{ "role": "user", "content": "Reply with exactly OK." }]
}

O ID claude-fable-5-1 vale no momento da consulta e pode mudar. Uma resposta bem-sucedida prova o teste mínimo daquele instante — não estabilidade a longo prazo.

Referências

Aviso de isenção de responsabilidade: Este artigo é um relato de experiência pessoal, não um documento oficial. Serviços de terceiros, nomes de modelos, preços e modelos disponíveis podem mudar a qualquer momento — verifique sempre nas páginas oficiais e no seu próprio console. Os endpoints de API e os caminhos de configuração devem seguir a documentação oficial no momento da sua consulta. Este artigo não contém links de afiliados, comissões ou patrocínios.

Carregando publicação patrocinada...