POST Responses

Responses API — OpenAI-совместимый формат запросов с tool calling и streaming

POST Responses

Responses API — формат, совместимый с OpenAI Responses API. Работает с официальным OpenAI SDK (client.responses.create(...)), Codex CLI и другими каноничными клиентами. Внутри запрос трансформируется в Chat Completions и уходит выбранному провайдеру.

Responses API находится в бета-версии. API может измениться без предварительного уведомления.

Эндпоинты

МетодПутьНазначение
POST/v1/responsesСоздание ответа (обычный и streaming)
POST/v1/responses/compactКомпактизация истории диалога

API stateless. Мы не храним предыдущие ответы: previous_response_id, conversation и store не поддерживаются. Всю историю диалога — включая вызовы инструментов — передавайте в input каждым запросом. Методов GET /v1/responses/{id}, DELETE и /cancel нет.

Основные параметры

ПараметрТипОписание
modelstringID модели. Поддерживает alias-формат <model>@<key>=<value> (см. ниже)
inputstring / arrayТекст или массив input items
instructionsstringСистемные инструкции (эквивалент system-сообщения)
streambooleanПотоковая передача через SSE

Alias-формат модели

К имени модели можно дописать параметры маршрутизации через @:

openai/gpt-6-astra@reasoning_effort=high&allow_fallbacks=false

Поддерживаемые ключи: provider, reasoning_effort, allow_fallbacks. При конфликте alias и одноимённого поля в теле запроса API вернёт 400.

Дополнительные параметры

ПараметрТипОписание
toolsarrayОпределения инструментов (см. раздел Tool calling)
tool_choicestring / objectnone, auto, required или {"type":"function","name":"..."}
parallel_tool_callsbooleanРазрешить параллельные вызовы инструментов
max_tool_callsintegerОграничение на количество вызовов
reasoningobjectНастройки reasoning: effort (max/xhigh/high/medium/low/minimal/none), summary, max_tokens, type: adaptive для Claude
textobjectФормат вывода: {"format": {"type": "text" | "json_object" | "json_schema", ...}}
max_output_tokensintegerМаксимум выходных токенов
temperaturefloat (0–2)Температура генерации
top_pfloat (0–1)Nucleus sampling
top_kintegerTop-K sampling
top_logprobsinteger (0–20)Количество log probabilities
frequency_penalty / presence_penaltyfloat (−2…2)Штрафы за повторы
includearrayДополнительные поля вывода, например ["reasoning.encrypted_content"]
prompt_cache_keystringКлюч кеширования промпта
prompt_cache_retentionstringin_memory или 24h
modalitiesarray["text"], ["text","image"] — для моделей с генерацией изображений
image_configobjectПараметры генерации изображений
providerobjectПредпочтения по провайдерам (см. Выбор провайдера)
pluginsarrayСерверные плагины: web, file-parser, moderation, masker, response-healing
metadataobjectПроизвольные key-value данные
user / safety_identifierstringИдентификатор конечного пользователя

Не поддерживаются

Эти поля принимаются ради совместимости с OpenAI SDK, но не влияют на результат:

ПараметрЧто использовать вместо
previous_response_idПередавайте всю историю в input
conversationТо же
storeОтветы не сохраняются, истории через API нет
backgroundАсинхронного режима у Responses API нет
prompt (reusable prompt templates)Передавайте текст инструкций в instructions
models (массив fallback)Alias model@allow_fallbacks=true
session_idmetadata или user

Примеры

curl -X POST "https://api.usellm.ru/v1/responses" \
  -H "Authorization: Bearer <USELLM_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-6-astra",
    "input": "Расскажи о квантовых компьютерах"
  }'

Структура ответа

