H1

H1Cloud VLESS · API Docs

Все команды main.sh и HTTP API для управления VLESS-клиентами.

H1Cloud VLESS

HTTPS API для управления VLESS-клиентами

API запускается отдельным сервером на выбранном порту и слушает все IP: 0.0.0.0:PORT. Для доступа нужен токен. API и subscription работают по HTTPS: self-signed сертификат генерируется автоматически, свой ставится через vpn ssl cert CERT KEY.

Self-signed сертификат. По умолчанию API/sub используют самоподписанный сертификат: в curl добавляй флаг -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).

API и подписка

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.

Ноды и federation

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 в открытом доступе.

Bearer token

Authorization: Bearer TOKEN

X-API-Key

X-API-Key: TOKEN

Методы API

Все примеры ниже используют префикс /api. Без него тоже работает: /create, /clients. Нажми на метод, чтобы подставить его в тестер.

GET /health

Проверить, что API отвечает, и получить список методов. Токен не нужен. То же самое отдаёт GET /.

GET /status

Состояние сервера: имя ноды, порты WS/Reality/subscription, клиенты, peers и federation. Алиасы: /system, /dashboard.

GET /clients

Список всех клиентов. Алиас: /users.

{
  "ok": true,
  "clients": [
    {
      "name": "test",
      "uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "expires_at": 1760000000,
      "left_days": 30,
      "link": "vless://..."
    }
  ]
}
GET /clients/NAME

Данные одного клиента по имени. Алиас: GET /info?name=NAME.

POST /create

Создать клиента. traffic_limit_gb и device_limit опциональны. Алиас: POST /clients.

{
  "name": "test",
  "days": 30,
  "traffic_limit_gb": 100,
  "device_limit": 3
}
PATCH /edit

Продлить клиента (days прибавляется к текущей дате окончания) и/или изменить лимиты. Алиас: PATCH /clients/NAME.

{
  "name": "test",
  "days": 15,
  "traffic_limit_gb": 50,
  "device_limit": 2
}
PATCH /edit

Переименовать клиента.

{
  "name": "test",
  "new_name": "newtest"
}
PATCH /clients/NAME/ban

Забанить клиента без удаления: он остаётся в базе, но пропадает из конфига Xray, key.txt и подписок. Алиас: POST /ban {"name":"test"}.

{
  "reason": "chargeback"
}
PATCH /clients/NAME/unban

Разбанить клиента и вернуть его в конфиги/подписки. Алиас: POST /unban {"name":"test"}.

DELETE /clients/NAME

Удалить клиента по имени. Алиас: POST /delete {"name":"test"}.

GET /keys

Все клиенты с готовыми VLESS-ссылками. На сервере обновляется key.txt. Текстовая версия: GET /key.txt.

GET /logs?count=100

Последние записи из logs.txt (1–1000, по умолчанию 100).

GET /node

Текущее имя ноды.

PATCH /node

Переименовать ноду. Новое имя попадёт в теги VLESS-ссылок.

{
  "node_name": "Germany"
}
GET /peers

Список peers общей подписки.

POST /peers

Добавить или обновить remote-ноду для общей подписки.

{
  "name": "de",
  "url": "https://DE_IP:SUB_PORT/sub/{uuid}/local"
}
DELETE /peers/NAME

Удалить remote-ноду из общей подписки.

POST /nodes/join

Авто-регистрация ноды (используется командой vpn join): мастер сохраняет ноду, добавляет peer и возвращает upstream API token. Авторизуется по join_token, не по API-токену.

GET /nodes

Registry подключённых нод + peers.

GET /nodes/health

Проверить health subscription-серверов всех peers.

GET /federation

Текущий upstream federation-конфиг.

PATCH /federation

Сохранить upstream к мастер API. Основной процесс будет подтягивать пользователей с мастера. Отключение: DELETE /federation.

{
  "api_url": "https://MASTER_IP:API_PORT/api",
  "token": "MASTER_API_TOKEN"
}
GET /backups

Список созданных бэкапов.

POST /backups

Создать zip-бэкап конфигурации (пользователи, токены, peers, TLS, Reality).

GET /traffic

Информация о счётчиках трафика (Xray Stats). Алиас: /stats. Live-значения — через vpn stats в консоли.

POST /server/cdn-xhttp

Настроить XHTTP-CDN ссылки удалённо (аналог vpn cdn xhttp ...). Алиасы: /server/xhttp-cdn, /server/relay, /config/....

GET /panel

Встроенная веб-панель, которую отдаёт сам API: https://IP:API_PORT/panel. Клиенты, продления, ссылки, peers и federation из браузера.

Ноды и общая подписка

Несколько серверов на разных локациях можно собрать в одну подписку: пользователи живут на мастере, а каждая нода отдаёт свои VLESS-ссылки.

NODE vpn node NAME

Задаёт имя локации в тегах ссылок. Вместо lol123-ws клиент увидит, например, Germany WS и Germany Reality.

vpn node Germany
JOIN vpn join MASTER TOKEN NAME

Авто-подключение новой локации одной командой: нода сохраняет upstream, мастер добавляет её в peers.

vpn join https://MASTER_IP:API_PORT/api JOIN_TOKEN Germany
PEER vpn peer add NAME URL

Добавляет remote-ноду в subscription-агрегатор вручную. Главный /sub/UUID вернёт локальные ссылки плюс ссылки всех peers.

vpn peer add de https://IP:PORT/sub/{uuid}/local
LOCAL /sub/UUID/local

Возвращает только ссылки этой ноды. Используется peers, чтобы не было рекурсивного сбора подписок.

SYNC vpn federation upstream API_URL API_TOKEN

Подключает ноду к мастер API. Нода периодически забирает /clients, синхронизирует users.json и перезапускает Xray при изменениях.

vpn federation upstream https://MASTER:PORT/api API_TOKEN
  1. 1

    Выбери мастер-сервер

    Мастер - это сервер, где ты создаёшь, продлеваешь и удаляешь клиентов. Его API считается общей базой пользователей.

    vpn node Master
    vpn api status
    vpn api token
    vpn sub status

    Запомни MASTER_IP, порт API, API token и порт subscription мастера.

  2. 2

    Подключи каждую локацию к мастеру

    На каждой отдельной ноде задай понятное имя и включи синхронизацию с мастер 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.

  3. 3

    Добавь ноды в подписку мастера

    На мастере добавь 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, чтобы мастер забирал только ссылки этой ноды и не собирал подписки по кругу.

  4. 4

    Создай клиента только на мастере

    Продажа идёт через мастер. После создания ноды получат такого же клиента с тем же UUID и сроком действия.

    vpn add lol123 30

    Через HTTP API это тот же сценарий: POST /api/create с телом {"name":"lol123","days":30}.

  5. 5

    Отдай клиенту одну ссылку

    Клиенту нужна только 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.
Форматы подписки. Помимо base64 доступны /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 на сервере.