Используйте Chat Completions
Отправьте массив сообщений через OpenAI-совместимый API Chat Completions.
Отправьте массив сообщений через OpenAI-совместимый API Chat Completions.
Задайте BASE_URL как корневой HTTPS-адрес API без завершающего / и без /v1, а API_KEY передайте из хранилища секретов. OpenAI-совместимые SDK используют ${BASE_URL}/v1, Anthropic-совместимые — BASE_URL.
Выбирайте Chat Completions, если клиент ожидает массив messages и choices. Для новой интеграции основной путь — Responses. Нужны ключ, доступная модель и кредиты.
printf 'Authorization: Bearer %s\n' "$API_KEY" \
| curl -q -H @- -i "$BASE_URL/v1/chat/completions" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-sol",
"messages": [
{
"role": "user",
"content": "Ответь одним коротким предложением."
}
],
"max_tokens": 64,
"stream": false
}'
HTTP 200 возвращает chat completion с массивом choices и usage. Ответ помощника находится в choices[0].message; текст генерации не детерминирован. Сохраните HTTP-заголовок request-id для поддержки; endpoint, время и исход недавней операции смотрите в активности API. ID запуска отличается от заголовка. Если клиенту нужен вывод по частям, установите stream: true и откройте руководство по потокам. Неизвестные поля и неподдерживаемые обязательные возможности отклоняются до генерации. Необязательные параметры могут быть опущены, если недоступны при исполнении выбранной модели; это отображается в активности API.
choicesПример показывает структуру успешного ответа; ID, текст и числа токенов у вашего вызова изменятся:
{
"id": "chatcmpl-018f3f407b447cc4b8ba3f62656c299c",
"object": "chat.completion",
"created": 1790244000,
"model": "gpt-5.6-sol",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "Готово." },
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 12,
"completion_tokens": 5,
"total_tokens": 17,
"prompt_tokens_details": { "cached_tokens": 0 },
"completion_tokens_details": { "reasoning_tokens": 0 }
}
}
Проверяйте choices[0].finish_reason: stop означает обычное завершение, length — ограничение длины, tool_calls — необходимость выполнить функцию в вашем приложении. При вызове инструмента message.content может быть null, а message.tool_calls содержит имя, JSON-аргументы и ID вызова. Текущая активность API показывает исход, токены и окончательное списание в кредитах; не считайте total_tokens ценой в деньгах.
Ключ -N позволяет видеть SSE-события по мере поступления. Если после обрыва потребуется безопасный повтор, один раз создайте ключ идемпотентности и сохраните его с неизменным телом запроса:
export UNLIMGPT_REQUEST_KEY="$(openssl rand -hex 16)"
В той же оболочке запросите финальную часть с расходом токенов, если он нужен клиенту:
test -n "${UNLIMGPT_REQUEST_KEY:-}" \
&& printf 'Authorization: Bearer %s\n' "$API_KEY" \
| curl -q -H @- -i -N "$BASE_URL/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $UNLIMGPT_REQUEST_KEY" \
-d '{
"model": "gpt-5.6-sol",
"messages": [
{
"role": "user",
"content": "Посчитай до трёх."
}
],
"max_tokens": 64,
"stream": true,
"stream_options": {
"include_usage": true
}
}'
HTTP 200 означает начало потока. Собирайте choices[].delta по порядку. Последняя часть с выбором содержит finish_reason; при include_usage: true за ней идёт часть с пустым choices и итоговым usage, затем data: [DONE]. Обрыв TCP до этого маркера не доказывает завершение. Для повтора запускайте только второй блок с прежним ключом и тем же телом; повтор команды OpenSSL создаст новый запрос. Формат событий и безопасный повтор описаны в потоках и идемпотентности. Для новой интеграции со структурированным выводом и сохранением ответа начните с Responses.
Далее: ошибки и лимиты.