Claude Code и ошибка «invalid x-api-key»: запрос ушёл напрямую в Anthropic

Wokey Team · 2026-09-24

Коротко: если вы видите invalid x-api-key, ваш запрос ушёл на собственный api.anthropic.com от Anthropic, а не на настроенный вами шлюз. Wokey никогда не возвращает это сообщение; его ошибка ключа — invalid_api_key, с подчёркиваниями. Так что не спешите менять ключ. Выясните, почему не применился базовый URL.

Сначала выясните, кто ответил

Сравните JSON из вашей ошибки с этой таблицей, чтобы понять, куда на самом деле попал запрос. Каждая строка — это сырой ответ, полученный через curl:

Ответ содержит Кто ответил Что это значит
"message":"invalid x-api-key" Anthropic Ключ sk- был отправлен как Authorization: Bearer, или значение x-api-key не похоже на ключ
"message":"API key is invalid." Anthropic Ключ sk-, выданный не Anthropic, был отправлен как x-api-key
"message":"x-api-key header is required" Anthropic Ключ вообще не был отправлен
"message":"Invalid bearer token" Anthropic Значение bearer не начинается с sk-
"code":"invalid_api_key" Wokey Запрос дошёл до Wokey, но ключ отсутствует, введён с ошибкой или удалён

Полный ответ Anthropic выглядит так. Обратите внимание на внешний "type":"error" и, как правило, request_id:

{"type":"error","error":{"type":"authentication_error","message":"invalid x-api-key"},"request_id":"req_011C..."}

В ответе Wokey нет внешнего type: "error", а в code используются подчёркивания:

{"error":{"code":"invalid_api_key","message":"Invalid API key. Make sure you copied the complete Wokey API key, or create a new one at https://wokey.ai/api.","type":"invalid_request_error"}}

Ключи Wokey начинаются с sk-. Если положить такой ключ в ANTHROPIC_AUTH_TOKEN (отправляется как bearer-токен) и запрос уйдёт в Anthropic, вы получите invalid x-api-key. Если положить его в ANTHROPIC_API_KEY (отправляется как x-api-key), вы получите API key is invalid. Причина в обоих случаях одна и та же.

Почему не применился базовый URL

1. Переменной нет в процессе, где запущен claude. export действует только в текущем терминале. Переменная не будет видна, если она задана в другом терминале или добавлена в ~/.zshrc, а новый терминал вы не открыли; не увидит её и редактор, запущенный из Dock или меню «Пуск». В терминале, из которого запускается claude, проверьте, что обе переменные на месте:

env | grep ANTHROPIC

2. Неверное имя переменной. Claude Code читает только ANTHROPIC_BASE_URL. ANTHROPIC_API_BASE, ANTHROPIC_BASE, CLAUDE_BASE_URL и OPENAI_BASE_URL игнорируются, и запрос молча уходит на официальный адрес.

3. В settings.json есть ключ, но нет адреса. Если блок env в ~/.claude/settings.json задаёт ANTHROPIC_AUTH_TOKEN без ANTHROPIC_BASE_URL, ключ отправляется в Anthropic. Держите их вместе:

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.wokey.ai",
    "ANTHROPIC_AUTH_TOKEN": "your Wokey API key"
  }
}

4. Вы используете расширение VS Code. Проверка входа в расширении не читает переменные shell. Задайте их в claudeCode.environmentVariables в пользовательских настройках VS Code; см. руководство по расширению VS Code.

5. Вы используете десктопное приложение Claude. Десктопное приложение не читает ни ANTHROPIC_BASE_URL, ни settings.json. Задайте шлюз в Developer → Configure Third-Party Inference; см. устранение неполадок десктопного приложения со сторонним API.

6. Вы вызываете SDK из своего кода. Python- и TypeScript-SDK от Anthropic по умолчанию используют официальный адрес. Явно передайте base_url (baseURL в TypeScript) — тоже без /v1:

from anthropic import Anthropic

client = Anthropic(base_url="https://api.wokey.ai", api_key="your Wokey API key")

Проверьте внутри Claude Code

Выполните /status в Claude Code. На вкладке Status должна быть строка Anthropic base URL со значением https://api.wokey.ai. Если строки нет, Claude Code использует официальный адрес, и дело в одной из причин выше.

Сравните с curl

В том же терминале, из которого запускается claude, выполните:

curl -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","max_tokens":1,"messages":[{"role":"user","content":"."}]}'

Что говорит результат:

  • curl: (3) URL rejected: No host part in the URL: ANTHROPIC_BASE_URL пуст — переменная так и не была задана.
  • Начинается с {"id":"msg_: шлюз и ключ в порядке. Проблема в конфигурации, которую читает Claude Code; пройдите по причинам 3–5 выше.
  • invalid_api_key: запрос дошёл до Wokey, так что теперь дело действительно в ключе. Проверьте в консоли, что он скопирован целиком и не удалён.

Если это происходит с официальным API

Если вы работаете с API Anthropic напрямую, invalid x-api-key означает ровно то, что написано: ключ неверный или отозван либо скопирован с лишним переводом строки или пробелом. Ключ, содержащий перевод строки, Claude Code блокирует ещё до отправки с ошибкой вида Invalid X-Api-Key header value from ANTHROPIC_API_KEY: it contains a line break.

Частые вопросы

Это Wokey возвращает «invalid x-api-key»?

Нет. Это сообщение возвращает собственный API Anthropic. На отсутствующий или неверный ключ Wokey отвечает 401 с {"error":{"code":"invalid_api_key",...}}. Если вы видите «invalid x-api-key», запрос вообще не дошёл до Wokey, потому что ANTHROPIC_BASE_URL не применился.

Как проверить, какой base URL использует Claude Code?

Выполните /status в Claude Code и посмотрите на строку Anthropic base URL. С Wokey там должно быть https://api.wokey.ai. Если строки нет или в ней адрес Anthropic, переменная не попала в запущенный процесс.

echo показывает переменную — почему ошибка не уходит?

Обычно переменную задали без export или Claude Code запущен из другого терминала, IDE или ярлыка на рабочем столе, которые её не видят. Самое надёжное решение — прописать ANTHROPIC_BASE_URL и ANTHROPIC_AUTH_TOKEN в блок env файла ~/.claude/settings.json.

Что делать, если эту ошибку показывает расширение VS Code или десктопное приложение?

Для расширения VS Code задайте переменные в claudeCode.environmentVariables в пользовательских настройках. Десктопное приложение Claude игнорирует переменные окружения: настройте шлюз в Developer → Configure Third-Party Inference и нажмите Save & Restart.

Можно ли использовать ключ Wokey напрямую с Anthropic?

Нет. Ключ Wokey — это sk- и 32 шестнадцатеричных символа, он работает только на api.wokey.ai. Если отправить его в Anthropic, вернётся 401.