Skip to content

Ошибки пользовательского ANTHROPIC_BASE_URL в Claude Code: 404, конфликты авторизации и решения ​

Вы настроили Claude Code для работы со шлюзом через ANTHROPIC_BASE_URL, и теперь каждый запрос завершается ошибкой модели, сообщением Invalid API key, неожиданным запросом на вход или предупреждением о двух учетных данных. Почти всегда причина кроется в одной из пяти ошибок конфигурации.

Быстрый ответ

Claude Code самостоятельно добавляет /v1/messages к ANTHROPIC_BASE_URL, поэтому установите его значение как чистый домен (например, https://byesu.com, без /v1 и без завершающего слэша). Поместите токен шлюза в одну переменную, обычно это ANTHROPIC_AUTH_TOKEN, и удалите оставшийся ANTHROPIC_API_KEY. Claude Code считывает экспорты оболочки только при запуске, поэтому перезапустите его после изменений, а затем выполните /status, чтобы увидеть, какой базовый URL и какие учетные данные он фактически использует.

Симптомы и их значение ​

Что вы видитеВероятная причинаРешение
There's an issue with the selected model (claude-...). It may not exist or you may not have access to it. Run /model to pick a different model.Базовый URL заканчивается на /v1, поэтому запросы уходят на /v1/v1/messages и получают 404, либо неверный ID моделиРешение 1, Решение 5
Invalid API key · Fix external API key (в старых версиях: Invalid API key · Please run /login)Значение ANTHROPIC_API_KEY было отклонено или содержит символ, недопустимый для HTTP-заголовковРешение 3
Please run /login · API Error: 401 Invalid authentication credentialsШлюз отклонил учетные данные. При использовании пользовательского базового URL текст после 401 приходит от шлюзаРешение 2, Решение 3
Предупреждение при запуске с указанием двух источников учетных данных и фразой auth may not work as expected (ранее: Auth conflict: Both a token (SOURCE) and an API key (SOURCE) are set)Активны одновременно учетные данные шлюза и сохраненный вход в claude.aiРешение 2
Not logged in · Please run /login или экран входа в claude.aiДо сессии не дошли учетные данныеРешение 4
Connection refused — a firewall or proxy may be blocking it (ConnectionRefused)Оставшийся ANTHROPIC_BASE_URL указывает на прокси, который не запущен, либо в имени хоста допущена опечаткаРешение 1

Claude Code сообщает об ошибке 404 из-за удвоения пути как об ошибке модели, поэтому ее легко пропустить. Один из пользователей в anthropics/claude-code#26408 обнаружил ее, запустив приложение с флагом --debug и просмотрев лог в ~/.claude/debug:

text
[ERROR] API error (attempt 1/11): 404 404 {"error":{"message":"Invalid URL (POST /v1/v1/messages)","type":"invalid_request_error","param":"","code":""}}

Тело ошибки зависит от шлюза, но /v1/v1/ в пути подтверждает проблему.

Почему это происходит ​

  1. Claude Code самостоятельно формирует путь. В руководстве по совместимости шлюзов Anthropic указано, что запросы на инференс отправляются по адресу /v1/messages (с ?beta=true) относительно вашего ANTHROPIC_BASE_URL. Базовый URL, который уже заканчивается на /v1, приводит к дублированию пути.
  2. Каждая переменная с учетными данными отправляется в своем заголовке, и используется только одна. ANTHROPIC_AUTH_TOKEN отправляется как Authorization: Bearer, а ANTHROPIC_API_KEY — как X-Api-Key. Приоритет аутентификации следующий: учетные данные облачного провайдера, затем ANTHROPIC_AUTH_TOKEN, затем ANTHROPIC_API_KEY, затем apiKeyHelper, затем CLAUDE_CODE_OAUTH_TOKEN, и в последнюю очередь — ваша подписка через /login. Если в этом списке выше находится устаревшее значение, оно побеждает без каких-либо предупреждений.

Решение 1: Используйте чистый домен в качестве базового URL ​

bash
# Неправильно: Claude Code добавит /v1/messages → /v1/v1/messages → 404
export ANTHROPIC_BASE_URL="https://byesu.com/v1"

# Правильно
export ANTHROPIC_BASE_URL="https://byesu.com"

Завершающий слэш: TypeScript SDK Anthropic сворачивает https://byesu.com/ + /v1/messages в один слэш, поэтому Claude Code обычно допускает наличие слэша. Ваши собственные тесты через curl не выполняют такой очистки и отправят запрос на //v1/messages, поэтому лучше не ставить слэш.

Протестируйте URL и токен перед запуском Claude Code, используя запрос с одним токеном из руководства по настройке шлюза Anthropic:

bash
curl -sS -w '\n%{http_code}\n' -X POST "$ANTHROPIC_BASE_URL/v1/messages" \
  -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model": "claude-sonnet-5-5", "max_tokens": 1, "messages": [{"role": "user", "content": "."}]}'

Тело ответа, начинающееся с {"id":"msg_, означает, что URL и токен работают корректно. Ошибка неизвестной модели также подтверждает их работоспособность, так как шлюз аутентифицировал запрос, прежде чем проверить модель. Ошибка пути 404 означает, что базовый URL неверен, а 401 — что неверны учетные данные.

Ошибка Connection refused, при условии, что curl -I https://api.anthropic.com работает, обычно означает, что остался заданный ANTHROPIC_BASE_URL. Удалите его из профиля оболочки и из блока env в настройках, затем откройте новый терминал.

Решение 2: Используйте только одну переменную с учетными данными ​

ПеременнаяОтправляемый заголовокПримечания
ANTHROPIC_AUTH_TOKENAuthorization: Bearer …Применяется немедленно, без запроса. Anthropic рекомендует его, если шлюз не указывает явно, какой заголовок ожидает
ANTHROPIC_API_KEYX-Api-Key: …В интерактивном режиме требует однократного подтверждения. Если вы отклонили его ранее, он игнорируется без предупреждения; повторно включите его через /config → Use custom API key
bash
env | grep ANTHROPIC        # всё, что передает ваша оболочка
unset ANTHROPIC_API_KEY     # шлюз с bearer-token: удалите другую переменную

Смешивание этих переменных вызывает запутанные ошибки 401: старый ANTHROPIC_AUTH_TOKEN перекрывает новый ANTHROPIC_API_KEY, а правильный токен в переменной, заголовок которой шлюз не считывает, никогда не будет принят.

При появлении предупреждения о конфликте аутентификации таблица устранения неполадок Anthropic предлагает два варианта: либо удалить переменную, чтобы использовать сохраненный вход в claude.ai, либо выполнить /logout, чтобы оставить только учетные данные шлюза. После этого команда /status должна показать строку Anthropic base URL и строку Auth token или API key для используемых учетных данных.

Решение 3: Устранение "Invalid API key" и 401 ​

При работе через шлюз команда /login не поможет, так как именно шлюз отклоняет учетные данные. Проверьте следующее:

  • Устаревший ключ в переменных окружения. В справочнике ошибок Anthropic предупреждается, что плагины direnv, dotenv и терминалы в IDE могут загружать старый ключ из проекта .env без вашего ведома. Выполните env | grep ANTHROPIC в терминале, из которого запускаете приложение.
  • Невидимые символы. Если сообщение после Fix external API key продолжается фразой вроде it contains a line break at character 41, значит, ключ не был правильно передан. Скопируйте его заново.
  • Неверная переменная или нерабочий токен. Переключите переменные и повторите тест с curl, затем убедитесь в консоли шлюза, что токен все еще существует и активен.

Общие причины ошибок 401 описаны в статье Claude API 401 Authentication Error.

Решение 4: Разместите конфигурацию там, где ее считывает Claude Code ​

Самое надежное место для настроек шлюза — блок env в файле ~/.claude/settings.json (в Windows: %USERPROFILE%\.claude\settings.json):

json
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://byesu.com",
    "ANTHROPIC_AUTH_TOKEN": "sk-your-token"
  }
}

