Ваш сайт или программа сама выдаёт подписки из нашего VPN. Нужен разработчик.
/api/v1/vpn/subscriptions/{subscription_id}/addonsТрафик для лимитных серверов или +15 устройств к подписке «Навсегда». Варианты и
цены в lifetime.addons (GET /plans). Купленный трафик не сгорает и прибавляется к
остатку. Подписке на срок трафик докупается через /traffic.
Ваш идентификатор операции, уникальный в рамках аккаунта. Повтор запроса с тем же custom_id вернёт результат первой попытки без повторного списания.
Докупка из lifetime.addons в GET /plans: gb_50, gb_200, gb_1000, gb_2000 или devices_15.
successbooleantrue у любого успешного ответа.
custom_idstringВаш custom_id операции, как в запросе.
subscriptionobjectПодписка после операции.
charged_minorintegerСколько списано с депозита за эту операцию, в центах.
charged_usdstringТо же, строкой для показа.
balance_after_minorintegerСколько осталось потратить (spendable) после списания, в центах.
balance_after_usdstringТо же, строкой для показа.
addon_idstringКупленная докупка, как в запросе.
idempotent_replaybooleanЕсть только в ответе на повтор с тем же custom_id: true, это результат первой попытки, деньги второй раз не списаны.
401unauthorized: Неверный или отсутствующий API-ключ402insufficient_balance: Недостаточно средств на депозите403api_disabled: Доступ к API для этого аккаунта закрыт; ip_not_allowed: Адрес запроса не входит в список разрешённых404subscription_not_found: Подписка не найдена409unsupported_for_product: Это действие не подходит к этому виду подписки; addon_unavailable: Эту докупку сейчас нельзя оформить; max_charge_exceeded: Цена операции выше max_charge_minor; custom_id_conflict: Этот custom_id уже использован с другими параметрами; operation_in_progress: Операция с этим custom_id ещё выполняется422validation_error: Неверные параметры запроса429rate_limited: Слишком много запросов503upstream_unavailable: Поставщик VPN временно недоступенПодставится в примеры и в запрос. Хранится только в этом браузере.
curl -X POST https://api.relayhub.surf/api/v1/vpn/subscriptions/<subscription_id>/addons \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"custom_id": "11111111-1111-4111-8111-111111111111",
"addon_id": "gb_200"
}'Запрос меняет данные или списывает деньги: выполняйте его из своего кода.
{
"success": true,
"custom_id": "11111111-1111-4111-8111-111111111111",
"subscription": {
"subscription_id": "01a06315-1270-705a-8d4c-58fea607bf2c",
"client_id": "01a06310-8f2b-7c11-9a3e-2b5c7d9e1f00",
"external_user_id": "user-42",
"telegram_id": null,
"bot_id": null,
"source": "api",
"plan_uuid": "3f0b2c1e-9a4d-5e6f-8a7b-1c2d3e4f5a6b",
"plan_name": "Навсегда",
"is_trial": false,
"product": "lifetime",
"is_lifetime": true,
"status": "active",
"subscription_url": "https://api.relayhub.surf/sub/wnT9NRf0Zk6McRRnp2nggc3K",
"days": 36500,
"days_left": null,
"devices": 15,
"traffic_limit_bytes": 295279001600,
"auto_renew": false,
"renewal_count": 0,
"renewal_progress": 0,
"created_at": "2026-09-02T12:00:00Z",
"end_date": "2100-01-01T00:00:00Z",
"frozen_at": null,
"price_minor": 1001,
"price_usd": "10.01"
},
"charged_minor": 320,
"charged_usd": "3.20",
"balance_after_minor": 11730,
"balance_after_usd": "117.30",
"addon_id": "gb_200"
}successbooleantrue у любого успешного ответа.
custom_idstringВаш custom_id операции, как в запросе.
subscriptionobjectПодписка после операции.
charged_minorintegerСколько списано с депозита за эту операцию, в центах.
charged_usdstringТо же, строкой для показа.
balance_after_minorintegerСколько осталось потратить (spendable) после списания, в центах.
balance_after_usdstringТо же, строкой для показа.
addon_idstringКупленная докупка, как в запросе.
idempotent_replaybooleanЕсть только в ответе на повтор с тем же custom_id: true, это результат первой попытки, деньги второй раз не списаны.