Skip to main content

Webhooks

Webhooks are POST requests sent by AdaptGroup to your server when subscription events occur. Configure your webhook URL and secret in the dashboard.

Request format​

Each webhook request has the following structure:

{
"event": "subs.created",
"timestamp": "2026-05-04T12:00:00.000Z",
"data": { ... }
}
FieldTypeDescription
eventstringEvent type
timestampstringUTC timestamp in ISO 8601 format
dataobjectEvent payload, varies by event type

Authentication​

Each webhook request includes an X-Webhook-Signature header — HMAC-SHA256 of the request body using your secret.

const crypto = require('crypto');

function verifySignature(body, secret, signature) {
const expected = crypto
.createHmac('sha256', secret)
.update(body)
.digest('hex');
return expected === signature;
}

IP address​

All webhooks are sent from IP address 139.60.162.7. Add it to your server's allowlist to ensure webhook delivery.

Retry policy​

If your server does not respond with 200 or 201, AdaptGroup will retry the webhook:

AttemptDelay
1Immediately
21 minute
32 minutes
45 minutes
510 minutes
615 minutes
730 minutes
81 hour
92 hours
102 hours

If the webhook is not delivered after all attempts (~6 hours total), it is discarded.


Events​

subs.created​

Sent when a new subscription is created.

FieldTypeDescription
subscription_uuidstringSubscription UUID
subscription_urlstringVPN configuration URL
plan_uuidstringPlan UUID
external_user_idstring | nullYour system's user ID
devicesintegerMaximum number of devices
daysintegerSubscription duration in days
traffic_limit_bytesinteger | nullTraffic limit in bytes, null if unlimited
end_datestringSubscription end date (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​

Sent when a subscription is renewed.

FieldTypeDescription
subscription_uuidstringSubscription UUID
subscription_urlstringVPN configuration URL
external_user_idstring | nullYour system's user ID
daysintegerAdded days
traffic_limit_bytesinteger | nullAdded traffic in bytes, null if plan has no limit
end_datestringNew end date (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​

Sent when a subscription plan is upgraded.

FieldTypeDescription
subscription_uuidstringSubscription UUID
subscription_urlstringVPN configuration URL
external_user_idstring | nullYour system's user ID
old_plan_uuidstringPrevious plan UUID
new_plan_uuidstringNew plan UUID
devicesintegerNew maximum number of devices
additional_bytesintegerAdditional traffic added in bytes
{
"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​

Sent when additional traffic is purchased for a subscription.

FieldTypeDescription
subscription_uuidstringSubscription UUID
subscription_urlstringVPN configuration URL
external_user_idstring | nullYour system's user ID
gb_amountintegerPurchased amount in GB
additional_bytesintegerPurchased amount in bytes
{
"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​

Sent when a subscription expires in 72 hours.

FieldTypeDescription
subscription_uuidstringSubscription UUID
subscription_urlstringVPN configuration URL
external_user_idstring | nullYour system's user ID
end_datestringSubscription end date (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​

Sent when a subscription expires in 48 hours.

{
"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​

Sent when a subscription expires in 24 hours.

{
"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​

Sent when a subscription expires.

{
"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​

Sent 24 hours after a subscription has expired.

{
"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​

Sent when a subscription's traffic usage reaches the configured threshold.

FieldTypeDescription
subscription_uuidstringSubscription UUID
subscription_urlstringVPN configuration URL
external_user_idstring | nullYour system's user ID
used_traffic_bytesintegerTraffic used in bytes
traffic_limit_bytesintegerTotal traffic limit in bytes
{
"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
}
}
© 2026 ОсОО «Глобал Бридж». All rights reserved.
ОГРН: 309678-3301-ООО · ИНН: 9909704508
Кыргызская Республика, г. Бишкек, Октябрьский район, улица Юнусалиева 185/1
Back to top