Согласно справочнику переменных окружения:

  • Экспортированные переменные оболочки считываются при запуске. После редактирования ~/.zshrc откройте новый терминал и запустите claude снова.
  • Блок env применяется повторно при сохранении файла, но удаление переменной вступает в силу только при следующем запуске. Если сомневаетесь, перезапустите приложение.
  • Если заданы оба варианта, файл настроек обычно переопределяет экспорт аналогичной переменной в оболочке.

Частые причины, почему конфигурация не подхватывается:

  • Файл .claude/settings.json в проекте. Не помещайте туда токен, так как этот файл попадает в систему контроля версий (git). Большинство значений env в нем также ожидают, пока вы доверитесь папке, поэтому при первом запуске все еще может появляться экран входа. Используйте экспорт в оболочке или ~/.claude/settings.json.
  • Расширение VS Code. Оно считывает учетные данные из claudeCode.environmentVariables в настройках самого VS Code.
  • Поврежденный JSON. Лишняя запятая или комментарий // ломают файл и вызывают Settings Error при запуске. claude doctor покажет, что именно было отклонено.

Наше руководство по настройке Claude Code также устанавливает "hasCompletedOnboarding": true в файле ~/.claude.json, чтобы пропустить экран входа в claude.ai.

Решение 5: Установите ID моделей, которые поддерживает шлюз ​

