AlorVPN B2B White Label API

Техническая документация по интеграции VPN-инфраструктуры для ваших ботов, сайтов и CRM-систем. Управляйте серверами и доступом не отвлекаясь на настройки нод.

Общие сведения

Наше White Label API позволяет вам продавать или выдавать VPN-подписки сторонним клиентам, используя мощности нашей глобальной сети серверов. Вы полностью управляете тарифами, брендингом и логикой во внешнем проекте, в то время как AlorVPN берет на себя всю техническую часть:

Авторизация запросов

Все запросы к нашему API должны выполняться по протоколу HTTPS на базовый URL https://api.alorvpn.fun.

Каждое обращение к API должно сопровождаться обязательным HTTP-заголовком с секретным API-ключом партнера:

X-API-Key: alor-partner-xxxxxxxxxxxxxxxxxxxxx

API-ключ партнера регистрируется администратором в панели управления бота.

Создание подписки

POST /api/v1/external/subscription/create

Метод регистрирует новую VPN-подписку в системе, генерирует уникальный UUID и возвращает готовые конфигурации серверов.

Параметры запроса (JSON):

Параметр Тип Обяз. Описание
plan_days integer нет Срок подписки в днях. По умолчанию 30 дней.
uuid string нет Ваш кастомный UUID. Если не указан, сгенерируется автоматически.
whitelist_traffic_gb integer нет Лимит трафика на Whitelist-серверах в целых гигабайтах. Если параметр не передан, подписка создаётся без лимита.
names / rename string нет Переименование серверов. Формат: id:НовоеИмя,id2:Имя2 (например: germany:🇩🇪 Германия VIP,finland:🇫🇮 Финляндия).
limit integer нет Лимит на количество возвращаемых серверов в подписке.
prefix / suffix string нет Префикс или суффикс для добавления ко всем именам серверов (например: "prefix": "[AlorVPN] ").
order string нет Кастомная сортировка серверов по ID через запятую (например: germany,finland).
include / nodes string нет Белый список разрешенных ID серверов через запятую. Остальные будут скрыты.
exclude / exclude_nodes string нет Черный список скрываемых ID серверов через запятую.
only_rf / only_regular boolean / string нет Если true, оставляет только сервера обхода глушилок (only_rf) или только стандартные сервера (only_regular).

Пример запроса с кастомизацией (curl):

curl -X POST https://api.alorvpn.fun/api/v1/external/subscription/create   -H "X-API-Key: alor-partner-ваш_ключ"   -H "Content-Type: application/json"   -d '{
    "plan_days": 30,
    "whitelist_traffic_gb": 100,
    "names": "germany:🇩🇪 VIP Berlin,finland:🇫🇮 VIP Helsinki",
    "prefix": "⚡ ",
    "limit": 3,
    "only_regular": "true"
  }'

Ответ при успешном создании (200 OK):

{
  "ok": true,
  "token": "7a3f8b9c2d1e...", 
  "uuid": "4f55dbbb-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "subscription_url": "https://sub.alorvpn.fun/sub/7a3f8b9c2d1e...",
  "expires_at": "2026-06-22T20:00:00.000000+00:00",
  "plan_days": 30,
  "traffic": {
    "scope": "whitelist",
    "limit_gb": 100,
    "used_gb": 0,
    "remaining_gb": 100,
    "exhausted": false
  },
  "vless_links": [
    "trojan://4f55dbbb-xxxx-xxxx-xxxx-xxxxxxxxxxxx@de.alorvpn.fun:443?security=reality...",
    "trojan://4f55dbbb-xxxx-xxxx-xxxx-xxxxxxxxxxxx@fi.alorvpn.fun:443?security=reality..."
  ]
}

Проверка статуса

POST /api/v1/external/subscription/status

Метод проверяет статус подписки, дату истечения, возвращает актуальные конфигурации и состояние персональной квоты Whitelist-трафика.

Параметры запроса (JSON):

Параметр Тип Обяз. Описание
token string да Секретный токен подписки, полученный при создании.

Пример запроса (curl):

curl -X POST https://api.alorvpn.fun/api/v1/external/subscription/status   -H "X-API-Key: alor-partner-ваш_ключ"   -H "Content-Type: application/json"   -d '{"token": "7a3f8b9c2d1e..."}'

Ответ при успешной проверке (200 OK):

