Alert rules and notification channel management for the Wallboard digital signage platform.
Alerts notify administrators when devices go offline, data sources 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 (Email, SMS, Push) |
| 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 |
Data source refresh error count exceeded |
| Device Status Changed | DeviceStatusChanged |
Device status changed to specified state |
| Device Metric | DeviceMetricChanged |
Device metric exceeded threshold |
| Type | Description |
|---|---|
EMAIL |
Email notification to specified addresses |
SMS |
SMS text message notification |
PUSH |
Push notification to mobile app |
ALL |
All available notification methods |
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": "2019-08-24T14:15:22Z",
- "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": "2019-08-24T14:15:22Z",
- "alertRuleId": 0,
- "alertRuleName": "string",
- "deviceId": "string",
- "deviceName": "string",
- "deviceLastActivity": "2019-08-24T14:15:22Z",
- "deviceLastStatusChange": "2019-08-24T14:15:22Z",
- "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": "2019-08-24T14:15:22Z",
- "alertRuleId": 0,
- "alertRuleName": "string",
- "deviceId": "string",
- "deviceName": "string",
- "deviceLastActivity": "2019-08-24T14:15:22Z",
- "deviceLastStatusChange": "2019-08-24T14:15:22Z",
- "deviceGroupId": "string",
- "deviceGroupPath": "string"
}
]Retrieve a paginated list of data source-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": "2019-08-24T14:15:22Z",
- "alertRuleId": 0,
- "alertRuleName": "string",
- "datasourceId": "string",
- "datasourceName": "string",
- "datasourceErrorCounter": 0,
- "datasourceLastError": "2019-08-24T14:15:22Z"
}
]
}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" "DeviceStatusChanged" "DeviceMetricChanged" 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" "DeviceStatusChanged" "DeviceMetricChanged" 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.
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" "PUSH" "ALL" Notification delivery method |
| notify | Array of strings Recipients list. Content depends on channelType:
|
{- "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.
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" "PUSH" "ALL" Notification delivery method |
| notify | Array of strings Recipients list. Content depends on channelType:
|
{- "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"
]
}