Используйте Responses API
Отправьте ограниченный запрос OpenAI Responses и получите сохранённый результат.
Отправьте ограниченный запрос OpenAI Responses и получите сохранённый результат.
Задайте BASE_URL как корневой HTTPS-адрес API без завершающего / и без /v1, а API_KEY передайте из хранилища секретов. OpenAI-совместимые SDK используют ${BASE_URL}/v1, Anthropic-совместимые — BASE_URL.
Responses — основная OpenAI-совместимая поверхность генерации. Нужны API-ключ, доступный ID модели и кредиты. Генерация может списать кредиты.
printf 'Authorization: Bearer %s\n' "$API_KEY" \
| curl -q -H @- -i "$BASE_URL/v1/responses" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-sol",
"input": "Ответь одним коротким предложением.",
"max_output_tokens": 64,
"stream": false,
"store": true
}'
Успешный ответ без потока содержит id, model, status, output и usage. Текст генерации может отличаться. Сохраните HTTP-заголовок request-id для поддержки без передачи текста. Активность API показывает исходы недавних запусков; ID строки отличается от этого заголовка. Сохранённый ответ можно прочитать через GET /v1/responses/{id} с ключом той же организации. Если указать store: false и не привязать беседу, чтение недоступно.
Ниже пример формы успешного ответа. ID, текст и числа токенов вашего вызова будут другими:
{
"id": "resp_018f3f407b447cc4b8ba3f62656c299c",
"object": "response",
"created_at": 1790244000,
"status": "completed",
"incomplete_details": null,
"model": "gpt-5.6-sol",
"output": [
{
"id": "msg_018f3f407b447cc4b8ba3f62656c299c",
"type": "message",
"role": "assistant",
"status": "completed",
"content": [
{ "type": "output_text", "text": "Готово.", "annotations": [] }
]
}
],
"output_text": "Готово.",
"usage": {
"input_tokens": 12,
"input_tokens_details": { "cached_tokens": 0 },
"output_tokens": 5,
"output_tokens_details": { "reasoning_tokens": 0 },
"total_tokens": 17
}
}
Сначала проверьте status. Для простого текстового ответа можно читать output_text; для инструмента, цитат или нескольких блоков обрабатывайте массив output по типу каждого элемента. usage описывает токены протокола. Окончательное списание в кредитах смотрите в активности API; не вычисляйте цену в деньгах только из total_tokens. При status: incomplete проверьте incomplete_details.reason и не выдавайте частичный текст за завершённый ответ.
Используйте id из завершённого JSON-ответа. Пример cURL запросит его в терминале; для TypeScript, Python или Go задайте UNLIMGPT_RESPONSE_ID в окружении. Чтение не запускает новую генерацию:
printf 'ID ответа: '
read -r UNLIMGPT_RESPONSE_ID
printf 'Authorization: Bearer %s\n' "$API_KEY" \
| curl -q -H @- -i "$BASE_URL/v1/responses/$UNLIMGPT_RESPONSE_ID"
HTTP 200 возвращает сохранённый ответ с id, status, output и usage; проверьте, что id совпадает с введённым. Для неизвестного, удалённого или недоступного ответа возвращается 404. В запросе выше явно задано store: true; при store: false ответ без сохранения прочитать нельзя.
id из тела нужен для чтения сохранённого ответа и явной отмены; request-id из HTTP-заголовка нужен для поддержки. GET /v1/responses/{id} требует ключ той же организации. Продолжение через previous_response_id сейчас не поддерживается: передавайте нужную историю в новом input. После сетевого обрыва повторяйте логический запрос с прежним Idempotency-Key по руководству о повторах.
Для вывода по мере генерации откройте потоки.