HiAPI
Блог

Руководство

Недействительный ключ OpenAI API: 401, переменные окружения и проверка конфигурации проекта

Различайте OpenAI 401, 403 и 429, проверяйте переменные окружения, настройки организации и проекта, а также проверяйте учётные данные запросом только на чтение.

Oct 25, 2026
Недействительный ключ OpenAI API: 401, переменные окружения и проверка конфигурации проекта

TL;DR

Когда OpenAI возвращает 401 с сообщением о неверном ключе, сначала проверьте учётные данные, переменные среды выполнения и настройки организации или проекта. При 429 проверьте по коду ошибки ограничение скорости, баланс или лимит использования; при 403 также нужно прочитать конкретную причину.

Перед запуском примера на Python выполните в том же окружении Python python -m pip install requests.

Сначала определите тип ошибки

Ответ Направление проверки
401 с сообщением Incorrect API key Полный ключ, написание, статус отзыва и принадлежность
401 с другим сообщением аутентификации Конкретная причина: членство в организации, права или ограничения по IP
403 Прочитайте причину в ответе, включая регион или другие ограничения доступа
429 Различайте ограничение скорости, баланс и лимит использования организации или проекта

Не определяйте валидность ключа только по префиксу sk-. Полные учётные данные, целевой домен и конфигурация аккаунта должны совпадать.

Пять шагов проверки среды выполнения

  1. Убедитесь, вызываете ли вы OpenAI или совместимую платформу; каждая платформа использует свой ключ.
  2. Проверьте OPENAI_API_KEY у фактического процесса, исключите пустые значения, заполнители и ошибочное копирование.
  3. Проверьте приоритет загрузки переменных окружения; значения на платформе развёртывания могут перекрывать локальный .env.
  4. Сверьте, не отозван ли ключ, и к какой организации и проекту он относится. Если вы явно задали заголовки запроса организации или проекта, убедитесь, что эти значения согласованы; не добавляйте заголовки вслепую.
  5. Перезагрузите среду выполнения и выполните проверку только на чтение. Если ошибка сохраняется, зафиксируйте 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 управляют учётными данными по отдельности; домен и ключ должны соответствовать друг другу.

Продолжить устранение ошибки ключа HiAPI.

Похожие статьи

Все статьи →

Начните работать с постоянными артефактами ИИ

Получите API-ключ и вызывайте модели изображений, видео и аудио через один API на основе tasks.

Читать документацию API