kosareva.cloud

Invalid API key: почему ключ не принимают и как это проверить

Код 401 почти никогда не значит, что ключ сломан. Обычно он не тот, не туда или не доехал. Проверка занимает минуту.

Коротко: Invalid API key, а у OpenAI дословно Incorrect API key provided, это ответ 401: сервер получил заголовок с ключом, но такого ключа у него нет. Ключ либо изменён при копировании, либо выпущен другим сервисом, либо отозван, либо отправлен не на тот адрес.

/ Подробнее

Что важно знать

Самая частая причина при работе через посредников и агрегаторы: ключ от одного сервиса отправлен на адрес другого. Ключ проверяет тот сервер, куда вы стучитесь, и ключ чужого сервиса для него просто не существует. Второе место занимает переменная окружения, которая не перечитана после правки файла .env.

Быстрая проверка одна: запрос к списку моделей командой curl с тем же ключом и тем же адресом, что в коде. Если он проходит, ключ в порядке, и проблема в том, как его передаёт ваш код.

/ На kosareva.cloud

Один ключ ко всем моделям

В разделе «Ключи» видно, когда ключ создан и сколько по нему потрачено. Адрес один для всех моделей.

Адрес
https://api.kosareva.cloud/v1, ключ из кабинета
Оплата
Карта РФ или СБП от 50 ₽, компаниям — по счёту
Доступ
Без VPN, запросы идут с российских IP
from openai import OpenAI

client = OpenAI(
    api_key="ВАШ_API_КЛЮЧ",
    base_url="https://api.kosareva.cloud/v1",
)

response = client.chat.completions.create(
    model="gpt-5-6",
    messages=[{"role": "user", "content": "Привет!"}],
    stream=True,
)
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "ВАШ_API_КЛЮЧ",
  baseURL: "https://api.kosareva.cloud/v1",
});

const response = await client.chat.completions.create({
  model: "gpt-5-6",
  messages: [{ role: "user", content: "Привет!" }],
  stream: true,
});
curl https://api.kosareva.cloud/v1/chat/completions \
  -H "Authorization: Bearer ВАШ_API_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-5-6","messages":[{"role":"user","content":"Привет!"}],"stream":true}'
/ Почему

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

Ключ и адрес от разных сервисов

Ключ агрегатора отправлен на api.openai.com или наоборот.

Лишний символ

Пробел, перенос строки или кавычка на конце ключа после копирования из письма или чата.

Процесс не перезапущен

Файл .env изменён, а в памяти старое значение или пустая строка.

Ключ отозван

Ключ удалён в кабинете, а в коде остался.

Чужая организация

Ключ проекта OpenAI (sk-proj-…) используется с другой организацией в заголовке OpenAI-Organization.

Не тот заголовок

Anthropic ждёт x-api-key, OpenAI-совместимые API ждут Authorization: Bearer.

Ключ не в том поле

Ключ подставлен в поле «модель» или в base_url, а поле ключа пустое.

/ Что делать

Порядок действий

01

Проверьте ключ одной командой

Тот же адрес и тот же ключ, что в коде. Ответ 200 со списком моделей означает, что ключ живой.

curl https://api.kosareva.cloud/v1/models \
  -H "Authorization: Bearer ВАШ_КЛЮЧ"
02

Сверьте пару «ключ + адрес»

Ключ проверяет тот сервер, куда идёт запрос. Ключ и base_url должны быть от одного сервиса.

03

Напечатайте длину ключа из кода

Не сам ключ, а len(key). Пробел на конце или пустая строка сразу видны.

04

Перезапустите процесс

После правки .env приложение, докер-контейнер или ноду n8n нужно перезапустить.

05

Выпустите новый ключ

Если всё сходится, а 401 остаётся, ключ мог быть отозван. Новый ключ и повтор проверки.

/ По инструментам

Где это чинится в разных инструментах

Cursor

Поле OpenAI API Key принимает ключ, кнопка Verify проверяет его сразу. Если вы подменили base_url, ключ должен быть от того же сервиса.

Cline

Провайдер OpenAI Compatible: Base URL, API Key и Model ID. Ключ от другого провайдера в этом списке не подойдёт.

Claude Code

Переменные ANTHROPIC_AUTH_TOKEN и ANTHROPIC_BASE_URL. Если задан только токен без адреса, запрос уйдёт в Anthropic и получит 401.

n8n

Ключ живёт в Credentials, а не в ноде. Проверьте, что нода использует свежие credentials, а не старую копию.

LangChain

Параметр openai_api_key либо переменная OPENAI_API_KEY. Если задано и то и другое, побеждает параметр.

/ FAQ

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

Ключ начинается с sk-, значит, он от OpenAI?

Нет. Префикс sk- используют многие OpenAI-совместимые сервисы. Смотрите, где ключ выпущен, а не как выглядит.

Ключ работал вчера, сегодня 401

Ключ отозвали, истёк срок или сменился адрес. Проверьте командой из первого шага, потом кабинет сервиса.

Можно ли увидеть свой ключ ещё раз?

У большинства сервисов полный ключ показывается один раз при создании. Если не сохранили, выпустите новый.

Почему ключ работает в curl, а в программе 401?

Значит, программа передаёт ключ не так: переменная окружения не перечитана после правки .env, в ключ попал пробел или кавычка, либо base_url в программе другой. Выведите длину ключа из кода и сравните адрес.

Нужно ли сразу выпускать новый ключ?

Только если проверка curl с тем же адресом тоже даёт 401. Если curl проходит, ключ живой, и новый ключ ничего не изменит.

Ключ, который работает из России

OpenAI-совместимый адрес, оплата в рублях, ключ сразу после регистрации. Пополнение картой от 50 ₽.

Получить ключ