Ваш сайт или программа сама выдаёт подписки из нашего VPN. Нужен разработчик.
/api/v1/vpn/webhookСекрет подписи возьмите в кабинете (раздел «Ключ и вебхук»). Проверяйте подпись:
X-Signature: sha256=hex(HMAC-SHA256(secret, raw_body)), сравнение
constant-time по сырым байтам тела до разбора JSON.
successbooleantrue у любого успешного ответа.
urlstring | nullАдрес доставки; null, если вебхук не задан.
eventsstring[] | nullНа какие события подписан адрес. null: на все, включая будущие.
is_activebooleanИдёт ли доставка.
secret_setbooleanВыпущен ли секрет подписи (сам секрет есть только в кабинете).
all_eventsstring[]Все события, на которые можно подписаться.
last_success_atstring | nullПоследняя успешная доставка.
last_failure_atstring | nullПоследняя неудачная доставка.
consecutive_failuresintegerСколько доставок подряд не удалось.
401unauthorized: Неверный или отсутствующий API-ключ403api_disabled: Доступ к API для этого аккаунта закрыт; ip_not_allowed: Адрес запроса не входит в список разрешённых422validation_error: Неверные параметры запроса429rate_limited: Слишком много запросов503upstream_unavailable: Поставщик VPN временно недоступенПодставится в примеры и в запрос. Хранится только в этом браузере.
curl -X PUT https://api.relayhub.surf/api/v1/vpn/webhook \
-H "Authorization: Bearer <YOUR_API_KEY>"Запрос меняет данные или списывает деньги: выполняйте его из своего кода.
{
"success": true,
"url": "https://example.com/vpn-webhook",
"events": [
"deposit.credited",
"subscription.expired",
"subscription.expires_in_24h"
],
"is_active": true,
"secret_set": true,
"all_events": [
"subscription.created",
"subscription.renewed",
"subscription.upgraded",
"subscription.traffic_purchased",
"subscription.frozen",
"subscription.unfrozen",
"subscription.expires_in_72h",
"subscription.expires_in_48h",
"subscription.expires_in_24h",
"subscription.expired",
"subscription.traffic_threshold",
"deposit.credited"
],
"last_success_at": "2026-09-02T12:07:01Z",
"last_failure_at": null,
"consecutive_failures": 0
}successbooleantrue у любого успешного ответа.
urlstring | nullАдрес доставки; null, если вебхук не задан.
eventsstring[] | nullНа какие события подписан адрес. null: на все, включая будущие.
is_activebooleanИдёт ли доставка.
secret_setbooleanВыпущен ли секрет подписи (сам секрет есть только в кабинете).
all_eventsstring[]Все события, на которые можно подписаться.
last_success_atstring | nullПоследняя успешная доставка.
last_failure_atstring | nullПоследняя неудачная доставка.
consecutive_failuresintegerСколько доставок подряд не удалось.