Bearer token
Authorization: Bearer TOKEN
H1Cloud VLESS
API запускается отдельным сервером на выбранном порту и слушает все IP:
0.0.0.0:PORT. Для доступа нужен токен. API и subscription работают
по HTTPS: self-signed сертификат генерируется автоматически, свой ставится
через vpn ssl cert CERT KEY.
-k, а в браузере один раз открой https://IP:API_PORT/health
и прими предупреждение — после этого тестер на этой странице сможет отправлять запросы.
Чтобы предупреждений не было, поставь нормальный сертификат: vpn ssl cert fullchain.pem privkey.pem.
Эти команды пишутся в консоль сервера или запускаются как ./main.sh vpn .... Полный список — vpn help.
vpn add NAME DAYS
Создать клиента на DAYS дней. Сразу выводит VLESS-ссылки.
vpn add NAME DAYS GB DEV
То же + квота трафика в GB и лимит устройств. Пример: vpn add test 30 100 3.
vpn del NAME
Удалить клиента.
vpn ban NAME [REASON]
Отключить клиента без удаления: он исчезает из конфига Xray, key.txt и подписок.
vpn unban NAME
Вернуть забаненного клиента во все ссылки и конфиги.
vpn list
Список клиентов с UUID и сроком действия.
vpn info NAME
Полная информация по клиенту + ссылки.
vpn link NAME
Только ссылки клиента (WS, Reality, CDN, подписка).
vpn link h1link.TOKEN
Применить CDN/XHTTP/egress setup-бандл одной командой (после vpn update).
vpn renew NAME DAYS
Продлить клиента на DAYS дней.
vpn limit NAME ...
Лимиты: vpn limit test 100 3, traffic 50, devices 2, reset-traffic, reset-devices, off.
vpn keys
Все ключи клиентов (key.txt) и последние логи.
vpn logs [COUNT]
Последние записи журнала действий.
vpn domain DOMAIN
Сменить публичный домен. Ссылки пересоберутся.
vpn ports
Какие локальные/публичные порты нужны серверу.
vpn node NAME
Имя локации для тегов ссылок: Germany WS, Germany Reality.
vpn tag status
Суффиксы тегов ссылок. Изменить: vpn tag ws|xhttp|reality|cdn|cdn-ws|cdn-xhttp VALUE.
vpn reality PORT [PUBLIC] [SNI] [DEST]
Включить Reality на выделенном TCP-порту. Статус: vpn reality status, выключить: vpn reality off.
vpn ssl on/off/status
HTTPS для API и subscription (включён по умолчанию). Свой сертификат: vpn ssl cert CERT KEY, перевыпуск self-signed: vpn ssl renew.
vpn transport ws|xhttp
Алиас переключения транспорта основного inbound.
vpn xhttp on/off/status
Переключить основной inbound между WS /xray и XHTTP /api/v1/sync. ALPN: vpn xhttp alpn h2,http1|h2|http1|none.
vpn cdn HOST SNI [PORT] [TAG] [PATH]
Добавить сгенерированные WS-CDN ссылки всем текущим и будущим клиентам. Пример: vpn cdn cdn.gateway.h1cloud.su top2355543541.mwscdn.ru 443 CDN /h1cdn/nl1/xray.
vpn cdn xhttp HOST SNI PORT TAG PATH
XHTTP-CDN ссылки через публичный gateway-path, локальный путь ноды не меняется.
vpn cdn off/status
Управление сгенерированными CDN-ссылками.
vpn mws on DOMAIN [PATH]
Прямой MWS XHTTP+TLS inbound. Управление: vpn mws off/status.
vpn egress link VLESS
Пустить исходящий трафик через upstream Xray. Управление: vpn egress off/status.
vpn restart
Перезапустить xray (пересборка конфига).
vpn stop
Остановить сервер (xray + API + sub).
vpn api PORT
Запустить API на 0.0.0.0:PORT. Также: vpn api stop/restart/status.
vpn api token
Показать токен для HTTP-запросов.
vpn sub PORT
Запустить subscription-сервер. Также: vpn sub stop/status/token.
vpn sub name NAME
Отображаемое имя подписки в клиентах. Убрать: vpn sub name off.
vpn join-token
Токен для авто-регистрации новых нод на мастере.
vpn join MASTER TOKEN NAME
Подключить свежую локацию к мастеру одной командой: vpn join https://MASTER:PORT/api JOIN_TOKEN Germany.
vpn peer add NAME URL
Добавить ноду в общую подписку: vpn peer add de https://IP:PORT/sub/{uuid}/local.
vpn federation upstream URL TOKEN
Подключить ноду к единой базе пользователей на мастер API. Проверка: vpn federation sync.
vpn backup create
Zip-бэкап пользователей, токенов, peers, TLS и Reality-настроек. Также: vpn backup list/restore.
vpn stats
Live-счётчики Xray Stats API.
vpn update
Скачать свежий main.sh с update URL, проверить и заменить с бэкапом старого.
vpn update auto on
Почасовое авто-обновление (включено по умолчанию). Источник: vpn update url URL.
vpn version
Версия скрипта, путь, sha256, update URL и статус авто-обновления.
vpn doctor [fix]
Проверка зависимостей, портов, домена и сервисов; fix пересобирает конфиг и перезапускает живые сервисы.
Передавай токен одним из двух способов. Рекомендуемый вариант - заголовок Bearer. Не публикуй api_token.txt в открытом доступе.
Authorization: Bearer TOKEN
X-API-Key: TOKEN
Все примеры ниже используют префикс /api. Без него тоже работает: /create, /clients. Нажми на метод, чтобы подставить его в тестер.
/health
Проверить, что API отвечает, и получить список методов. Токен не нужен. То же самое отдаёт GET /.
/status
Состояние сервера: имя ноды, порты WS/Reality/subscription, клиенты, peers и federation. Алиасы: /system, /dashboard.
/clients
Список всех клиентов. Алиас: /users.
{
"ok": true,
"clients": [
{
"name": "test",
"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"expires_at": 1760000000,
"left_days": 30,
"link": "vless://..."
}
]
}
/clients/NAME
Данные одного клиента по имени. Алиас: GET /info?name=NAME.
/create
Создать клиента. traffic_limit_gb и device_limit опциональны. Алиас: POST /clients.
{
"name": "test",
"days": 30,
"traffic_limit_gb": 100,
"device_limit": 3
}
/edit
Продлить клиента (days прибавляется к текущей дате окончания) и/или изменить лимиты. Алиас: PATCH /clients/NAME.
{
"name": "test",
"days": 15,
"traffic_limit_gb": 50,
"device_limit": 2
}
/edit
Переименовать клиента.
{
"name": "test",
"new_name": "newtest"
}
/clients/NAME/ban
Забанить клиента без удаления: он остаётся в базе, но пропадает из конфига Xray, key.txt и подписок. Алиас: POST /ban {"name":"test"}.
{
"reason": "chargeback"
}
/clients/NAME/unban
Разбанить клиента и вернуть его в конфиги/подписки. Алиас: POST /unban {"name":"test"}.
/clients/NAME
Удалить клиента по имени. Алиас: POST /delete {"name":"test"}.
/keys
Все клиенты с готовыми VLESS-ссылками. На сервере обновляется key.txt. Текстовая версия: GET /key.txt.
/logs?count=100
Последние записи из logs.txt (1–1000, по умолчанию 100).
/node
Текущее имя ноды.
/node
Переименовать ноду. Новое имя попадёт в теги VLESS-ссылок.
{
"node_name": "Germany"
}
/peers
Список peers общей подписки.
/peers
Добавить или обновить remote-ноду для общей подписки.
{
"name": "de",
"url": "https://DE_IP:SUB_PORT/sub/{uuid}/local"
}
/peers/NAME
Удалить remote-ноду из общей подписки.
/nodes/join
Авто-регистрация ноды (используется командой vpn join): мастер сохраняет ноду, добавляет peer и возвращает upstream API token. Авторизуется по join_token, не по API-токену.
/nodes
Registry подключённых нод + peers.
/nodes/health
Проверить health subscription-серверов всех peers.
/federation
Текущий upstream federation-конфиг.
/federation
Сохранить upstream к мастер API. Основной процесс будет подтягивать пользователей с мастера. Отключение: DELETE /federation.
{
"api_url": "https://MASTER_IP:API_PORT/api",
"token": "MASTER_API_TOKEN"
}
/backups
Список созданных бэкапов.
/backups
Создать zip-бэкап конфигурации (пользователи, токены, peers, TLS, Reality).
/traffic
Информация о счётчиках трафика (Xray Stats). Алиас: /stats. Live-значения — через vpn stats в консоли.
/server/cdn-xhttp
Настроить XHTTP-CDN ссылки удалённо (аналог vpn cdn xhttp ...). Алиасы: /server/xhttp-cdn, /server/relay, /config/....
/panel
Встроенная веб-панель, которую отдаёт сам API: https://IP:API_PORT/panel. Клиенты, продления, ссылки, peers и federation из браузера.
Несколько серверов на разных локациях можно собрать в одну подписку: пользователи живут на мастере, а каждая нода отдаёт свои VLESS-ссылки.
vpn node NAME
Задаёт имя локации в тегах ссылок. Вместо lol123-ws клиент увидит, например, Germany WS и Germany Reality.
vpn node Germany
vpn join MASTER TOKEN NAME
Авто-подключение новой локации одной командой: нода сохраняет upstream, мастер добавляет её в peers.
vpn join https://MASTER_IP:API_PORT/api JOIN_TOKEN Germany
vpn peer add NAME URL
Добавляет remote-ноду в subscription-агрегатор вручную. Главный /sub/UUID вернёт локальные ссылки плюс ссылки всех peers.
vpn peer add de https://IP:PORT/sub/{uuid}/local
/sub/UUID/local
Возвращает только ссылки этой ноды. Используется peers, чтобы не было рекурсивного сбора подписок.
vpn federation upstream API_URL API_TOKEN
Подключает ноду к мастер API. Нода периодически забирает /clients, синхронизирует users.json и перезапускает Xray при изменениях.
vpn federation upstream https://MASTER:PORT/api API_TOKEN
Мастер - это сервер, где ты создаёшь, продлеваешь и удаляешь клиентов. Его API считается общей базой пользователей.
vpn node Master
vpn api status
vpn api token
vpn sub status
Запомни MASTER_IP, порт API, API token и порт subscription мастера.
На каждой отдельной ноде задай понятное имя и включи синхронизацию с мастер API. Имя попадёт в клиентские ссылки.
vpn node Germany
vpn federation upstream https://MASTER_IP:API_PORT/api MASTER_API_TOKEN
vpn federation sync
vpn sub status
Нода сама будет подтягивать пользователей. Команда vpn federation sync нужна, чтобы проверить сразу. Быстрее всего этот шаг делает одна команда vpn join.
На мастере добавь subscription URL каждой локации. {uuid} оставляй как есть: мастер сам подставит UUID клиента. После vpn join это происходит автоматически.
vpn peer add de https://DE_IP:DE_SUB_PORT/sub/{uuid}/local
vpn peer add nl https://NL_IP:NL_SUB_PORT/sub/{uuid}/local
vpn peer list
В peer URL используй именно /local, чтобы мастер забирал только ссылки этой ноды и не собирал подписки по кругу.
Продажа идёт через мастер. После создания ноды получат такого же клиента с тем же UUID и сроком действия.
vpn add lol123 30
Через HTTP API это тот же сценарий: POST /api/create с телом {"name":"lol123","days":30}.
Клиенту нужна только subscription-ссылка мастера. Внутри будут ссылки мастера и всех подключённых peers.
https://MASTER_IP:MASTER_SUB_PORT/sub/CLIENT_UUID
Для проверки открой raw-версию. Там должны быть теги вроде Master WS, Germany Reality, Netherlands WS.
https://MASTER_IP:MASTER_SUB_PORT/sub/CLIENT_UUID/raw
vpn join или vpn federation upstream, а в общую подписку добавляй только /sub/{uuid}/local ссылки нод. Наружу клиенту отдаётся одна ссылка мастера: /sub/CLIENT_UUID.
/sub/CLIENT_UUID/raw, /sub/CLIENT_UUID/clash, /sub/CLIENT_UUID/sing-box, /sub/CLIENT_UUID/json и клиентская страница /sub/CLIENT_UUID/page.
Выбери метод, измени тело запроса и скопируй готовый curl или fetch. При self-signed сертификате сначала прими его в браузере (см. callout вверху) либо добавь -k к curl.
API всегда возвращает JSON с ok. Если ok: false, смотри поле error.
401 unauthorizedНет токена или токен неправильный.401 bad_join_tokenНеверный join token при POST /nodes/join.400 bad_nameИмя пустое или содержит запрещенные символы.400 bad_daysДни не указаны или меньше 1.404 user_not_foundКлиент с таким именем не найден.404 not_foundТакого метода/пути нет.409 user_already_existsКлиент с таким именем уже есть.500 internal_errorВнутренняя ошибка — детали в logs.txt на сервере.