OpenAI API через cURL: запрос из терминала без SDK

В этой статье

Для текстового запроса отправьте JSON на https://api.openai.com/v1/responses с заголовком авторизации. SDK для этого не нужен. В примере ниже тело хранится в файле: так кавычки и русские буквы не приходится встраивать в командную строку. Пример Responses API.

Понадобятся cURL, ключ OpenAI API и доступ к выбранной модели в своём проекте. Подписка ChatGPT Plus не оплачивает API — биллинг у него отдельный. Условия OpenAI.

1. Проверьте cURL и настройте ключ

В macOS/Linux выполните curl --version, в Windows PowerShell — curl.exe --version. Для показанной команды нужен cURL 7.76.0 или новее: в этой версии появился --fail-with-body. Документация cURL.

Создайте ключ в своём проекте OpenAI и задайте переменную окружения OPENAI_API_KEY. В Windows можно добавить пользовательскую переменную через свойства системы → дополнительные параметры → переменные среды, затем открыть новый терминал. В macOS/Linux задайте переменную в своей оболочке. Не сохраняйте ключ в файле запроса или репозитории. Настройка ключа.

Проверка в PowerShell без вывода значения:

if ($env:OPENAI_API_KEY) { 'Ключ задан' } else { 'Ключ не задан' }

Если переменной нет, сначала настройте её в окружении того терминала, где будет запущен cURL.

2. Сохраните тело запроса

Создайте request.json в UTF-8 без BOM:

{
  "model": "gpt-6-astra",
  "input": "Напиши одно короткое уведомление на русском. Факты: мастерская закрыта в понедельник, во вторник работает с 10:00. Причина закрытия не указана. Не придумывай причину и адрес."
}

gpt-6-astra — модель из официального примера на 10 сентября 2026 года. Проверьте её доступность и стоимость для своего проекта; при необходимости укажите другую доступную текстовую модель. Quickstart OpenAI.

В JSON нужны двойные кавычки, а после последнего поля не должно быть запятой. Если редактор добавил расширение .txt, переименуйте файл в request.json.

3. Отправьте запрос

Откройте терминал в папке с файлом. Команда для macOS/Linux, одной строкой:

curl --silent --show-error --fail-with-body --max-time 180 "https://api.openai.com/v1/responses" -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" --data-binary "@request.json" --output response.json --write-out "HTTP %{http_code}\n"

В Windows PowerShell используйте curl.exe и синтаксис переменной $env::

curl.exe --silent --show-error --fail-with-body --max-time 180 "https://api.openai.com/v1/responses" -H "Authorization: Bearer $env:OPENAI_API_KEY" -H "Content-Type: application/json" --data-binary "@request.json" --output response.json --write-out "HTTP %{http_code}\n"

--data-binary читает файл после @ и передаёт его содержимое без преобразований. --output сохраняет тело ответа в response.json, а --write-out показывает HTTP-код отдельно. --fail-with-body сохраняет тело HTTP-ошибки и возвращает ненулевой код завершения. --max-time 180 ограничивает ожидание тремя минутами. Параметры cURL.

Перед повторным запуском сохраните нужный предыдущий ответ под другим именем: команда снова записывает response.json.

4. Разберите ответ

Сначала посмотрите HTTP-код и содержимое response.json. В PowerShell:

Get-Content -Raw -Encoding utf8 response.json

В успешном ответе найдите в массиве output элементы типа message, затем их content типа output_text и поле text. Не полагайтесь на output[0].content[0].text: первым элементом может оказаться другой вид вывода. Удобное свойство output_text в примерах SDK не следует путать с чтением сырого HTTP JSON. Структура ответа.

Для нашего задания проверьте три факта: закрытие в понедельник, открытие во вторник с 10:00, отсутствие выдуманной причины и адреса. Успешная передача запроса ещё не означает, что уведомление можно публиковать без чтения.

Если команда не сработала

Сначала разделите сетевой результат и ответ модели:

  • Ошибка чтения request.json: проверьте текущую папку, имя и права чтения файла.
  • Тело ответа сообщает об ошибке: прочитайте его полностью и сопоставьте с HTTP-кодом. Сохранённый файл сам по себе не означает успех.
  • Истекли 180 секунд: cURL прекратил ожидание; это не доказывает, что сервер не начал обработку. Не запускайте бесконечные повторы.
  • JSON получен, но нужного текста нет: проверьте состояние ответа и все элементы output, а не только первый.

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

Что проверено в этом примере

Передача JSON-файла и сохранение ответа проверены локально в Windows с cURL 8.13.0. Учебный HTTP-сервер принимал фиктивный ключ, возвращал успешный ответ и отдельно ошибку 400; вторая проверка сохранила тело ошибки и завершилась кодом cURL 22. Это проверка команды и файлов, а не доступности OpenAI. Платный запрос к API и генерация уведомления не выполнялись. Команда для macOS/Linux дана по документации и отдельно в этой среде не запускалась.

Проверить детали

Источники материала

Функции и условия сервисов меняются. Дата сверки указана в начале статьи. Как подготовлен материал

Есть следующая задача?Ещё по теме «Работа с API» →