Перейти к основному содержанию
POST
Сообщение ИИ-бухгалтеру (ход потоком SSE)

Авторизации

tungo.session_token
string
cookie
обязательно

Сессия кабинета: cookie ставит вход через /v1/auth/* (Better Auth), браузер шлёт её сам — фронтенду кабинета ничего добавлять не нужно (fetch с credentials: 'include'). За HTTPS имя cookie — __Secure-tungo.session_token. Сессия кончилась — 401 authentication_error: отправить на вход.

Заголовки

Idempotency-Key
string

Ключ повтора (например, UUID): повтор с тем же ключом и тем же телом не выполняет действие второй раз, а отдаёт прежний ответ

Maximum string length: 255

Параметры пути

co
string
обязательно

id компании, co_… — из GET /v1/companies

Тело

application/json

Вопрос ИИ-бухгалтеру

message
string

Вопрос человека, до 4000 знаков; можно не писать, если приложены файлы

Maximum string length: 4000
Пример:

"Сколько мы должны поставщикам на конец июня?"

dialog_id
string | null

Продолжить разговор с этим id. Без него — новый разговор, его id придёт в заголовке X-Dialog-Id

Pattern: ^[A-Za-z0-9_-]{1,64}$
proposal_id
string | null

Вопрос по предложению (кнопка «Ответить в чате» у карточки или в ленте): ход начнётся с этим предложением в контексте — ИИ увидит его номер, статус, блокеры и предупреждения. Нет такого предложения в компании — 404

Pattern: ^P-\d{1,12}$
Пример:

"P-000123"

new_dialog
boolean

true — начать новый разговор именно с этим dialog_id (клиент задаёт id сам); id уже занят — 409

turn
integer | null

Номер последнего хода, который видел клиент (заголовок X-Turn-No): если сервер этот ход потерял (перезапуск) — 410, начните новый разговор

Требуемый диапазон: x >= 0
capabilities
string[]

Что умеет клиент: ["choice"] — показывать уточняющие вопросы с вариантами (событие choice). Без него ИИ спрашивает обычным текстом

Пример:
attachments
object[]

Файлы к вопросу. До 5 файлов, каждый до 10 МБ, все вместе до 14 МБ (до кодирования в base64). Картинка — до 5 МБ, PDF — до 100 страниц. Форматы (по расширению имени): .pdf, .jpg, .jpeg, .png, .webp, .docx, .xlsx, .xls, .csv, .txt. Содержимое должно совпадать с расширением; иначе, как и при превышении пределов, — 400 с текстом причины

Maximum array length: 5
mode
enum<string>

Режим хода: auto (по умолчанию) — ИИ сам решает, ответить или подготовить документ; ask — только ответ и разбор, без документов; document — подготовить документ

Доступные опции:
auto,
ask,
document
effort
enum<string> | null

Усилие ИИ на этот вопрос: low < medium < high < xhigh < max — глубже думает, дольше и дороже (больше расход лимита). Не прислано или null — усилие выбирает Tungo. Только на тарифе с выбором усилия (max_effort тарифа в GET /v1/plans не null): иначе 402 effort_not_in_plan. Выше max_effort тарифа — опускается до него. Ответ на уточняющий вопрос продолжает ход с прежним усилием. Ключу API тариф не нужен: усилие — как прислано

Доступные опции:
low,
medium,
high,
xhigh,
max,
null
Пример:

"high"

stream
boolean

false — ответ одним JSON (ChatTurnResult), когда ход закончится; по умолчанию — поток SSE

Ответ

Ход потоком SSE — события ChatEvent (text, progress, thinking, status, tool, proposal, citation, question, choice, error, batch, done). С stream: false или Accept: application/json — один JSON ChatTurnResult, когда ход закончится. Заголовки: X-Dialog-Id — id разговора, X-Turn-No — номер хода. Обрыв соединения ход не останавливает.

Одно событие потока: id: <номер>, event: <type>, data: <JSON этого вида>. Ещё бывает event: ping с пустым data — пульс, его пропускайте. Переподключение — GET …/chat/{id}/events с Last-Event-ID.

type
enum<string>
обязательно

Вид события: text

Доступные опции:
text
delta
string
обязательно

Новый кусок текста (Markdown)

step
number

Номер витка цикла ИИ