Invalid API key OpenAI: как исправить ошибку 401
Коротко о главном
Ошибка invalid_api_key в OpenAI: что означает код 401, чем он отличается от 403 и 429, пять причин отказа и починка каждой. С формулировками из справки.
Коротко: сервер не спорит с вашим кодом и не жалуется на модель. Он сообщает, что не узнал предъявленный секрет — и почти всегда прав. Разберу по порядку, как исправить ошибку invalid API key в OpenAI: сначала что означает сам код, потом чем он отличается от соседних 403 и 429, затем пять причин отказа и починка каждой.
«Первым делом смотрю не на код приложения, а на саму строку: её длину, хвост и то, из какого проекта она выпущена. Переписывать запрос до этой проверки — потерянный час», — Богдан, автор блога AI SEO Writer.
Что означает invalid_api_key
Код 401 относится к аутентификации: сервер проверяет, кто пришёл, ещё до того как посмотреть, что вы просите. Справка OpenAI Error Code 401 — Incorrect API key provided формулирует смысл прямо: «you're not using the expected API key in your request».
Практический вывод: промпт, модель и структура запроса к этому отказу отношения не имеют. Их можно не трогать вообще. Проверять надо путь секрета от кабинета до заголовка Authorization.
Как выглядит отказ в теле ответа
HTTP-код сам по себе говорит мало, потому что под 401 у OpenAI лежат три разные ситуации. Точная причина приходит в теле:
{
"error": {
"message": "Incorrect API key provided: sk-pr***9aF. You can find your API key at https://platform.openai.com/account/api-keys.",
"code": "invalid_api_key"
}
}
Разбирать нужно error message, а не номер: именно это поле отличает «строка не та» от «вы не состоите в организации». Клиентские библиотеки и ноды интеграций часто показывают пользователю только код. В логах SDK та же причина приходит полем error, и доставать её приходится руками.
401, 403 и 429 — три разных отказа
Три кода путают чаще всего, а лечатся они по-разному. Формулировки в колонке «Что в ответе» — дословные из документации OpenAI по кодам ошибок.
| Код | Что в ответе | Что означает | Что делать |
|---|---|---|---|
| 401 | Invalid Authentication | секрет или организация в запросе не те | сверить обе величины: чей секрет и от чьего имени идёт запрос |
| 401 | неверный ключ API | предъявленная строка не совпадает с ожидаемой | сверить значение, очистить кэш браузера, выпустить новое |
| 401 | You must be a member of an organization to use the API | аккаунт вне организации | попросить владельца добавить вас в организацию |
| 403 | Country, region, or territory not supported | запрос пришёл из неподдерживаемого региона | настройками приложения не лечится |
| 429 | Rate limit reached for requests | запросы идут слишком часто | сбавить темп, добавить паузы между обращениями |
| 429 | You exceeded your current quota | кончились кредиты либо достигнут потолок расходов | пополнить баланс, поднять лимит |
| 500 | The server had an error while processing your request | сбой на стороне OpenAI | повторить запрос после паузы |
Оба варианта 401 — это authentication, то есть проверка подлинности, а не проверка прав и не проверка денег. Запомнить проще так: 401 — «не узнали вас», 403 — «узнали, но вам сюда нельзя», 429 — «узнали и пустили бы, но не сейчас». Перевыпуск секрета помогает только в первом случае.
Пять причин, по которым ключ не проходит
Справка OpenAI называет четыре причины: опечатка или лишний пробел, ключ принадлежит другой организации, ключ удалён либо деактивирован, ключ закэширован. Русская версия той же статьи добавляет пятую — в запросе фигурирует старый ключ, которым вы больше не пользуетесь. На практике к ним добавляется ещё одна, чисто интеграционная.
Опечатка, пробел и перенос строки
Самое частое. Строка обрезается при копировании из мессенджера, тянет за собой невидимый пробел в конце или перенос из середины. Глазами это не видно — сравнивайте длину значения с эталоном, а не символы. Печатать секрет в лог для проверки нельзя: логи живут дольше и читаются шире, чем кажется.
Ключ отозван, удалён или пересоздан
Деактивированная строка перестаёт работать мгновенно, а приложение об этом не узнает. Раздел API keys в кабинете разработчика показывает дату последнего использования каждой строки — по ней видно, ту ли вы правите. Отдельная ловушка — кэш: сервис держит старое значение в памяти процесса, и после ротации отказ живёт до перезапуска. Восстановить удалённый секрет нельзя, только выпустить новый взамен.
Ключ из другого проекта или организации
Аккаунт в нескольких организациях — и ключ, выпущенный в одной, не работает в контексте другой. Документация OpenAI разрешает указать в запросе, какая организация и какой проект используются; русская справка отдельно упоминает, что иногда требуется передать Organization ID. Если организаций больше одной, Organization ID стоит задать явно.
Приложение читает не ту переменную окружения
OPENAI_API_KEY объявлена, но контейнер поднялся со старым окружением. Или файл .env не подхватился, или переменная перекрыта на уровне системы. SDK берёт значение молча, и в отказ уходит пустая либо чужая строка.
Ключ уходит не тому провайдеру
Интеграционная причина, которую русскоязычные гайды пропускают. Секрет от прокси-провайдера подставлен в клиент с адресом api.openai.com — или наоборот. Проверьте, что base_url и источник строки совпадают.
Проверка ключа одним запросом
Две минуты, чтобы отделить проблему секрета от проблемы приложения:
curl https://api.openai.com/v1/models \
-H "Authorization: Bearer $OPENAI_API_KEY"
Ответ 200 — секрет живой, копайте в приложение. Тот же 401 — дело в строке или аккаунте. В Python-SDK этот случай прилетает исключением AuthenticationError, и ловить его стоит отдельно от прочих: AuthenticationError не лечится ретраями, в отличие от 429 и 500.
Ветка форума разработчиков с этим вопросом так и называется — «Why is my OpenAI API key invalid?». Разбор в ней почти всегда сводится к одному: строка оказалась не той, за которую её принимали. Если секрет проверен, а генерация всё равно не идёт, смотреть надо уже в сторону приложения — типовые сбои у нас разобраны в базе знаний по решению проблем. 
Когда дело не в ключе: регион и баланс
Два случая, когда строка верная, а запрос всё равно не проходит.
Первый — регион. Официальная причина 403 сформулирована так: «You are accessing the API from an unsupported country, region, or territory». Россия в список поддерживаемых стран не входит, и настройками приложения это не чинится.
Второй — деньги. Пустой баланс даёт 429 с формулировкой про исчерпанную квоту, а не 401. Рядом лежит частая путаница: подписка на чат покрывает веб-интерфейс, программный доступ оплачивается отдельным счётом.
Когда ключами проще не заниматься вовсе
Если задача — не свой продукт на модели, а регулярные статьи на сайт, вся эта отладка доступа лишняя. В AI SEO Writer генератор SEO-статей работает на системных ключах сервиса: тогда ни регистрация у OpenAI, ни зарубежная оплата не нужны. Либо подставьте свои — свои ключи в кабинете поддерживаются для OpenAI, Gemini, OpenRouter, SerpAPI и YouTube.
Сервис работает из России без VPN, а тарифы с оплатой в рублях снимают вопрос зарубежных карт. Есть бесплатный план — проверить на своём сайте можно без карты.
Частые вопросы
Строка выглядит правильной, но отказ повторяется. Сравните длину значения в приложении с длиной в кабинете и убедитесь, что процесс перезапущен после замены.
Ключ протухает сам по себе? Срока жизни у него нет. Он работает, пока его не отозвали — поэтому забытые старые секреты и опасны.
Подписка на чат даёт доступ к API? Нет. Это два разных счёта в одном аккаунте.
Один секрет на все приложения — нормально? Технически да, практически нет: при отзыве встанут сразу все интеграции, а расход не разложить по проектам.
Помогает ли смена модели? Нет. Ошибка приходит до выбора модели, на этапе проверки подлинности.
Поделиться
Автоматизируйте SEO-публикации с SEO Writer
ИИ пишет статьи, публикует в CMS, заполняет мета-теги — без вашего участия
Начать бесплатно →Читайте также
Лонгрид: примеры и разбор приёмов, которые работают
Разбираю примеры лонгридов — медийных, брендовых, образовательных: что сделано в каждом, почему это сработало и какие приёмы можно повторить у себя.
Статья или лонгрид: 6 различий и критерии выбора
Сравниваю статью и лонгрид: объём, структура, сроки, цена, поведение читателя. Таблица различий и критерии, по которым выбирают формат под задачу.
Как написать лонгрид: пошаговая инструкция
Разбираю по шагам, как написать лонгрид: выбор темы, сбор фактуры, план, объём, ритм, оформление и вычитка. Плюс чек-лист перед сдачей материала.
Интеграции SEO Writer