API v1

Документация API

Alerto API позволяет отправлять уведомления из ваших проектов в каналы, группы и личные чаты. Сообщения могут содержать текст, медиа, JSON и интерактивные кнопки с callback webhook.

Base URL: https://api.alerto.cc/v1

Быстрый старт

  1. Зарегистрируйтесь и создайте бота в dashboard
  2. Получите API-токен в ответе POST /bots
  3. Отправьте POST-запрос на /messages
  4. Настройте webhook URL для получения callback при нажатии кнопок

Аутентификация

Все запросы к API бота авторизуются через Bearer-токен в заголовке Authorization.

Authorization: Bearer alt_your_bot_token

Токен выдаётся в ответе POST /bots при создании бота и не отображается в интерфейсе. Сохраните его сразу в переменных окружения.

Никогда не публикуйте токен в открытом репозитории. Используйте переменные окружения.

Боты

Бот — точка входа для API. Один бот = один токен = один webhook URL для callback. У бота два поля: название (любой текст для интерфейса) и slug (латиница, цифры, дефис — идентификатор для API, например deploy-bot). Webhook URL настраивается только через API (PATCH /bots/{bot_id}), в интерфейсе отображается для просмотра.

POST /bots

Создать бота (требуется user JWT)

Тело запроса

{
  "title": "Deploy Bot",
  "slug": "deploy-bot",
  "webhook_url": "https://api.example.com/webhooks/alerto",
  "description": "Уведомления о деплоях"
}

Ответ 201

{
  "id": "bot_deploy_bot",
  "title": "Deploy Bot",
  "slug": "deploy-bot",
  "token": "alt_...",
  "webhook_url": "https://api.example.com/webhooks/alerto",
  "created_at": "2026-03-15T10:00:00Z"
}
GET /bots/{bot_id}

Получить информацию о боте. Токен можно посмотреть в информации о боте в dashboard; через API не возвращается.

PATCH /bots/{bot_id}

Обновить webhook URL (только через API) или описание

Сообщения

Основной endpoint для отправки уведомлений. Укажите получателя через одно из полей: channel, group, user_id или chat_id.

POST /messages

Отправить сообщение

Параметры

ПолеТипОписание
channelstringSlug канала (например, production)
groupstringID группы (group_id из dashboard или API)
user_idstringID пользователя для личного сообщения
textstringТекст сообщения (markdown-lite, HTML не поддерживается)
image_urlstringURL изображения
file_urlstringURL файла
dataobjectПроизвольный JSON, отображается в деталях
buttonsarrayМассив кнопок (см. Кнопки)

Пример запроса

{
  "channel": "production",
  "text": "Деплой api-v2.4.1 завершён успешно",
  "image_url": "https://cdn.example.com/deploy.png",
  "buttons": [
    {"id": "rollback", "label": "Откатить", "style": "danger"},
    {"id": "show_logs", "label": "Логи"},
    {"id": "details", "label": "Детали"}
  ]
}

Ответ 201

{
  "id": "msg_8f3a2b1c",
  "bot": "deploy-bot",
  "channel": "production",
  "text": "Деплой api-v2.4.1 завершён успешно",
  "created_at": "2026-03-15T14:32:00Z"
}
GET /messages/{message_id}

Получить сообщение по ID

Кнопки

Кнопки отображаются под сообщением. При нажатии Alerto отправляет webhook на URL бота.

Формат кнопки

ПолеТипОписание
idstringУникальный ID (передаётся в webhook)
labelstringТекст на кнопке
stylestringdefault, danger, success (опционально)
urlstringЕсли указан — кнопка-ссылка, webhook не отправляется
"buttons": [
  {"id": "approve", "label": "Подтвердить", "style": "success"},
  {"id": "reject", "label": "Отклонить", "style": "danger"},
  {"id": "docs", "label": "Документация", "url": "https://docs.example.com"}
]

Webhooks

При нажатии кнопки (без url) Alerto отправляет POST на webhook_url бота.

Payload callback

{
  "event": "button.click",
  "timestamp": "2026-03-15T14:33:12Z",
  "bot": "deploy-bot",
  "message_id": "msg_8f3a2b1c",
  "channel": "production",
  "button": {
    "id": "show_logs",
    "label": "Логи"
  },
  "user": {
    "id": "usr_42",
    "email": "alex@@alerto.cc",
    "name": "Александр"
  },
  "data": {}
}

Подпись запроса

Каждый webhook содержит заголовок X-Alerto-Signature — HMAC-SHA256 тела запроса с секретом бота.

X-Alerto-Signature: sha256=abc123...

Ожидаемый ответ

Ваш сервер должен ответить 200 OK в течение 10 секунд. При ошибке Alerto повторит доставку до 3 раз с экспоненциальной задержкой.

GET /webhooks/logs

Получить логи webhook-доставок бота

Каналы и группы

Каналы и группы создаются в dashboard. У канала два поля: название (любой текст для интерфейса) и slug (латиница, цифры, дефис — идентификатор для API, например production). В запросах API используется slug, не название. У группы только название — любой текст; для API используется внутренний group_id. Участников добавляют в одно поле: email пользователя или имя бота и права доступа. В один канал можно добавить неограниченное количество ботов; для отправки через API боту нужно право «Отправка».

POST /channels

Создать канал (поля title и slug)

{
  "title": "Production-алерты",
  "slug": "production"
}
POST /channels/{slug}/members

Добавить пользователя (email) или бота (имя) в канал

{
  "type": "user",
  "key": "maria@@company.com",
  "permissions": {"read": true, "post": true, "manage": false}
}

{
  "type": "bot",
  "key": "deploy-bot",
  "permissions": {"read": true, "post": true}
}
POST /groups

Создать группу (поле title)

{
  "title": "Команда backend"
}
Канал vs группа: канал — для broadcast-уведомлений от ботов; группа — для командного чата, пользователи тоже могут писать сообщения.

Real-time (SSE)

Подключитесь к SSE-потоку для получения новых сообщений в реальном времени в dashboard и клиентских приложениях.

GET https://api.alerto.cc/v1/stream/messages

Заголовки: Authorization: Bearer USER_JWT, Accept: text/event-stream.

События

Поле event в dataОписание
message.createdНовое сообщение в канале/группе/чате
message.updatedСообщение обновлено (например, после нажатия кнопки)
event: stream
data: {"event":"message.created","threads":[{"type":"channel","id":"production"}],"message":{"id":"msg_8f3a2b1c","text":"Деплой завершён","author":"Deploy Bot"}}

Ошибки

API возвращает JSON с полем error при ошибках.

{
  "error": {
    "code": "invalid_token",
    "message": "Invalid or expired bot token"
  }
}
КодHTTPОписание
invalid_token401Неверный или истёкший токен
forbidden403Нет доступа к каналу/группе
not_found404Ресурс не найден
validation_error422Ошибка валидации полей
rate_limited429Превышен лимит запросов

Лимиты

ПараметрFreePro
Сообщений / месяц1 00050 000
Ботов110
Кнопок в сообщении510
Размер текста4 096 символов16 384
Rate limit60 req/min300 req/min