Перейти к содержимому

Ссылки и deep link

mins понимает четыре вида ссылок: ссылки на серверы (по одному серверу), ссылки «добавить подписку», ссылки маршрутизации и https://-ссылки-переходники для мест, где разрешён только HTTPS (кнопки Telegram). Откуда бы ни пришла ссылка, она ничего не меняет молча: приложение всегда показывает предпросмотр и ждёт подтверждения пользователя.

Схема Протокол Примечания
vless:// VLESS TLS, REALITY или без шифрования; raw, WebSocket, gRPC, XHTTP, HTTPUpgrade, mKCP.
hysteria2://, hy2:// Hysteria2 Обфускация Salamander, перескок портов, закрепление сертификата.
wireguard:// WireGuard и AmneziaWG Параметры AmneziaWG — обычные параметры запроса.
vpn:// AmneziaWG Контейнер, экспортируемый Amnezia.
любая другая (vmess://, trojan://, ss://, …) не поддерживается Ссылка остаётся в списке как неподдерживаемый сервер с причиной «Protocol X is not supported».

Общие правила для всех ссылок на серверы:

  • Имя — фрагмент после # в процентном кодировании. Флаг-эмодзи в начале задаёт страну (см. Блок mins).
  • Описание передаётся внутри фрагмента: #Finland?serverDescription=<base64 от текста в UTF-8>. Если в base64 встречаются +, / или =, закодируйте их в процентном виде или используйте URL-safe алфавит.
  • Учётные данные (часть до @) должны быть закодированы в процентном виде. Второй @ в них — ошибка.
  • IPv6-адреса пишутся в квадратных скобках. Порты — от 1 до 65535.
  • Имена параметров запроса зависят от регистра. Неизвестный параметр игнорируется с предупреждением; повторяющееся или пустое имя параметра — ошибка.
vless://<uuid>@<host>:<port>?<параметры>#<имя>
Параметр Значение Примечания
type raw (псевдоним tcp), ws, grpc, xhttp, httpupgrade, kcp (псевдоним mkcp) По умолчанию raw. http, h2, h3 и quic отклоняются: «Transport removed; use XHTTP».
security none, tls, reality По умолчанию none. REALITY не работает с ws, httpupgrade и kcp.
encryption строка По умолчанию none. Не может быть пустой.
flow строка Например, xtls-rprx-vision.
sni имя хоста По умолчанию — хост из ссылки.
fp отпечаток По умолчанию chrome. Обязателен для REALITY.
alpn список через запятую Например, h2,http/1.1.
ech строка Список конфигураций ECH.
pcs строка Закреплённый SHA-256 сертификата сервера.
vcn строка Проверять сертификат сервера по этому имени.
pbk строка Публичный ключ REALITY. Обязателен для REALITY.
sid строка Short id REALITY.
pqv строка Ключ проверки ML-DSA-65 для REALITY.
spx строка Spider X для REALITY.
path строка ws, httpupgrade, xhttp; по умолчанию /. Для raw с headerType=http — путь запроса.
host строка ws, httpupgrade, xhttp; для raw с headerType=http — заголовок Host.
mode gRPC: gun (по умолчанию), multi. XHTTP: auto (по умолчанию), packet-up, stream-up, stream-one gRPC guna разбирается, но сервер помечается неподдерживаемым («gRPC guna uses a custom codec not supported by Xray; use gun or multi»).
serviceName, authority строка gRPC.
extra JSON-объект Дополнительные настройки XHTTP.
mtu, tti целое mKCP.
seed строка mKCP.
headerType строка Тип заголовка mKCP либо http для raw.
fm JSON Настройки finalmask.
mux JSON Настройки Mux этого outbound.
fragment length,interval,packets[,maxSplit] Фрагментация TLS этого сервера, например 50-100,10-20,tlshello.
noises type,packet,delay[,applyTo], соединённые ; Шумовые пакеты этого сервера.
allowInsecure, insecure true, false, 1, 0 Отключает проверку сертификата. Передача обоих — ошибка. У сервера появляется предупреждающая метка.
testpre, testseed JSON или строка Передаются в запись пользователя без изменений.
node_id, xtls любое Принимаются и игнорируются.

sni, fp, alpn и path не должны присутствовать с пустым значением.

vless://11111111-1111-4111-8111-111111111111@fi.example.com:443?type=raw&security=reality&sni=www.example.com&fp=chrome&pbk=AbCdEfGhIjKlMnOpQrStUvWxYz0123456789_-abcde&sid=6ba85179e30d4fc2&flow=xtls-rprx-vision#Finland%20Reality
vless://11111111-1111-4111-8111-111111111111@xh.example.com:443?type=xhttp&security=tls&sni=xh.example.com&host=xh.example.com&path=%2Fx&mode=auto&alpn=h2#XHTTP
vless://11111111-1111-4111-8111-111111111111@fi.example.com:443?type=grpc&security=tls&serviceName=svc&mode=multi#gRPC
hysteria2://<auth>@<host>[:<port>]/?<параметры>#<имя>

hy2:// — то же самое. Порт по умолчанию — 443. Строка аутентификации может быть пустой.

Параметр Значение Примечания
sni имя хоста Имя сервера TLS.
pinSHA256 строка Один закреплённый отпечаток сертификата.
ech строка Список конфигураций ECH.
insecure, allowInsecure true, false, 1, 0 Отключает проверку сертификата. Передача обоих — ошибка.
obfs salamander Единственная поддерживаемая обфускация; любое другое значение — ошибка.
obfs-password строка Обязателен вместе с obfs.
mport порты Диапазон или список для перескока портов, например 20000-30000 или 443,500-600. Обратный диапазон — ошибка.
mportHopInt секунды Интервал перескока: 30, 30s или диапазон 20-40. Не меньше 5; по умолчанию 30. Используется, когда mport задаёт перескок.
hysteria2://s3cret@de.example.com:443/?sni=de.example.com&obfs=salamander&obfs-password=pass#Germany
hy2://s3cret@de.example.com:443/?sni=de.example.com&mport=20000-30000&mportHopInt=30#Germany%20hop

Ссылки со схемой hysteria2+realm отклоняются: «Hysteria realm is not supported».

wireguard://<закрытый ключ>@<host>:<port>?publickey=<ключ>&address=<cidr>[&...]#<имя>

Закодируйте закрытый ключ в процентном виде: в base64 есть +, / и =.

Параметр Значение Примечания
publickey ключ в base64 Обязателен.
presharedkey ключ в base64
address CIDR через запятую Адреса туннеля, например 10.0.0.2/32.
dns IP через запятую
mtu целое
allowedips CIDR через запятую По умолчанию 0.0.0.0/0,::/0.
keepalive целое или диапазон Persistent keepalive, секунды.
reserved три байта 1,2,3 или base64.
jc, jmin, jmax, s1–s4, h1–h4, i1–i5 числа, диапазоны (h1..h4), строки (i1..i5) Обфускация AmneziaWG. jmin не больше jmax; диапазоны h1–h4 не должны пересекаться.
headerprotectionkey, contentpaddingaddition, randomtrailers, disablecookies Расширения AmneziaWG (randomtrailers, disablecookies — логические). headerprotectionkey требует s1–s4 не меньше 12.
rekeyaftertime, rekeytimeout, rejectaftertime, keepalivetimeout, maxhandshakeattempts, persistentkeepalive числа Таймеры AmneziaWG.
wireguard://AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE%3D@nl.example.com:51820?publickey=AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI%3D&address=10.0.0.2%2F32&dns=1.1.1.1&mtu=1280&jc=4&jmin=40&jmax=70&s1=15&s2=18#Netherlands

Адрес подписки (а также вставленный текст или файл) может быть и одним файлом WireGuard или AmneziaWG в формате INI. Он должен начинаться с [Interface] (обязателен PrivateKey), за которым идут одна или несколько секций [Peer] (в каждой обязателен Endpoint, всего до 256). Ключи не зависят от регистра; комментарии начинаются с # или ;.

[Interface]
PrivateKey = AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=
Address = 10.0.0.2/32
DNS = 1.1.1.1
MTU = 1280
Jc = 4
Jmin = 40
Jmax = 70
[Peer]
PublicKey = AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI=
Endpoint = nl.example.com:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

vpn://<base64> — ссылка, которую экспортирует клиент Amnezia. mins читает контейнер AmneziaWG внутри (сжатый zlib JSON с 4-байтовым префиксом длины, до 16 МиБ), берёт вложенный last_config, подставляет dns1 и dns2 вместо $PRIMARY_DNS и $SECONDARY_DNS и использует description как имя сервера. Ссылка vpn:// без контейнера AmneziaWG отклоняется.

Ссылка, которая запускает обычный сценарий «добавить подписку» для адреса. Принимаются три формы:

mins://add/https://sub.example.com/abc?token=1
happ://add/https://sub.example.com/abc?token=1
incy://add/https://sub.example.com/abc?token=1
  • <url> берётся как написан, если начинается с http:// или https://. Иначе он один раз декодируется из процентного кодирования, поэтому mins://add/https%3A%2F%2Fsub.example.com%2Fabc тоже работает.
  • Операционной системе зарегистрирована только схема mins:// (Android, iOS, macOS, Windows и Linux), поэтому из браузера или другого приложения приложение открывает только mins://. Ссылки happ://add/ и incy://add/ принимаются, когда пользователь вставляет их, сканирует как QR-код или открывает из файла.
  • Ссылка запускает тот же сценарий, что и вставка адреса: нужен HTTPS, обычный HTTP — только после подтверждения пользователем, затем подписка загружается и показывается в предпросмотре вместе с настройками, требующими подтверждения. Пользователь нажимает Подтвердить импорт. Тихого импорта не бывает.
  • Для QR-кодов закодируйте ссылку mins://add/... как текст QR.

Другие адреса mins://: mins://open лишь выводит приложение на передний план (его используют виджеты), а также ссылки маршрутизации ниже.

Ссылка Действие
mins://routing/add/<данные> Сохраняет профиль маршрутизации.
mins://routing/onadd/<данные> Сохраняет и делает его активным профилем.
mins://routing/off Выключает активный профиль маршрутизации.

happ://routing/... и incy://routing/... с add или onadd принимаются так же, как и incy://autorouting/add|onadd/.... Они работают из буфера, QR-кода, вставленного текста, файла, заголовка routing или строки в теле подписки; системе зарегистрирована только схема mins://.

<данные> — одно из:

  • base64 от JSON профиля маршрутизации (любой алфавит base64, с выравниванием или без). Как получить: base64 -w0 profile.json | tr '+/' '-_' | tr -d '='.
  • адрес https:// в процентном кодировании. Приложение загружает профиль (без перенаправлений; 9 с на соединение, 20 с на получение) и показывает его в предпросмотре. Профили, добавленные по адресу, заново скачиваются при каждом запуске приложения, сохраняя имя. Любая другая схема, включая http://, отклоняется: «Routing profile URL must use HTTPS».
mins://routing/onadd/https%3A%2F%2Fexample.com%2Frouting%2Fru.json
mins://routing/add/eyJOYW1lIjoiRXhhbXBsZSIsIkdsb2JhbFByb3h5IjpmYWxzZX0
mins://routing/off

Формат профиля — в разделе Профили маршрутизации.

Встроенные кнопки Telegram принимают только адреса https://, а не произвольные схемы, поэтому кнопка не может вести прямо на mins://add/.... Используйте переходник https://sr.minsclient.com: это статическая страница, которая сразу открывает mins с переданной ей ссылкой.

https://sr.minsclient.com/#add/https://sub.example.com/abc

Ссылка читается из фрагмента (часть после #). Браузеры никогда не отправляют фрагмент на сервер, поэтому адрес подписки, который обычно содержит токен пользователя, остаётся на устройстве.

Вход Значение
https://sr.minsclient.com/#add/<url> Добавить подписку <url>.
https://sr.minsclient.com/#mins://add/<url> То же, со схемой, записанной явно.
https://sr.minsclient.com/#routing/add/<данные>, #routing/onadd/<данные>, #routing/off (допускается и ведущий mins://) Ссылки маршрутизации.
https://sr.minsclient.com/?url=<ссылка mins в процентном кодировании> Запасной вариант для отправителей, которые отбрасывают фрагменты, например ?url=mins%3A%2F%2Fadd%2Fhttps%3A%2F%2Fsub.example.com%2Fabc.

Принимаются только эти действия, а цель добавления должна быть https://. Всё остальное (другие схемы, javascript:, цели http://, ссылки длиннее 8 КиБ) отклоняется: страница сообщает, что это не ссылка mins, и никуда не переходит.

Что происходит с корректной ссылкой: страница сразу перенаправляет, передавая адрес подписки в процентном кодировании, поэтому символы вроде #, ; и & внутри него не теряются. На Android открывается адрес intent:// для приложения mins, а если mins не установлен, происходит переход на страницу загрузки https://minsclient.com/#download; на остальных системах открывается mins://.... Некоторые браузеры блокируют автоматический переход (встроенный браузер Telegram, iOS), поэтому страница дополнительно показывает крупную кнопку «Открыть в mins» и ссылку на скачивание. Язык страницы — русский или английский по языку браузера; внешние ресурсы не загружаются.

Сообщение Telegram Bot API со встроенной кнопкой (reply_markup):

{
"chat_id": 123456789,
"text": "Ваша подписка готова.",
"reply_markup": {
"inline_keyboard": [
[
{
"text": "Добавить в mins",
"url": "https://sr.minsclient.com/#add/https://sub.example.com/abc"
}
]
]
}
}

Отправьте его на https://api.telegram.org/bot<токен>/sendMessage с Content-Type: application/json.

Что Почему
Зашифрованные ссылки happ://crypt... и incy://crypt... Отклоняются: «Encrypted Happ/INCY links are not supported». Отправляйте обычную ссылку или адрес подписки.
Ссылки на серверы других протоколов (vmess://, trojan://, ss://, tuic://, …) Движок их не реализует. Ссылка остаётся неподдерживаемым сервером с причиной «Protocol X is not supported».
hysteria2+realm:// «Hysteria realm is not supported».
Транспорты VLESS http, h2, h3, quic Удалены в Xray; используйте XHTTP.
Форматы Clash и sing-box Поддерживается только импорт конфигураций Xray.
Импорт без предпросмотра Любая ссылка, QR-код и deep link заканчиваются экраном подтверждения.
Системные ссылки с произвольными схемами, кроме mins:// Зарегистрирована только mins://, чтобы не конфликтовать с Happ или INCY, установленными на том же устройстве.

Заголовки-ссылки (support-url, announce-url и другие) принимают https://, а шесть из них — ещё и mins://; ссылка mins:// там открывает предпросмотр импорта и никогда не импортирует напрямую. См. Заголовки ответа.