Qwen Code: ошибка 401 invalid access token or token expired

Ошибка 401 в Qwen Code часто означает старый вход через Qwen OAuth или ключ, который отправился не на тот адрес. Диагностика по шагам и переход на свой ключ.

5 мин · · ошибки · агенты

Сообщение «Qwen Code internal error: 401 invalid access token or token expired» (в других клиентах оно выглядит как «Qwen API error: 401 invalid access token or token expired») говорит об одном: сервер, который ответил, не принял учётные данные. Вопрос в том, какой это сервер и какие именно данные он видел. Ниже порядок диагностики и способ перейти на свой OpenAI-совместимый ключ, чтобы агент снова заработал. Проверено по документации Qwen Code и ответам шлюза Zukko на 18 октября 2026.

Откуда берётся эта ошибка

Текст «token expired» указывает на токен доступа с ограниченным сроком жизни. У Qwen Code такие токены были у режима Qwen OAuth: вы входили через браузер, учётные данные кэшировались на диске и обновлялись автоматически. По документации проекта, бесплатный уровень Qwen OAuth прекращён 15 апреля 2026, а уже сохранённые токены могут ещё некоторое время работать, но новые запросы отклоняются. Поэтому самая вероятная причина «token expired» в сегодняшней сборке: агент всё ещё пытается использовать старый OAuth-вход. В диалоге /auth этот вариант больше не выбирается.

Точной строки именно с этим текстом в документации мы не нашли, поэтому не утверждаем, что она всегда связана с OAuth. Но схема диагностики ниже подходит в обоих случаях: сначала выясняем, какой способ входа активен, потом заменяем его на ключ.

Другие причины 401, не связанные с OAuth:

  • ключ введён с опечаткой, пробелом или обрезан при копировании;
  • ключ одного сервиса отправляется на адрес другого;
  • в окружении остался старый OPENAI_API_KEY, который перекрывает ключ из settings.json.

Шаг 1. Узнайте, какой способ входа используется

Запустите qwen и выполните /doctor: по документации, эта команда проверяет текущую аутентификацию. Затем откройте /auth и посмотрите, что предлагается. Если вы видите только пункты с ключом (облако Alibaba, сторонние провайдеры, Custom Provider), значит OAuth уже не в списке, и нужен ключ.

Если интерфейс не открывается вовсе (зависает после неудачной аутентификации), в документации указан способ: удалите поле security.auth.selectedType из ~/.qwen/settings.json (или из ./.qwen/settings.json проекта) и перезапустите программу. Она снова предложит выбрать способ входа.

Шаг 2. Проверьте, кто отвечает

Самая частая ошибка при переходе: адрес остался от старого провайдера, а ключ новый (или наоборот). Проверьте переменные:

bash
echo "$OPENAI_BASE_URL"
echo "${OPENAI_API_KEY:0:8}"
echo "$OPENAI_MODEL"

Для Zukko адрес должен быть https://api.zukko.pro/v1, а ключ должен начинаться с fetch_. Если в OPENAI_BASE_URL стоит адрес Alibaba, а в ключе fetch_..., 401 вернёт Alibaba, и ваша учётка Zukko тут ни при чём.

Приоритет источников у Qwen Code такой: флаги командной строки, затем переменные окружения оболочки, затем файл .env, и самым последним поле env в settings.json. Значит, старый export OPENAI_API_KEY=... в ~/.zshrc победит то, что вы записали в settings.json. Откройте новый терминал и проверьте echo, как выше.

Шаг 3. Проверьте ключ отдельно от агента

Один запрос напрямую сэкономит час догадок:

bash
curl -i https://api.zukko.pro/v1/chat/completions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"claude-sonnet-5-5","messages":[{"role":"user","content":"ping"}]}'

Как читать ответ шлюза Zukko:

КодЧто значитЧто делать
200ключ и модель в порядкепроблема в настройках Qwen Code
401неверный ключперепроверьте ключ, при сомнении выпустите новый
402не хватает балансапополните баланс в кабинете
403модели нет в списке разрешённых для ключа (model_not_allowed_for_key)разрешите модель в настройках ключа или смените её
404неизвестное имя модели (model_not_found)сверьте id с GET /v1/models
429исчерпан лимит ключа или ограничение у провайдера моделисм. лимиты ключа в кабинете

Подробнее про авторизацию: документация по аутентификации и общий разбор ошибки 401 invalid API key. Полный ключ показывается только один раз при создании, поэтому, если ключ потерян, создайте новый на странице API-ключей.

Шаг 4. Переключите Qwen Code на свой ключ

Быстрый вариант через переменные окружения:

bash
export OPENAI_API_KEY="fetch_ваш_ключ"
export OPENAI_BASE_URL="https://api.zukko.pro/v1"
export OPENAI_MODEL="claude-sonnet-5-5"
qwen

Постоянный вариант через ~/.qwen/settings.json. Ключ лучше держать не в самом файле, а в .qwen/.env (так рекомендует документация: он приоритетнее, и файл проще не коммитить):

bash
{
  "modelProviders": {
    "openai": [
      {
        "id": "claude-sonnet-5-5",
        "name": "Claude Sonnet 5.5 (Zukko)",
        "baseUrl": "https://api.zukko.pro/v1",
        "envKey": "ZUKKO_API_KEY"
      }
    ]
  },
  "security": { "auth": { "selectedType": "openai" } },
  "model": { "name": "claude-sonnet-5-5" }
}

И в ~/.qwen/.env:

bash
ZUKKO_API_KEY=fetch_ваш_ключ

Имя в model.name должно совпадать с одним из id в modelProviders. После запуска qwen переключать модели можно командой /model. Если что-то из этих полей у вас называется иначе (формат менялся между версиями), сверьтесь со страницей об аутентификации в документации Qwen Code.

Сделайте тестовый запрос и откройте раздел «Использование» в кабинете: запрос должен появиться там.

Что учесть при переходе

  • Цены и модели берите из GET https://api.zukko.pro/v1/models. Для примера на 18 октября 2026: claude-sonnet-5-5 стоит $0,4 / $2 за 1M токенов входа и выхода, deepseek-v4.1-flash $0,013 / $0,038, qwen3.8-max $0,088 / $0,238.
  • В ключе можно задать дневной и месячный лимит в долларах и список разрешённых моделей.
  • Доступ из России идёт через шлюз: баланс пополняется СБП (платёжная страница добавляет 8,5% сверху), картой MasterCard или криптой.

Если после всех шагов ошибка остаётся, а curl возвращает 200, значит агент читает старую конфигурацию. Запустите qwen из чистой оболочки без лишних переменных и проверьте файлы .env в текущем и родительских каталогах: Qwen Code берёт первый найденный.

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

Почему ошибка появилась внезапно, хотя вчера всё работало?

Если вы использовали вход через Qwen OAuth, причина в том, что бесплатный уровень прекращён, а кэшированные токены перестали приниматься. Это не поломка вашей машины.

Можно ли «обновить токен» и продолжить с OAuth?

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

Ошибка 401 есть и с ключом fetch_.... Что проверить?

Ключ и адрес: у OPENAI_BASE_URL должен быть https://api.zukko.pro/v1. Затем выполните curl из шага 3 и убедитесь, что ключ принят.

Ошибка пропала, но ответов нет

Проверьте код 402 (баланс) и 403 (модель не разрешена для ключа). Агент может показывать их не так наглядно, как curl.

zukko

Платите в 25×
меньше

за Claude Code & ChatGPT

Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.