/public/v1/botsbots:readСписок ботов организации. Ответ: {"data":[...]}, без пагинации. Поля включают ID, название, Telegram username, статус и даты.
Подключайте CRM, таблицы и аналитику через Public API. Здесь — только действующие внешние методы, их права доступа и правила безопасной интеграции.
Базовый адрес запросов: https://botnest.su/public/v1. Передавайте ключ в заголовке Authorization: Bearer <API_KEY>. Ключ привязан к организации: API возвращает только её данные.
Создавать и отзывать ключи могут владелец и администратор организации.
Выдавайте только нужные области доступа. Для каждой внешней системы создавайте отдельный ключ.
Полный ключ показывается один раз. Если он утрачен или раскрыт, отзовите его и создайте новый.
| Область | Что разрешает |
|---|---|
bots:read | Список ботов организации |
subscribers:read | Чтение профилей подписчиков |
deliveries:read | Статусы и технические причины доставки |
analytics:read | Агрегированная аналитика |
Public API сейчас работает только на чтение. Управление ботами, рассылками, ключами и подписчиками через этот API не поддерживается.
Скопируйте ключ из панели и подставьте его только в своё окружение — не в публичный клиентский код. Пример ниже не содержит рабочего секрета.
curl --request GET \
--url 'https://botnest.su/public/v1/bots' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Accept: application/json'{
"data": [
{
"id": "11111111-1111-4111-8111-111111111111",
"name": "Мой бот",
"telegramUsername": "my_example_bot",
"status": "active",
"activatedAt": "2026-09-28T10:00:00.000Z",
"createdAt": "2026-09-27T10:00:00.000Z"
}
]
}В «Настройки → Интеграции» есть песочница Public API. Она отправляет тестовый запрос с введённым ключом; ключ не сохраняется в настройках.
Все приведённые ниже запросы используют метод GET. Идентификаторы botId и scenarioId — UUID.
/public/v1/botsbots:readСписок ботов организации. Ответ: {"data":[...]}, без пагинации. Поля включают ID, название, Telegram username, статус и даты.
/public/v1/subscriberssubscribers:readПрофили подписчиков. Ответ: {"data":[...],"nextCursor":null}. Записи относятся к конкретному боту, поэтому один Telegram-пользователь в разных ботах может встречаться несколько раз.
limit — 1–100, по умолчанию 30; cursor — следующая страница.botId — конкретный бот; q — поиск (до 120 символов); status — active или blocked./public/v1/deliveriesdeliveries:readОперационные статусы доставки без текста сообщения, chat ID и Telegram message ID. Ответ содержит data и nextCursor.
limit — 1–100; cursor — следующая страница; botId — фильтр по боту.status: pending, sent, failed, cancelled.errorCategory: telegram, network, timeout, storage, configuration, policy, unknown./public/v1/analytics/overviewanalytics:readАгрегированные показатели. Параметры: days=7|30|90 (по умолчанию 30), необязательные botId и scenarioId. Ответ содержит объект data.
/public/v1/openapi.jsonБез ключаМашиночитаемый контракт OpenAPI 3.1 для генерации клиента и сверки параметров. Этот метод доступен без авторизации.
Списки подписчиков и доставок возвращают максимум 100 элементов за запрос. Передавайте полученный nextCursor в следующий запрос, пока он не станет null. Не разбирайте курсор вручную: его формат непрозрачен и может измениться.
GET /public/v1/subscribers?limit=30&cursor=CURSOR_FROM_PREVIOUS_RESPONSE
Authorization: Bearer YOUR_API_KEYПри синхронизации храните идентификаторы записей и учитывайте, что данные могут обновиться между страницами.
Ошибки возвращаются в JSON с полем error. Проверяйте HTTP-статус, а не только тело ответа.
| Код | Когда возникает | Что делать |
|---|---|---|
400 | Неверные параметры или курсор (invalid_query, invalid_cursor) | Проверьте диапазоны, UUID и курсор предыдущей страницы. |
401 | Ключ отсутствует, недействителен, истёк или отозван | Проверьте Bearer-заголовок и создайте новый ключ при необходимости. |
403 | Нет требуемой области доступа | Создайте ключ с нужным scope; текущий ключ не расширяется. |
429 | Превышен лимит запросов | Снизьте частоту и повторите запрос с задержкой. |
5xx | Временная ошибка сервиса | Повторите с ограниченным экспоненциальным ожиданием. |
До 300 запросов в минуту на методы списка; до 120 в минуту на аналитику и OpenAPI-контракт. Не запускайте бесконечные повторы. Значения задаются на сервере и могут меняться с развитием сервиса.
Webhook отправляют события из Botnest на ваш HTTPS-адрес. Создавайте их в «Настройки → Интеграции», выбирайте события и сохраняйте секрет подписи при создании. Доступны subscriber.created, subscriber.updated, broadcast.completed, broadcast.failed, delivery.failed. В панели можно отправить тестовое событие.
{
"id": "event-id",
"type": "subscriber.created",
"createdAt": "2026-09-28T10:00:00.000Z",
"data": { "subscriberId": "subscriber-id" }
}Сверяйте X-Botnest-Timestamp и X-Botnest-Signature. Подпись имеет вид v1=HEX_HMAC_SHA256(secret, timestamp + "." + raw_body). Используйте именно исходные байты тела до JSON-разбора, сравнивайте подписи в постоянное время и отклоняйте устаревшие timestamps. Идентификаторы события id и доставки X-Botnest-Delivery помогут избежать повторной обработки.
Ответ 2xx подтверждает доставку. Временные сбои повторяются с задержкой; после исчерпания попыток запись остаётся в журнале доставки Webhook.
Public API — это запросы из вашей системы в Botnest. Исходящий Webhook — это события из Botnest в вашу систему. Telegram Webhook вашего бота настраивается сервисом отдельно.
Точный набор полей и типов опубликован в OpenAPI 3.1. В панели «Интеграции» можно скачать контракт, проверить запрос в песочнице и получить пакеты для n8n или Make.