POST /v1/responses (бета)
Эндпоинт OpenAI Responses API. Подходит для рассуждающих моделей и агентов.
Бета. Авторизация, тарификация и потоковая передача стабильны и подходят для продакшена. Метка беты относится к составу внутренних блоков
output[](текст, рассуждения, вызовы инструментов) — туда со временем добавляются новые типы по мере появления у провайдеров моделей. Если ваш клиент строго разбирает конкретные блоки — будьте готовы расширять обработку.
/v1/responses — альтернативный эндпоинт OpenAI Responses API (без сохранения состояния на стороне сервера). Подходит для рассуждающих моделей (o-серия, Claude с расширенным рассуждением), для агентских CLI вроде Codex и для абстракций, где нужен более гибкий контейнер ответа, чем chat.completion.
Когда использовать
Чаще всего вам нужен POST /v1/chat/completions — он совместим с большинством OpenAI-инструментов. /v1/responses стоит выбрать только если:
- Вы работаете с рассуждающими моделями (o1, o3, Claude с расширенным рассуждением) и хотите явно управлять блоками рассуждения.
- Вы строите агентский фреймворк, которому нужен единый контейнер для разных типов выходных блоков.
- Используете агентский CLI вроде Codex, который ходит только в Responses API.
- Конкретный клиент или провайдер требует именно этот формат.
Эндпоинт
https://api.hubris.pw/v1/responsesЗаголовки:
| Header | Значение |
|---|---|
Authorization | Bearer sk-gw-... (обязательно) |
Content-Type | application/json (обязательно) |
Accept | application/json или text/event-stream (опционально; при stream: true — SSE) |
Тело запроса
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
model | string | — | Идентификатор модели, например openai/o1-mini. |
input | string | object[] | — | Запрос. Простая строка ИЛИ массив input-блоков (см. OpenAI Responses API). |
stream | boolean | false | Стриминг ответа через SSE. |
Дополнительные параметры (instructions, tools, temperature и т.д.) передаются модели как есть — Hubris их не нормализует. Полная схема — в OpenAI Responses API docs.
Минимальный пример
curl -s https://api.hubris.pw/v1/responses \-H "Authorization: Bearer sk-gw-..." \-H "Content-Type: application/json" \-d '{ "model": "openai/gpt-4o-mini", "input": "Привет, как дела?"}'from openai import OpenAIclient = OpenAI( base_url="https://api.hubris.pw/v1", api_key="sk-gw-...",)response = client.responses.create( model="openai/gpt-4o-mini", input="Привет, как дела?",)print(response.output_text)import OpenAI from "openai";const client = new OpenAI({baseURL: "https://api.hubris.pw/v1",apiKey: "sk-gw-...",});const response = await client.responses.create({model: "openai/gpt-4o-mini",input: "Привет, как дела?",});console.log(response.output_text);input может быть строкой или массивом блоков — передаваемый формат зависит от модели.
Ответ
{
"id": "resp_abc123",
"object": "response",
"created_at": 1714000000,
"model": "openai/gpt-4o-mini",
"output": [
{
"type": "message",
"role": "assistant",
"content": [
{ "type": "output_text", "text": "Привет! Хорошо, спасибо." }
]
}
],
"usage": {
"input_tokens": 8,
"output_tokens": 12,
"total_tokens": 20,
"cost": 24
},
"status": "completed"
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
id | string | Уникальный идентификатор response. Префикс resp_. |
object | "response" | Тип объекта. |
created_at | integer | Unix-timestamp (секунды). |
model | string | Фактически использованная модель. |
output[] | array<Block> | Выходные блоки. Структура зависит от модели и версии — может содержать message, reasoning, tool_call и другие типы. Hubris передаёт как есть, без нормализации. |
usage.input_tokens | integer | Токены ввода. |
usage.output_tokens | integer | Токены вывода (включая reasoning-токены, если модель их использует). |
usage.total_tokens | integer | Сумма. |
usage.cost | integer | Стоимость в копейках. Hubris-расширение. |
status | "completed" | "in_progress" | "failed" | ... | Состояние генерации. |
Стриминг
stream: true включает SSE. Завершающее событие response.completed содержит полный объект response вместе с usage. Hubris списывает стоимость из этого события (или, в редком случае обрыва до его прихода, — из оценки по длине ввода).
curl -N -s https://api.hubris.pw/v1/responses \
-H "Authorization: Bearer sk-gw-..." \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-4o-mini",
"input": "Объясни квантовую запутанность",
"stream": true
}'Формат событий и их обработка — на странице Стриминг.
HTTP-коды
| Код | Когда |
|---|---|
200 | Успешный ответ. |
400 | Тело запроса не соответствует схеме. |
401 | Ключ отсутствует / отозван / невалиден. |
402 | Недостаточно средств на балансе. |
404 | Модели с таким model не существует или не поддерживает Responses API. |
429 | Превышен дневной лимит на ключе. |
502 / 503 / 504 | Транзиентные сбои у провайдера или курса ЦБ. |
Формат тела ошибки и стратегия retry — Ошибки.
Тарификация
Считаем так же, как и для /v1/chat/completions: входные + выходные токены × цены модели в ₽. Токены рассуждения (если модель их использует) учитываются в output_tokens и тарифицируются как обычные выходные токены.
Что дальше
- POST /v1/chat/completions — основной эндпоинт, подходит большинству задач.
- Codex CLI — как подключить агентский CLI к Hubris через Responses API.
- Стриминг — формат событий SSE.
- Ошибки — таблица кодов.
Обновлено: