Заголовки подписки
Что keqdroid отправляет панели, когда загружает подписку, и что читает из её ответа.
Вот что из ответа видно на карточке подписки:


profile-titleимя подписки, если вы не задали своёannounceобъявление провайдераsubscription-userinfoизрасходовано и сколько всего: upload + download из totalsubscription-userinfoсколько осталось до конца: expireprofile-update-intervalкак часто обновлять подпискуprofile-web-page-urlкнопка «Страница подписки»support-urlкнопка «Поддержка»
Остальное на карточке не отображается: адрес для переезда, запасной адрес, профиль маршрутизации и сами серверы.
Адрес подписки
Подписка загружается только по https, потому что в ней лежат ключи серверов, а по http их может прочитать любой посредник. Адреса домашней сети и localhost не принимаются.
Когда VPN включён, подписка загружается через сервер, а не мимо него.
Что приложение отправляет
User-Agent
keqdroid/<версия>, всегда с текущей версией приложения.
Если вместо подписки панель вернула HTML-страницу или ошибку, приложение повторяет запрос с User-Agent других клиентов: Happ, INCY, v2RayTun, v2rayNG, Streisand, Shadowrocket, FlClashX, Clash Meta for Android, Clash Verge, sing-box и в последнюю очередь браузера. User-Agent, с которым подписка загрузилась, запоминается, и в следующий раз приложение пробует его первым.
Данные устройства
| Заголовок | Значение |
|---|---|
x-hwid | идентификатор устройства |
x-device-os | Android, Windows или Linux |
x-ver-os | версия ОС |
x-device-model | модель телефона или имя компьютера |
На Android идентификатор – это Android ID, а на компьютере приложение создаёт его один раз и хранит. Значения отправляются только латиницей.
Пользователь может выключить эти заголовки («Отдавать HWID устройства» в дополнительных настройках) или задать для подписки свои значения и свой User-Agent («Идентичность устройства» в настройках подписки).
Что приложение читает
Трафик и срок
subscription-userinfo: upload=1073741824; download=5368709120; total=107374182400; expire=1798675200Израсходованный трафик – это total в байтах (0 – без лимита), expire – дата окончания в секундах Unix. Также принимаются x-subscription-userinfo, userinfo и x-userinfo.
Если заголовка нет, приложение ищет трафик и дату в именах серверов, например 12.5 GB / 100 GB и 31.12.2026.
Карточка подписки
| Заголовок | Что делает |
|---|---|
profile-title | имя подписки |
announce | объявление на карточке |
support-url | кнопка «Поддержка» |
profile-web-page-url | кнопка «Страница подписки» |
profile-update-interval | как часто обновлять подписку, в часах |
- Имя из
profile-titleставится, только если пользователь сам не задал подписке имя. profile-titleиannounceможно передавать в base64, с префиксомbase64:или без него.- Интервал обновления берётся только при первой загрузке, дальше его меняет только пользователь. Без этого заголовка подписка обновляется раз в 12 часов.
- В кнопках принимаются только ссылки
httpиhttps.
Переезд и запасной адрес
| Заголовок | Что делает |
|---|---|
new-url | подписка переезжает на новый адрес |
new-domain | то же, но меняется только домен |
fallback-url | запасной адрес, если основной не ответил |
notification-subs-expire: 1 | напоминание об окончании подписки (Android) |
При переезде у подписки меняется только адрес: имя, картинка, серверы и профиль маршрутизации остаются прежними. Новый адрес сначала проверяется, и подписка переезжает, только если по нему действительно отдаётся подписка. Переехать с https на http нельзя.
С fallback-url подписка загружается с запасного адреса, когда основной не отвечает, но сам адрес подписки не меняется: вдруг основной вернётся.
С notification-subs-expire: 1 в последние три дня перед expire раз в день приходит уведомление, пока панель присылает этот флаг.
Маршрутизация
| Заголовок | Что делает |
|---|---|
routing | профиль маршрутизации для этой подписки |
routing-enable: 0 | убрать профиль провайдера |
В routing принимается ссылка в формате Happ (happ://routing/add/…, а также incy:// и keqdroid://), JSON профиля Happ или правила Xray – как есть или в base64. Формат описан на странице Ссылки.
Из правил Xray берутся только правила по доменам и адресам с целью direct, proxy или block. Правило с портом, протоколом или процессом пропускается целиком, потому что без этих условий оно срабатывало бы шире, чем задумано.
Профиль провайдера пользователь может посмотреть, но не изменить. Если пользователь включил «Правила» в «Не учитывать от провайдера», профиль не принимается.
Лимит устройств Remnawave
Если панель ответила x-hwid-active: true вместе с x-hwid-max-devices-reached: true или x-hwid-not-supported: true, пользователь видит понятную ошибку: лимит устройств исчерпан или клиент не поддерживается.
Строки в теле подписки
#new-url https://new.example.com/sub/abc
#new-domain new.example.com
#fallback-url https://backup.example.com/sub/abc
#notification-subs-expire 1Эти строки и ссылка happ://routing/... работают и в теле подписки, в том числе внутри base64, и имеют приоритет над заголовками. Строки #profile-title, #announce и остальные из раздела «Карточка подписки» в теле не читаются, их нужно передавать заголовками.
Что может быть в теле
- список ссылок, обычным текстом или в base64;
- конфиг Clash или mihomo;
- конфиг sing-box;
- конфиг Xray, один или списком.