POST /v1/responses
OpenAI Responses API — эндпоинт /v1/responses API LLMost, совместимый с OpenAI Responses API.
OpenAI Responses API — более новый формат запросов к моделям от OpenAI, идущий на смену Chat Completions: единое поле input вместо массива messages, встроенные инструменты (web_search, file_search, code_interpreter) и структура ответа output, ориентированная на агентные сценарии. Эндпоинт совместим с OpenAI Responses API — существующий код на официальных SDK OpenAI работает без изменений, достаточно поменять base_url и API-ключ.
Основная информация
Эндпоинт: POST https://llmost.ru/api/v1/responses
Аутентификация — API-ключ LLMost в заголовке Authorization: Bearer llmost_... (см. Аутентификация).
Совместимость с OpenAI SDK
Существующий код на официальных SDK OpenAI работает без изменений: поменяйте base_url на https://llmost.ru/api/v1, подставьте ключ LLMost и вызывайте responses.create().
API stateless — store и previous_response_id не поддерживаются
В отличие от api.openai.com, LLMost не хранит историю ответов на своей стороне: это чистый прокси-эндпоинт без состояния.
- Параметр
storeигнорируется на приём — сервер ничего не сохраняет вне зависимости от его значения. - Параметр
previous_response_idотклоняется апстримом с ошибкой 400, если модель не может найти ответ с таким id (а она не может — он нигде не хранится).
Передавайте всю историю диалога явно в input при каждом запросе — так же, как messages в Chat Completions API.
Быстрый старт
cURL
curl https://llmost.ru/api/v1/responses \
-H "Authorization: Bearer llmost_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-4o",
"input": "В чём смысл жизни?"
}'Python с OpenAI SDK
from openai import OpenAI
client = OpenAI(
base_url="https://llmost.ru/api/v1",
api_key="llmost_ВАШ_КЛЮЧ",
)
response = client.responses.create(
model="openai/gpt-4o",
input="В чём смысл жизни?",
)
print(response.output_text)TypeScript с OpenAI SDK
import OpenAI from 'openai';
const openai = new OpenAI({
baseURL: 'https://llmost.ru/api/v1',
apiKey: 'llmost_ВАШ_КЛЮЧ',
});
const response = await openai.responses.create({
model: 'openai/gpt-4o',
input: 'В чём смысл жизни?',
});
console.log(response.output_text);Передача истории диалога
Поскольку previous_response_id не поддерживается, каждый следующий запрос должен содержать всю накопленную историю в input — в том же формате, что и messages в Chat Completions:
const response = await openai.responses.create({
model: 'openai/gpt-4o',
input: [
{ role: 'user', content: 'Как создать REST API на Node.js?' },
{ role: 'assistant', content: 'Для REST API на Node.js обычно используют Express...' },
{ role: 'user', content: 'А как добавить аутентификацию?' },
],
});Структура ответа
{
"id": "resp_67ccd2bed1ec8190b14f964abc0542670bb6a6b6a90c391",
"object": "response",
"created_at": 1741476542,
"status": "completed",
"model": "openai/gpt-4o",
"output": [
{
"type": "message",
"id": "msg_67ccd2bf17f0819081ff3bb2cf6508e60bb6a6b6a90c391",
"role": "assistant",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "Смысл жизни — философский вопрос...",
"annotations": []
}
]
}
],
"output_text": "Смысл жизни — философский вопрос...",
"usage": {
"input_tokens": 15,
"input_tokens_details": { "cached_tokens": 0 },
"output_tokens": 120,
"output_tokens_details": { "reasoning_tokens": 0 },
"total_tokens": 135,
"cost": 0.0004,
"cost_details": {
"upstream_inference_input_cost": 0.00003,
"upstream_inference_output_cost": 0.00036
}
}
}Поле model в ответе — тот же слаг, что был передан в запросе (слаг каталога LLMost, не внутреннее имя апстрима).
usage
input_tokens/output_tokens— входные и выходные токеныinput_tokens_details.cached_tokens— частьinput_tokens, покрытая кэшем промптовoutput_tokens_details.reasoning_tokens— токены рассуждений (для reasoning-моделей)total_tokens— сумма входных и выходных токеновcost— расширение LLMost: фактически списанная сумма в рублях, уже с учётом наценки LLMostcost_details— расширение LLMost: детализация списания по инпуту и аутпуту
Потоковая передача
Включается параметром stream: true — ответ приходит как Server-Sent Events в формате событий Responses API (response.created, response.output_text.delta, response.completed и т.д.). Событие response.completed содержит финальный объект response с полем usage, куда уже применена наценка LLMost.
curl https://llmost.ru/api/v1/responses \
-H "Authorization: Bearer llmost_ВАШ_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-4o",
"input": "Напиши короткое стихотворение",
"stream": true
}'const stream = await openai.responses.create({
model: 'openai/gpt-4o',
input: 'Напиши короткое стихотворение',
stream: true,
});
for await (const event of stream) {
if (event.type === 'response.output_text.delta') {
process.stdout.write(event.delta);
}
}Общие принципы SSE (буферизация, отмена через AbortController) — см. Потоковую передачу; формат самих событий здесь — Responses API, а не chat-completion-подобный.
Обработка ошибок
Ошибки возвращаются в том же формате, что и остальной API LLMost:
{
"error": {
"code": 400,
"message": "Invalid value: 'previous_response_id' is not supported",
"metadata": {}
}
}Коды ошибок
| Код | Причина |
|---|---|
| 400 | Невалидный запрос, модель не найдена, либо previous_response_id отклонён апстримом |
| 401 | Недействительный или отсутствующий API-ключ |
| 402 | Недостаточно средств на балансе — пополните баланс |
| 403 | Запрос отклонён модерацией провайдера |
| 408 | Истекло время ожидания запроса на стороне провайдера |
| 429 | Превышен лимит запросов |
| 500 | Сбой прокси-запроса к шлюзу LLMost |
| 502 | Модель или провайдер временно недоступны, либо вернули некорректный ответ |
| 503 | Нет доступных провайдеров для модели |
| 504 | Провайдер не ответил вовремя (таймаут запроса к апстриму) |
См. Ошибки для общего формата ошибок API и подробностей по каждому коду.
Следующие шаги
- Ознакомьтесь с Аутентификацией для безопасной работы с ключами
- Изучите Обработку ошибок — общий формат для всего API
- Для антропиковского формата запросов — POST /v1/messages
- Для классического формата чата — POST /chat/completions