xaxumessageAPI
Начало

Запросы и ответы

Общие правила для всех методов: форматы, идентификаторы, асинхронность, защита от повторов и постраничная выдача.

Формат

  • Запросы и ответы — JSON в UTF-8 (Content-Type: application/json). Исключения: загрузка файла (multipart или «сырые» байты) и скачивание файла.
  • Даты — строки ISO 8601 в UTC: 2026-10-10T09:30:00.000Z. Там, где можно передать дату без времени (2026-11-01), она означает «до конца этого дня по UTC».
  • Деньги — целые числа в копейках: 399000 = 3 990 ₽. Валюта — в поле currency.
  • Телефон — международный формат, допускаются +, пробелы, скобки и дефисы: +7 (999) 123-45-67. В ответах телефоны — только цифры без +: 79991234567.

Идентификаторы

Наши идентификаторы — UUID (id, accountId, chatId, messageId…). Идентификаторы мессенджера отдаются отдельно: externalId у сообщения, externalId у чата (например, 79991234567@c.us в WhatsApp). В запросах используйте наши UUID; адресат отправки — to.chatId (externalId чата) или to.phone.

Асинхронные операции (202)

Отправка, правка, удаление, «прочитано», «печатает», сторис отвечают 202 Accepted: операция поставлена в очередь номера и выполнится в течение секунд. Результат приходит событием (message.status, story.status) и виден в объекте. Очередь каждого номера строго последовательна и идёт с паузами между сообщениями — это защита номера от блокировки за спам.

Защита от повторной отправки

Передавайте clientId — ваш уникальный ключ операции (например, order-1001-notify). Повтор запроса с тем же clientId не отправит сообщение второй раз, а вернёт уже созданное (200 вместо 202). Так же работает clientId при заказе номера: повтор после таймаута вернёт тот же номер, а не купит второй.

Постраничная выдача

ГдеКак листать
чаты, сообщения чатаlimit (до 200) и cursor; в ответе nextCursor — передайте его следующим запросом, null = конец
событияafter=<id последнего события> и limit (до 500); в ответе next — id для следующего запроса
счетаbefore=<номер счёта> и limit (до 100); в ответе next, null = конец

Лимиты

ЧтоОграничение
Размер JSON-запроса1 МБ
Размер загружаемого файла100 МБ
Текст сообщения20 000 символов; подпись к файлу — 4 096
Заказ номеровне больше лимита номеров клиента и не чаще установленного числа заказов в час (GET /v1/me → limits)
Счета на оплатуне больше 10 неоплаченных счетов на номер в час
Отправкасообщения номера уходят по одному с паузой sendIntervalMs — это защита от блокировки, а не ограничение API