Chat Completions
Основной endpoint для работы с языковыми моделями.
POST /v1/chat/completions
Описание
Создаёт ответ модели на основе истории сообщений (chat). Поддерживает все модели и ка налы.
Заголовки
| Заголовок | Обязательный | Описание |
|---|---|---|
Authorization | Да | Bearer YOUR_API_KEY |
Content-Type | Да | application/json |
Тело запроса
{
"model": "anthropic/claude-sonnet-4-5-20250929",
"messages": [
{"role": "system", "content": "Ты полезный ассистент"},
{"role": "user", "content": "Привет!"}
],
"temperature": 0.7,
"max_tokens": 1000,
"stream": false
}
Обязательные параметры
| Параметр | Тип | Описание |
|---|---|---|
model | string | ID модели (см. Модели) |
messages | array | Массив сообщений |
Формат messages
{
"messages": [
{"role": "system", "content": "Системные инструкции"},
{"role": "user", "content": "Сообщение пользователя"},
{"role": "assistant", "content": "Ответ ассистента"},
{"role": "user", "content": "Следующий вопрос"}
]
}
Роли:
system— системные инструкции (необязательно, одно сообщение в начале)user— сообщения пользователяassistant— предыдущие ответы модели
Опциональные параметры
| Параметр | Тип | Default | Описание |
|---|---|---|---|
temperature | number | 1.0 | Случайность (0.0-2.0) |
max_tokens | integer | varies | Максимум токенов в ответе |
top_p | number | 1.0 | Nucleus sampling (0.0-1.0) |
frequency_penalty | number | 0.0 | Штраф за повторы (-2.0 to 2.0) |
presence_penalty | number | 0.0 | Штраф за наличие (-2.0 to 2.0) |
stop | string/array | null | Стоп-последовательности |
stream | boolean | false | Потоковая передача |
seed | integer | null | Seed для воспроизводимости |
Параметры Extended Thinking (Anthropic)
Для моделей с суффиксом -thinking:
| Параметр | Тип | Описание |
|---|---|---|
reasoning_effort | string | low, medium, high |
thinking.budget_tokens | integer | Бюджет токенов (1024-32000) |
{
"model": "anthropic/claude-sonnet-4-20250514-thinking",
"messages": [...],
"reasoning_effort": "high"
}
Параметры OpenRouter
Для моделей через OpenRouter канал:
| Параметр | Тип | Default | Описание |
|---|---|---|---|
top_k | integer | 0 | Top-K sampling |
top_a | number | 0.0 | Adaptive sampling |
min_p | number | 0.0 | Minimum probability |
repetition_penalty | number | 1.0 | Штраф за повторы |
Ответ
Без streaming
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1706745600,
"model": "anthropic/claude-sonnet-4-5-20250929",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Привет! Чем могу помочь?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 25,
"completion_tokens": 12,
"total_tokens": 37
}
}
С streaming
При stream: true ответ приходит как Server-Sent Events:
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1706745600,"model":"anthropic/claude-sonnet-4-5-20250929","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1706745600,"model":"anthropic/claude-sonnet-4-5-20250929","choices":[{"index":0,"delta":{"content":"Привет"},"finish_reason":null}]}
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1706745600,"model":"anthropic/claude-sonnet-4-5-20250929","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]}
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1706745600,"model":"anthropic/claude-sonnet-4-5-20250929","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]
Ответ с Extended Thinking
{
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": [
{
"type": "thinking",
"thinking": "Анализирую задачу пошагово..."
},
{
"type": "text",
"text": "Ответ: x = 4"
}
]
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 15,
"completion_tokens": 120,
"thinking_tokens": 85
}
}
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
id | string | Уникальный ID запроса |
object | string | chat.completion или chat.completion.chunk |
created | integer | Unix timestamp создания |
model | string | Использованная модель |
choices | array | Массив ответов |
usage | object | Статистика токенов |
finish_reason
| Значение | Описание |
|---|---|
stop | Модель завершила ответ естественно |
length | Достигнут max_tokens |
content_filter | Контент заблокирован фильтром |
Примеры
cURL
curl https://api.aipomogator.ru/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $API_KEY" \
-d '{
"model": "anthropic/claude-sonnet-4-5-20250929",
"messages": [
{"role": "system", "content": "Ты помощник программиста"},
{"role": "user", "content": "Напиши функцию сортировки на Python"}
],
"temperature": 0.3,
"max_tokens": 500
}'
Python
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.aipomogator.ru/v1"
)
response = client.chat.completions.create(
model="anthropic/claude-sonnet-4-5-20250929",
messages=[
{"role": "system", "content": "Ты помощник программиста"},
{"role": "user", "content": "Напиши функцию сортировки на Python"}
],
temperature=0.3,
max_tokens=500
)
print(response.choices[0].message.content)
JavaScript
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://api.aipomogator.ru/v1',
});
const response = await client.chat.completions.create({
model: 'anthropic/claude-sonnet-4-5-20250929',
messages: [
{ role: 'system', content: 'Ты помощник программиста' },
{ role: 'user', content: 'Напиши функцию сортировки на Python' },
],
temperature: 0.3,
max_tokens: 500,
});
console.log(response.choices[0].message.content);
Мультимодальность (Vision)
Для моделей с поддержкой изображений:
{
"model": "anthropic/claude-sonnet-4-5-20250929",
"messages": [
{
"role": "user",
"content": [
{"type": "text", "text": "Что на картинке?"},
{
"type": "image_url",
"image_url": {"url": "https://example.com/image.jpg"}
}
]
}
]
}
Base64 изображение
{
"type": "image_url",
"image_url": {
"url": "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
}
}
Ошибки
400 Bad Request
{
"error": {
"message": "Invalid model specified",
"type": "invalid_request_error",
"param": "model",
"code": "model_not_found"
}
}
401 Unauthorized
{
"error": {
"message": "Invalid API key",
"type": "authentication_error"
}
}
402 Payment Required
{
"error": {
"message": "Insufficient balance",
"type": "insufficient_quota"
}
}
429 Too Many Requests
{
"error": {
"message": "Rate limit exceeded",
"type": "rate_limit_error"
}
}
Rate Limits
Лимиты зависят от модели и канала. При превышении возвращается 429 с заголовком Retry-After.