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.