#Notifications
#Requirements (V8 Phase 3) V8 requirement
| # | Feature | Rules |
|---|---|---|
| 3.14 | In-app notifications | Paginated list, unread count, mark one / all as read |
| 3.15 | Notification channels | Email, Telegram, Pushover, Slack, Discord, Webhook. Add / edit / delete + send test. Discord is set up with a Discord webhook URL (like Slack). Webhook takes any URL and Central POSTs the notification (title + message) there as JSON, like V7 V8 requirement 2026-10-03 |
| 3.17 | Server alerts | Central calls the OSS API to get server alerts, shows them and sends them to the user's channels. Built with the Servers phase |
| 3.5 | Email preferences | On/off: account updates, credentials, informative emails |
#V7 reference V7 only
notifications(Laravel database notifications):GET /notifications/unread,GET /notifications/mark-as-read.notification_channels(per user):type,label,bot_token,group_id,email,webhook_url. Endpoints: resource +send-test-notification. V7 already had Discord and Webhook types (both usewebhook_url), which is why the backend added them to V8 on 2026-10-03 — migrated channels keep working.- Per-server channel links:
GET/POST /servers/{server}/notification-channels,DELETE …/{id}. - Server alerts were produced by V7's own monitoring jobs (
execute:server-monitor,execute:service-monitoring, disk alerts from InsightHub webhook).
#In-app UX
- Bell in the top bar with an unread badge. A popover lists the latest 10, with "Mark all as read" and "View all" (
/notifications). - Each item: icon by type, translated title/body (the backend sends a type + params, not English text Assumption), time, link to the resource.
- Real-time: V8 Phase 1 excludes broadcasting V8 requirement, so poll the unread count (e.g. every 60 s while visible) until broadcasting exists.
#Notification types (initial set, proposed)
| Type | Trigger |
|---|---|
server.offline / server.back_online | Status job |
server.key_revoked | 401 from OSS |
subscription.expiring / expired / renewed / payment_failed | Billing jobs |
wallet.low_balance | Credit reminder |
member.joined / invitation.accepted | Members |
blueprint.run_finished | Add-on run polling |
vps.created / vps.failed | Provider flow |