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

REST API для уведомлений через Telegram и Max. Подписчики, OTP, рассылки, формы, helpdesk.

Гайды

Пошаговые сценарии по типовым задачам. Каждый гайд — самодостаточный рецепт от первого запроса до результата.

Интеграция за 5 минут

Создайте проект в кабинете, подключите Telegram-бота и скопируйте API-ключ (zn_live_...). Бот появляется у подписчиков после команды /start — каждый /start создаёт подписку. Получите subscriber_id через GET /v1/subscribers и отправьте первое сообщение:

curl -X POST https://api.zapnoty.com/v1/send \
-H "Authorization: Bearer zn_live_..." \
-H "Content-Type: application/json" \
-d '{"subscriber_id":"550e8400-...","text":"Привет!"}'

Готово — сообщение доставлено. Дальше: шаблоны, медиа, кнопки — см. раздел «Отправка».

OTP-авторизация пользователей

Замените SMS-коды на бесплатную доставку через Telegram/Max. Zapnoty генерирует код, отправляет его подписчику и проверяет ввод. Поле purpose разделяет коды для разных сценариев (login, payment).

POST /v1/otp/send { "subscriber_id": "...", "purpose": "login" }
POST /v1/otp/verify { "subscriber_id": "...", "code": "123456", "purpose": "login" }
→ { "verified": true }

Лимит — 3 кода в час на подписчика. Длина кода (4/6/8) и TTL настраиваются. Для неподписанных пользователей есть flow /v1/otp/request с deeplink.

Массовые рассылки и сегментация

Рассылка фильтрует аудиторию по тегам и разрешениям. tags_all — все теги (AND), tags_any — хотя бы один (OR), exclude_tags — исключения. Перед отправкой добавьте dry_run: true, чтобы увидеть размер аудитории и оценку кредитов.

POST /v1/broadcast
{
"text": "Новость для VIP",
"tags_all": ["vip"],
"exclude_tags": ["unsubscribed_promo"],
"permission": "marketing"
}

Статус — GET /v1/broadcast/{job_id}, отмена — DELETE. messages_per_minute «размазывает» крупную рассылку во времени.

Drip-автоматизация и события

Drip-цепочка отправляет серию сообщений по триггеру. Триггер event запускает цепочку при вызове /v1/events/track — это аналог Customer.io: трекайте действия пользователя (signup, lesson_started, cart_updated) и стройте на них автоматизацию. cancel_on_events останавливает цепочку (покупка отменяет abandoned cart).

POST /v1/drip-chains
{
"name": "Onboarding",
"trigger": "event",
"trigger_value": "signup",
"steps": [
{ "delay_minutes": 0, "text": "Добро пожаловать" },
{ "delay_minutes": 1440, "text": "Совет дня" }
]
}
POST /v1/events/track { "subscriber_id": "...", "event": "signup" }

Свойства события доступны в шаблоне как {{event.ключ}}. properties_match фильтрует запуск по свойствам.

Приём вебхуков

Вебхуки уведомляют ваш сервер о событиях (доставка, отписка, ответ в тикете). Создайте эндпоинт через /v1/webhooks, укажите URL и события. Каждый запрос подписан заголовком X-Zapnoty-Signature (HMAC-SHA256 от «timestamp.body») — обязательно проверяйте подпись:

// Проверка подписи X-Zapnoty-Signature (Node)
import crypto from 'crypto';
// header: "t=<unix_ts>,v1=<hex>[,v1=<hex>]"
function verify(secret, header, body) {
const parts = header.split(',');
const ts = parts.find(p => p.startsWith('t='))?.slice(2);
const expected = crypto.createHmac('sha256', secret)
.update(ts + '.' + body).digest('hex');
return parts.some(p => p === 'v1=' + expected);
}

Невалидные ответы ретраятся до 24 часов по Stripe-расписанию. Журнал доставок — в кабинете. Подробнее — раздел «Вебхуки».

Связанные разделы