Skip to main content

Настройка webhooks

У аккаунта может быть не более одной webhook-подписки. События не выбираются при создании: после подписки доставляются все поддерживаемые типы уведомлений. Управление — отдельными command-эндпоинтами (создание, смена URL, ротация секрета, отключение, включение, удаление).

Создание подписки

POST /v2/b2b/webhooks — в теле обязательны url и secret (HMAC-SHA256, 16–256 символов). Повторное создание при уже существующей подписке даёт 409.
Пример ответа (201):

Список подписок

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. Заголовок подписи:
Проверка подписи:
  1. Получите значение заголовка X-Webhook-Signature
  2. Извлеките подпись (часть после sha256=)
  3. Вычислите HMAC-SHA256 от тела запроса (raw body) с использованием актуального секрета
  4. Сравните вычисленную подпись с полученной
Важно:
  • Всегда проверяйте подпись перед обработкой уведомления
  • Используйте безопасное сравнение подписей (constant-time comparison)
  • Храните секрет вне кода и репозитория

Требования к endpoint

Ваш webhook endpoint должен:
  • Быть доступен по HTTPS
  • Возвращать статус 200 при успешном приёме
  • Обрабатывать запросы быстро (при необходимости — асинхронно после ответа 200)
  • Быть идемпотентным: одно и то же уведомление может прийти повторно

Обработка ошибок

Ответы вашего endpoint

  • 200 OK — уведомление принято
  • 400 / 500 — возможны повторные попытки доставки со стороны API

Повторные попытки

При ошибке или таймауте API может повторить отправку с экспоненциальной задержкой.

Авторизация

Для вызовов API управления подписками нужен scope webhooks в Bearer-токене:
Подробнее: авторизация.

Ограничения

  • Не более одной webhook-подписки на аккаунт
  • Максимальный размер тела уведомления: 64 KB
  • Таймаут ожидания ответа от вашего endpoint: 30 секунд

Поддержка

  1. Проверьте логи webhook endpoint
  2. Убедитесь, что URL доступен по HTTPS и отвечает 200
  3. Проверьте подпись уведомлений
  4. Обратитесь в поддержку с request_id из ответов API