Короткий ответ
Чтобы подключить OpenAI API и получить первый ответ, достаточно создать API-ключ в панели OpenAI, сохранить его в переменной окружения OPENAI_API_KEY и отправить HTTPS POST-запрос на https://api.openai.com/v1/responses с заголовком Authorization: Bearer ... и JSON-телом, где указаны модель и поле input. Этот способ не подходит, если вам нужен полностью офлайн-контур, прямой вызов из браузера без собственного backend, строгий запрет на отправку данных внешнему поставщику или контрактные требования к размещению данных, которые ваш аккаунт и процесс не покрывают.
- Для первой проверки удобнее всего использовать
curl: меньше зависимостей и сразу видно, работает ли сеть, ключ и endpoint. - Для боевого кода храните ключ только на сервере, а не во frontend.
- Если пример возвращает ошибку по модели, замените имя модели на ту, которая доступна именно вашему проекту.
Для нового кода ориентируйтесь на Responses API, а не на старые примеры из разрозненных статей. Официальная документация OpenAI по endpoint доступна здесь: https://platform.openai.com/docs/api-reference/responses.
Что понадобится
- Аккаунт OpenAI с доступом к API.
- Созданный секретный ключ API. Получить его можно в панели: https://platform.openai.com/api-keys.
- Терминал с
curl, либо серверное окружение на Python или Node.js. - Активный платежный профиль и лимиты, если ваш аккаунт требует этого для вызовов API.
- Понимание, какие данные можно отправлять во внешний API, а какие нельзя по внутренней политике.
Для первого запуска критерии выбора инструмента простые: минимум зависимостей, близость к вашему стеку и удобство отладки. Если задача только проверить подключение, берите curl. Если вы сразу пишете backend, можно перейти на SDK после того, как первый REST-запрос успешно отработал.
| Вариант | Когда выбирать | Что нужно | Главный риск |
|---|---|---|---|
curl |
Нужно быстро проверить ключ, сеть и endpoint | Только терминал | Ошибки в кавычках и JSON |
| Python SDK | Дальше будет backend или скрипт на Python | Python и пакет openai |
Проблемы окружения и версий пакета |
| JavaScript SDK | У вас сервер на Node.js | Node.js и пакет openai |
Смешение ESM, CommonJS и переменных окружения |
Если вы работаете в корпоративной сети, заранее проверьте исходящий HTTPS-доступ к api.openai.com. Многие «непонятные» ошибки на первом запуске оказываются проблемой proxy, firewall или TLS-инспекции, а не самого API.
Пошаговый план
1. Создайте API-ключ
Откройте раздел ключей OpenAI и создайте новый секрет. Скопируйте его сразу: обычно ключ показывается один раз. Если потеряете, проще выпустить новый, чем пытаться восстановить старый.
Практический минимум на этом шаге такой:
- делайте отдельный ключ для каждого окружения или проекта;
- не отправляйте ключ в мессенджеры и тикеты;
- не храните ключ в исходниках и в публичном репозитории.
Не вызывайте OpenAI API напрямую из браузера или мобильного клиента с вашим секретным ключом. Такой ключ неизбежно утечет. Правильная схема: клиент вызывает ваш backend, backend вызывает OpenAI.
2. Сохраните ключ в переменной окружения
На Linux и macOS для текущей сессии терминала достаточно такой команды:
export OPENAI_API_KEY='sk-...'
В Windows PowerShell используйте:
$env:OPENAI_API_KEY='sk-...'
Почему лучше переменная окружения, а не строка в коде:
- ключ не попадает в репозиторий вместе с приложением;
- проще менять ключ между dev, staging и production;
- меньше шанс случайно показать секрет в логах или скриншотах.
Для постоянного хранения в production используйте штатное секрет-хранилище вашей платформы, а не файл .env, лежащий рядом с кодом без контроля доступа.
3. Отправьте первый запрос через curl
Минимальный запрос к Responses API выглядит так:
curl https://api.openai.com/v1/responses -H 'Content-Type: application/json' -H "Authorization: Bearer $OPENAI_API_KEY" -d '{"model":"gpt-4.1-mini","input":"Напиши одну строку: API подключён"}'
Для PowerShell обычно надежнее вызвать именно curl.exe:
curl.exe https://api.openai.com/v1/responses -H 'Content-Type: application/json' -H "Authorization: Bearer $env:OPENAI_API_KEY" -d '{"model":"gpt-4.1-mini","input":"Напиши одну строку: API подключён"}'
Что здесь важно:
/v1/responses— актуальный endpoint для нового кода;Authorization: Bearer ...— обязательная аутентификация;model— модель, доступная вашему проекту;input— минимальный текст запроса.
Не привязывайтесь к имени модели из примера как к неизменному стандарту. Доступность моделей зависит от аккаунта, проекта и текущей линейки. Если вместо ответа вы получили ошибку по модели, подставьте модель, которую видите в своей панели или документации OpenAI.
4. При необходимости повторите тот же запрос из кода
Когда curl уже отработал, можно переходить на SDK. Это полезно, если дальше вам нужны ретраи, потоковые ответы, структурированный клиент или интеграция в существующий backend.
Python:
pip install openai
from openai import OpenAI; client = OpenAI(); r = client.responses.create(model='gpt-4.1-mini', input='Напиши одну строку: API подключён'); print(r.output_text)
Node.js:
npm install openai
import OpenAI from 'openai'; const client = new OpenAI(); const r = await client.responses.create({ model: 'gpt-4.1-mini', input: 'Напиши одну строку: API подключён' }); console.log(r.output_text);
Если в вашей версии SDK нет удобного поля output_text, выведите весь объект ответа и посмотрите содержимое поля output. Для первой интеграции это нормальная практика: сначала убедитесь, что транспорт и авторизация работают, затем уже упрощайте код.
5. Сразу заложите безопасную схему использования
Даже для «первого запроса» полезно не делать архитектурных ошибок, которые потом придется исправлять под давлением сроков.
- Все реальные вызовы API должны идти с вашего сервера или serverless-функции.
- Разделяйте ключи по проектам и окружениям.
- Логируйте идентификаторы запросов и коды ошибок, но не сами секреты.
- Ставьте таймауты и ограничители частоты вызовов на своей стороне.
- Если данные чувствительные, сначала согласуйте схему передачи с безопасностью и юристами, а не после запуска.
Если у вас требования к локальному исполнению модели, к полному отсутствию внешних зависимостей или к жестко закрепленной географии обработки данных, прямое подключение к внешнему API может быть технически или регуляторно неподходящим вариантом.
Типичные ошибки
- 401 Unauthorized. Обычно это неверный ключ, ключ без нужного доступа или пустая переменная окружения. Частая причина — ключ сохранили в одной сессии терминала, а запрос выполняют в другой.
- 404 Not Found. Либо перепутан endpoint, либо указана модель, которая недоступна вашему проекту. Для нового кода используйте
/v1/responses, а не смесь старых и новых примеров. - 429 Too Many Requests или ошибки по квоте. Это не «битый API», а лимиты: rate limit, отсутствие доступной квоты или неактивный биллинг.
- 400 Bad Request. Чаще всего проблема в JSON: сломанные кавычки, лишняя запятая, неверное имя поля или некорректное экранирование в PowerShell.
- Ключ в frontend. Это не просто плохая практика, а прямой путь к компрометации секрета и неконтролируемым расходам.
- Ключ в истории shell. Если вы вставили секрет прямо в команду, он может остаться в истории терминала. Переменные окружения уменьшают этот риск, хотя полностью не снимают вопрос безопасного хранения.
- Слепая вера в пример из интернета. Многие старые статьи показывают другие endpoint и другую форму тела запроса. Проверяйте структуру по официальной документации OpenAI.
- Проблемы сети. Корпоративный proxy, блокировка исходящего HTTPS или подмена сертификатов легко маскируются под «ошибку SDK».
Если вы получили ошибку, сначала сокращайте проблему до одного curl-запроса. Это лучший способ отделить сетевую, авторизационную и прикладную часть. Пока не заработал один короткий запрос, не стоит дебажить весь backend или контейнерную сборку.
Как проверить результат
Проверка должна отвечать не на вопрос «модель что-то написала», а на вопрос «интеграция действительно рабочая». Минимальный чек-лист такой:
- HTTP-статус успешный, обычно
200. - В ответе есть JSON с полями вроде
idиmodel. - В ответе есть текстовый результат в
outputили в удобном поле SDK. - Вы понимаете, какой именно ключ и какой проект использовались.
- Секрет не попал в репозиторий, логи и клиентский код.
Если нужен явный статус-код, можно разделить тело ответа и код HTTP:
curl -s -o response.json -w '%{http_code}' https://api.openai.com/v1/responses -H 'Content-Type: application/json' -H "Authorization: Bearer $OPENAI_API_KEY" -d '{"model":"gpt-4.1-mini","input":"test"}'
Дальше откройте файл response.json и проверьте, что это осмысленный JSON-ответ, а не объект с ошибкой. Для smoke test используйте короткий и стабильный текст запроса. Не сравнивайте ответ побуквенно: модели могут формулировать одну и ту же мысль по-разному. Проверяйте сам факт валидного ответа, наличие текста и отсутствие ошибок авторизации.
Если вам нужна автоматическая проверка в CI, валидируйте не содержание фразы, а структуру ответа и код статуса. Это заметно надежнее и не ломается из-за вариативности формулировок.
FAQ
Нужен ли backend, если у меня веб-приложение?
Да. Секретный ключ OpenAI нельзя безопасно держать в браузере. Веб-клиент должен обращаться к вашему серверу, а сервер — к OpenAI API.
Какую модель указывать в первом запросе?
Любую текстовую модель, которая доступна именно вашему проекту. В примерах выше используется gpt-4.1-mini как иллюстрация. Если ваш аккаунт возвращает ошибку по этой модели, подставьте доступную у себя.
Нужно ли сразу ставить SDK?
Нет. Для первой проверки удобнее curl, потому что он исключает лишние факторы: зависимости, версию рантайма и особенности пакета. SDK имеет смысл после успешного REST-запроса.
Почему я получил 429 уже на первом запросе?
Обычно это связано с лимитами: неактивный платежный профиль, исчерпанная квота, ограничение по частоте или настройки проекта. Сначала отделите 429 от 401: это разные классы проблем.
Можно ли использовать старые примеры с Chat Completions?
Можно, если вы поддерживаете уже существующий код, но для новой интеграции практичнее начинать с Responses API. Главное — не смешивать endpoint одного API с формой запроса другого.
Где лучше хранить ключ в production?
В секрет-хранилище вашей платформы: переменные окружения на сервере, менеджер секретов облака или система управления конфигурацией с контролем доступа. Не в коде, не в wiki и не в файлах, которые гуляют между разработчиками вручную.