К содержанию
ДокументацияВойти

Вебхуки

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 события.