Документация
Аутентификация
Обновлено:
Всё, что нужно для аутентификации запроса: откуда берётся ключ, как его передавать, как хранить и что означает каждая ошибка аутентификации.
ChatGPT API аутентифицирует запросы точно так же, как официальный OpenAI API: API-ключ передаётся в заголовке Authorization как Bearer-токен, по HTTPS, в каждом запросе.
Authorization: Bearer YOUR_API_KEYТри шага
- 1
Создайте ключ
Зарегистрируйтесь и сгенерируйте ключ в дашборде. Новым аккаунтам начисляется $0.25 тестового баланса.
- 2
Передавайте как Bearer-токен
Добавьте заголовок Authorization в каждый запрос или отдайте ключ OpenAI SDK - он соберёт заголовок сам.
- 3
Укажите наш base URL
Замените api.openai.com на наш шлюз. Пути, тела запросов, стриминг и формат ошибок остаются идентичными.
Запрос с аутентификацией
Один и тот же запрос в трёх клиентах. От настройки официального 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"}'{
"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, публично. Держите ключ в переменной окружения или в менеджере секретов и читайте его во время выполнения.
export CHATGPT_API_KEY="your_api_key_here"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-токенов.
Что делать, если ключ утёк?
Сразу ротируйте его в дашборде. Старый ключ перестаёт работать немедленно, вместе с ним прекращается и списание по нему.
Что дальше
С аутентификацией закончили. Отправьте настоящий запрос или подберите модель.