подключение защищённого канала

Partner API Введение
Version: 1.0.0

ADRUSH VPN Partner API

HTTP API для управления VPN-подписками партнёрских проектов. Создавайте пользователей в Remnawave, получайте персональные ссылки подписки для Happ и используйте собственный домен страницы подписки с брендингом.

Base URL: https://sub.adrushvpn.online/api/v1

Все запросы — JSON over HTTPS. Ответы — JSON с полем ok: true при успехе. Ошибки возвращают HTTP 4xx/5xx и объект {"detail": "…"}.

Кому доступен API: только подключённым партнёрам (tenant). Ключ выдаётся командой ADRUSH VPN при онбординге. Публичная регистрация через API недоступна.
Таймауты: метод provision обращается к панели Remnawave и может выполняться 10–90 секунд. Установите HTTP-таймаут клиента ≥ 90 с и не вызывайте provision параллельно для одного telegram_id.

Быстрый старт

Минимальная интеграция: после оплаты в вашем боте вызовите provision и отдайте пользователю subscription_url.

curl — создать пользователя
curl -sS -X POST "https://sub.adrushvpn.online/api/v1/tenant/users/provision" \
  -H "X-Tenant-Api-Key: YOUR_TENANT_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "telegram_id": 123456789,
    "expire_at": "2026-12-31T23:59:59Z",
    "max_devices": 4
  }'
Ответ 200
{
  "ok": true,
  "tenant_slug": "vpnshop",
  "telegram_id": 123456789,
  "username": "vpnshop_tg_123456789",
  "remnawave_user_uuid": "3a009f58-c9ac-4fb2-b2f0-7f9618c12f4c",
  "short_uuid": "meCnSTL7Z14je4kb",
  "subscription_url": "https://sub.uppartner.online/meCnSTL7Z14je4kb",
  "expire_at": "2026-12-31T23:59:59.000Z",
  "max_devices": 4,
  "active": true
}

Authentication

API Key: X-Tenant-Api-Key

Секретный ключ вашего tenant. Передаётся в каждом запросе в заголовке X-Tenant-Api-Key. Ключ выдаётся один раз при подключении; повторно посмотреть его нельзя — только ротация через администратора ADRUSH VPN.

Security schemeapiKey (header)
Header nameX-Tenant-Api-Key
Content-Typeapplication/json — для POST/PATCH с телом
Формат датISO 8601 UTC, напр. 2026-12-31T23:59:59Z
Безопасность: храните ключ только на сервере бота. Не вшивайте в клиентские приложения, не публикуйте в Git. При компрометации запросите ротацию ключа.
GET /tenant/me

Информация о вашем tenant: slug, squad Remnawave, домен публичной страницы подписки, лимит активных пользователей и текущее их число.

Заголовки

ПараметрОписание
X-Tenant-Api-KeyОбязательно
curl
curl -sS "https://sub.adrushvpn.online/api/v1/tenant/me" \
  -H "X-Tenant-Api-Key: YOUR_TENANT_KEY"

Ответ 200

ПолеТипОписание
slugstringИдентификатор tenant, напр. vpnshop
namestringОтображаемое имя партнёра
subscription_public_urlstringБазовый URL страницы подписки, напр. https://sub.uppartner.online
squad_uuidstringInternal Squad Remnawave (серверы VPN)
external_squad_uuidstring|nullExternal Squad — брендинг subpage
max_active_usersint|nullЛимит активных пользователей (null = без лимита)
active_usersintТекущее число пользователей с неистёкшим сроком
is_enabledboolTenant активен
POST /tenant/users/provision

Создать или обновить VPN-пользователя в Remnawave. Идемпотентно по паре tenant + telegram_id. Если пользователь уже существует — обновляет срок, лимит устройств и squads.

Тело запроса (JSON)

ПолеТипОбяз.Описание
telegram_idintegerдаID пользователя в Telegram (≥ 1). Уникален в рамках tenant
expire_atstringдаДата окончания подписки, ISO 8601 UTC
max_devicesintegerнетЛимит HWID-устройств, 1–50, по умолчанию 4

Ответ 200

Объект пользователя + subscription_url = {subscription_public_url}/{short_uuid}.

ПолеОписание
usernameЛогин в панели: {slug}_tg_{telegram_id}
short_uuidКороткий UUID для URL подписки
subscription_urlГотовая ссылка для пользователя (Happ)
activetrue, если expire_at в будущем
GET /tenant/users/{telegram_id}

