Вебхуки
VERYO сообщает вашему серверу о доставке и подтверждении кода, поэтому опрашивать API не нужно. Адрес, события и секрет задаются в кабинете, в разделе Вебхуки. Там же можно отправить тестовое событие webhook.test и посмотреть журнал доставок.
Адрес должен начинаться с https:// и не вести во внутреннюю сеть.
События
| Событие | Когда | Поля data |
|---|---|---|
verification.delivered |
Канал доставил код | verification_id, phone, channel, cost_tiyn |
verification.verified |
Пользователь ввёл верный код | verification_id, phone, status |
verification.failed |
Кончились попытки ввода или каналы | verification_id, phone, status; reason, если не удалась доставка |
correlation_id добавляется в data, если был передан в запросе. Об истечении срока кода событие не отправляется.
{
"id": "evt_1a2b3c4d5e6f70819a2b",
"type": "verification.delivered",
"created_at": "2026-11-08T10:00:03Z",
"data": {
"verification_id": "vrf_8c1f04a2b7d93e6f5a10",
"phone": "+77011234567",
"channel": "telegram",
"cost_tiyn": 900,
"correlation_id": "order-42"
}
}
Проверка подписи
| Заголовок | Значение |
|---|---|
X-Veryo-Event-Id |
Идентификатор события |
X-Veryo-Timestamp |
Время отправки, Unix-секунды |
X-Veryo-Signature |
sha256= и hex от HMAC-SHA256(секрет, "<timestamp>.<сырое тело>") |
Подпись считается по сырому телу запроса, до разбора JSON:
import { createHmac, timingSafeEqual } from 'node:crypto'
function verify(rawBody, timestamp, signature, secret) {
const hash = createHmac('sha256', secret).update(`${timestamp}.${rawBody}`).digest('hex')
const expected = Buffer.from(`sha256=${hash}`)
const got = Buffer.from(signature)
return got.length === expected.length && timingSafeEqual(got, expected)
}
Секрет выдаётся при первом сохранении настроек. При ротации в кабинете старый секрет перестаёт действовать сразу.
Ответ и повторы
Ответьте кодом 2xx за 10 секунд. Редиректы не выполняются. После неудачи VERYO повторит отправку через 1 минуту, 5 минут, 30 минут, 2 часа, 6 часов и 15 часов — всего 7 попыток.
Доставка работает по принципу «хотя бы раз»: одно событие может прийти дважды. Отсекайте дубли по
idсобытия.