POST /v1/chat/completions
Создать chat completion. OpenAI-совместимый формат, поддержка стриминга, tool calling, structured outputs.
POST /v1/chat/completions
Главный эндпоинт Hubris — создаёт ответ языковой модели на цепочку сообщений. OpenAI-совместимый формат — без переписывания работают openai Python SDK, OpenAI TypeScript SDK, LangChain, Vercel AI SDK и любые другие клиенты под OpenAI Chat Completions API.
Параметры и ответ
/v1/chat/completionsAuthorization
AuthorizationRequiredBearer <token>API-ключ в формате sk-gw- + 32 hex. Создаётся в дашборде на /keys.
In: header
Request Body
application/jsonRequiredmodelRequiredstring1messagesRequiredarray<object | object | object | object>toolsarray<object>tool_choiceAny properties in string,objectparallel_tool_callsbooleanresponse_formatobject | object | objecttemperaturenumber0Maximum: 2top_pnumber0Maximum: 1ninteger1stopAny properties in string,array<string>max_tokensinteger0max_completion_tokensinteger0frequency_penaltynumber-2Maximum: 2presence_penaltynumber-2Maximum: 2logit_biasobjectseedintegerlogprobsbooleantop_logprobsinteger0Maximum: 20streambooleanstream_optionsobjectuserstringreasoning_effortstring"low" | "medium" | "high"Успешный ответ. При stream: false — chat.completion. При stream: true — text/event-stream с chunk-ами chat.completion.chunk.
Минимальный пример
curl -s https://api.hubris.pw/v1/chat/completions \
-H "Authorization: Bearer sk-gw-..." \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-haiku-4.5",
"messages": [{"role": "user", "content": "Привет"}]
}'
Стриминг
Передайте stream: true, чтобы получить ответ chunk-ами в формате Server-Sent Events. Подробности — на странице Streaming.
curl -N -s https://api.hubris.pw/v1/chat/completions \
-H "Authorization: Bearer sk-gw-..." \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-haiku-4.5",
"messages": [{"role": "user", "content": "Расскажи короткую историю"}],
"stream": true
}'
Tool calling
Передайте определения функций в tools, модель сможет их вызывать. Полная схема — в OpenAPI-блоке выше.
curl -s https://api.hubris.pw/v1/chat/completions \
-H "Authorization: Bearer sk-gw-..." \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-haiku-4.5",
"messages": [{"role": "user", "content": "Какая погода в Москве?"}],
"tools": [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Получить текущую погоду по городу",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}
}]
}'
В ответе модель вернёт tool_calls вместо обычного content — выполните функцию у себя и отправьте результат вторым запросом с role: "tool".
Structured outputs
Передайте response_format: { type: "json_schema", json_schema: { name, schema } }, чтобы модель ответила строгим JSON по вашей схеме:
curl -s https://api.hubris.pw/v1/chat/completions \
-H "Authorization: Bearer sk-gw-..." \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-haiku-4.5",
"messages": [{"role": "user", "content": "Дай данные о Москве в JSON"}],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "city_info",
"schema": {
"type": "object",
"properties": {
"name": {"type": "string"},
"country": {"type": "string"},
"population": {"type": "number"}
},
"required": ["name", "country", "population"]
}
}
}
}'
Vision
Модели с "image" в modalities (см. GET /v1/models) принимают изображения через image_url-блок:
curl -s https://api.hubris.pw/v1/chat/completions \
-H "Authorization: Bearer sk-gw-..." \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-haiku-4.5",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "Что на картинке?"},
{"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}}
]
}]
}'
URL может быть https://... или data:image/<mime>;base64,... — обе формы работают.