Запрос к модели
Поля запроса и ответа POST /v1/chat/completions, роли сообщений, ограничения и параметры, которые доходят не до всех моделей.
Тело запроса
Запрос отправляется методом POST на /v1/chat/completions с телом в формате JSON. Обязательны только model и messages.
{
"model": "deepseek/deepseek-v4.1-flash",
"messages": [
{"role": "system", "content": "Отвечай коротко и по-русски."},
{"role": "user", "content": "Чем TCP отличается от UDP?"}
],
"max_tokens": 300,
"temperature": 0.3
}
| Поле | Что принимает |
|---|---|
model | Имя из GET /v1/models |
messages | Непустой массив, до 2000 сообщений. Последним должно идти сообщение user или tool |
stream, stream_options.include_usage | Потоковый ответ и расход в последнем кадре, см. статью Потоковый ответ |
max_tokens, max_completion_tokens | Целое от 1. Предел длины ответа и размер резерва на балансе. Если пришли оба поля, берётся max_completion_tokens |
temperature | Число от 0 до 2 |
top_p | Число от 0 до 1 |
presence_penalty, frequency_penalty | Числа от −2 до 2 |
seed | Целое число |
stop | Строка или до 4 строк длиной до 64 знаков |
reasoning_effort | none, minimal, low, medium, high или xhigh. Действует у моделей с capabilities.reasoning |
tools, tool_choice, parallel_tool_calls | Вызов функций, см. статью Вызов функций |
response_format | text, json_object или json_schema, см. статью JSON-режим |
Поля, которых нет в таблице и в списке неподдерживаемых ниже (например user, metadata, store), epicai принимает и не использует, ошибки не будет.
Сообщения
У каждого сообщения есть role и content. Роль system задаёт поведение модели, роль developer epicai трактует как system, пустые системные сообщения отбрасываются. Сообщение user содержит строку или массив частей text и image_url, про картинки читайте в статье Картинки в запросе. Сообщение assistant может нести tool_calls, тогда content допустимо оставить null. Результат функции передаётся сообщением tool с обязательным tool_call_id.
Если последним в массиве стоит assistant, ответ 400 invalid_parameter, начатую реплику модели продолжить нельзя.
Размер ответа
Без max_tokens epicai ограничивает ответ запасом по умолчанию, 8192 токена, а у моделей с рассуждениями 16384. Значение выше предела в 65536 тихо уменьшается до него. Ограничение определяет и резерв на балансе, поэтому для коротких ответов задавайте его явно.
Без stream ответ приходит целиком, и ждать его epicai будет до 280 секунд. Потом придёт 504 upstream_timeout, и TOK за такой запрос не спишутся. Для длинных ответов включайте потоковый режим, у него предел 900 секунд.
Ответ
| Поле | Значение |
|---|---|
id | Номер ответа chatcmpl-…, те же 24 знака, что у request_id |
created, model | Время в секундах Unix и имя модели из запроса |
choices | Всегда один вариант с index 0 |
choices[0].message.content | Текст ответа, а при вызове функции null |
choices[0].message.reasoning_content | Рассуждения модели, если вендор их отдаёт. В потоке они идут в delta.reasoning_content |
choices[0].message.tool_calls | Вызовы функций |
choices[0].finish_reason | stop означает естественный конец, length предел max_tokens, tool_calls просьбу модели вызвать функцию, content_filter остановку фильтром вендора |
usage | Поля prompt_tokens, completion_tokens и total_tokens считают токены модели. Ещё могут быть prompt_tokens_details.cached_tokens и completion_tokens_details.reasoning_tokens |
epic | Расширение epicai. В cost_tok лежит списанная сумма в TOK, в request_id номер запроса |
В заголовках ответа приходят x-request-id, x-epic-cost-tok и три заголовка x-ratelimit-*, о них рассказывает статья Лимиты.
Чего нет
Параметры logprobs, top_logprobs, audio, modalities, web_search_options, prediction и устаревшие functions с function_call дают 400 unsupported_parameter с именем поля в param. Так же отвечает n, если оно не равно 1. Инструменты не из семейства функций дают 400 unsupported_tool, части сообщений кроме текста и картинок (аудио, файлы) — 400 unsupported_content.
Что доходит до модели
OpenAI и Claude принимают запрос в собственном формате, поэтому epicai переводит его и отбрасывает то, что у вендора не предусмотрено. Ошибки при этом нет. Какие вендоры в списке, показывает поле owned_by.
| Параметр | Модели OpenAI | Модели Claude | Остальные |
|---|---|---|---|
temperature, top_p | Доходят, кроме моделей с рассуждениями и тех, где вендор настройку выборки не принимает | Не передаются | Доходят |
seed, presence_penalty, frequency_penalty | Не передаются | Не передаются | Доходят |
stop | Не передаётся | Доходит как стоп-последовательности | Доходит |
reasoning_effort | Доходит до моделей с рассуждениями | Включает режим размышлений, если он у модели есть | Доходит до моделей с рассуждениями, уровень minimal у части моделей заменяется на low |
response_format | Доходит | Работает только json_object, схема не применяется | Доходит |
Ограничения запроса: тело до 12 МБ (иначе 413 request_too_large), до 2000 сообщений, до 128 функций.
Не нашли ответ?
Посмотрите частые вопросы или напишите в поддержку.