# Remnawave Panel v2.8.1

**URL:** https://f.docs.rw/t/topic/178
**Category:** Panel
**Tags:** stable
**Created:** 2026-06-29T16:00:00Z
**Posts:** 12

## Post 1 by @remnawave — 2026-06-29T16:00:00Z

> [!important] Важно  
> **Перед обновлением** , обязательно сделать полный бекап ваших данных (база данных, `.env`-файл). [См. Инструменты бекапа и восстановления.](https://docs.rw/awesome-remnawave#backup-restore)

## На что обратить внимание?

#### Миграция базы данных – HWID-устройство и История Запросов подписки

В таблицах `hwid_user_devices` и `user_subscription_request_history` столбец `userUuid` заменен на `userId` (`BigInt`).

- **HWID-устройства** – если таблица содержит **≤ 500 тыс. записей** , данные будут **перенесены** автоматически. **Если \> 500 тыс. записей** , таблица будет **очищена** (_все устройства будут перерегистрированы при следующем запросе на обновление подписки_).
- **Subscription Request History** – таблица будет очищена во время миграции..

### Уведомления об истечении подписки теперь отключены по умолчанию

Раньше вебхуки/уведомления о приближающемся и наступившем истечении подписки (`user.expires_in_72_hours`, `user.expires_in_48_hours`, `user.expires_in_24_hours`, `user.expired_24_hours_ago`) отправлялись **по умолчанию, без отдельной настройки**.

Теперь эти события **объединены в одно `user.expiration` и по умолчанию выключены**. Если вы полагались на старое поведение, после обновления уведомления об истечении **перестанут приходить** , пока вы их явно не включите.

#### Что изменилось

- Старые события **удалены** ([см. также раздел про модель вебхуков](https://docs.rw/features/webhooks#scope-user)):
  - ~~`user.expires_in_72_hours`~~
  - ~~`user.expires_in_48_hours`~~
  - ~~`user.expires_in_24_hours`~~
  - ~~`user.expired_24_hours_ago`~~

- Вместо них — единое событие **`user.expiration`** с объектом `meta.expiration` (знаковое значение в часах относительно момента истечения).
- Набор и моменты отправки теперь **настраиваются** через `.env`, а не зашиты в код.

#### Как вернуть прежнее поведение (включить уведомления)

Добавьте в `.env`:

```
### Expiration notifications (webhook, telegram)
EXPIRATION_NOTIFICATIONS_ENABLED=true
# negative = за N часов ДО истечения, positive = через N часов ПОСЛЕ истечения
EXPIRATION_NOTIFICATIONS=[-72, -48, -24, 24]
```

Конфигурация `[-72, -48, -24, 24]` полностью повторяет старое поведение: уведомления за 72, 48 и 24 часа до истечения и через 24 часа после.

> **Важно:** уведомления отправляются, только если включён хотя бы один канал доставки — `IS_TELEGRAM_NOTIFICATIONS_ENABLED=true` **или** `WEBHOOK_ENABLED=true`. Если оба выключены, джоба не запустится даже при `EXPIRATION_NOTIFICATIONS_ENABLED=true`.

#### Формат `EXPIRATION_NOTIFICATIONS`

Массив целых чисел — часы относительно момента истечения подписки (`expireAt`):

- **отрицательное** — за `|N|` часов **до** истечения (_истекает через N часов_);
- **положительное** — через `N` часов **после** истечения (_истекло N часов назад_);
- допустимый диапазон: **от −168 до 168** , значение **0 запрещено** ;
- **не более 5 значений в каждую сторону** (до 5 отрицательных и 5 положительных);
- без дубликатов, строго по возрастанию (ASC), например `[-72, -48, -24, 24]`.

#### Кастомный `notifications-config.yml` — удалите устаревшие ключи

> :warning: **Если вы используете [кастомный конфиг](https://docs.rw/features/fine-tuned-notifications) уведомлений** (примонтированный `./config.yml:/var/lib/remnawave/configs/notifications/notifications-config.yml`), после обновления **панель не запустится** , пока вы не удалите из `.yml` старые ключи событий. Конфиг проходит строгую валидацию, и неизвестный ключ приводит к фатальной ошибке старта:
> 
> ```
> [NotificationsConfig] Validation Errors:
> ❌ events.user.expires_in_72_hours: Invalid enum value...
> Please fix the notifications config file and restart the application.
> ```

**Удалите** из `events:` следующие ключи (события удалены):

```
# ❌ Удалить — события больше не существуют
  user.expires_in_72_hours:
    telegram: true
    webhook: true
  user.expires_in_48_hours:
    telegram: true
    webhook: true
  user.expires_in_24_hours:
    telegram: true
    webhook: true
  user.expired_24_hours_ago:
    telegram: true
    webhook: true
```

**При необходимости добавьте** новый ключ для управления каналами объединённого события (опционально — если ключ не указан, событие включено по умолчанию для обоих каналов):

```
# ✅ Новое объединённое событие
  user.expiration:
    telegram: true
    webhook: true
```

#### Полезная нагрузка вебхука

Событие `user.expiration` содержит `meta.expiration` с тем же знаковым значением, что сработало:

```
{
  "scope": "user",
  "event": "user.expiration",
  "meta": { "expiration": -72 }
}
```

### Новая опциональная переменная

```
SERVICE_DISABLE_SRH_RECORDS=false
```

Установите значение `true`, чтобы отключить сохранение истории запросов на подписку. **Значение по умолчанию** — `false`.

### Подписки (raw): `isHwidLimited` заменён на объект `hwidCheckup`

В объекте `convertedUserInfo` удалено булево свойство `isHwidLimited`. Вместо него добавлен объект `hwidCheckup` (nullable), который содержит детальную информацию о проверке HWID: `subscriptionAllowed`, `maxDeviceReached`, `hwidNotSupported` и `limitBypassed` (все — boolean). Значение `null` означает, что проверка HWID не выполнялась.

Затронутые эндпоинты:

- `GET /api/subscriptions/by-short-uuid/{shortUuid}/raw` (в `convertedUserInfo`)

* * *

### Эндпоинт `/api/system/tools/happ/encrypt` был удален

Рекомендуется использовать самостоятельную реализацию или использовать один из готовых инструментов: [https://www.npmjs.com/package/@kastov/cryptohapp](https://www.npmjs.com/package/@kastov/cryptohapp), [Remnawave Utils](https://utils.docs.rw/cryptohapp) .

* * *

# Бекенд

## Новый функционал

- **Mihomo: поддержка протокола Hysteria2**  
Полная генерация Hysteria2-подписки для клиентов с ядром **Mihomo** , включая QUIC-параметры (brutal up/down, UDP hop, bbrProfile, congestion), обфускацию (salamander) и TLS-опции.
- **Mihomo: поддержка транспорта xHTTP**  
xHTTP-транспорт для клиентов Mihomo с полным набором опций xmux, download-settings и padding.
- **Mihomo: выбор IP-версии**  
Новое поле хоста `mihomoIpVersion` (`dual / ipv4 / ipv6 / ipv4-prefer / ipv6-prefer`) пробрасывается в `ip-version` конфига Mihomo.
- **Поддержка ECH в Xray-Json**  
TLS-опции `echForceQuery` и `echConfigList` для **Xray-Json** (значения берутся из **инбаунда** ).
- **Hysteria2 в Xray (Base64)**  
Генерация ссылок `hysteria2://auth@host:port/?params#remark`
- **Улучшения транспорта KCP**  
Параметры `clientMtu`, `clientTti` теперь передаются в Base64-подписку; http-заголовок KCP теперь включает `path` и `host` из заголовков запроса.
- **Шифрование тела ответа подписки (age)**  
**Response Rules** могут шифровать ответ через `age-encryption`: методы `age1` (X25519) и `age1pq1` (гибридный post-quantum). Генерация ключевых пар добавлена в Rescue CLI.
- **SOCKS5-прокси для нод**  
Новое поле ноды `proxyUrl`, весь API-трафик к ноде может идти через SOCKS5-прокси.
- **Отдельный множитель потребления ноды**  
Новое поле `nodeConsumptionMultiplier` (учёт общего трафика ноды отдельно от пользовательского `consumptionMultiplier`).
- **Множественные теги хостов**  
Поле `tag` заменено на массив `tags[]` (до 10 тегов, regex `^[A-Z0-9_:]+$`, ≤36 символов).
- **Удаление `allowInsecure`** — добавлены `pinnedPeerCertSha256`и `verifyPeerCertByName`, `allowInsecure` удалён.
- **`disableHwidCheck` в Response Rules**  
Флаг отключает проверку HWID на уровне правила (приоритетнее настроек подписки).
- **Bulk-update хостов**  
Вместо `set-inbound` / `set-port` добавлен универсальный `PATCH hosts/bulk/update` со всеми полями хоста.
- **Статистика по нескольким нодам**  
Новый эндпоинт `POST /bandwidth-stats/nodes/users`: топ-пользователи + sparkline-данные по набору нод (`GetStatsNodesUsersUsageCommand`).
- **Заметки к нодам**  
Новое поле `note` (до 255 символов).
- **HWID advisory lock**  
Создание HWID-устройства теперь использует PostgreSQL advisory locks (`pg_advisory_xact_lock`) для защиты от гонок при проверке лимита устройств.  
Это нововведение является частью исправления [CVE-2026-39880](https://github.com/remnawave/backend/security/advisories/GHSA-985p-44h5-v3pq).
- **HWID: трекинг IP запроса**  
Записи устройств теперь хранят `requestIp` запроса подписки.
- **Метрики Load Average ноды**  
Новые Prometheus-метрики: `node_cpu_load_avg_1m`, `node_cpu_load_avg_5m`, `node_cpu_load_avg_15m`.
- **Плагины нод: AS-листы** — общие списки теперь поддерживают тип `asList` (номера ASN) в дополнение к `ipList`.
- **base64-трансформация в Template Variables**  
Префикс `rwEncodeBase64:` в поддерживаемых полях (тех же полях, в которых доступны `Template Variables)` кодирует содержимое в `base64`.
- **CLI: обслуживание таблицы статистики**  
Новые действия `Rescue CLI`: **Generate keypairs** (генерация ключей шифрования), **Clean up Users Usage Table** (_TRUNCATE + VACUUM + REINDEX_), **Delete Users Usage by date range** (_batch-удаление по диапазону дат_).
- **Сортировка пользователей по `usedTrafficPercentage`**  
Сортировка по вычисляемому проценту использованного трафика.
- **Поддержка `DIRECT_URL` для Prisma**  
Отдельное прямое подключение к БД (в обход пулера, напр. PgBouncer)

* * *

## Исправления

- **Xray-Json: WS-транспорт**  
Заголовок Host перенесён из объекта `headers` в отдельное поле `host`.
- **Advanced Xray-Json: виртуальные хосты**  
Кандидаты-хосты теперь исключают сам хост-получатель.
- **Plugin Executor**  
Теперь нацеливается только на включённые и подключённые ноды.
- **Подавление ошибок 404 в логах**  
Снижение шума в логах (404 больше не логируется).
- **Метрики: event loop delay**  
Теперь вычитается смещение `resolution` для корректных значений.
- **Xray-Json: fallback outbounds**  
`baseTemplate.outbounds` безопасно обрабатывается при `undefined`.
- **Заголовки в ws/httpupgrade**  
Корректная передача заголовков; добавлен `host` в опции `ws`-транспорта.
- **Кодирование base64 share-link**  
Пробел в query кодируется как `%20` вместо `+`.
- **Таймаут HTTP-запросов Telegram-бота**  
Таймаут снижен до 10 секунд (вместо несколько минут по умолчанию).

* * *

## Улучшения

- **БД: `userUuid` → `userId` (BigInt)**  
В таблицах HWID-устройств и истории запросов подписки — более быстрые `join`’ы и меньшие индексы.
- **Process titles**  
Процессы API, processor и scheduler теперь задают `process.title` (`rw-api`, `rw-processor`, `rw-scheduler`).
- **Оптимизация реордеров**  
`viewPosition` в репозиториях (`internal-squad`, `subpage-configs`, `config-profile`) обновляется через батч-метод.
- **`FINGERPRINTS`**  
Переведён в массив строк с нормализацией (`includes` + fallback `chrome`); добавлено значение `360`; поле `fingerprint` теперь свободная строка.
- **Logs → /dev/null**  
`out_file`/`error_file` процессов PM2 перенаправлены в `/dev/null`
- **Dockerfile**  
Удалено копирование `patches` и `libs` в финальный образ.
- **Удалён лимит на YAML-алиасы**  
в `Clash`/`Mihomo`/`Stash` генераторах.
- **Удалена устаревшая команда CLI**  
`fixPostgresCollation` удалена; улучшено сообщение о сбросе суперадмина.

* * *

# Фронтенд

## Новый функционал

- **Табличный вид для Хостов**  
Добавлено отображение хостов в виде таблицы в дополнение к карточкам: сортировка, видимость колонок. Карточка хоста переработана: `OverflowList` для нод, иконки-индикаторы с тултипами, отображение inbound-тега, исключённых сквадов и server description.
- **Массовое редактирование хостов**  
Новое модальное окно для bulk-редактирования хостов всеми полями (взамен раздельных `set-inbound` / `set-port`). Добавлено множественное перемещение хостов и мульти-выбор.
- **Метаданные нод и пользователей**  
Отображение метаданных ноды и метаданных пользователя.
- **Колонка процента использованного трафика**  
Колонка `usedTrafficPercentage` в таблице пользователей (с сортировкой).
- **Шаблоны фильтров таблицы пользователей**  
Возможность сохранять/применять шаблоны фильтров (`users-table-templates`) в таблице пользователей.
- **Статистика по нескольким нодам**  
Новый виджет `NodesUsersUsageStatistics` – запрос и отображение статистики (топ-пользователи + sparkline) сразу по набору нод.
- **Disclaimer-оверлей**  
Оверлей с дисклеймером и сохранением состояния принятия пользователем.
- **QR-код билдер**  
`renderSVG` заменён на собственный `QrCodeBuilder` для генерации QR-кодов ссылки-подписки пользователя.
- **WASM crash handling в редакторе Профилей**  
Обработка падений WASM и автоматический перезапуск.
- **Открытие ноды в Infra Billing**  
Прямой переход к ноде из раздела инфра-биллинга.
- **Инспекторы HWID и SRH**  
Улучшены таблицы инспектора HWID-устройств и истории запросов подписки, переработаны соответствующие модальные окна.

* * *

## Исправления

- **Иконки действий в таблицах**  
Исправлено отображение action-иконок в таблицах; скорректирован размер колонки User-Agent в таблице запросов подписки.
- **Infra-billing: даты в UTC**  
Date-only выбор дат удерживается в UTC, чтобы записи 1-го числа месяца корректно учитывались ([#354](https://github.com/remnawave/frontend/pull/354)).
- **Единицы трафика**  
Единицы трафика помечены как GiB ([#345](https://github.com/remnawave/frontend/pull/355)).

* * *

## **Улучшения**

- **Mantine v9**  
Миграция UI-фреймворка с Mantine v8.3.18 на **v9.3.1**
- **Оптимизация `SessionsExplorerCard`**  
Улучшены вычисление ключей и логика рендеринга строк сессий.
- **Утилита диапазонов дат**  
Диапазоны дат заменены на общую утилитарную функцию для консистентности.
- **Рефакторинг user-action компонентов**  
Переработаны компоненты действий над пользователем; обновлены стили (варианты и цвета `ActionIcon`).
- **Bulk-операции над пользователями**
- Реструктуризация виджетов массовых действий: `bulk-users-actions`, `bulk-users-update`, `bulk-all-users-*`, карточки `access-setting` / `traffic-limits` / `device-tag-settings`.

* * *

# Запросы с форума

- [Эндпоинт /raw: отдача "кастомных" примечаний](https://f.docs.rw/t/topic/221)
- [Выбирать первый shortId вместо случайного выбора](https://f.docs.rw/t/topic/214)
- [Клонирование Внешних сквадов](https://f.docs.rw/t/topic/210)
- [Убрать закрытие карточки юзера после нажатия "Сбросить трафик"](https://f.docs.rw/t/topic/207)
- [Добавить "Принудительный перезапуск" для одной ноды](https://f.docs.rw/t/topic/202)
- [Перезапуск провалишихся вебхук-задач](https://f.docs.rw/t/topic/193)
- [Отключение проверки HWID через Response Rules](https://f.docs.rw/t/topic/155)
- [Изменение отображения паролей в карточке пользователя](https://f.docs.rw/t/topic/148)
- [Коэф. использования для трафика ноды (трекинг)](https://f.docs.rw/t/topic/134)
- [Шаблоны фильтров в таблице пользователей](https://f.docs.rw/t/topic/92)
- [Хосты: табличный вид или группировка](https://f.docs.rw/t/topic/86)
- [Поддержка PGBouncer](https://f.docs.rw/t/topic/49)
- [Управление правами для API токенов](https://f.docs.rw/t/topic/228) , [Scoped API tokens and presets for built-in integrations](https://f.docs.rw/t/topic/129)
- :crown:[Конфигурация хуков об окончании подписки через .env](https://f.docs.rw/t/topic/182)
- :crown: [Деплой dev-версии на try.rw](https://f.docs.rw/t/topic/16)

* * *

---

## Post 2 by @remnawave — 2026-06-29T16:14:54Z

> **API Changelog 2.7.4 vs. 2.8.0**
>
> #### New endpoints
> 
> - `POST /api/bandwidth-stats/nodes/users` — per-user bandwidth stats by node
> - `PATCH /api/hosts/bulk/update` — bulk-update hosts (replaces the removed `set-inbound` / `set-port` endpoints)
> 
> * * *
> 
> #### Hosts: replaced single `tag` with `tags` array
> 
> The single `tag` property is removed and replaced with a `tags` array, allowing multiple tags per host. In responses `tag` (required) is removed and `tags` (optional) is added; in requests `tag` is removed and `tags` is added.
> 
> Affected endpoints:
> 
> - `GET /api/hosts`
> - `PATCH /api/hosts`
> - `POST /api/hosts`
> - `POST /api/hosts/bulk/delete`
> - `POST /api/hosts/bulk/disable`
> - `POST /api/hosts/bulk/enable`
> - `GET /api/hosts/{uuid}`
> - `GET /api/subscriptions/by-short-uuid/{shortUuid}/raw` (in `resolvedProxyConfigs/metadata`)
> 
> * * *
> 
> #### Hosts: certificate pinning replaces `allowInsecure`
> 
> The `allowInsecure` property is removed from both requests and responses. Two new properties take its place: `pinnedPeerCertSha256` (pin by certificate fingerprint) and `verifyPeerCertByName` (verify by certificate name).
> 
> Affected endpoints:
> 
> - `GET /api/hosts`
> - `PATCH /api/hosts`
> - `POST /api/hosts`
> - `POST /api/hosts/bulk/delete`
> - `POST /api/hosts/bulk/disable`
> - `POST /api/hosts/bulk/enable`
> - `GET /api/hosts/{uuid}`
> - `GET /api/subscriptions/by-short-uuid/{shortUuid}/raw` (in `resolvedProxyConfigs/securityOptions`)
> 
> * * *
> 
> #### Hosts: added `mihomoIpVersion`
> 
> A new `mihomoIpVersion` property is added to control the IP version used by Mihomo clients.
> 
> Affected endpoints:
> 
> - `GET /api/hosts`
> - `PATCH /api/hosts`
> - `POST /api/hosts`
> - `POST /api/hosts/bulk/delete`
> - `POST /api/hosts/bulk/disable`
> - `POST /api/hosts/bulk/enable`
> - `GET /api/hosts/{uuid}`
> - `GET /api/subscriptions/by-short-uuid/{shortUuid}/raw` (in `resolvedProxyConfigs/clientOverrides`)
> 
> * * *
> 
> #### Hosts: ALPN now supports HTTP/2 and HTTP/3
> 
> The `alpn` property accepts new values: `h2`, `h3`, `h2,http/1.1`, `h3,h2`, `h3,h2,http/1.1`, `http/1.1`.
> 
> Affected endpoints:
> 
> - `GET /api/hosts`
> - `PATCH /api/hosts`
> - `POST /api/hosts`
> - `POST /api/hosts/bulk/delete`
> - `POST /api/hosts/bulk/disable`
> - `POST /api/hosts/bulk/enable`
> - `GET /api/hosts/{uuid}`
> 
> * * *
> 
> #### Hosts: removed fixed `fingerprint` values
> 
> The predefined `fingerprint` enum values are removed: `android`, `chrome`, `edge`, `firefox`, `ios`, `qq`, `random`, `randomized`, `safari`.
> 
> Affected endpoints:
> 
> - `PATCH /api/hosts`
> - `POST /api/hosts`
> 
> * * *
> 
> #### Hosts: `host`, `path` and `sni` are now nullable
> 
> The `host`, `path` and `sni` request properties became nullable. On `PATCH /api/hosts` the `isDisabled` request property now defaults to `false`.
> 
> Affected endpoints:
> 
> - `PATCH /api/hosts`
> - `POST /api/hosts`
> 
> * * *
> 
> #### Hosts: `isDisabled` and `excludeFromSubscriptionTypes` are now always returned
> 
> Both properties became required in responses (previously optional). The `isDisabled` default value of `false` was removed.
> 
> Affected endpoints:
> 
> - `GET /api/hosts`
> - `PATCH /api/hosts`
> - `POST /api/hosts`
> - `POST /api/hosts/bulk/delete`
> - `POST /api/hosts/bulk/disable`
> - `POST /api/hosts/bulk/enable`
> - `GET /api/hosts/{uuid}`
> 
> * * *
> 
> #### Removed host bulk endpoints
> 
> The following endpoints were removed without deprecation. Use `PATCH /api/hosts/bulk/update` instead.
> 
> - `POST /api/hosts/bulk/set-inbound`
> - `POST /api/hosts/bulk/set-port`
> 
> * * *
> 
> #### Replaced `userUuid` with `userId` in HWID devices and subscription request history
> 
> The `userUuid` property is replaced with `userId` (number) in the response objects. `requestIp` (nullable string) is added to HWID device responses.
> 
> Affected HWID endpoints:
> 
> - `GET /api/hwid/devices`
> - `POST /api/hwid/devices`
> - `POST /api/hwid/devices/delete`
> - `POST /api/hwid/devices/delete-all`
> - `GET /api/hwid/devices/{userUuid}`
> 
> Affected subscription request history endpoints:
> 
> - `GET /api/subscription-request-history`
> - `GET /api/users/{uuid}/subscription-request-history`
> 
> * * *
> 
> #### Nodes: added `nodeConsumptionMultiplier`, `note` and `proxyUrl`
> 
> Three new properties are added to nodes: `nodeConsumptionMultiplier` (traffic consumption multiplier), `note` (free-form note) and `proxyUrl`. The bulk update endpoint exposes `nodeConsumptionMultiplier` and `note` only.
> 
> Affected endpoints:
> 
> - `GET /api/nodes`
> - `PATCH /api/nodes`
> - `POST /api/nodes`
> - `POST /api/nodes/actions/reorder`
> - `POST /api/nodes/bulk-actions/update` (`nodeConsumptionMultiplier`, `note`)
> - `GET /api/nodes/{uuid}`
> - `POST /api/nodes/{uuid}/actions/disable`
> - `POST /api/nodes/{uuid}/actions/enable`
> 
> * * *
> 
> #### Subscription response rules: added `encryption` and `disableHwidCheck`
> 
> The `responseModifications` object gains two optional properties: `encryption` and `disableHwidCheck`.
> 
> Affected endpoints:
> 
> - `GET /api/subscription-settings`
> - `PATCH /api/subscription-settings`
> - `POST /api/system/testers/srr-matcher`
> 
> * * *
> 
> #### Subscriptions (raw): renamed `tti` to `clientTti`
> 
> In `resolvedProxyConfigs/transportOptions`, the required `tti` property is removed and `clientTti` is added.
> 
> Affected endpoints:
> 
> - `GET /api/subscriptions/by-short-uuid/{shortUuid}/raw`
> 
> * * *
> 
> #### `trafficLimitBytes` type changed from `integer` to `number`
> 
> Affected endpoints:
> 
> - `GET /api/subscriptions/by-short-uuid/{shortUuid}/raw`
> - `GET /api/users`
> - `PATCH /api/users`
> - `POST /api/users`
> - `POST /api/users/bulk/all/update`
> - `POST /api/users/bulk/update`
> - `GET /api/users/by-email/{email}`
> - `GET /api/users/by-id/{id}`
> - `GET /api/users/by-short-uuid/{shortUuid}`
> - `GET /api/users/by-tag/{tag}`
> - `GET /api/users/by-telegram-id/{telegramId}`
> - `GET /api/users/by-username/{username}`
> - `GET /api/users/{uuid}`
> - `POST /api/users/{uuid}/actions/disable`
> - `POST /api/users/{uuid}/actions/enable`
> - `POST /api/users/{uuid}/actions/reset-traffic`
> - `POST /api/users/{uuid}/actions/revoke`
> - `POST /api/nodes`
> 
> * * *
> 
> #### Nodes: restart endpoints now use a request body
> 
> Both node restart endpoints now take `forceRestart` (boolean) in the **request body** , and the property is **required**.
> 
> Affected endpoints:
> 
> - `POST /api/nodes/{uuid}/actions/restart`
> - `POST /api/nodes/actions/restart-all`
> 
> * * *
> 
> #### Subscriptions (raw): replaced `isHwidLimited` with `hwidCheckup` object
> 
> The boolean `isHwidLimited` property is removed from the `convertedUserInfo` object. It is replaced with an `hwidCheckup` object (nullable) carrying detailed HWID check info: `subscriptionAllowed`, `maxDeviceReached`, `hwidNotSupported` and `limitBypassed` (all booleans). A `null` value means no HWID check was performed.
> 
> Affected endpoints:
> 
> - `GET /api/subscriptions/by-short-uuid/{shortUuid}/raw`

---

## Post 11 by @remnawave — 2026-07-03T03:14:43Z



---

## Post 12 by @remnawave — 2026-07-13T20:12:06Z

# Remnawave Panel v2.8.1

В этом обновлении содержатся исправления (в большей мере в UI).

> [!tip] Внимание  
> Это финальное обновление ветки 2.x.x. В этой ветке обновлений больше не ожидается.
> 
> Следующий ближайший релиз – 3.0.0, в котором будут значительные изменения в RestAPI. В частности – все операции над пользователем теперь будут использовать **userId** вместо **userUuid**. _Для более плавного перехода рекомендуется заранее сохранить ID пользователя в вашей системе._
