Claude Code — Switching Between API Key and Login Auth
Claude Code supports two auth modes. The ANTHROPIC_API_KEY env var in
settings.json always takes precedence. Remove it to fall back to OAuth login.
How It Works
| Mode | Mechanism | When to use |
|---|---|---|
| API key / proxy | ANTHROPIC_API_KEY set in settings.json env block | LiteLLM proxy, custom endpoint |
| OAuth login | No ANTHROPIC_API_KEY set; claude login used | Direct Claude.ai account |
settings.json — API Key Mode (proxy)
{
"env": {
"ANTHROPIC_API_KEY": "sk-your-key-or-litellm-key",
"ANTHROPIC_BASE_URL": "http://localhost:4000"
}
}settings.json — Login Mode
{
"env": {
// Remove or comment out ANTHROPIC_API_KEY and ANTHROPIC_BASE_URL
}
}Make sure you are logged in: claude login
Quick Switch — Shell Aliases
Keep two config files and swap them with aliases:
# First time: save each config
cp ~/.claude/settings.json ~/.claude/settings.proxy.json
cp ~/.claude/settings.json ~/.claude/settings.login.json
# (edit settings.login.json to remove ANTHROPIC_API_KEY)
# Add to ~/.bashrc or ~/.zshrc
alias cc-proxy='cp ~/.claude/settings.proxy.json ~/.claude/settings.json && echo "→ proxy mode"'
alias cc-login='cp ~/.claude/settings.login.json ~/.claude/settings.json && echo "→ login mode"'Key Precedence Rule
ANTHROPIC_API_KEYin the env block always wins. As long as it is absent, Claude Code uses the logged-in account automatically.
Gotchas
- Both
ANTHROPIC_API_KEYandANTHROPIC_BASE_URLmust be cleared for login mode claude loginstores OAuth token separately — it persists across settings changes- After swapping configs, no restart needed; takes effect on next
claudeinvocation
Source
Conversation: “Switching between API key and login authentication” — 2026-05-12