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
| Nome | O que é | O que fazemos |
|---|---|---|
| Claude Code | Programa no PC que lê arquivos e escreve código no terminal | Instalar e confirmar que roda |
| Modelo | Serviço que responde | Escolher um visível e compatível |
| Crazyrouter API | Entrada de terceiros usada aqui | Criar 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.

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+).

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).

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:
| Uso | Endereço | Onde preencher |
|---|---|---|
| Conta/registro | https://crazyrouter.com | navegador |
| Base URL (endereço raiz da API) do Claude Code | https://cn.crazyrouter.com | ANTHROPIC_BASE_URL |
| Lista de modelos | https://cn.crazyrouter.com/v1/models | checagem |
| Anthropic Messages | https://cn.crazyrouter.com/v1/messages | requisiçã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ável | Cabeçalho enviado | Uso |
|---|---|---|
ANTHROPIC_API_KEY | x-api-key: <key> | API oficial Anthropic |
ANTHROPIC_AUTH_TOKEN | Authorization: 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:
Status 403→ resposta do servidor, não falha de rede.- Host é
api.anthropic.com→ o cliente ignorou sua config. - 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)
| Item | Resultado |
|---|---|
| SO | Windows 10 |
| Terminal | Windows PowerShell |
| Node.js | v22.22.2 |
| npm | 10.9.7 |
| Claude Code | 2.1.281 |
| Base URL | https://cn.crazyrouter.com |
GET /v1/models | HTTP 200, 161 modelos |
POST /v1/messages | HTTP 200, OK, stop_reason=end_turn |
| response id | msg_011CfVJqbN2DVuqoYqgLcdNE |
| tokens | entrada 18 / saída 4 |
| ida-e-volta (API) | 11569 ms |
| cliente Claude Code | exit 0, is_error=false, success, 5103 ms |
| session id | a7a76f08-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
- Documentação de instalação do Claude Code
- Configurações e precedência do Claude Code
- Node.js download
- Git for Windows
- Documentação da Crazyrouter
- Criar conta e API Key na Crazyrouter
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.