Используйте Responses API

Отправьте ограниченный запрос OpenAI Responses и получите сохранённый результат.

Задайте BASE_URL как корневой HTTPS-адрес API без завершающего / и без /v1, а API_KEY передайте из хранилища секретов. OpenAI-совместимые SDK используют ${BASE_URL}/v1, Anthropic-совместимые — BASE_URL.

Responses — основная OpenAI-совместимая поверхность генерации. Нужны API-ключ, доступный ID модели и кредиты. Генерация может списать кредиты.

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

bash
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, текст и числа токенов вашего вызова будут другими:

json
{
  "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 в окружении. Чтение не запускает новую генерацию:

bash
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 по руководству о повторах.

Для вывода по мере генерации откройте потоки.