Эндпоинт подписки
Эндпоинт подписки отдаёт VPN конфигурацию напрямую клиентским приложениям. В отличие от остального API, это GET запрос который возвращает файл конфигурации VPN, а не JSON.
GET https://network-api.adaptgroup.app/sub/{subscription_uuid}
Этот URL возвращается как subscription_url в ответе на создание подписки и должен передаваться напрямую в VPN клиент пользователя.
Как это работает
Когда VPN клиент обращается к этому URL, сервер:
- Проверяет подписку — что она активна и не заморожена
- Идентифицирует устройство по заголовку
X-Hwidили модели устройства - Проверяет лимит устройств — отклоняет если превышен
- Возвращает VPN конфигурацию в формате запрошенном клиентом
Если клиент отправляет заголовок Accept: text/html (например при открытии URL в браузере), сервер возвращает HTML страницу — настраивается в дашборде.
Заголовки запроса
VPN клиент должен передавать следующие заголовки. Они используются для идентификации устройства и возврата правильного формата конфигурации.
| Заголовок | Обязательный | Описание |
|---|---|---|
User-Agent | Нет | User agent клиентского приложения |
Accept | Нет | Запрашиваемый тип контента. Если text/html — возвращает браузерную страницу |
X-Hwid | Рекомендуется | Hardware ID устройства. Используется для надёжной идентификации устройства. Без него идентификация переключается на X-Device-Model — каждое новое значение модели регистрируется как новое устройство |
X-Device-Model | Рекомендуется | Модель устройства. Используется как запасной вариант если X-Hwid не передан |
X-Device-Os | Нет | Операционная система (ios, android, windows, macos, linux) |
X-Ver-Os | Нет | Версия ОС |
Ответ
Возвращает файл конфигурации VPN. Формат зависит от заголовков User-Agent и Accept клиента — это может быть текст в base64, JSON или YAML в зависимости от типа клиента.
Заголовки ответа
| Заголовок | Описание |
|---|---|
Content-Disposition | Всегда attachment; filename="subscription.txt" |
Profile-Title | Название профиля в base64 |
Profile-Update-Interval | Как часто клиент должен обновлять конфигурацию (в часах) |
Profile-Web-Page-Url | Опциональный URL веб-страницы профиля |
Support-Url | Опциональный URL поддержки |
Announce | Опциональное объявление в base64 |
Subscription-Userinfo | Информация об использовании трафика: upload=...; download=...; total=...; expire=... |
Лимит устройств
Каждая подписка имеет максимальное количество устройств (поле devices). Устройства идентифицируются по заголовку X-Hwid. Если заголовок не передан — идентификация переключается на модель устройства.
Если лимит устройств достигнут и неизвестное устройство пытается подключиться, сервер возвращает ключ VLESS с сообщением об ошибке вместо рабочей конфигурации.
Ответы при ошибках
При возникновении ошибки сервер возвращает корректную VPN конфигурацию содержащую один нерабочий VLESS ключ с сообщением об ошибке в фрагменте. Это позволяет VPN клиентам отображать ошибку пользователю.
| Ситуация | Сообщение |
|---|---|
| Подписка не найдена | ❌ Подписка не найдена |
| Подписка неактивна | ❌ Подписка неактивна |
| Подписка заморожена | ❌ Подписка заморожена |
| Превышен лимит устройств | ❌ Превышен лимит устройств (N) |
Поведение в браузере
Если URL открывается в браузере (Accept: text/html), ответ зависит от настроек интеграции в дашборде:
| Режим | Поведение |
|---|---|
disabled | Кастомная страница отключена |
default | Возвращает стандартную страницу AdaptGroup |
redirect | Перенаправляет на кастомный URL |
html | Возвращает кастомную HTML страницу загруженную в дашборде |