Конверт, ошибки, страницы

Единый формат ответа, коды отказов, курсорная выборка и пределы.

Конверт ответа #

Удачный ответ всегда кладёт содержимое в data — даже когда это один объект. У списков рядом появляются nextCursor и hasMore. Отказ приходит в том же конверте полем error с машинным кодом и пояснением на английском.

Все ответы идут с Cache-Control: no-store: в них чужая переписка.

Ответ
{"data": { … }}
{"data": [ … ], "nextCursor": "2026-08-22T09:15:04.281Z", "hasMore": true}
{"error": {"code": "validation_error", "message": "content must not exceed 4096 characters"}}

Коды отказов #

HTTPcodeКогда
400validation_errorтело не разобралось или значение не подходит
401unauthorizedключа нет, отозван или чужой
403insufficient_scopeу ключа нет права на метод
404not_foundразговора нет либо он другого сайта
409conversation_closedразговор закрыт, ответа посетитель не увидит
409no_visitorв разговоре нет посетителя виджета
413file_too_largeфайл по ссылке больше предела
429rate_limit_exceededпревышен предел частоты, смотрите Retry-After
502file_fetch_failedфайл по вашей ссылке не скачался
503storage_unavailableбаза или Redis недоступны, повторите позже

Страницы #

Выборка курсорная, а не по номерам страниц: пока читается первая страница, посетители пишут, и нумерация сдвинула бы часть разговоров мимо читающего. Курсор — время последнего показанного элемента в формате RFC 3339 с наносекундами.

Берите nextCursor из ответа и передавайте его параметром cursor, пока hasMore истинно.

ПолеТипОбяз.Описание
limitintнетразмер страницы: 25 по умолчанию, 100 потолок
cursorstringнетпродолжение выборки: значение nextCursor предыдущего ответа

Пределы #

ЧтоСколько
Запросов на ключ300 в минуту, дальше 429 с Retry-After
Размер страницы25 по умолчанию, 100 потолок
Длина ответа4096 символов
Тело запроса256 КБ
Файл по ссылке50 МБ
Срок подписанной ссылки на вложение1 час
Ожидание вашего обработчика вебхука20 секунд
Попыток доставки вебхука3, пауза 5 секунд и дальше вдвое
Окно проверки подписи вебхука5 минут