{
  "id": "gen_581761234567890123",
  "object": "response",
  "created_at": 1785312000,
  "completed_at": 1785312003,
  "model": "openai/gpt-6-astra",
  "status": "completed",
  "error": null,
  "output_text": "Квантовые компьютеры — это...",
  "output": [
    {
      "type": "message",
      "id": "msg_1785312000_0",
      "status": "completed",
      "role": "assistant",
      "content": [{ "type": "output_text", "text": "Квантовые компьютеры — это...", "annotations": [] }]
    }
  ],
  "incomplete_details": null,
  "usage": {
    "input_tokens": 12,
    "output_tokens": 148,
    "total_tokens": 160,
    "cost_rub": 0.0413
  }
}

status — completed, incomplete или failed. При incomplete заполняется incomplete_details.reason (max_output_tokens или content_filter).

В usage поля продублированы в двух неймингах: input_tokens/output_tokens (Responses API) и prompt_tokens/completion_tokens (Chat Completions) — используйте любой. cost_rub — фактическая стоимость запроса, списанная с баланса.

Tool calling

Поддерживается полный цикл: передача tools → получение function_call → отправка результата через function_call_output → финальный ответ модели.

Типы инструментов

typeПоддержка
functionОба формата: плоский Responses ({"type":"function","name":...}) и вложенный ({"type":"function","function":{...}})
customFree-form инструмент. Внутри приводится к функции с единственным строковым полем input, в ответе приходит как function_call с arguments = {"input": "..."}
web_search, web_search_previewВключает серверный веб-поиск (эквивалент plugins: [{"id": "web"}])
Прочие (code_interpreter, file_search, local_shell)Не поддерживаются — модель их не увидит

Возможность вызывать инструменты зависит от модели. Если модель не поддерживает tool calling, инструменты будут проигнорированы провайдером. Проверяйте поддержку в каталоге моделей.

1. Запрос с инструментами

{
  "model": "openai/gpt-6-astra",
  "input": [{ "role": "user", "content": "Какая погода в Москве?" }],
  "tools": [
    {
      "type": "function",
      "name": "get_weather",
      "description": "Получить текущую погоду в городе",
      "parameters": {
        "type": "object",
        "properties": { "location": { "type": "string", "description": "Название города" } },
        "required": ["location"]
      }
    }
  ],
  "tool_choice": "auto"
}

2. Ответ с вызовом инструмента

{
  "id": "gen_581761234567890123",
  "object": "response",
  "status": "completed",
  "output_text": "",
  "output": [
    {
      "type": "function_call",
      "id": "fc_call_abc123",
      "call_id": "call_abc123",
      "name": "get_weather",
      "arguments": "{\"location\":\"Москва\"}",
      "status": "completed"
    }
  ]
}

3. Возврат результата инструмента

Выполните функцию на своей стороне и отправьте новый запрос со всей историей: исходное сообщение пользователя, item function_call и item function_call_output с тем же call_id.

{
  "model": "openai/gpt-6-astra",
  "input": [
    { "role": "user", "content": "Какая погода в Москве?" },
    {
      "type": "function_call",
      "call_id": "call_abc123",
      "name": "get_weather",
      "arguments": "{\"location\":\"Москва\"}"
    },
    {
      "type": "function_call_output",
      "call_id": "call_abc123",
      "output": "{\"temp_c\": -3, \"condition\": \"снег\"}"
    }
  ],
  "tools": []
}

В поле tools второго запроса передайте те же определения инструментов, что и в первом.

Item function_call обязателен. Если прислать только function_call_output — например, рассчитывая, что историю подтянет previous_response_id, — модель получит результат инструмента без самого вызова и вернёт ошибку вида messages with role 'tool' must be a response to a preceding message with 'tool_calls'. API stateless, историю нужно передавать полностью.

Типы input items

typeОписание
message (или объект с role)Сообщение с ролью user, assistant, system или developer
function_callЭхо ранее полученного вызова: call_id, name, arguments (JSON-строка)
function_call_outputРезультат вызова: call_id и output (строка или произвольный JSON)
reasoningReasoning-блок предыдущего хода: content, summary, encrypted_content

Мультимодальный input

В content сообщения можно передать массив частей: input_text, input_image (URL или base64 data URI), input_file (base64 или URL). Подробнее — в гайде Передача медиа на вход.