Правильные URL и токен могут по-прежнему вызывать ошибку There's an issue with the selected model, если ID модели отсутствует на шлюзе. Соответствующие переменные из конфигурации моделей:

ПеременнаяЗа что отвечает
ANTHROPIC_MODELМодель сессии. Переопределяет ключ model в файлах конфигурации
ANTHROPIC_DEFAULT_MODELМодель, с которой начинаются новые сессии, используется только если в файле настроек не задан model (v2.1.236+)
ANTHROPIC_DEFAULT_OPUS_MODEL / _SONNET_MODELТо, во что разрешаются псевдонимы opus / sonnet
ANTHROPIC_DEFAULT_HAIKU_MODELТо, во что разрешается haiku; также используется для фоновых задач
ANTHROPIC_SMALL_FAST_MODELУстарело; используйте ANTHROPIC_DEFAULT_HAIKU_MODEL
json
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://byesu.com",
    "ANTHROPIC_AUTH_TOKEN": "sk-your-token",
    "ANTHROPIC_MODEL": "claude-opus-5-5",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-5-5"
  }
}

Используйте полные идентификаторы моделей именно так, как они перечислены на шлюзе. Если чат работает, а фоновые функции — нет, укажите ANTHROPIC_DEFAULT_HAIKU_MODEL модель, которая есть в списке шлюза. Параметр CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1 заполняет выборщик /model данными из эндпоинта /v1/models шлюза. Проблемы с опечатками в ID моделей описаны в статье Claude API 404 model not found.

Если вы используете byesu ​

byesu — это шлюз API для ИИ с эндпоинтами, нативными для Anthropic и совместимыми с OpenAI. Один ключ покрывает Claude, GPT, Grok и Gemini с оплатой по факту использования без подписки. Для Claude Code:

  • Установите ANTHROPIC_BASE_URL=https://byesu.com, без /v1 и без завершающего слэша. https://byesu.com/v1 предназначен для клиентов с форматом OpenAI, таких как Codex CLI.
  • Поместите токен в ANTHROPIC_AUTH_TOKEN и скопируйте ID моделей, такие как claude-opus-5-5 или claude-sonnet-5-5, из списка моделей в консоли.

Чтобы начать работу, создайте токен и следуйте Quick Start. Полное пошаговое руководство, включая скрипт настройки в один клик, находится в разделе Connecting Claude Code CLI.

FAQ ​

Должен ли ANTHROPIC_BASE_URL включать /v1? ​

Нет. Claude Code самостоятельно добавляет /v1/messages к ANTHROPIC_BASE_URL, поэтому базовый URL, заканчивающийся на /v1, приводит к запросам вида /v1/v1/messages, на которые шлюз отвечает ошибкой 404. Используйте чистый домен (origin), например https://byesu.com, без /v1 и без завершающего слэша.

В чем разница между ANTHROPIC_AUTH_TOKEN и ANTHROPIC_API_KEY? ​

ANTHROPIC_AUTH_TOKEN отправляется в заголовке Authorization: Bearer; ANTHROPIC_API_KEY отправляется в заголовке X-Api-Key и в интерактивном режиме требует однократного подтверждения перед использованием. Если заданы оба, Claude Code использует ANTHROPIC_AUTH_TOKEN. Установите только ту переменную, которую ожидает ваш шлюз, и удалите другую.

Почему Claude Code пишет Invalid API key и просит запустить /login? ​

Отправленные Claude Code учетные данные были отклонены или до сессии не дошли никакие валидные данные. При использовании пользовательского базового URL команда /login не поможет: проверьте, что установлена нужная переменная, что в оболочке не экспортирован старый ключ ANTHROPIC_API_KEY и он не загружается из файла .env, а затем выполните /status, чтобы увидеть, какие учетные данные активны.

Нужно ли перезапускать Claude Code после изменения переменных окружения? ​

Для экспортированных переменных оболочки — да: Claude Code считывает их при запуске. Значения в блоке env файла ~/.claude/settings.json применяются к текущей сессии при сохранении файла, но удаление переменной вступает в силу только при следующем запуске. Перезапуск — самый надежный способ убедиться в применении изменений.

Какая переменная окружения задает модель в Claude Code? ​

ANTHROPIC_MODEL задает модель для сессии и переопределяет настройку model в файлах конфигурации. ANTHROPIC_DEFAULT_OPUS_MODEL, ANTHROPIC_DEFAULT_SONNET_MODEL и ANTHROPIC_DEFAULT_HAIKU_MODEL определяют, во что разрешаются псевдонимы opus, sonnet и haiku; модель haiku также используется для фоновых задач. Каждая переменная должна содержать полный идентификатор модели, поддерживаемый вашим шлюзом.

Возникла проблема? Напишите в поддержку или в наш чат.