В этой статье
Запрос https://chat.openai.com/api возникает из понятной путаницы: ChatGPT открывается в браузере, значит кажется логичным отправлять запросы программе туда же. Для интеграции это неверная граница. chat.openai.com — веб-интерфейс ChatGPT, а публичный API обращается к домену api.openai.com.
Для первого программного запроса используйте Responses API:
POST https://api.openai.com/v1/responses
Путь /v1/responses здесь важен целиком: в нём есть домен API, версия API и ресурс, который создаёт ответ модели. Адрес /api у веб-сайта не нужно подменять этим endpoint и тем более строить интеграцию на внутренних маршрутах браузерного приложения: они не являются публичным API-контрактом. Схема подтверждается в обзоре OpenAI API и официальном quickstart.
Если вам нужен именно пользовательский доступ к ChatGPT, а не API-ключ для программы, можно отдельно посмотреть каталог услуг Amber Market. Это каталог посреднических услуг, а не пополнение баланса OpenAI API: наличие, условия и итоговую стоимость выбранной карточки нужно проверить перед заказом. Не используйте каталог как замену настройке API Platform.
Что нужно подготовить
Вам понадобятся API-ключ OpenAI и идентификатор модели, доступной в вашем API-проекте. Название модели не стоит зашивать в инструкцию навсегда: список доступных моделей и ограничения аккаунта меняются. В quickstart на момент подготовки примера показана gpt-6-astra, но перед запуском сверяйте идентификатор с текущей документацией и списком моделей вашего проекта.
Ключ задайте как переменную окружения. В macOS или Linux:
export OPENAI_API_KEY="ваш_api_ключ"
В PowerShell:
$env:OPENAI_API_KEY = "ваш_api_ключ"
Для постоянной настройки в Windows можно воспользоваться setx, но после этого нужно открыть новый процесс терминала:
setx OPENAI_API_KEY "ваш_api_ключ"
Не вставляйте секрет в HTML, браузерный JavaScript, Git или диагностические логи. В браузере ключ будет виден пользователю и любому коду, который выполняется на его странице. Правильная схема — браузер обращается к вашему серверу, а сервер добавляет заголовок Authorization и отправляет запрос OpenAI.
Если ключа ещё нет, создайте его в настройках API-платформы и сохраните сразу в менеджере секретов или переменной окружения. Подробная инструкция есть в материале как получить API-ключ OpenAI.
Первый запрос через curl
Минимальная проверка выглядит так:
curl -X POST "https://api.openai.com/v1/responses" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6-astra",
"input": "Ответь одной фразой: API работает."
}'
В PowerShell переменная окружения читается как $env:OPENAI_API_KEY. Сериализуйте JSON и передайте байты UTF-8, чтобы сохранить русский текст:
$body = @{ model = "gpt-6-astra"; input = "Ответь одной фразой: API работает." } | ConvertTo-Json
Invoke-RestMethod -Uri "https://api.openai.com/v1/responses" -Method Post `
-Headers @{ Authorization = "Bearer $env:OPENAI_API_KEY" } `
-ContentType "application/json; charset=utf-8" `
-Body ([System.Text.Encoding]::UTF8.GetBytes($body))
Если gpt-6-astra недоступна вашему проекту, замените её на доступный идентификатор из текущего quickstart или каталога моделей. Сам запрос состоит из трёх частей:
POSTсообщает, что нужно создать новый ответ;Authorization: Bearer ...передаёт API-учётные данные;- JSON содержит модель и входной текст.
Проверяйте не только наличие текста в терминале, но и HTTP-код. Успешный запрос вернёт код 200 и JSON-объект ответа с идентификатором и результатом модели. Ошибка 401 обычно указывает на отсутствующий, неверный или отозванный ключ; 400 — на неправильный JSON, параметр или недоступную модель; 429 — на лимит или временное ограничение. Тело ответа полезно сохранять для диагностики, но перед записью в лог удаляйте секреты и заголовки авторизации.
Если нужна автоматическая проверка кода ответа в Unix-терминале, добавьте --fail-with-body:
curl --fail-with-body -sS -X POST "https://api.openai.com/v1/responses" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-6-astra","input":"Скажи: тест пройден."}'
Флаг не исправляет запрос и не проверяет смысл ответа. Он лишь помогает оболочке заметить HTTP-ошибку. На стороне приложения всё равно нужно разобрать JSON, записать request или response id без ключа и решить, какие ошибки можно повторять. Повторять запрос после сетевого обрыва без идемпотентной схемы рискованно: неизвестно, успел ли сервер создать ответ до разрыва соединения.
ChatGPT и API оплачиваются отдельно
Подписка ChatGPT и API Platform — разные контуры. Наличие платной подписки в ChatGPT само по себе не означает, что в API-проекте настроен биллинг или доступна нужная модель. Стоимость API и токены лучше проверять отдельно; краткое объяснение есть в материале о стоимости OpenAI API и токенах. Само различие веб-сервиса и программного API разобрано в статье что такое ChatGPT и OpenAI.
Итого: chat.openai.com/api не является адресом, который следует закладывать в HTTP-клиент. Для программного вызова начните с POST https://api.openai.com/v1/responses, держите ключ на сервере, выберите реально доступную проекту модель и проверяйте одновременно HTTP-код и JSON-ответ.
Источники: API Overview, Developer quickstart, Create a model response, раздел о биллинге ChatGPT и API.
Источники
- API OverviewOpenAI API Reference
- Developer quickstartOpenAI API
- Create a model responseOpenAI API Reference
- Managing billing for ChatGPT and the API platformOpenAI Help Center