{
  "ok": true,
  "token": "7a3f8b9c2d1e...",
  "uuid": "4f55dbbb-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "is_active": true,
  "expires_at": "2026-06-22T20:00:00.000000+00:00",
  "created_at": "2026-05-23T20:00:00.000000+00:00",
  "traffic": {
    "scope": "whitelist",
    "limit_bytes": 107374182400,
    "used_bytes": 21474836480,
    "remaining_bytes": 85899345920,
    "limit_gb": 100,
    "used_gb": 20,
    "remaining_gb": 80,
    "usage_percent": 20,
    "exhausted": false
  },
  "vless_links": [
    "trojan://4f55dbbb-xxxx-xxxx-xxxx-xxxxxxxxxxxx@de.alorvpn.fun:443?security=reality...",
    "trojan://4f55dbbb-xxxx-xxxx-xxxx-xxxxxxxxxxxx@fi.alorvpn.fun:443?security=reality..."
  ]
}

Управление трафиком по ключу

POST /api/v1/external/subscription/traffic

Метод меняет лимит или расход Whitelist-трафика конкретной подписки. Учёт ведётся отдельно по каждому токену: трафик одного клиента никогда не смешивается с трафиком другого. Один гигабайт в API равен 1 073 741 824 байтам.

  • Учитывается только трафик серверов Whitelist, включая CDN-ноды. Обычные серверы в квоту не входят.
  • Фактический расход обновляется фоновым счётчиком примерно раз в 3 минуты.
  • Если лимит исчерпан, Whitelist-доступ блокируется автоматически, но обычные серверы продолжают работать.
  • Существующие ключи без установленного лимита остаются безлимитными до первого вызова set_limit.

Параметры запроса (JSON):

ПараметрТипОбяз.Описание
tokenstringдаТокен подписки.
actionstringдаset_limit, add_limit, set_used или reset_used.
gigabytesintegerкроме reset_usedКоличество целых ГБ от 1 до 100 000.

Действия:

actionЧто делаетПример
set_limitУстанавливает новый общий лимит. Уже потраченный трафик сохраняется.gigabytes: 100
add_limitПрибавляет ГБ к текущему конечному лимиту. Для безлимитного ключа сначала используйте set_limit.gigabytes: 10
set_usedКорректирует зафиксированный расход. Используйте для сверки или переноса данных.gigabytes: 25
reset_usedОбнуляет расход, не изменяя установленный лимит.gigabytes не передаётся

Добавить 10 ГБ к лимиту:

curl -X POST https://sub.alorvpn.fun/api/v1/external/subscription/traffic   -H "X-API-Key: alor-partner-ваш_ключ"   -H "Content-Type: application/json"   -d '{"token":"7a3f8b9c2d1e...","action":"add_limit","gigabytes":10}'

Важно: add_limit увеличивает лимит при каждом успешном запросе. Не повторяйте запрос автоматически после ответа 200 OK, иначе гигабайты будут начислены повторно.

Ответ (200 OK):

{
  "ok": true,
  "token": "7a3f8b9c2d1e...",
  "traffic": {
    "scope": "whitelist",
    "unlimited": false,
    "limit_bytes": 118111600640,
    "used_bytes": 21474836480,
    "remaining_bytes": 96636764160,
    "limit_gb": 110,
    "used_gb": 20,
    "remaining_gb": 90,
    "usage_percent": 18.18,
    "exhausted": false,
    "updated_at": "2026-07-25T17:45:00+00:00"
  },
  "sync": "queued"
}

Поля объекта traffic:

ПолеТипОписание
scopestringВсегда whitelist.
unlimitedbooleantrue, если конечный лимит ещё не установлен.
limit_bytes / limit_gbnumber | nullОбщий лимит. Для безлимитного ключа возвращается null.
used_bytes / used_gbnumberФактически использованный Whitelist-трафик.
remaining_bytes / remaining_gbnumber | nullОстаток. Для безлимитного ключа возвращается null.
usage_percentnumber | nullПроцент расхода от 0 до 100. Для безлимита возвращается null.
exhaustedbooleantrue, если расход достиг лимита.
updated_atstring | nullUTC-время последнего обновления счётчика или ручной корректировки.

Ошибки:

HTTPПричина
400Некорректное действие, отсутствует gigabytes или значение вне диапазона.
401Не передан заголовок X-API-Key.
403API-ключ неверный или заблокирован.
404Токен не найден у текущего API-партнёра.

