Configure actions in Wallboard, then trigger them from an external system using a webhook API key.
WEBHOOK_CALL scope. Key and action management require TECHNICIAN access.eventId unique within the customer. Event IDs cannot contain whitespace.enabled defaults to false).event_id:curl -X POST 'https://{server}/public-api/integration/webhooks' \
-H 'X-Webhook-Apikey: <webhook-api-key>' \
-H 'Content-Type: application/json' \
-d '{"event_id":"emergency-on"}'
The API key selects the customer. A successful response confirms that execution was triggered; device and datasource actions run in the background. A disabled action is not executed.
Examples use event_id; the payload also accepts eventId. Use the fields relevant to the configured action.
| Field | JSON type | Used for |
|---|---|---|
event_id |
string | Configured event ID |
data |
string containing JSON | Replace/merge datasource data or insert an array item |
keySelector |
string | Datasource key or array path |
minimumValue, maximumValue |
integer | Bounds for decrement/increment actions |
index |
integer | Array insertion/removal position |
contentId |
string | Content assignment or preview |
message |
string | Toast message |
sensorData |
object | Sensor event JSON |
volumeLevel |
integer | Volume change |
priority |
integer | Channel priority |
saturation |
number | Channel saturation |
capIds, removeAll |
string array, boolean | Clear selected or all CAP alerts |
Increment/decrement actions change the selected value by one; they do not consume a value amount.
URL-loading actions use actionParams.url saved in the action configuration.
Configure a separate event ID for each action before sending its payload.
{"event_id":"merge-data","data":"{\"name\":\"John\",\"score\":100}"}
{"event_id":"increase-counter","keySelector":"score","maximumValue":100}
{"event_id":"set-volume","volumeLevel":50}
{"event_id":"sensor-trigger","sensorData":{"type":"motion","zone":"entrance"}}
For systems limited to GET requests, encode the JSON as UTF-8 Base64 and URL-encode the query values. The GET operation below documents that integration path.
Trigger a webhook action using a GET request with Base64-encoded payload.
This endpoint allows external systems to trigger webhook actions using URL parameters, which is useful when the calling system cannot easily send POST requests (e.g., simple automation systems, bookmarks, or QR codes).
How it works:
event_id in the payload is executedImportant: Webhook calls are asynchronous - the response acknowledges triggering; the actual action executes in the background.
Payload format:
{"event_id": "your-event-id", "keySelector": "optional-selector"}
The event_id field is required and must match an existing webhook event action.
Additional fields in the payload are passed to the action as parameters.
| apiKey required | string Webhook API key (JWT format) |
| payload required | string <base64> Example: payload=eyJldmVudF9pZCI6ImRlY3JlYXNlIiwia2V5U2VsZWN0b3IiOiJ0ZXN0In0= Base64-encoded JSON payload.
Must contain at least |
# Payload: {"event_id":"decrease","keySelector":"test"} # Base64 encoded: eyJldmVudF9pZCI6ImRlY3JlYXNlIiwia2V5U2VsZWN0b3IiOiJ0ZXN0In0= curl -X GET \ 'https://{server}/public-api/integration/webhooks?apiKey=your_api_key&payload=eyJldmVudF9pZCI6ImRlY3JlYXNlIiwia2V5U2VsZWN0b3IiOiJ0ZXN0In0='
{- "message": "Execution triggered successfully (the execution is running in the background)",
- "errorReason": "string"
}Trigger a webhook action using a POST request with JSON payload.
This is the recommended method for triggering webhooks as it provides better security (API key in header) and supports larger payloads.
How it works:
X-Webhook-Apikey header with your API keyevent_id and any additional parametersevent_id is executedImportant: Webhook calls are asynchronous - the response acknowledges triggering; the actual action executes in the background.
Payload format:
{"event_id": "your-event-id", "keySelector": "optional-selector"}
The event_id field is required and must match an existing webhook event action.
Additional fields in the payload are passed to the action as parameters.
| X-Webhook-Apikey required | string Example: <webhook-api-key> Webhook API key |
JSON payload with the event ID and optional parameters.
The event_id is required and must match an existing webhook event action.
| event_id required | string non-empty Configured event ID. The payload also accepts the spelling eventId. |
| data | string JSON text for datasource replacement, merge or array insertion. |
| keySelector | string Key or array path for the selected datasource action. |
| minimumValue | integer <int64> Lower bound for decrement actions. |
| maximumValue | integer <int64> Upper bound for increment actions. |
| index | integer <int64> Position for array insertion/removal. |
| contentId | string |
| message | string |
object Sensor event JSON passed to the device. | |
| volumeLevel | integer Volume level for the configured device action. |
| priority | integer |
| saturation | number |
| capIds | Array of strings |
| removeAll | boolean |
| property name* additional property | any |
{- "event_id": "emergency-on"
}{- "message": "Execution triggered successfully (the execution is running in the background)",
- "errorReason": "string"
}Retrieve a paginated list of webhook event actions.
Minimum role: TECHNICIAN with customer selector
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
| page | integer >= 0 Default: 0 Page index (0-based) |
| size | integer >= 1 Default: 20 Requested page size; server limits and endpoint overrides apply. |
| sort | string Example: sort=name,asc Sort expression. Format:
|
| search | string WBQL filter expression. Operators: |
curl -X GET \ 'https://{server}/api/webhookEvent/actions?customerId=123&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": 133,
- "name": "Emergency Alert Trigger",
- "eventId": "fire-alarm-trigger",
- "enabled": true,
- "action": "ENABLE_EMERGENCY_ON_DEVICE",
- "targetData": {
- "targetIds": [
- "device-uuid-123",
- "device-uuid-456"
]
}, - "targetName": "Lobby Display",
- "targetId": "device-uuid-123",
- "customerId": 182,
- "readOnly": false
}
]
}Create a new webhook event action.
Minimum role: TECHNICIAN with customer selector
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
| teamIds | string Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:true,00a22e86602c4a88914614aa9516a481:false Team assignments for a newly created resource. Comma-separated teamId:readOnly pairs. |
| name required | string Human-readable name for the webhook action |
| eventId required | string non-empty Required, nonempty event ID, unique within the customer and containing no whitespace. The server does not generate this value. |
| enabled | boolean Default: false Whether to enable this action immediately |
| action required | string (WebhookActionType) Enum: "ENABLE_EMERGENCY_ON_DEVICE" "ENABLE_EMERGENCY_ON_DEVICE_TAG" "ENABLE_EMERGENCY_ON_DEVICE_GROUP" "ENABLE_EMERGENCY_ON_DEVICE_ALL" "DISABLE_EMERGENCY_ON_DEVICE" "DISABLE_EMERGENCY_ON_DEVICE_TAG" "DISABLE_EMERGENCY_ON_DEVICE_GROUP" "DISABLE_EMERGENCY_ON_DEVICE_ALL" "LOAD_URL_ON_DEVICE" "LOAD_URL_ON_DEVICE_TAG" "LOAD_URL_ON_DEVICE_GROUP" "LOAD_URL_ON_DEVICE_ALL" "PAUSE_CONTENT_ON_DEVICE" "PAUSE_CONTENT_ON_DEVICE_TAG" "PAUSE_CONTENT_ON_DEVICE_GROUP" "PAUSE_CONTENT_ON_DEVICE_ALL" "RESUME_CONTENT_ON_DEVICE" "RESUME_CONTENT_ON_DEVICE_TAG" "RESUME_CONTENT_ON_DEVICE_GROUP" "RESUME_CONTENT_ON_DEVICE_ALL" "REFRESH_CONTENT_ON_DEVICE" "REFRESH_CONTENT_ON_DEVICE_TAG" "REFRESH_CONTENT_ON_DEVICE_GROUP" "REFRESH_CONTENT_ON_DEVICE_ALL" "REFRESH_DATASOURCE" "REFRESH_DATASOURCE_ALL" "SET_INTERNAL_DATASOURCE" "INCREASE_VALUE_IN_DATASOURCE" "DECREASE_VALUE_IN_DATASOURCE" "MERGE_INTERNAL_DATASOURCE" "INSERT_CAP_DATASOURCE" "CLEAR_CAP_DATASOURCE" "DELETE_BY_KEY_INTERNAL_DATASOURCE" "INSERT_TO_ARRAY_INTERNAL_DATASOURCE" "REMOVE_FROM_ARRAY_INTERNAL_DATASOURCE" "EMPTY_ARRAY_INTERNAL_DATASOURCE" "ROTATE_ARRAY_INTERNAL_DATASOURCE" "REPLACE_OR_MERGE_ELEMENT_IN_ARRAY_INTERNAL_DATASOURCE" "SEND_SENSOR_EVENT_TO_DEVICE" "SEND_SENSOR_EVENT_TO_DEVICE_TAG" "SEND_SENSOR_EVENT_TO_DEVICE_GROUP" "SEND_SENSOR_EVENT_TO_DEVICE_ALL" "RESTART_DEVICE" "RESTART_DEVICE_TAG" "RESTART_DEVICE_GROUP" "RESTART_DEVICE_ALL" "ASSIGN_CONTENT_ON_DEVICE" "ASSIGN_CONTENT_ON_DEVICE_TAG" "ASSIGN_CONTENT_ON_DEVICE_GROUP" "ASSIGN_CONTENT_ON_DEVICE_ALL" "PREVIEW_CONTENT_ON_DEVICE" "PREVIEW_CONTENT_ON_DEVICE_TAG" "PREVIEW_CONTENT_ON_DEVICE_GROUP" "PREVIEW_CONTENT_ON_DEVICE_ALL" "WAKE_UP_DEVICE" "WAKE_UP_DEVICE_TAG" "WAKE_UP_DEVICE_GROUP" "WAKE_UP_DEVICE_ALL" "SNOOZE_DEVICE" "SNOOZE_DEVICE_TAG" "SNOOZE_DEVICE_GROUP" "SNOOZE_DEVICE_ALL" "SHOW_TOAST_MESSAGE_DEVICE" "SHOW_TOAST_MESSAGE_DEVICE_TAG" "SHOW_TOAST_MESSAGE_DEVICE_GROUP" "SHOW_TOAST_MESSAGE_DEVICE_ALL" "CHANGE_VOLUME_DEVICE" "CHANGE_VOLUME_DEVICE_TAG" "CHANGE_VOLUME_DEVICE_GROUP" "CHANGE_VOLUME_DEVICE_ALL" "FORCE_SYNC_SHARED_FOLDER" "UPLOAD_FILE_TO_FOLDER" "ENABLE_CAMPAIGN" "DISABLE_CAMPAIGN" "CHANGE_SATURATION_CAMPAIGN" "CHANGE_PRIORITY_CAMPAIGN" "ENABLE_CAMPAIGN_BY_TAGS" "DISABLE_CAMPAIGN_BY_TAGS" "CHANGE_SATURATION_CAMPAIGN_BY_TAGS" "CHANGE_PRIORITY_CAMPAIGN_BY_TAGS" Action to execute when webhook is triggered. Emergency Mode Actions:
URL Loading Actions:
Content Control Actions:
Content Assignment Actions:
Datasource Actions:
Sensor Event Actions:
Device Control Actions:
Display Control Actions:
Folder Actions:
Channel/Campaign Actions:
|
object Additional parameters for the action | |
| targetId | string Single target ID (alternative to targetData for single target) |
object (TargetData) Target specification for the webhook action |
{- "name": "Fire Alarm Emergency",
- "eventId": "emergency-device",
- "enabled": true,
- "action": "ENABLE_EMERGENCY_ON_DEVICE",
- "targetData": {
- "targetIds": [
- "device-uuid-123"
]
}
}{- "id": 133,
- "name": "Emergency Alert Trigger",
- "eventId": "fire-alarm-trigger",
- "enabled": true,
- "action": "ENABLE_EMERGENCY_ON_DEVICE",
- "targetData": {
- "targetIds": [
- "device-uuid-123",
- "device-uuid-456"
]
}, - "targetName": "Lobby Display",
- "targetId": "device-uuid-123",
- "customerId": 182,
- "readOnly": false
}Update an existing webhook event action. Read its configuration first and send name, enabled, action and actionParams together; omitted values for these fields are assigned null. Omitted targets and a missing/empty eventId are preserved.
Minimum role: TECHNICIAN
| actionId required | integer <int64> Webhook event action ID |
| name | string Human-readable name for the webhook action |
| eventId | string Replacement event ID; nonempty values must be unique within the customer and contain no whitespace. |
| enabled | boolean Whether this action is enabled |
| action | string (WebhookActionType) Enum: "ENABLE_EMERGENCY_ON_DEVICE" "ENABLE_EMERGENCY_ON_DEVICE_TAG" "ENABLE_EMERGENCY_ON_DEVICE_GROUP" "ENABLE_EMERGENCY_ON_DEVICE_ALL" "DISABLE_EMERGENCY_ON_DEVICE" "DISABLE_EMERGENCY_ON_DEVICE_TAG" "DISABLE_EMERGENCY_ON_DEVICE_GROUP" "DISABLE_EMERGENCY_ON_DEVICE_ALL" "LOAD_URL_ON_DEVICE" "LOAD_URL_ON_DEVICE_TAG" "LOAD_URL_ON_DEVICE_GROUP" "LOAD_URL_ON_DEVICE_ALL" "PAUSE_CONTENT_ON_DEVICE" "PAUSE_CONTENT_ON_DEVICE_TAG" "PAUSE_CONTENT_ON_DEVICE_GROUP" "PAUSE_CONTENT_ON_DEVICE_ALL" "RESUME_CONTENT_ON_DEVICE" "RESUME_CONTENT_ON_DEVICE_TAG" "RESUME_CONTENT_ON_DEVICE_GROUP" "RESUME_CONTENT_ON_DEVICE_ALL" "REFRESH_CONTENT_ON_DEVICE" "REFRESH_CONTENT_ON_DEVICE_TAG" "REFRESH_CONTENT_ON_DEVICE_GROUP" "REFRESH_CONTENT_ON_DEVICE_ALL" "REFRESH_DATASOURCE" "REFRESH_DATASOURCE_ALL" "SET_INTERNAL_DATASOURCE" "INCREASE_VALUE_IN_DATASOURCE" "DECREASE_VALUE_IN_DATASOURCE" "MERGE_INTERNAL_DATASOURCE" "INSERT_CAP_DATASOURCE" "CLEAR_CAP_DATASOURCE" "DELETE_BY_KEY_INTERNAL_DATASOURCE" "INSERT_TO_ARRAY_INTERNAL_DATASOURCE" "REMOVE_FROM_ARRAY_INTERNAL_DATASOURCE" "EMPTY_ARRAY_INTERNAL_DATASOURCE" "ROTATE_ARRAY_INTERNAL_DATASOURCE" "REPLACE_OR_MERGE_ELEMENT_IN_ARRAY_INTERNAL_DATASOURCE" "SEND_SENSOR_EVENT_TO_DEVICE" "SEND_SENSOR_EVENT_TO_DEVICE_TAG" "SEND_SENSOR_EVENT_TO_DEVICE_GROUP" "SEND_SENSOR_EVENT_TO_DEVICE_ALL" "RESTART_DEVICE" "RESTART_DEVICE_TAG" "RESTART_DEVICE_GROUP" "RESTART_DEVICE_ALL" "ASSIGN_CONTENT_ON_DEVICE" "ASSIGN_CONTENT_ON_DEVICE_TAG" "ASSIGN_CONTENT_ON_DEVICE_GROUP" "ASSIGN_CONTENT_ON_DEVICE_ALL" "PREVIEW_CONTENT_ON_DEVICE" "PREVIEW_CONTENT_ON_DEVICE_TAG" "PREVIEW_CONTENT_ON_DEVICE_GROUP" "PREVIEW_CONTENT_ON_DEVICE_ALL" "WAKE_UP_DEVICE" "WAKE_UP_DEVICE_TAG" "WAKE_UP_DEVICE_GROUP" "WAKE_UP_DEVICE_ALL" "SNOOZE_DEVICE" "SNOOZE_DEVICE_TAG" "SNOOZE_DEVICE_GROUP" "SNOOZE_DEVICE_ALL" "SHOW_TOAST_MESSAGE_DEVICE" "SHOW_TOAST_MESSAGE_DEVICE_TAG" "SHOW_TOAST_MESSAGE_DEVICE_GROUP" "SHOW_TOAST_MESSAGE_DEVICE_ALL" "CHANGE_VOLUME_DEVICE" "CHANGE_VOLUME_DEVICE_TAG" "CHANGE_VOLUME_DEVICE_GROUP" "CHANGE_VOLUME_DEVICE_ALL" "FORCE_SYNC_SHARED_FOLDER" "UPLOAD_FILE_TO_FOLDER" "ENABLE_CAMPAIGN" "DISABLE_CAMPAIGN" "CHANGE_SATURATION_CAMPAIGN" "CHANGE_PRIORITY_CAMPAIGN" "ENABLE_CAMPAIGN_BY_TAGS" "DISABLE_CAMPAIGN_BY_TAGS" "CHANGE_SATURATION_CAMPAIGN_BY_TAGS" "CHANGE_PRIORITY_CAMPAIGN_BY_TAGS" Action to execute when webhook is triggered. Emergency Mode Actions:
URL Loading Actions:
Content Control Actions:
Content Assignment Actions:
Datasource Actions:
Sensor Event Actions:
Device Control Actions:
Display Control Actions:
Folder Actions:
Channel/Campaign Actions:
|
object Additional parameters for the action | |
| targetId | string Single target ID |
object (TargetData) Target specification for the webhook action |
{- "name": "Updated Emergency Alert",
- "eventId": "updated-fire-alarm",
- "enabled": false,
- "action": "ENABLE_EMERGENCY_ON_DEVICE",
- "actionParams": {
- "property1": "string",
- "property2": "string"
}, - "targetId": "string",
- "targetData": {
- "targetIds": [
- "device-uuid-123",
- "device-uuid-456"
]
}
}{- "id": 133,
- "name": "Emergency Alert Trigger",
- "eventId": "fire-alarm-trigger",
- "enabled": true,
- "action": "ENABLE_EMERGENCY_ON_DEVICE",
- "targetData": {
- "targetIds": [
- "device-uuid-123",
- "device-uuid-456"
]
}, - "targetName": "Lobby Display",
- "targetId": "device-uuid-123",
- "customerId": 182,
- "readOnly": false
}Delete a webhook event action.
Minimum role: TECHNICIAN
| actionId required | integer <int64> Webhook event action ID |
curl -X DELETE \ 'https://{server}/api/webhookEvent/actions/133' \ -H 'Authorization: Bearer <token>'
Update team assignments for a webhook event action.
Minimum role: OWNER with customer selector
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
| actionId required | integer <int64> Webhook event action 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 webhook API keys.
Minimum role: TECHNICIAN with customer selector
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
| page | integer >= 0 Default: 0 Page index (0-based) |
| size | integer >= 1 Default: 20 Requested page size; server limits and endpoint overrides apply. |
| sort | string Example: sort=name,asc Sort expression. Format:
|
| search | string WBQL filter expression. Operators: |
curl -X GET \ 'https://{server}/api/webhooks/apikey?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": "981eb1fb92a045bf96a919f8c810cfd4",
- "token": "<webhook-api-key>",
- "name": "External System Integration",
- "createdAt": 1705314600000,
- "restricted": false,
- "scopes": {
- "values": [
- "WEBHOOK_CALL"
]
}, - "teamAccessList": {
- "teams": [
- {
- "id": "string",
- "readOnly": true
}
]
}, - "customerId": 182,
- "readOnly": false
}
]
}Create a new webhook API key.
Important: The token field is only returned once during creation.
Store it securely as it cannot be retrieved again.
Minimum role: TECHNICIAN with customer selector
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
| teamIds | string Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:true,00a22e86602c4a88914614aa9516a481:false Team assignments for a newly created resource. Comma-separated teamId:readOnly pairs. |
| name required | string Human-readable name for the API key | ||||||||||
| restricted | boolean Default: false Whether to restrict this key to team resources | ||||||||||
object (ScopesObject) API key scope configuration. Scopes determine what actions the API key can perform.
| |||||||||||
object (TeamAccessList) |
{- "name": "Integration Key",
- "restricted": false
}{- "id": "981eb1fb92a045bf96a919f8c810cfd4",
- "token": "<webhook-api-key>",
- "name": "External System Integration",
- "createdAt": 1705314600000,
- "restricted": false,
- "scopes": {
- "values": [
- "WEBHOOK_CALL"
]
}, - "teamAccessList": {
- "teams": [
- {
- "id": "string",
- "readOnly": true
}
]
}, - "customerId": 182,
- "readOnly": false
}Update an existing webhook API key.
Minimum role: TECHNICIAN
| id required | string Webhook API key ID (UUID format) |
| name | string Human-readable name for the API key |
| restricted | boolean Whether to restrict this key to team resources |
object (TeamAccessList) |
{- "name": "Updated Integration Key",
- "restricted": true,
- "teamAccessList": {
- "teams": [
- {
- "id": "string",
- "readOnly": true
}
]
}
}{- "id": "981eb1fb92a045bf96a919f8c810cfd4",
- "token": "<webhook-api-key>",
- "name": "External System Integration",
- "createdAt": 1705314600000,
- "restricted": false,
- "scopes": {
- "values": [
- "WEBHOOK_CALL"
]
}, - "teamAccessList": {
- "teams": [
- {
- "id": "string",
- "readOnly": true
}
]
}, - "customerId": 182,
- "readOnly": false
}Delete a webhook API key.
Minimum role: TECHNICIAN
| id required | string Webhook API key ID (UUID format) |
curl -X DELETE \ 'https://{server}/api/webhooks/apikey/981eb1fb92a045bf96a919f8c810cfd4' \ -H 'Authorization: Bearer <token>'
Update team assignments for a webhook API key.
Minimum role: OWNER with customer selector
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
| webhookApiKeyId required | string Webhook API key ID (UUID format) |
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"
]
}