Руководство
Недействительный ключ OpenAI API: 401, переменные окружения и проверка конфигурации проекта
Различайте OpenAI 401, 403 и 429, проверяйте переменные окружения, настройки организации и проекта, а также проверяйте учётные данные запросом только на чтение.
TL;DR
Когда OpenAI возвращает 401 с сообщением о неверном ключе, сначала проверьте учётные данные, переменные среды выполнения и настройки организации или проекта. При 429 проверьте по коду ошибки ограничение скорости, баланс или лимит использования; при 403 также нужно прочитать конкретную причину.
Перед запуском примера на Python выполните в том же окружении Python python -m pip install requests.
Сначала определите тип ошибки
| Ответ | Направление проверки |
|---|---|
| 401 с сообщением Incorrect API key | Полный ключ, написание, статус отзыва и принадлежность |
| 401 с другим сообщением аутентификации | Конкретная причина: членство в организации, права или ограничения по IP |
| 403 | Прочитайте причину в ответе, включая регион или другие ограничения доступа |
| 429 | Различайте ограничение скорости, баланс и лимит использования организации или проекта |
Не определяйте валидность ключа только по префиксу sk-. Полные учётные данные, целевой домен и конфигурация аккаунта должны совпадать.
Пять шагов проверки среды выполнения
- Убедитесь, вызываете ли вы OpenAI или совместимую платформу; каждая платформа использует свой ключ.
- Проверьте
OPENAI_API_KEYу фактического процесса, исключите пустые значения, заполнители и ошибочное копирование. - Проверьте приоритет загрузки переменных окружения; значения на платформе развёртывания могут перекрывать локальный
.env. - Сверьте, не отозван ли ключ, и к какой организации и проекту он относится. Если вы явно задали заголовки запроса организации или проекта, убедитесь, что эти значения согласованы; не добавляйте заголовки вслепую.
- Перезагрузите среду выполнения и выполните проверку только на чтение. Если ошибка сохраняется, зафиксируйте request ID из ответа и свяжитесь с ответственным за аккаунт.
Локальная проверка без вывода учётных данных
import os
name = "OPENAI_API_KEY"
key = os.environ.get(name, "")
print({
"variable": name,
"present": bool(key),
"length": len(key),
"has_whitespace": any(c.isspace() for c in key),
"wrapped_in_quotes": len(key) >= 2 and key[0] == key[-1] and key[0] in (chr(34), chr(39)),
})
Не используйте отладочные журналы, которые печатают полные заголовки запросов, и не вставляйте ключ в тикет в шестнадцатеричном виде; это всё равно полные учётные данные.
Проверочный запрос только на чтение
Запустите следующий код в серверной среде. Он читает список моделей и не отправляет генерацию контента. Ключ с ограниченными правами всё равно может быть отклонён из-за недостаточных прав на чтение; нельзя считать любой ответ, отличный от 200, повреждением ключа.
import os
import re
import requests
key = os.environ.get("OPENAI_API_KEY", "")
if not key or any(ord(c) < 33 or ord(c) > 126 for c in key) or any(c in key for c in (chr(34), chr(39))):
raise SystemExit("Check the key environment variable: empty, whitespace, control characters, or quotes")
try:
response = requests.get(
"https://api.openai.com/v1/models",
headers={"Authorization": f"Bearer {key}"},
timeout=30,
)
except requests.RequestException as exc:
raise SystemExit("Request failed: " + type(exc).__name__) from None
print("HTTP", response.status_code)
if response.ok:
print("Model list received")
else:
try:
body = response.json()
error = body.get("error", {})
message = str(error.get("message") or body.get("message") or "")
message = message.replace(key, "[REDACTED]")
message = re.sub(r"sk-[A-Za-z0-9_*.-]+", "[REDACTED]", message)
print("code:", error.get("code") or body.get("error_code"))
print("type:", error.get("type"))
print("message:", message)
print("request_id:", error.get("request_id") or response.headers.get("x-request-id"))
except ValueError:
print("Non-JSON response; check the base URL and network path")
Что проверить при переходе на HiAPI
При использовании HiAPI замените ключ на HIAPI_API_KEY, используйте адрес HiAPI в качестве Base URL, а затем выберите точку входа запроса по странице модели. Сначала прочитайте описание аутентификации HiAPI и руководство по выбору интерфейса.
Два запроса должны независимо использовать учётные данные своих платформ; нельзя отправлять ключ OpenAI в HiAPI для так называемой «изолированной проверки».
Частые вопросы
Если префикс ключа правильный, значит ли это, что он точно работает?
Нельзя судить только по префиксу. Нужно также проверить полное значение, статус отзыва и конфигурацию аккаунта.
При 401 нужно ли сразу пополнять баланс?
Сначала устраните причину аутентификации, указанную в ответе; ошибки баланса или лимита использования нужно обрабатывать отдельно по соответствующему коду ошибки.
Нужно ли добавлять заголовки запроса организации и проекта ко всем запросам?
Не добавляйте их вслепую. В случаях с несколькими организациями или устаревшими пользовательскими ключами нужно правильно выбирать контекст; уже заданные заголовки запроса должны соответствовать используемым учётным данным.
Можно ли напрямую обращаться к OpenAI с ключом HiAPI?
Нет, они не взаимозаменяемы. HiAPI и OpenAI управляют учётными данными по отдельности; домен и ключ должны соответствовать друг другу.
Похожие статьи
Все статьи →-
Руководство
Примеры Recraft Creative Upscale: увеличение пейзажей и акварели
Посмотрите изменения текстур деревянного дома, озера и акварельного городка, отличите полный результат от предпросмотра и проверьте перерисованные детали.
-
Руководство
Kling 4.0: полный набор промптов — 6 сценариев, которые можно скопировать и сразу получить видео
Товары для электронной коммерции, еда, пейзажи путешествий, бытовые зарисовки, пустые кадры со звуком и видео из изображения — для каждого сценария есть реальное готовое видео, полный промпт и ссылка с автозаполнением.
-
Руководство
Как использовать Kandinsky 6.0 Pro? Первое видео за 5 минут
3 шага онлайн-попытки, 3 шага подключения API, плюс готовые к запуску curl и Python, JSON для изображения в видео, четырёхслойная структура промпта и моменты перед запуском в продакшен.