Как подписаться на события, проверить подпись входящего запроса и настроить поведение при повторах.
Укажите URL, который будет принимать события, и список типов событий, на которые вы подписываетесь:
await hexly.webhooks.subscribe({
url: 'https://app.example.com/hooks/hexly',
events: ['order.paid', 'order.refunded']
})
{
"id": "evt_9f21ac",
"type": "order.paid",
"created_at": "2026-06-14T09:32:01Z",
"data": { "order_id": "ord_8f21a", "amount": 4200 }
}
Каждый запрос содержит заголовок X-Hexly-Signature — HMAC-SHA256 от тела запроса с использованием секретного ключа вашего проекта. Всегда проверяйте подпись перед обработкой события.
Сравнивайте подписи с помощью constant-time сравнения (например, crypto.timingSafeEqual в Node.js), а не оператором === — это защищает от атак по времени ответа.
| Попытка | Задержка перед повтором |
|---|---|
| 1 | сразу |
| 2 | 30 секунд |
| 3 | 5 минут |
| 4 | 30 минут |
| 5–10 | экспоненциально до 4 часов |
Ваш эндпоинт должен ответить кодом 2xx в течение 10 секунд — любой другой код или таймаут считается неудачной попыткой.
Поскольку при повторах возможна повторная доставка одного и того же события, используйте поле id события для дедупликации на своей стороне — сохраняйте обработанные ID хотя бы на 24 часа.