이 경우 401은 자격 증명 또는 base URL 문제이며 모델 문제는 절대 아닙니다. 모델 문제라면 모델 이름을 포함한 메시지와 함께 404가 반환됩니다. 이 한 가지 구분만으로도 대부분의 문제를 한 번의 curl에서 해결할 수 있습니다.
오류
API Error: 401 {"type":"error","error":{"type":"authentication_error","message":"Missing or invalid API key"}}원인과 해결 방법 한눈에 보기
| 원인 | 해결 방법 |
|---|---|
| ANTHROPIC_AUTH_TOKEN이 필요한 곳에 ANTHROPIC_API_KEY가 설정됨 | 타사 base URL에는 AUTH_TOKEN을 사용하세요. API_KEY는 일회성 승인 프롬프트를 표시합니다. |
| /v1 경로가 포함된 base URL | origin만 설정하세요. Claude Code가 자체적으로 /v1/messages를 추가합니다. |
| 키가 폐기되었거나 계정이 정지됨 | 두 경우 모두 401을 반환하며 403은 반환하지 않습니다. 새 키를 발급하고 계정을 확인하세요. |
| Messages 엔드포인트가 제공하지 않는 모델 | 이 경우 모델 이름을 표시하는 404가 반환되며 401이 아닙니다. 따라서 해결 방법도 다릅니다. |
세 변수를 출력하고 base URL에 경로가 없는지 확인하세요
가장 흔한 원인은 여기에서 확인할 수 있습니다. 클라이언트가 엔드포인트를 직접 추가하므로 base URL은 origin이어야 하며 /v1이나 뒤따르는 경로가 없어야 합니다. /v1로 끝나는 base URL은 /v1/v1/messages에 대한 요청을 생성합니다.
env | grep -E '^ANTHROPIC_(BASE_URL|AUTH_TOKEN|API_KEY|MODEL)='
# Right: https://api.kunavo.com
# Wrong: https://api.kunavo.com/v1엔드포인트를 두 방식으로 직접 호출하세요
Kunavo의 /v1/messages는 x-api-key 또는 Authorization: Bearer 중 어느 헤더로도 자격 증명을 허용합니다. 따라서 Claude Code 앞에 플러그인이나 프록시가 필요하지 않습니다. curl은 성공하지만 CLI가 실패한다면 문제는 서버가 아니라 셸 환경에 있습니다.
curl -s https://api.kunavo.com/v1/messages -H "x-api-key: $ANTHROPIC_AUTH_TOKEN" -H "anthropic-version: 2023-06-01" -H "content-type: application/json" -d '{"model":"claude-sonnet-5","max_tokens":8,
"messages":[{"role":"user","content":"hi"}]}'
# Same call, other header style — both are accepted:
# -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN"사용하지 않는 변수를 해제하세요
ANTHROPIC_API_KEY와 ANTHROPIC_AUTH_TOKEN이 모두 설정되어 있으면 잘못된 변수가 우선될 수 있습니다. ANTHROPIC_API_KEY를 해제하고 새 셸을 시작한 다음 다시 시도하세요. 셸 프로필의 오래된 export는 다른 모든 해결 방법보다 오래 남습니다.
상태가 404라면 키 디버깅을 중단하세요
메시지에 모델 이름이 포함된 404가 반환되면 자격 증명은 승인되었지만 모델 문자열은 승인되지 않았다는 뜻입니다. ANTHROPIC_MODEL을 수정하세요. 키에는 문제가 없습니다. 새로 설정할 때 흔한 원인은 모델을 지정하지 않았기 때문입니다. 그러면 Claude Code가 내장 기본값인 최신 Opus를 전송하는데, Kunavo가 아직 제공하지 않을 수 있습니다. 또한 /model sonnet은 Kunavo가 제공하지 않는 Sonnet 5.5를 요청합니다. GET /v1/models에서 반환된 ID로 ANTHROPIC_MODEL, ANTHROPIC_DEFAULT_OPUS_MODEL 및 ANTHROPIC_DEFAULT_SONNET_MODEL을 설정하세요.
Kunavo를 통해 호출하는 경우
Kunavo에서 401이 발생하는 원인은 다섯 가지로 좁혀집니다. Authorization: Bearer 또는 x-api-key로 키가 전달되지 않았거나, 키에 sk-kn- 접두사가 없거나, Kunavo가 발급하지 않은 sk-kn- 키이거나(오타 또는 잘린 붙여넣기), 키가 폐기되었거나, 계정이 정지된 경우입니다. 이 원인들은 어느 것도 403을 반환하지 않으므로 상태 코드만으로도 어느 계열인지 알 수 있습니다. 또한 유효한 키를 Messages 엔드포인트가 제공하지 않는 모델에 사용하면 401이 아니라 메시지에 모델 이름을 포함한 404가 반환됩니다. 이것이 전체 진단 트리입니다.
자주 묻는 질문
내 키가 curl에서는 작동하지만 Claude Code에서는 작동하지 않는 이유는 무엇인가요?
거의 항상 셸 프로필에 설정된 두 번째 변수이거나, 경로가 포함된 base URL 때문입니다. 엔드포인트는 두 헤더 형식을 모두 허용하므로 헤더 차이가 원인은 아닙니다.
ANTHROPIC_AUTH_TOKEN과 ANTHROPIC_API_KEY 중 어느 것을 사용해야 하나요?
타사 base URL에는 AUTH_TOKEN을 사용하세요. 즉시 사용됩니다. API_KEY는 먼저 일회성 승인 프롬프트를 표시하며, 이를 실패로 오해하는 경우가 많습니다.
Claude 구독으로 사용자 지정 base URL을 이용할 수 있나요?
아니요. 구독은 제공업체 자체 엔드포인트에 인증합니다. CLI를 다른 곳으로 지정하면 해당 엔드포인트의 자격 증명을 사용하며, 요금도 해당 엔드포인트에서 청구됩니다.
관련 가이드
- Claude API 401 authentication_error / invalid x-api-key — 모든 원인
- Claude Code 설치 — 모든 OS의 명령어, 첫 로그인, 자주 발생하는 오류
- “조직에서 Claude Code의 Claude 구독 액세스를 비활성화했습니다” — 세 가지 원인과 해결 방법
오류 의미에 대한 자세한 내용은 오류 참조에서 확인할 수 있습니다. 가입 및 인증 가이드를 통해 1분이면 키를 받을 수 있습니다.