Блокировка / Активация

POST /api/v1/external/subscription/toggle

Метод позволяет вам со своей стороны приостановить или возобновить действие любой подписки (например, при неоплате тарифа в вашем боте).

Параметры запроса (JSON):

Параметр Тип Обяз. Описание
token string да Секретный токен подписки.
is_active integer да 1 — разблокировать, 0 — заблокировать подписку.

Пример запроса (curl):

curl -X POST https://api.alorvpn.fun/api/v1/external/subscription/toggle   -H "X-API-Key: alor-partner-ваш_ключ"   -H "Content-Type: application/json"   -d '{"token": "7a3f8b9c2d1e...", "is_active": 0}'

Ответ (200 OK):

{
  "ok": true,
  "token": "7a3f8b9c2d1e...",
  "is_active": false
}

Формат подключения для клиентов

Выданная в API ссылка subscription_url является универсальной точкой входа.

В зависимости от того, какое приложение делает к ней запрос (определяется по заголовку User-Agent), наш сервер автоматически отдает конфигурацию в нужном формате:

Если вы хотите, чтобы ваш домен полностью скрывал AlorVPN от глаз пользователей, вы можете настроить проксирование (Reverse Proxy) на Nginx вашего сайта:

location ~ ^/sub/(.*)$ {
    proxy_pass https://sub.alorvpn.fun/sub/$1;
    proxy_set_header Host sub.alorvpn.fun;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header User-Agent $http_user_agent;
    proxy_ssl_server_name on;
}

Гибкая кастомизация серверов (Query-параметры)

Вы можете на лету кастомизировать список, названия, лимиты и порядок серверов в подписке, просто добавляя GET-параметры к выданной subscription_url:

Параметр Описание Пример использования
limit Ограничивает максимальное количество серверов в подписке. ?limit=3
nodes / include Включает в подписку только перечисленные ID серверов (через запятую). ?nodes=germany,finland
exclude Исключает определенные сервера из подписки. ?exclude=germany
prefix Добавляет указанную строку-префикс к названиям всех серверов. ?prefix=🚀 Alor -
suffix Добавляет указанную строку-суффикс к названиям всех серверов. ?suffix= (Pro)
names / rename Кастомное переименование конкретных серверов в формате id:name. ?names=germany:🇩🇪 Германия,finland:🇫🇮 Финка
order Задает точный порядок сортировки серверов по их ID. Остальные будут в конце. ?order=finland,germany
only_rf Оставляет только сервера для обхода глушилок (TSPU). ?only_rf=true
only_regular Исключает сервера для обхода глушилок, оставляя только обычные зарубежные. ?only_regular=true

Вы можете свободно комбинировать эти параметры, например:

https://sub.alorvpn.fun/sub/TOKEN?limit=3&prefix=⭐+&names=germany:Германия

Python Интеграция

Готовый класс для отправки запросов к API, который можно легко скопировать и вставить в проект вашего Telegram-бота:

import requests

class AlorVPNAPI:
    def __init__(self, api_key: str, base_url: str = "https://api.alorvpn.fun"):
        self.base_url = base_url.rstrip("/")
        self.headers = {
            "X-API-Key": api_key,
            "Content-Type": "application/json"
        }

    def create_subscription(self, plan_days: int = 30, custom_uuid: str = None) -> dict:
        # Создает подписку и возвращает данные с VLESS-ссылками
        url = f"{self.base_url}/api/v1/external/subscription/create"
        payload = {"plan_days": plan_days}
        if custom_uuid:
            payload["uuid"] = custom_uuid
            
        response = requests.post(url, json=payload, headers=self.headers)
        return response.json()

    def get_status(self, token: str) -> dict:
        # Проверяет статус активности подписки
        url = f"{self.base_url}/api/v1/external/subscription/status"
        payload = {"token": token}
        
        response = requests.post(url, json=payload, headers=self.headers)
        return response.json()

    def toggle_subscription(self, token: str, is_active: bool) -> dict:
        # Блокирует (is_active=False) или разблокирует (is_active=True) подписку
        url = f"{self.base_url}/api/v1/external/subscription/toggle"
        payload = {
            "token": token,
            "is_active": 1 if is_active else 0
        }
        
        response = requests.post(url, json=payload, headers=self.headers)
        return response.json()