Настройка webhooks
Для начала работы с webhooks необходимо создать подписку на события через API.Создание подписки
Для создания подписки на webhook используйте endpointPOST /v2/webhooks:
url(обязательно): URL endpoint для приёма webhook-уведомлений. Должен быть доступен по HTTPS и возвращать статус 200 при получении уведомления.events(обязательно): Массив типов событий, на которые необходимо подписаться. Минимум одно событие.secret(опционально): Секретный ключ для подписи webhook-уведомлений. Рекомендуется использовать для проверки подлинности уведомлений. Длина от 16 до 256 символов.
Получение списка подписок
Для получения списка всех ваших подписок используйте endpointGET /v2/webhooks:
Получение информации о подписке
Для получения информации о конкретной подписке используйте endpointGET /v2/webhooks/{webhookID}:
Обновление подписки
Для обновления подписки (изменение URL, списка событий или секретного ключа) используйте endpointPATCH /v2/webhooks/{webhookID}:
url: Новый URL endpoint для приёма webhook-уведомленийevents: Новый список событий для подпискиsecret: Новый секретный ключ для подписи уведомленийactive: Флаг активности подписки. Еслиfalse, уведомления не будут отправляться, но подписка сохранится
Удаление подписки
Для удаления подписки используйте endpointDELETE /v2/webhooks/{webhookID}:
Формат webhook-уведомлений
Все webhook-уведомления отправляются в формате JSON и содержат следующую структуру:Поля уведомления
event(обязательно): Тип события. Используйте это поле для определения, как обрабатывать уведомление. Доступные события:booking.status.changed— изменение статуса бронированияpass.status.changed— изменение статуса прохода
timestamp(обязательно): Время возникновения события в формате ISO 8601 (UTC).data(обязательно): Данные события. Структура зависит от типа события.
Безопасность
Проверка подлинности уведомлений
Для обеспечения безопасности рекомендуется использовать секретный ключ для подписи webhook-уведомлений. При указанииsecret при создании или обновлении подписки, все уведомления будут подписаны с использованием HMAC-SHA256.
Заголовок подписи:
Подпись передаётся в заголовке X-Webhook-Signature:
- Получите значение заголовка
X-Webhook-Signature - Извлеките подпись (часть после
sha256=) - Вычислите HMAC-SHA256 от тела запроса (raw body) с использованием вашего секретного ключа
- Сравните вычисленную подпись с полученной подписью
- Всегда проверяйте подпись перед обработкой уведомления
- Используйте безопасное сравнение подписей (constant-time comparison) для предотвращения timing attacks
- Храните секретный ключ в безопасном месте (не в коде)
Требования к endpoint
Ваш webhook endpoint должен:- Быть доступен по HTTPS: Webhook-уведомления отправляются только на HTTPS endpoints
- Возвращать статус 200: При успешном получении уведомления endpoint должен возвращать HTTP статус 200
- Обрабатывать запросы быстро: Рекомендуется обрабатывать уведомления асинхронно, чтобы не блокировать ответ
- Быть идемпотентным: Одно и то же уведомление может быть отправлено несколько раз, ваша система должна корректно обрабатывать повторные уведомления
Обработка ошибок
Ответы вашего endpoint
Ваш webhook endpoint должен возвращать следующие HTTP статусы:- 200 OK: Уведомление успешно получено и обработано
- 400 Bad Request: Некорректный формат уведомления (не рекомендуется возвращать, лучше логировать)
- 500 Internal Server Error: Внутренняя ошибка обработки (API может повторить отправку)
Повторные попытки
Если ваш endpoint возвращает ошибку (не 200) или не отвечает в течение таймаута, API может повторить отправку уведомления. Повторные попытки выполняются с экспоненциальной задержкой. Рекомендации:- Всегда возвращайте 200 OK после успешной обработки уведомления
- Обрабатывайте ошибки внутри вашего endpoint и возвращайте 200 OK, даже если обработка не удалась (логируйте ошибки для последующего анализа)
- Используйте очереди сообщений для асинхронной обработки уведомлений
Авторизация
Для работы с webhooks требуется scopewebhooks в вашем Bearer токене. Убедитесь, что при получении токена вы указали этот scope:
Ограничения
- Максимальный размер тела webhook-уведомления: 64 KB
- Таймаут ожидания ответа от вашего endpoint: 30 секунд
- Максимальное количество подписок на один партнёра: 100
Поддержка
При возникновении проблем с webhooks:- Проверьте логи вашего webhook endpoint
- Убедитесь, что endpoint доступен по HTTPS и возвращает статус 200
- Проверьте подпись уведомлений (если используется)
- Обратитесь в поддержку с
request_idиз ответов API