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

ModeMechanismWhen to use
API key / proxyANTHROPIC_API_KEY set in settings.json env blockLiteLLM proxy, custom endpoint
OAuth loginNo ANTHROPIC_API_KEY set; claude login usedDirect 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_KEY in the env block always wins. As long as it is absent, Claude Code uses the logged-in account automatically.

Gotchas

  • Both ANTHROPIC_API_KEY and ANTHROPIC_BASE_URL must be cleared for login mode
  • claude login stores OAuth token separately — it persists across settings changes
  • After swapping configs, no restart needed; takes effect on next claude invocation

Source

Conversation: “Switching between API key and login authentication” — 2026-05-12