Вебхуки
Вебхуки — это POST запросы которые AdaptGroup отправляет на ваш сервер при событиях подписки. Настройте URL и секретный ключ вебхука в дашборде.
Формат запроса
Каждый запрос вебхука имеет следующую структуру:
{
"event": "subs.created",
"timestamp": "2026-05-04T12:00:00.000Z",
"data": { ... }
}
| Поле | Тип | Описание |
|---|---|---|
event | string | Тип события |
timestamp | string | Временная метка UTC в формате ISO 8601 |
data | object | Данные события, зависят от типа события |
Аутентификация
Каждый запрос вебхука содержит заголовок X-Webhook-Signature — HMAC-SHA256 от тела запроса с использованием вашего secret.
const crypto = require('crypto');
function verifySignature(body, secret, signature) {
const expected = crypto
.createHmac('sha256', secret)
.update(body)
.digest('hex');
return expected === signature;
}
IP-адрес
Все вебхуки отправляются с IP-адреса 139.60.162.7. Добавьте его в белый список на вашем сервере чтобы гарантировать получение запросов.
Политика повторных попыток
Если ваш сервер не отвечает кодом 200 или 201, AdaptGroup повторит отправку вебхука:
| Попытка | Задержка |
|---|---|
| 1 | Немедленно |
| 2 | 1 минута |
| 3 | 2 минуты |
| 4 | 5 минут |
| 5 | 10 минут |
| 6 | 15 минут |
| 7 | 30 минут |
| 8 | 1 час |
| 9 | 2 часа |
| 10 | 2 часа |
Если вебхук не доставлен после всех попыток (~6 часов), он удаляется.
События
subs.created
Отправляется когда создана новая подписка.
| Поле | Тип | Описание |
|---|---|---|
subscription_uuid | string | UUID подписки |
subscription_url | string | URL конфигурации VPN |
plan_uuid | string | UUID плана |
external_user_id | string | null | ID пользователя в вашей системе |
devices | integer | Максимальное количество устройств |
days | integer | Срок подписки в днях |
traffic_limit_bytes | integer | null | Лимит трафика в байтах, null если безлимит |
end_date | string | Дата окончания подписки (ISO 8601) |
{
"event": "subs.created",
"timestamp": "2026-05-04T12:00:00.000Z",
"data": {
"subscription_uuid": "770fa622-a4bd-63f6-c938-668877662222",
"subscription_url": "https://network-api.adaptgroup.app/sub/770fa622-a4bd-63f6-c938-668877662222",
"plan_uuid": "550e8400-e29b-41d4-a716-446655440000",
"external_user_id": "user_123",
"devices": 3,
"days": 30,
"traffic_limit_bytes": null,
"end_date": "2026-06-04T12:00:00"
}
}
subs.renewed
Отправляется когда подписка продлена.
| Поле | Тип | Описание |
|---|---|---|
subscription_uuid | string | UUID подписки |
subscription_url | string | URL конфигурации VPN |
external_user_id | string | null | ID пользователя в вашей системе |
days | integer | Добавленные дни |
traffic_limit_bytes | integer | null | Добавленный трафик в байтах, null если план без лимита |
end_date | string | Новая дата окончания (ISO 8601) |
{
"event": "subs.renewed",
"timestamp": "2026-05-04T12:00:00.000Z",
"data": {
"subscription_uuid": "770fa622-a4bd-63f6-c938-668877662222",
"subscription_url": "https://network-api.adaptgroup.app/sub/770fa622-a4bd-63f6-c938-668877662222",
"external_user_id": "user_123",
"days": 30,
"traffic_limit_bytes": null,
"end_date": "2026-07-04T12:00:00"
}
}
subs.upgraded
Отправляется когда план подписки повышен.
| Поле | Тип | Описание |
|---|---|---|
subscription_uuid | string | UUID подписки |
subscription_url | string | URL конфигурации VPN |
external_user_id | string | null | ID пользователя в вашей системе |
old_plan_uuid | string | UUID предыдущего плана |
new_plan_uuid | string | UUID нового плана |
devices | integer | Новое максимальное количество устройств |
additional_bytes | integer | Добавленный трафик в байтах |
{
"event": "subs.upgraded",
"timestamp": "2026-05-04T12:00:00.000Z",
"data": {
"subscription_uuid": "770fa622-a4bd-63f6-c938-668877662222",
"subscription_url": "https://network-api.adaptgroup.app/sub/770fa622-a4bd-63f6-c938-668877662222",
"external_user_id": "user_123",
"old_plan_uuid": "550e8400-e29b-41d4-a716-446655440000",
"new_plan_uuid": "661f9511-f3ac-52e5-b827-557766551111",
"devices": 5,
"additional_bytes": 53687091200
}
}
subs.traffic_purchased
Отправляется когда куплен дополнительный трафик для подписки.
| Поле | Тип | Описание |
|---|---|---|
subscription_uuid | string | UUID подписки |
subscription_url | string | URL конфигурации VPN |
external_user_id | string | null | ID пользователя в вашей системе |
gb_amount | integer | Купленный объём в ГБ |
additional_bytes | integer | Купленный объём в байтах |
{
"event": "subs.traffic_purchased",
"timestamp": "2026-05-04T12:00:00.000Z",
"data": {
"subscription_uuid": "770fa622-a4bd-63f6-c938-668877662222",
"subscription_url": "https://network-api.adaptgroup.app/sub/770fa622-a4bd-63f6-c938-668877662222",
"external_user_id": "user_123",
"gb_amount": 10,
"additional_bytes": 10737418240
}
}
subs.expires_in_72_hours
Отправляется когда до окончания подписки остаётся 72 часа.
| Поле | Тип | Описание |
|---|---|---|
subscription_uuid | string | UUID подписки |
subscription_url | string | URL конфигурации VPN |
external_user_id | string | null | ID пользователя в вашей системе |
end_date | string | Дата окончания подписки (ISO 8601) |
{
"event": "subs.expires_in_72_hours",
"timestamp": "2026-05-04T12:00:00.000Z",
"data": {
"subscription_uuid": "770fa622-a4bd-63f6-c938-668877662222",
"subscription_url": "https://network-api.adaptgroup.app/sub/770fa622-a4bd-63f6-c938-668877662222",
"external_user_id": "user_123",
"end_date": "2026-05-07T12:00:00"
}
}
subs.expires_in_48_hours
Отправляется когда до окончания подписки остаётся 48 часов.
{
"event": "subs.expires_in_48_hours",
"timestamp": "2026-05-04T12:00:00.000Z",
"data": {
"subscription_uuid": "770fa622-a4bd-63f6-c938-668877662222",
"subscription_url": "https://network-api.adaptgroup.app/sub/770fa622-a4bd-63f6-c938-668877662222",
"external_user_id": "user_123",
"end_date": "2026-05-06T12:00:00"
}
}
subs.expires_in_24_hours
Отправляется когда до окончания подписки остаётся 24 часа.
{
"event": "subs.expires_in_24_hours",
"timestamp": "2026-05-04T12:00:00.000Z",
"data": {
"subscription_uuid": "770fa622-a4bd-63f6-c938-668877662222",
"subscription_url": "https://network-api.adaptgroup.app/sub/770fa622-a4bd-63f6-c938-668877662222",
"external_user_id": "user_123",
"end_date": "2026-05-05T12:00:00"
}
}
subs.expired
Отправляется когда подписка истекла.
{
"event": "subs.expired",
"timestamp": "2026-05-04T12:00:00.000Z",
"data": {
"subscription_uuid": "770fa622-a4bd-63f6-c938-668877662222",
"subscription_url": "https://network-api.adaptgroup.app/sub/770fa622-a4bd-63f6-c938-668877662222",
"external_user_id": "user_123",
"end_date": "2026-05-04T12:00:00"
}
}
subs.expired_24_hours_ago
Отправляется через 24 часа после истечения подписки.
{
"event": "subs.expired_24_hours_ago",
"timestamp": "2026-05-05T12:00:00.000Z",
"data": {
"subscription_uuid": "770fa622-a4bd-63f6-c938-668877662222",
"subscription_url": "https://network-api.adaptgroup.app/sub/770fa622-a4bd-63f6-c938-668877662222",
"external_user_id": "user_123",
"end_date": "2026-05-04T12:00:00"
}
}
subs.traffic_threshold_reached
Отправляется когда использование трафика подписки достигает настроенного порога.
| Поле | Тип | Описание |
|---|---|---|
subscription_uuid | string | UUID подписки |
subscription_url | string | URL конфигурации VPN |
external_user_id | string | null | ID пользователя в вашей системе |
used_traffic_bytes | integer | Использованный трафик в байтах |
traffic_limit_bytes | integer | Общий лимит трафика в байтах |
{
"event": "subs.traffic_threshold_reached",
"timestamp": "2026-05-04T12:00:00.000Z",
"data": {
"subscription_uuid": "770fa622-a4bd-63f6-c938-668877662222",
"subscription_url": "https://network-api.adaptgroup.app/sub/770fa622-a4bd-63f6-c938-668877662222",
"external_user_id": "user_123",
"used_traffic_bytes": 96636764160,
"traffic_limit_bytes": 107374182400
}
}