Настройка webhooks
У аккаунта может быть не более одной webhook-подписки. События не выбираются при создании: после подписки доставляются все поддерживаемые типы уведомлений. Управление — отдельными command-эндпоинтами (создание, смена URL, ротация секрета, отключение, включение, удаление).Создание подписки
POST /v2/b2b/webhooks — в теле обязательны url и secret (HMAC-SHA256, 16–256 символов). Повторное создание при уже существующей подписке даёт 409.
Список подписок
GET /v2/b2b/webhooks — в ответе 0 или 1 элемент в data (ограничение «одна подписка на аккаунт»).
Получение подписки
GET /v2/b2b/webhooks/{webhookID}
Изменение URL
POST /v2/b2b/webhooks/{webhookID}/change-url — в теле url.
Ротация секрета
POST /v2/b2b/webhooks/{webhookID}/rotate-secret — в теле secret (новый); опционально grace_period_seconds (по умолчанию 60, диапазон 60–2592000). Старый секрет остаётся валидным на время grace-периода.
Приостановка доставки
POST /v2/b2b/webhooks/{webhookID}/disable — тело опционально, можно передать reason для аудита.
Возобновление доставки
POST /v2/b2b/webhooks/{webhookID}/enable
Удаление подписки
DELETE /v2/b2b/webhooks/{webhookID}
Формат webhook-уведомлений
Все webhook-уведомления отправляются в формате JSON и содержат следующую структуру:Поля уведомления
event(обязательно): тип события:booking.status.changed— изменение статуса бронированияpass.status.changed— изменение статуса прохода
timestamp(обязательно): время события в ISO 8601 (UTC).data(обязательно): данные события, структура зависит от типа.
Безопасность
Проверка подлинности уведомлений
При создании подписки задаётсяsecret; при необходимости его меняют через rotate-secret. Уведомления подписываются HMAC-SHA256, значение передаётся в заголовке X-Webhook-Signature.
Заголовок подписи:
- Получите значение заголовка
X-Webhook-Signature - Извлеките подпись (часть после
sha256=) - Вычислите HMAC-SHA256 от тела запроса (raw body) с использованием актуального секрета
- Сравните вычисленную подпись с полученной
- Всегда проверяйте подпись перед обработкой уведомления
- Используйте безопасное сравнение подписей (constant-time comparison)
- Храните секрет вне кода и репозитория
Требования к endpoint
Ваш webhook endpoint должен:- Быть доступен по HTTPS
- Возвращать статус 200 при успешном приёме
- Обрабатывать запросы быстро (при необходимости — асинхронно после ответа 200)
- Быть идемпотентным: одно и то же уведомление может прийти повторно
Обработка ошибок
Ответы вашего endpoint
- 200 OK — уведомление принято
- 400 / 500 — возможны повторные попытки доставки со стороны API
Повторные попытки
При ошибке или таймауте API может повторить отправку с экспоненциальной задержкой.Авторизация
Для вызовов API управления подписками нужен scopewebhooks в Bearer-токене:
Ограничения
- Не более одной webhook-подписки на аккаунт
- Максимальный размер тела уведомления: 64 KB
- Таймаут ожидания ответа от вашего endpoint: 30 секунд
Поддержка
- Проверьте логи webhook endpoint
- Убедитесь, что URL доступен по HTTPS и отвечает 200
- Проверьте подпись уведомлений
- Обратитесь в поддержку с
request_idиз ответов API