Статус пользователя и ссылка подписки (из учёта tenant).

Path-параметры

telegram_idinteger — Telegram ID пользователя
curl
curl -sS "https://sub.adrushvpn.online/api/v1/tenant/users/123456789" \
  -H "X-Tenant-Api-Key: YOUR_TENANT_KEY"
PATCH /tenant/users/{telegram_id}

Частичное обновление: новый срок, лимит устройств или отключение.

Тело запроса (JSON)

ПолеТипОписание
expire_atstringНовая дата окончания (ISO 8601)
max_devicesintegerНовый лимит устройств (1–50)
activebooleanfalse — отключить VPN (disable в панели)
curl — продление
curl -sS -X PATCH "https://sub.adrushvpn.online/api/v1/tenant/users/123456789" \
  -H "X-Tenant-Api-Key: YOUR_TENANT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"expire_at": "2027-06-01T23:59:59Z", "max_devices": 4}'
POST /tenant/users/{telegram_id}/extend

Продлить подписку на N календарных дней от текущего срока (или от «сейчас», если уже истекла).

Тело запроса

daysinteger 1–3650 — число дней продления
curl
curl -sS -X POST "https://sub.adrushvpn.online/api/v1/tenant/users/123456789/extend" \
  -H "X-Tenant-Api-Key: YOUR_TENANT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"days": 30}'
POST /tenant/users/{telegram_id}/disable

Отключить доступ пользователя в Remnawave (блокировка VPN).

curl
curl -sS -X POST "https://sub.adrushvpn.online/api/v1/tenant/users/123456789/disable" \
  -H "X-Tenant-Api-Key: YOUR_TENANT_KEY"

Страница подписки

После provision пользователь открывает subscription_url — это Remnawave Subscription Page на домене партнёра (например https://sub.uppartner.online/{shortUuid}).

  • Страница отдаёт конфигурацию VLESS Reality для импорта в Happ.
  • Брендинг (логотип, цвета) задаётся через external_squad_uuid в настройках tenant.
  • Не используйте домен sub.adrushvpn.online в пользовательских ссылках — только ваш subscription_public_url.
Идентификатор пользователя: в API используйте telegram_id из Telegram Bot API (message.from_user.id). Один Telegram ID = один VPN-аккаунт в tenant.

Сценарий интеграции в боте

  1. Пользователь оплачивает тариф в вашем Telegram-боте.
  2. Вызываете POST /tenant/users/provision с telegram_id и expire_at.
  3. Из ответа берёте subscription_url и отправляете кнопкой «Подключить VPN».
  4. Пользователь импортирует подписку в Happ.
  5. При продлении — extend или повторный provision.
  6. При блокировке / chargeback — disable.

Готовый пример бота: репозиторий ADRUSH VPN, каталог partner-bot-example/.

Пример Python (httpx)

async provision
import httpx
from datetime import datetime, timedelta, timezone

BASE = "https://sub.adrushvpn.online/api/v1"
KEY = "YOUR_TENANT_KEY"

async def provision_user(telegram_id: int, days: int = 30) -> dict:
    expire = datetime.now(timezone.utc) + timedelta(days=days)
    body = {
        "telegram_id": telegram_id,
        "expire_at": expire.strftime("%Y-%m-%dT%H:%M:%S.000Z"),
        "max_devices": 4,
    }
    async with httpx.AsyncClient(timeout=90.0) as client:
        r = await client.post(
            f"{BASE}/tenant/users/provision",
            headers={"X-Tenant-Api-Key": KEY},
            json=body,
        )
        r.raise_for_status()
        return r.json()

Коды ошибок

HTTPdetailОписание
401invalid_tenant_api_keyНеверный или отозванный ключ
403tenant_disabledTenant отключён администратором
404user_not_foundПользователь не найден (сначала provision)
429tenant_quota_exceededДостигнут max_active_users
400текстНевалидные параметры, ошибка Remnawave, inactive и др.
504status_lookup_timeoutТаймаут GET user — повторите запрос

Contact

Подключение нового партнёра, ротация API-ключа, настройка домена и брендинга:

Поддержка ADRUSH VPNhttps://t.me/AdRushVpn
Telegram-бот сервисаhttps://t.me/adrushvpnBot
Health check APIGET https://sub.adrushvpn.online/health