Перейти к содержимому
ChatGPT API
Документация

Документация

Аутентификация

Обновлено:

Всё, что нужно для аутентификации запроса: откуда берётся ключ, как его передавать, как хранить и что означает каждая ошибка аутентификации.

ChatGPT API аутентифицирует запросы точно так же, как официальный OpenAI API: API-ключ передаётся в заголовке Authorization как Bearer-токен, по HTTPS, в каждом запросе.

Authorization: Bearer YOUR_API_KEY

Три шага

  1. 1

    Создайте ключ

    Зарегистрируйтесь и сгенерируйте ключ в дашборде. Новым аккаунтам начисляется $0.25 тестового баланса.

  2. 2

    Передавайте как Bearer-токен

    Добавьте заголовок Authorization в каждый запрос или отдайте ключ OpenAI SDK - он соберёт заголовок сам.

  3. 3

    Укажите наш base URL

    Замените api.openai.com на наш шлюз. Пути, тела запросов, стриминг и формат ошибок остаются идентичными.

Создать API-ключ

Запрос с аутентификацией

Один и тот же запрос в трёх клиентах. От настройки официального OpenAI отличается только base URL - заголовок Authorization SDK собирает из переданного ключа.

Запрос с аутентификацией
1curl https://api.llm-gate.tech/v1/responses \2  -H "Content-Type: application/json" \3  -H "Authorization: Bearer $CHATGPT_API_KEY" \4  -d '{5    "model": "gpt-5.4-mini",6    "input": "ping"7  }'
Запрос с аутентификацией
1import os2from openai import OpenAI3 4client = OpenAI(5    api_key=os.environ["CHATGPT_API_KEY"],6    base_url="https://api.llm-gate.tech/v1",7)8 9response = client.responses.create(model="gpt-5.4-mini", input="ping")10print(response.output_text)
Запрос с аутентификацией
1import OpenAI from "openai";2 3const client = new OpenAI({4  apiKey: process.env.CHATGPT_API_KEY,5  baseURL: "https://api.llm-gate.tech/v1",6});7 8const response = await client.responses.create({9  model: "gpt-5.4-mini",10  input: "ping",11});12console.log(response.output_text);

Проверка ключа

Самая дешёвая проверка - один маленький запрос. Ответ 200 означает, что ключ верный, base URL указан правильно и баланс не пуст.

Отправьте один запрос
curl https://api.llm-gate.tech/v1/responses \
  -H "Authorization: Bearer $CHATGPT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "gpt-5.4-mini", "input": "ping"}'
200 OK - ключ работает
{
  "id": "resp_9f2c41a8",
  "object": "response",
  "model": "gpt-5.4-mini",
  "output_text": "pong",
  "usage": {
    "input_tokens": 8,
    "output_tokens": 2,
    "total_tokens": 10
  }
}

Если вместо этого приходит 401, значит ключ неверный, отозван или заголовок собран неправильно. Разбор всех случаев - в таблице ниже.

Храните ключ в переменной окружения

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

macOS / Linux
export CHATGPT_API_KEY="your_api_key_here"
Windows (PowerShell)
setx CHATGPT_API_KEY "your_api_key_here"

Ошибки аутентификации

Вместе со статусом приходит JSON с описанием ошибки. На практике встречаются эти четыре.

СтатусЧто означаетЧто делать
401Ключ отсутствует, повреждён или отозванПроверьте, что заголовок выглядит как Authorization: Bearer, один пробел и ключ, и что ключ не был ротирован в дашборде.
403Ключ верный, но запрос запрещёнОбычно это модель, к которой у аккаунта пока нет доступа. Сверьте идентификатор модели со страницей моделей.
404Неверный base URL или путьШлюз повторяет официальные маршруты под /v1. Обычно 404 означает, что клиент всё ещё смотрит на другой хост.
429Лимит запросов или закончился балансСделайте паузу и повторите с экспоненциальной задержкой. Если повторы продолжают падать - пополните баланс: пустой баланс отдаёт тот же статус.

Безопасность

Утёкший ключ тратит ваши деньги, пока его не отозвали, поэтому относитесь к нему как к паролю.

Стоит

  • Держать ключи на сервере, а трафик из браузера и мобильных приложений пускать через свой бэкенд.
  • Заводить отдельный ключ на окружение, чтобы отозвать один без простоя остальных.
  • Хранить ключи в менеджере секретов или зашифрованных секретах CI.
  • Немедленно ротировать ключ, если он попал в репозиторий, лог или скриншот.

Не стоит

  • Коммитить ключи в git, включая .env и ноутбуки.
  • Вставлять ключи в трекеры задач, чаты и баг-репорты.
  • Отдавать ключи во фронтенд-бандлах, мобильных приложениях и расширениях браузера.
  • Логировать заголовок Authorization в трассировке запросов.

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

Нужен ли ключ, отличный от ключа OpenAI?

Да. ChatGPT API выдаёт собственные ключи. Официальный ключ OpenAI не проходит аутентификацию на нашем шлюзе, а наш ключ не работает с api.openai.com. Сгенерируйте ключ в дашборде после регистрации.

Истекают ли API-ключи?

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

Можно ли использовать официальные SDK OpenAI?

Да. Укажите base_url в Python или baseURL в Node на наш шлюз и передайте ключ как api key. SDK сам соберёт Bearer-заголовок, остальной код не меняется.

Ключ отправляется в каждом запросе?

Да. API не хранит состояние, поэтому каждый запрос несёт собственный заголовок Authorization. Нет ни входа, ни сессионных cookie, ни refresh-токенов.

Что делать, если ключ утёк?

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

Что дальше

С аутентификацией закончили. Отправьте настоящий запрос или подберите модель.