Alert rules and notification channel management for the Wallboard digital signage platform.
Alerts notify administrators when devices go offline, datasources fail, or other conditions are met. Notification channels define how alerts are delivered.
| Concept | Description |
|---|---|
| Alert | Triggered notification when a condition is violated |
| Alert Rule | Definition of when and how to trigger alerts |
| Notification Channel | Delivery method for alerts, including email, SMS, in-app notifications, and webhooks |
| Condition | What triggers the alert (offline, error count, etc.) |
| Type | JSON Type Name | Description |
|---|---|---|
| Device Offline | DeviceOffline |
Device hasn't communicated within threshold |
| Datasource Error | DatasourceError |
Datasource refresh error count exceeded |
| Type | Description |
|---|---|
EMAIL |
Email notification to specified addresses |
SMS |
SMS text message notification |
USER_NOTIFICATION |
In-app Notification Center entry for specified customer users |
WEBHOOK |
JSON POST to a configured public HTTP(S) URL |
Alert rules can be configured to only evaluate during specific:
Use WBQL in the search parameter. Key fields:
| Filter Type | Field | Example |
|---|---|---|
| Team | teamAssignments.team.id |
search=teamAssignments.team.id=team1 |
| Alert type | type |
search=type=DeviceOffline |
| Name | name |
search=name:offline |
| Enabled | enabled |
search=enabled=true |
See Getting Started for full WBQL syntax.
Retrieve a paginated list of triggered alerts.
Minimum role: OWNER with customer selector
| customerId | integer <int64> Customer/tenant ID for multi-tenant filtering.
|
| search | string WBQL (Wallboard Query Language) search expression for filtering. Examples:
|
| page | integer >= 0 Default: 0 Page index (0-based) |
| size | integer [ 1 .. 1000 ] Default: 20 Number of elements per page (max 1000) |
| sort | string Example: sort=name,asc Sort expression. Format:
|
curl -X GET \ 'https://{server}/api/alert?customerId=182&page=0&size=15&sort=name' \ -H 'Authorization: Bearer <token>'
{- "first": true,
- "last": true,
- "number": 0,
- "numberOfElements": 0,
- "totalElements": 0,
- "totalPages": 0,
- "size": 0,
- "content": [
- {
- "id": 0,
- "createdAtDate": 0,
- "alertRuleId": 0,
- "customerId": 0
}
]
}Retrieve a paginated list of device-related alerts.
Minimum role: VIEWER with customer selector
| customerId | integer <int64> Customer/tenant ID for multi-tenant filtering.
|
| search | string WBQL (Wallboard Query Language) search expression for filtering. Examples:
|
| page | integer >= 0 Default: 0 Page index (0-based) |
| size | integer [ 1 .. 1000 ] Default: 20 Number of elements per page (max 1000) |
| sort | string Example: sort=name,asc Sort expression. Format:
|
curl -X GET \ 'https://{server}/api/alert/device?customerId=182&page=0&size=15&sort=name' \ -H 'Authorization: Bearer <token>'
{- "first": true,
- "last": true,
- "number": 0,
- "numberOfElements": 0,
- "totalElements": 0,
- "totalPages": 0,
- "size": 0,
- "content": [
- {
- "id": 0,
- "createdAtDate": 0,
- "alertRuleId": 0,
- "alertRuleName": "string",
- "deviceId": "string",
- "deviceName": "string",
- "deviceLastActivity": 0,
- "deviceLastStatusChange": 0,
- "deviceGroupId": "string",
- "deviceGroupPath": "string"
}
]
}Retrieve all device-related alerts without pagination.
Minimum role: VIEWER with customer selector
| customerId | integer <int64> Customer/tenant ID for multi-tenant filtering.
|
| search | string WBQL (Wallboard Query Language) search expression for filtering. Examples:
|
curl -X GET \ 'https://{server}/api/alert/device/all?customerId=182' \ -H 'Authorization: Bearer <token>'
[- {
- "id": 0,
- "createdAtDate": 0,
- "alertRuleId": 0,
- "alertRuleName": "string",
- "deviceId": "string",
- "deviceName": "string",
- "deviceLastActivity": 0,
- "deviceLastStatusChange": 0,
- "deviceGroupId": "string",
- "deviceGroupPath": "string"
}
]Retrieve a paginated list of datasource-related alerts.
Minimum role: VIEWER with customer selector
| customerId | integer <int64> Customer/tenant ID for multi-tenant filtering.
|
| search | string WBQL (Wallboard Query Language) search expression for filtering. Examples:
|
| page | integer >= 0 Default: 0 Page index (0-based) |
| size | integer [ 1 .. 1000 ] Default: 20 Number of elements per page (max 1000) |
| sort | string Example: sort=name,asc Sort expression. Format:
|
curl -X GET \ 'https://{server}/api/alert/datasource?customerId=182&page=0&size=15&sort=name' \ -H 'Authorization: Bearer <token>'
{- "first": true,
- "last": true,
- "number": 0,
- "numberOfElements": 0,
- "totalElements": 0,
- "totalPages": 0,
- "size": 0,
- "content": [
- {
- "id": 0,
- "createdAtDate": 0,
- "alertRuleId": 0,
- "alertRuleName": "string",
- "datasourceId": "string",
- "datasourceName": "string",
- "datasourceErrorCounter": 0,
- "datasourceLastError": 0
}
]
}Retrieve a paginated list of alert rules.
Minimum role: TECHNICIAN with customer selector
| customerId | integer <int64> Customer/tenant ID for multi-tenant filtering.
|
| search | string WBQL (Wallboard Query Language) search expression for filtering. Examples:
|
| page | integer >= 0 Default: 0 Page index (0-based) |
| size | integer [ 1 .. 1000 ] Default: 20 Number of elements per page (max 1000) |
| sort | string Example: sort=name,asc Sort expression. Format:
|
curl -X GET \ 'https://{server}/api/alertRule?customerId=182&page=0&size=15&sort=name' \ -H 'Authorization: Bearer <token>'
{- "first": true,
- "last": true,
- "number": 0,
- "numberOfElements": 0,
- "totalElements": 0,
- "totalPages": 0,
- "size": 0,
- "content": [
- {
- "id": 336,
- "@type": "DeviceOffline",
- "name": "Device Offline Alert",
- "comment": "Alert when devices are offline",
- "enabled": true,
- "condition": {
- "@type": "DeviceOfflineAndNoActivityForMinutes",
- "inactiveMinutes": 30,
- "recursive": true
}, - "delayEvaluateAfterViolationMinutes": 60,
- "scheduledEvaluateSeconds": 60,
- "workingDays": {
- "monday": true,
- "tuesday": true,
- "wednesday": true,
- "thursday": true,
- "friday": true,
- "saturday": false,
- "sunday": false
}
}
]
}Create a new alert rule.
Minimum role: TECHNICIAN with customer selector
| customerId | integer <int64> Customer/tenant ID for multi-tenant filtering.
|
| teamIds | string Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:false Team assignment for resource creation. Format: |
| @type required | string (AlertRuleType) Enum: "DeviceOffline" "DatasourceError" Type of alert rule. Used as discriminator for polymorphic serialization. |
| name required | string Alert rule name (unique per customer) |
| comment | string Optional description or notes |
| enabled | boolean Default: true Whether the alert rule is active |
object (AlertRuleCondition) Alert rule condition. Structure depends on the Condition Types:
| |
| delayEvaluateAfterViolationMinutes | integer >= 0 Default: 60 Minutes to wait before re-evaluating after a violation |
| scheduledEvaluateSeconds | integer >= 0 Default: 60 Seconds between scheduled evaluations |
object (WorkingDays) Days when alert should be evaluated | |
object (WorkingTime) Time range when alert should be evaluated | |
Array of objects (NotificationChannelRef) Notification channels to use when alert triggers | |
object (TeamAccessList) |
{- "@type": "DeviceOffline",
- "name": "Device Offline Alert",
- "comment": "Alert when devices are offline for 30 minutes",
- "enabled": true,
- "condition": {
- "@type": "DeviceOfflineAndNoActivityForMinutes",
- "inactiveMinutes": 30,
- "recursive": true
}, - "delayEvaluateAfterViolationMinutes": 60,
- "workingDays": {
- "monday": true,
- "tuesday": true,
- "wednesday": true,
- "thursday": true,
- "friday": true,
- "saturday": false,
- "sunday": false
}, - "notificationChannels": [
- {
- "id": 1
}
]
}{- "id": 336,
- "@type": "DeviceOffline",
- "name": "Device Offline Alert",
- "comment": "Alert when devices are offline",
- "enabled": true,
- "condition": {
- "@type": "DeviceOfflineAndNoActivityForMinutes",
- "inactiveMinutes": 30,
- "recursive": true
}, - "delayEvaluateAfterViolationMinutes": 60,
- "scheduledEvaluateSeconds": 60,
- "workingDays": {
- "monday": true,
- "tuesday": true,
- "wednesday": true,
- "thursday": true,
- "friday": true,
- "saturday": false,
- "sunday": false
}
}Update an existing alert rule.
Minimum role: TECHNICIAN
| alertRuleId required | integer <int64> Alert rule ID |
| @type required | string (AlertRuleType) Enum: "DeviceOffline" "DatasourceError" Type of alert rule. Used as discriminator for polymorphic serialization. |
| name required | string Alert rule name (unique per customer) |
| comment | string Optional description or notes |
| enabled | boolean Default: true Whether the alert rule is active |
object (AlertRuleCondition) Alert rule condition. Structure depends on the Condition Types:
| |
| delayEvaluateAfterViolationMinutes | integer >= 0 Default: 60 Minutes to wait before re-evaluating after a violation |
| scheduledEvaluateSeconds | integer >= 0 Default: 60 Seconds between scheduled evaluations |
object (WorkingDays) Days when alert should be evaluated | |
object (WorkingTime) Time range when alert should be evaluated | |
Array of objects (NotificationChannelRef) Notification channels to use when alert triggers | |
object (TeamAccessList) |
{- "id": 336,
- "@type": "DeviceOffline",
- "name": "Device Offline Alert",
- "comment": "Alert when devices are offline",
- "enabled": true,
- "condition": {
- "@type": "DeviceOfflineAndNoActivityForMinutes",
- "inactiveMinutes": 30,
- "recursive": true
}, - "delayEvaluateAfterViolationMinutes": 60,
- "scheduledEvaluateSeconds": 60,
- "workingDays": {
- "monday": true,
- "tuesday": true,
- "wednesday": true,
- "thursday": true,
- "friday": true,
- "saturday": false,
- "sunday": false
}
}{- "id": 336,
- "@type": "DeviceOffline",
- "name": "Device Offline Alert",
- "comment": "Alert when devices are offline",
- "enabled": true,
- "condition": {
- "@type": "DeviceOfflineAndNoActivityForMinutes",
- "inactiveMinutes": 30,
- "recursive": true
}, - "delayEvaluateAfterViolationMinutes": 60,
- "scheduledEvaluateSeconds": 60,
- "workingDays": {
- "monday": true,
- "tuesday": true,
- "wednesday": true,
- "thursday": true,
- "friday": true,
- "saturday": false,
- "sunday": false
}
}Update the team assignments for an alert rule.
Minimum role: OWNER with customer selector
| customerId | integer <int64> Customer/tenant ID for multi-tenant filtering.
|
| alertRuleId required | integer <int64> Alert rule ID |
Array of objects Teams to assign the resource to | |
| removeFromTeamIds | Array of strings Team IDs to remove the resource from |
{- "assignToTeams": [
- {
- "teamId": "string",
- "readOnly": true
}
], - "removeFromTeamIds": [
- "string"
]
}Retrieve a paginated list of notification channels.
Minimum role: TECHNICIAN with customer selector
| customerId | integer <int64> Customer/tenant ID for multi-tenant filtering.
|
| search | string WBQL (Wallboard Query Language) search expression for filtering. Examples:
|
| page | integer >= 0 Default: 0 Page index (0-based) |
| size | integer [ 1 .. 1000 ] Default: 20 Number of elements per page (max 1000) |
| sort | string Example: sort=name,asc Sort expression. Format:
|
curl -X GET \ 'https://{server}/api/alertRuleNotificationChannel?customerId=182&page=0&size=15&sort=name' \ -H 'Authorization: Bearer <token>'
{- "first": true,
- "last": true,
- "number": 0,
- "numberOfElements": 0,
- "totalElements": 0,
- "totalPages": 0,
- "size": 0,
- "content": [
- {
- "id": 0,
- "name": "string",
- "comment": "string",
- "channelType": "EMAIL",
- "notify": [
- "string"
], - "readOnly": true
}
]
}Create a new notification channel.
USER_NOTIFICATION requires one or more recipient emails in notify; each must belong to
the selected customer. WEBHOOK requires webhook.url, and notify must be empty or omitted.
Other channel types cannot include webhook. Webhook URLs must use HTTP(S) with a valid host
and port, without embedded credentials or a fragment. The host must resolve only to public
addresses.
Alert delivery through USER_NOTIFICATION or WEBHOOK requires the rule and channel to
share a customer; user membership is rechecked when an in-app notification is delivered.
Minimum role: TECHNICIAN with customer selector
| customerId | integer <int64> Customer/tenant ID for multi-tenant filtering.
|
| teamIds | string Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:false Team assignment for resource creation. Format: |
| name required | string Channel name (unique per customer) |
| comment | string Optional description or notes |
| channelType required | string (NotificationChannelType) Enum: "EMAIL" "SMS" "USER_NOTIFICATION" "WEBHOOK" Notification delivery method |
| notify | Array of strings unique Recipients list. Content depends on channelType:
|
object (WebhookChannelConfiguration) Destination for a WEBHOOK channel. Alert evaluations POST |
{- "name": "IT Support Email",
- "comment": "Email notifications for IT team",
- "channelType": "EMAIL",
}{- "id": 15,
- "name": "IT Support Email",
- "comment": "Email notifications for IT team",
- "channelType": "EMAIL",
}Update an existing notification channel. The same recipient and webhook rules as creation apply to the resulting channel.
Minimum role: TECHNICIAN
| id required | integer <int64> Notification channel ID |
| name required | string Channel name (unique per customer) |
| comment | string Optional description or notes |
| channelType required | string (NotificationChannelType) Enum: "EMAIL" "SMS" "USER_NOTIFICATION" "WEBHOOK" Notification delivery method |
| notify | Array of strings unique Recipients list. Content depends on channelType:
|
object (WebhookChannelConfiguration) Destination for a WEBHOOK channel. Alert evaluations POST |
{- "id": 15,
- "name": "IT Support Email",
- "comment": "Email notifications for IT team",
- "channelType": "EMAIL",
}{- "id": 15,
- "name": "IT Support Email",
- "comment": "Email notifications for IT team",
- "channelType": "EMAIL",
}Delete a notification channel.
Note: Cannot delete a notification channel that is assigned to an alert rule.
Minimum role: TECHNICIAN
| id required | integer <int64> Notification channel ID |
curl -X DELETE \ 'https://{server}/api/alertRuleNotificationChannel/15' \ -H 'Authorization: Bearer <token>'
Update the team assignments for a notification channel.
Minimum role: OWNER with customer selector
| customerId | integer <int64> Customer/tenant ID for multi-tenant filtering.
|
| notificationChannelId required | integer <int64> Notification channel ID |
Array of objects Teams to assign the resource to | |
| removeFromTeamIds | Array of strings Team IDs to remove the resource from |
{- "assignToTeams": [
- {
- "teamId": "string",
- "readOnly": true
}
], - "removeFromTeamIds": [
- "string"
]
}