User and team management endpoints for the Wallboard digital signage platform.
Users are individuals who can log in to the Wallboard admin interface. Teams (user groups) provide granular access control by grouping resources and users.
| Concept | Description |
|---|---|
| User | Individual account with role-based permissions |
| Team | Group for managing resource access (also called "user group") |
| Role | Permission level determining what actions a user can perform |
| Editor Level | Content editor capability tier |
| UI Profile | Customized interface configuration |
| Role | Description |
|---|---|
ADMIN |
Full system access across all tenants |
OWNER |
Full customer access, can manage users and teams |
TECHNICIAN |
Can configure devices, datasources, integrations |
APPROVER |
Can approve content before publishing |
EDITOR |
Can create and edit content |
VIEWER |
Read-only access to assigned resources |
DEVICE_USER |
Device-only account for display authentication |
| Level | Description |
|---|---|
BASIC |
Simple editing with limited widget access |
ADVANCED |
Standard editing with most widgets |
PROFESSIONAL |
Full editor access with all features |
Teams enable fine-grained access:
readOnly for a team (view but not modify)Use WBQL in the search parameter. Key fields:
For Users:
| Filter Type | Field | Example |
|---|---|---|
| Role | role |
search=role=EDITOR |
email |
search=email:john |
|
| Name | name |
search=name:John |
| Active | active |
search=active=true |
For Teams:
| Filter Type | Field | Example |
|---|---|---|
| Name | name |
search=name:marketing |
See Getting Started for full WBQL syntax.
UI profile management is documented in the Administration API.
Retrieve a paginated list of users with support for field selection.
Minimum role: DEVICE_USER
| 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: |
| select | string Field projection. |
{- "first": true,
- "last": true,
- "number": 0,
- "numberOfElements": 0,
- "totalElements": 0,
- "totalPages": 0,
- "size": 0,
- "content": [
- {
- "name": "string",
- "language": "string",
- "address": "string",
- "comment": "string",
- "iconUrl": "string",
- "lastLogin": 0,
- "createdDate": 0,
- "termsOfServiceAcceptDate": 0,
- "logins": 0,
- "presenceTime": 0,
- "lastActivity": 0,
- "editorLevel": "BASIC",
- "role": "DEVICE_USER",
- "readOnly": true,
- "forceToSet2FA": true,
- "authProvider": "LOCAL",
- "use2FA": true,
- "restricted": true,
- "hiddenUIElementRules": { },
- "ssoLoginEnabled": true,
- "usernamePasswordLoginEnabled": true,
- "magicCodeLoginEnabled": true,
- "hasProfilePicture": true,
- "profilePictureApiPath": "string",
- "microsoftSsoEnabled": true,
- "pinCodePresent": true,
- "regionalFormatSettings": { },
- "ownerCanAccessNetworkMember": true,
- "userInterfaceProfileId": 0,
- "customerId": 0,
- "location": {
- "latitude": "string",
- "longitude": "string",
- "city": "string",
- "country": "string",
- "postal": "string",
- "region": "string"
}, - "trustedAdmin": true,
- "oauthPasswordFlowEnabled": true,
- "active": true,
- "customer": {
- "id": 0,
- "name": "string",
- "subreseller": true
}, - "userInterfaceProfile": {
- "id": 0,
- "name": "string",
- "comment": "string",
- "hiddenUIElementRules": {
- "version": "2.1",
- "legacy": { },
- "newUi": { },
- "dashboard": {
- "DEVICES_SEE": false
}, - "loopEditor": { },
- "contentEditor": { },
- "playlistEditor": { },
- "regionalFormatSettings": { }
}, - "customerId": 0
}, - "restrictionMessage": "string",
- "userMetadata": null
}
]
}Get the authenticated user's profile. Returns role, customerId, and customer details.
Minimum role: DEVICE_USER
{- "name": "string",
- "language": "string",
- "address": "string",
- "comment": "string",
- "iconUrl": "string",
- "lastLogin": 0,
- "createdDate": 0,
- "termsOfServiceAcceptDate": 0,
- "logins": 0,
- "presenceTime": 0,
- "lastActivity": 0,
- "editorLevel": "BASIC",
- "role": "DEVICE_USER",
- "readOnly": true,
- "forceToSet2FA": true,
- "authProvider": "LOCAL",
- "use2FA": true,
- "restricted": true,
- "hiddenUIElementRules": { },
- "ssoLoginEnabled": true,
- "usernamePasswordLoginEnabled": true,
- "magicCodeLoginEnabled": true,
- "hasProfilePicture": true,
- "profilePictureApiPath": "string",
- "microsoftSsoEnabled": true,
- "pinCodePresent": true,
- "regionalFormatSettings": { },
- "ownerCanAccessNetworkMember": true,
- "userInterfaceProfileId": 0,
- "customerId": 0,
- "location": {
- "latitude": "string",
- "longitude": "string",
- "city": "string",
- "country": "string",
- "postal": "string",
- "region": "string"
}, - "trustedAdmin": true,
- "oauthPasswordFlowEnabled": true,
- "active": true,
- "customer": {
- "id": 0,
- "name": "string",
- "subreseller": true
}, - "userInterfaceProfile": {
- "id": 0,
- "name": "string",
- "comment": "string",
- "hiddenUIElementRules": {
- "version": "2.1",
- "legacy": { },
- "newUi": { },
- "dashboard": {
- "DEVICES_SEE": false
}, - "loopEditor": { },
- "contentEditor": { },
- "playlistEditor": { },
- "regionalFormatSettings": { }
}, - "customerId": 0
}, - "restrictionMessage": "string",
- "userMetadata": null
}Create a new user account.
Minimum role: OWNER
⚠️ Protected: Requires g-recaptcha-response header (if CAPTCHA enabled) and/or x-totp header (if caller has 2FA).
| 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. |
| email required | string <email> |
| name required | string |
| password | string <password> Initial password (required unless SSO-only) |
| language | string Default: "en" |
| address | string |
| comment | string |
| iconUrl | string |
| role required | string (UserRole) Enum: "DEVICE_USER" "VIEWER" "EDITOR" "APPROVER" "TECHNICIAN" "OWNER" "ADMIN" User permission level (hierarchy from lowest to highest) |
| editorLevel | string (EditorLevel) Enum: "BASIC" "ADVANCED" "PROFESSIONAL" Content editor capability tier |
| readOnly | boolean Default: false |
| forceToSet2FA | boolean Default: false |
| restricted | boolean Default: false |
| hiddenUIElementRules | object |
| userMetadata | object |
| ssoLoginEnabled | boolean Default: true |
| usernamePasswordLoginEnabled | boolean Default: true |
| magicCodeLoginEnabled | boolean Default: true |
| regionalFormatSettings | object |
| ownerCanAccessNetworkMember | boolean |
| userInterfaceProfileId | integer <int64> |
| trustedAdmin | boolean Default: true |
| oauthPasswordFlowEnabled | boolean Default: false |
| restrictionMessage | string |
{- "name": "string",
- "password": "pa$$word",
- "language": "en",
- "address": "string",
- "comment": "string",
- "iconUrl": "string",
- "role": "DEVICE_USER",
- "editorLevel": "BASIC",
- "readOnly": false,
- "forceToSet2FA": false,
- "restricted": false,
- "hiddenUIElementRules": { },
- "userMetadata": { },
- "ssoLoginEnabled": true,
- "usernamePasswordLoginEnabled": true,
- "magicCodeLoginEnabled": true,
- "regionalFormatSettings": { },
- "ownerCanAccessNetworkMember": true,
- "userInterfaceProfileId": 0,
- "trustedAdmin": true,
- "oauthPasswordFlowEnabled": false,
- "restrictionMessage": "string"
}{- "name": "string",
- "language": "string",
- "address": "string",
- "comment": "string",
- "iconUrl": "string",
- "lastLogin": 0,
- "createdDate": 0,
- "termsOfServiceAcceptDate": 0,
- "logins": 0,
- "presenceTime": 0,
- "lastActivity": 0,
- "editorLevel": "BASIC",
- "role": "DEVICE_USER",
- "readOnly": true,
- "forceToSet2FA": true,
- "authProvider": "LOCAL",
- "use2FA": true,
- "restricted": true,
- "hiddenUIElementRules": { },
- "ssoLoginEnabled": true,
- "usernamePasswordLoginEnabled": true,
- "magicCodeLoginEnabled": true,
- "hasProfilePicture": true,
- "profilePictureApiPath": "string",
- "microsoftSsoEnabled": true,
- "pinCodePresent": true,
- "regionalFormatSettings": { },
- "ownerCanAccessNetworkMember": true,
- "userInterfaceProfileId": 0,
- "customerId": 0,
- "location": {
- "latitude": "string",
- "longitude": "string",
- "city": "string",
- "country": "string",
- "postal": "string",
- "region": "string"
}, - "trustedAdmin": true,
- "oauthPasswordFlowEnabled": true,
- "active": true,
- "customer": {
- "id": 0,
- "name": "string",
- "subreseller": true
}, - "userInterfaceProfile": {
- "id": 0,
- "name": "string",
- "comment": "string",
- "hiddenUIElementRules": {
- "version": "2.1",
- "legacy": { },
- "newUi": { },
- "dashboard": {
- "DEVICES_SEE": false
}, - "loopEditor": { },
- "contentEditor": { },
- "playlistEditor": { },
- "regionalFormatSettings": { }
}, - "customerId": 0
}, - "restrictionMessage": "string",
- "userMetadata": null
}Update an existing user.
Minimum role: DEVICE_USER (can update own profile, OWNER required for others)
⚠️ Protected: Requires g-recaptcha-response header (if CAPTCHA enabled) and/or x-totp header (if caller has 2FA).
| email required | string <email> Email of the user to update |
string <email> New email address (to change email) | |
| name | string |
| password | string <password> New password |
| language | string |
| address | string |
| comment | string |
| iconUrl | string |
| role | string (UserRole) Enum: "DEVICE_USER" "VIEWER" "EDITOR" "APPROVER" "TECHNICIAN" "OWNER" "ADMIN" User permission level (hierarchy from lowest to highest) |
| editorLevel | string (EditorLevel) Enum: "BASIC" "ADVANCED" "PROFESSIONAL" Content editor capability tier |
| readOnly | boolean |
| forceToSet2FA | boolean |
| use2FA | boolean |
| restricted | boolean |
| hiddenUIElementRules | object |
| userMetadata | object |
| ssoLoginEnabled | boolean |
| usernamePasswordLoginEnabled | boolean |
| magicCodeLoginEnabled | boolean |
| regionalFormatSettings | object |
| ownerCanAccessNetworkMember | boolean |
| userInterfaceProfileId | integer <int64> |
| resetUserInterfaceProfile | boolean Remove UI profile assignment |
| trustedAdmin | boolean |
| oauthPasswordFlowEnabled | boolean |
| resetRegionalFormatSettings | boolean |
| resetRestrictionMessage | boolean |
| restrictionMessage | string |
{- "name": "string",
- "password": "pa$$word",
- "language": "string",
- "address": "string",
- "comment": "string",
- "iconUrl": "string",
- "role": "DEVICE_USER",
- "editorLevel": "BASIC",
- "readOnly": true,
- "forceToSet2FA": true,
- "use2FA": true,
- "restricted": true,
- "hiddenUIElementRules": { },
- "userMetadata": { },
- "ssoLoginEnabled": true,
- "usernamePasswordLoginEnabled": true,
- "magicCodeLoginEnabled": true,
- "regionalFormatSettings": { },
- "ownerCanAccessNetworkMember": true,
- "userInterfaceProfileId": 0,
- "resetUserInterfaceProfile": true,
- "trustedAdmin": true,
- "oauthPasswordFlowEnabled": true,
- "resetRegionalFormatSettings": true,
- "resetRestrictionMessage": true,
- "restrictionMessage": "string"
}Change the current user's password.
Minimum role: DEVICE_USER
⚠️ Protected: Requires g-recaptcha-response header (if CAPTCHA enabled) and/or x-totp header (if caller has 2FA).
| oldPassword required | string <password> |
| newPassword required | string <password> |
| totp | string TOTP code if 2FA is enabled |
Enable or disable two-factor authentication for current user.
Minimum role: DEVICE_USER
⚠️ Protected: Requires g-recaptcha-response header (if CAPTCHA enabled).
| totp required | string Current TOTP code to verify |
| enable required | boolean Whether to enable or disable 2FA |
Get information about the user's terms of service acceptance status.
Minimum role: DEVICE_USER
{- "userAcceptedTermsOfServiceDate": 0,
- "termsOfServiceLastUpdatedDate": 0,
- "userAcceptedLatestTermsOfService": true
}Update which teams a user belongs to.
Minimum role: OWNER
| 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. |
| email required | string <email> Email of the user to update |
Array of objects (DefaultTeamAssignmentParams) Teams to assign the resource to | |
| removeFromTeamIds | Array of strings Team IDs to remove the resource from |
{- "assignToTeams": [
- {
- "teamId": "string",
- "readOnly": false
}
], - "removeFromTeamIds": [
- "string"
]
}Export user list as CSV file.
Minimum role: OWNER
| 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. |
| search | string WBQL filter expression. Operators: |
Submit feedback about the platform.
Minimum role: DEVICE_USER
| message required | string |
| messageType | string Type of feedback (e.g., "bug", "feature", "question") |
Array of objects (ImageAttachment) |
{- "message": "string",
- "messageType": "string",
- "images": [
- {
- "imageUrl": "string",
- "fileName": "string"
}
]
}Request custom content creation assistance.
Minimum role: DEVICE_USER
| message required | string |
| messageType | string |
Array of objects (ImageAttachment) | |
| contentName | string Name for the requested content |
| startDate | string Desired start date |
| endDate | string Desired end date |
| targetScreenGroup | string Target screen group for the content |
{- "message": "string",
- "messageType": "string",
- "images": [
- {
- "imageUrl": "string",
- "fileName": "string"
}
], - "contentName": "string",
- "startDate": "string",
- "endDate": "string",
- "targetScreenGroup": "string"
}Check if current user has access to a customer and optionally verify role.
Minimum role: DEVICE_USER
| customerId required | integer |
| role | string (UserRole) Enum: "DEVICE_USER" "VIEWER" "EDITOR" "APPROVER" "TECHNICIAN" "OWNER" "ADMIN" Minimum role to check for |
Retrieve a paginated list of teams.
Minimum role: VIEWER
| 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: |
| includeTeamUserNumber | boolean Default: false Include count of users in each team |
| includeTeamResourceNumber | boolean Default: false Include count of resources in each team |
{- "first": true,
- "last": true,
- "number": 0,
- "numberOfElements": 0,
- "totalElements": 0,
- "totalPages": 0,
- "size": 0,
- "content": [
- {
- "id": "string",
- "name": "string",
- "comment": "string",
- "hiddenUIElementRules": "string",
- "teamUserNumber": 0,
- "teamDeviceNumber": 0,
- "teamDeviceGroupNumber": 0,
- "teamDeviceContentNumber": 0,
- "teamDatasourceNumber": 0,
- "teamContentGroupNumber": 0,
- "teamFileNumber": 0,
- "teamFileFolderNumber": 0,
- "teamMessageNumber": 0,
- "teamMessageGroupNumber": 0,
- "teamCampaignNumber": 0,
- "teamTopLevelCampaignNumber": 0,
- "teamMicrosoftTenantNumber": 0,
- "teamGoogleCredentialNumber": 0,
- "teamAdvertiserNumber": 0,
- "teamNotificationChannelNumber": 0,
- "teamAlertRuleNumber": 0,
- "teamWebhookEventActionNumber": 0,
- "teamCustomCredentialNumber": 0
}
]
}Create a new team (user group).
Minimum role: OWNER
| 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. |
| name required | string |
| comment | string |
| hiddenUIElementRules | string JSON rules for hiding UI elements |
{- "name": "string",
- "comment": "string",
- "hiddenUIElementRules": "string"
}{- "id": "string",
- "name": "string",
- "comment": "string",
- "hiddenUIElementRules": "string",
- "teamUserNumber": 0,
- "teamDeviceNumber": 0,
- "teamDeviceGroupNumber": 0,
- "teamDeviceContentNumber": 0,
- "teamDatasourceNumber": 0,
- "teamContentGroupNumber": 0,
- "teamFileNumber": 0,
- "teamFileFolderNumber": 0,
- "teamMessageNumber": 0,
- "teamMessageGroupNumber": 0,
- "teamCampaignNumber": 0,
- "teamTopLevelCampaignNumber": 0,
- "teamMicrosoftTenantNumber": 0,
- "teamGoogleCredentialNumber": 0,
- "teamAdvertiserNumber": 0,
- "teamNotificationChannelNumber": 0,
- "teamAlertRuleNumber": 0,
- "teamWebhookEventActionNumber": 0,
- "teamCustomCredentialNumber": 0
}Update an existing team.
Minimum role: OWNER
| teamId required | string |
| name required | string |
| comment | string |
| hiddenUIElementRules | string JSON rules for hiding UI elements |
{- "name": "string",
- "comment": "string",
- "hiddenUIElementRules": "string"
}{- "id": "string",
- "name": "string",
- "comment": "string",
- "hiddenUIElementRules": "string",
- "teamUserNumber": 0,
- "teamDeviceNumber": 0,
- "teamDeviceGroupNumber": 0,
- "teamDeviceContentNumber": 0,
- "teamDatasourceNumber": 0,
- "teamContentGroupNumber": 0,
- "teamFileNumber": 0,
- "teamFileFolderNumber": 0,
- "teamMessageNumber": 0,
- "teamMessageGroupNumber": 0,
- "teamCampaignNumber": 0,
- "teamTopLevelCampaignNumber": 0,
- "teamMicrosoftTenantNumber": 0,
- "teamGoogleCredentialNumber": 0,
- "teamAdvertiserNumber": 0,
- "teamNotificationChannelNumber": 0,
- "teamAlertRuleNumber": 0,
- "teamWebhookEventActionNumber": 0,
- "teamCustomCredentialNumber": 0
}Retrieve all teams without pagination.
Minimum role: VIEWER
| 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. |
| search | string WBQL filter expression. Operators: |
| includeTeamUserNumber | boolean Default: false |
| includeTeamResourceNumber | boolean Default: false |
[- {
- "id": "string",
- "name": "string",
- "comment": "string",
- "hiddenUIElementRules": "string",
- "teamUserNumber": 0,
- "teamDeviceNumber": 0,
- "teamDeviceGroupNumber": 0,
- "teamDeviceContentNumber": 0,
- "teamDatasourceNumber": 0,
- "teamContentGroupNumber": 0,
- "teamFileNumber": 0,
- "teamFileFolderNumber": 0,
- "teamMessageNumber": 0,
- "teamMessageGroupNumber": 0,
- "teamCampaignNumber": 0,
- "teamTopLevelCampaignNumber": 0,
- "teamMicrosoftTenantNumber": 0,
- "teamGoogleCredentialNumber": 0,
- "teamAdvertiserNumber": 0,
- "teamNotificationChannelNumber": 0,
- "teamAlertRuleNumber": 0,
- "teamWebhookEventActionNumber": 0,
- "teamCustomCredentialNumber": 0
}
]Get which teams a user belongs to, including readOnly status for each.
Returns shallow DTOs with teamId, resourceId, and readOnly flag.
Minimum role: OWNER
| userEmail required | string <email> |
[- {
- "resourceId": "string",
- "teamId": "string",
- "readOnly": true
}
]Bulk update user assignments for a team.
Minimum role: OWNER
| 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. |
| teamId required | string |
Array of objects (SimpleStringIdResourceAssignmentParams) Resources to add to the team | |
| resourceIdsToRemove | Array of strings Resource IDs to remove from the team |
{- "resourcesToAdd": [
- {
- "id": "string",
- "readOnly": false
}
], - "resourceIdsToRemove": [
- "string"
]
}Update one path inside a user's userMetadata document. Read it through the user GET endpoint with
userMetadata explicitly selected. The same path semantics apply to the customer metadata operations, which require OWNER write access to that customer.
Metadata keys and their meaning are defined by the consuming frontend. The path below illustrates JSON traversal,
not a supported UI setting; use keys and values defined by that frontend's contract.
Send a JSON body such as {"path":["preferences","columns",0,"width"],"value":160} for a path write.
A path has 1–32 segments: strings address literal object keys; nonnegative 32-bit integers address array indexes.
The value field is required and accepts JSON null. Missing containers are created, but an intermediate scalar
cannot be traversed. Array indexes must exist or equal the current length to append; gaps are rejected.
A null or non-object document starts from an empty object for a path write.
To delete a path, repeat URL-encoded query parameters such as path=preferences&path=columns&path=0;
do not send a DELETE body. The current container determines whether a segment is a key or index.
Missing paths are no-ops; omitting the path is an error. Deleting an array element shifts later indexes,
so retrying an index deletion can remove a different element. The /all operation resets the document to {}.
Users can change their own metadata even in read-only mode. Changes to another user require a non-read-only OWNER/ADMIN with permission to manage that user. Successful writes return an empty HTTP 200 response. Prefer stable object keys for independently edited values: array indexes refer to the document at write time, and a concurrent whole-document save can overwrite path changes.
Creates missing levels and replaces the value at the addressed path. String segments are object keys; integer segments are array indexes. Users may update their own metadata even in read-only mode. Updating another user requires a non-read-only OWNER/ADMIN with permission to manage the target user.
Minimum role: DEVICE_USER.
| email required | string <email> |
required | Array of strings or integers [ 1 .. 32 ] items |
| value required | any or null Required JSON value. JSON null is valid; omitting value is invalid. |
{- "path": [
- "preferences",
- "columns",
- 0,
- "width"
], - "value": null
}An absent/empty path is rejected. Users may update their own metadata even in read-only mode. Updating another user requires a non-read-only OWNER/ADMIN with permission to manage the target user.
Minimum role: DEVICE_USER.
| email required | string <email> |
| path required | Array of strings [ 1 .. 32 ] items Repeated query parameters, e.g. path=preferences&path=columns&path=0. Encode each segment; do not send a DELETE body. |
Replaces the whole metadata document with an empty object. Users may update their own metadata even in read-only mode. Updating another user requires the existing user-management permissions.
Minimum role: DEVICE_USER.
| email required | string <email> |
Personal Notification Center feed and custom notification management. Alert delivery channels are documented under Alerts & Notifications.
Return the authenticated user's visible, unexpired, undismissed notifications.
The audience can be the user's customer or the user.
Notifications created before the user's account are excluded. seen is this user's own state.
Requested sort is honored; without it, the order is unspecified.
Minimum role: VIEWER (read-only accounts may read).
| page | integer >= 0 Default: 0 Page index (0-based) |
| size | integer >= 1 Default: 20 Requested page size; server limits and endpoint overrides apply. |
| search | string WBQL filter expression. Operators: |
| select | string Field projection. |
| sort | string Example: sort=name,asc Sort expression. Format:
|
{- "first": true,
- "last": true,
- "number": 0,
- "numberOfElements": 0,
- "totalElements": 0,
- "totalPages": 0,
- "size": 0,
- "content": [
- {
- "id": 0,
- "type": "ALERT_DEVICES",
- "severity": "INFO",
- "createdBy": "string",
- "title": "string",
- "message": "string",
- "titleKey": "string",
- "messageKey": "string",
- "params": {
- "values": {
- "property1": "string",
- "property2": "string"
}
}, - "entityKind": "device",
- "entityId": "string",
- "createdAt": 1683802510000,
- "expiresAt": 1683802510000,
- "seen": true
}
]
}Mark one available notification as seen for the current user. Unavailable, expired, or foreign IDs
return HTTP 400 with key notification.error.notFound. Retrying an already seen notification is safe.
Minimum role: VIEWER with write access; read-only accounts cannot change seen state.
| id required | integer <int64> Notification ID |
Mark up to 500 available IDs as seen for the current user. An omitted body or null/empty ids
marks all currently visible unseen notifications as seen. More than 500 explicit IDs returns HTTP 400 with key
notification.error.batchTooLarge; an unavailable ID returns HTTP 400 with key
notification.error.notFound.
Minimum role: VIEWER with write access; read-only accounts cannot change seen state.
| ids | Array of integers or null <int64> <= 500 items [ items <int64 > ] Null, omitted, or empty marks all visible unseen notifications as seen. |
{- "ids": [
- 0
]
}Hide one notification from the current user's feed. Other users' feeds are unaffected.
Unavailable, expired, or foreign IDs return HTTP 400 with key notification.error.notFound.
Minimum role: VIEWER with write access; read-only accounts cannot dismiss.
| id required | integer <int64> Notification ID |
Create a CUSTOM notification for the selected customer (CUSTOMER) or selected users in it
(USER). USER accepts up to 500 email entries; unmatched addresses are omitted, and at least
one user must match the selected customer. A target needs both entityKind and entityId and
must belong to the selected customer.
Omitted lifetime uses the configured retention period; a supplied value must be positive and
cannot exceed that period.
Typed HTTP 400 keys include notification.error.recipientsRequired,
notification.error.noRecipientsMatched, notification.error.batchTooLarge,
notification.error.entityReferenceIncomplete, and notification.error.invalidLifetime.
Minimum role: OWNER with customer selector. Read-only accounts cannot create.
| customerId required | integer <int64> >= 1 Customer whose custom notifications are managed; must be within the caller's access. |
| audienceType required | string Enum: "CUSTOMER" "USER"
|
| severity required | string Enum: "INFO" "SUCCESS" "WARNING" "CRITICAL" |
| title required | string [ 1 .. 255 ] characters Nonblank text. |
| message required | string [ 1 .. 2000 ] characters Nonblank text. |
| entityKind | string Enum: "device" "content" "file" "datasource" Optional target kind; supply with entityId. |
| entityId | string <= 255 characters Optional target ID; supply with entityKind. |
| recipientEmails | Array of strings Required and capped at 500 entries for USER audience; only matching users in the selected customer receive it. |
| lifetimeSeconds | integer <int64> >= 1 Optional lifetime in seconds, at most the configured notification retention period. |
{- "audienceType": "CUSTOMER",
- "severity": "INFO",
- "title": "string",
- "message": "string",
- "entityKind": "device",
- "entityId": "string",
- "recipientEmails": [
- "string"
], - "lifetimeSeconds": 1
}{- "id": 0,
- "type": "ALERT_DEVICES",
- "severity": "INFO",
- "createdBy": "string",
- "title": "string",
- "message": "string",
- "titleKey": "string",
- "messageKey": "string",
- "params": {
- "values": {
- "property1": "string",
- "property2": "string"
}
}, - "entityKind": "device",
- "entityId": "string",
- "createdAt": 1683802510000,
- "expiresAt": 1683802510000,
- "seen": true
}List CUSTOM notifications owned by the selected customer. This management list is separate from the
authenticated user's personal feed and includes audience and recipient-state details.
Minimum role: OWNER with customer selector.
| customerId required | integer <int64> >= 1 Customer whose custom notifications are managed; must be within the caller's access. |
| page | integer >= 0 Default: 0 Page index (0-based) |
| size | integer >= 1 Default: 20 Requested page size; server limits and endpoint overrides apply. |
| search | string WBQL filter expression. Operators: |
| sort | string Example: sort=name,asc Sort expression. Format:
|
| select | string Field projection. |
{- "first": true,
- "last": true,
- "number": 0,
- "numberOfElements": 0,
- "totalElements": 0,
- "totalPages": 0,
- "size": 0,
- "content": [
- {
- "id": 0,
- "type": "ALERT_DEVICES",
- "severity": "INFO",
- "createdBy": "string",
- "title": "string",
- "message": "string",
- "titleKey": "string",
- "messageKey": "string",
- "params": {
- "values": {
- "property1": "string",
- "property2": "string"
}
}, - "entityKind": "device",
- "entityId": "string",
- "createdAt": 1683802510000,
- "expiresAt": 1683802510000,
- "seen": true,
- "customerId": 0,
- "createdByUser": {
- "email": "string",
- "name": "string"
}, - "seenCount": 0,
- "audiences": [
- {
- "type": "CUSTOMER",
- "customerId": 0,
- "userEmail": "string"
}
]
}
]
}Read one CUSTOM notification in the caller's management scope. An unavailable or
out-of-scope ID returns HTTP 404 with key notification.error.notFound.
Minimum role: OWNER with customer selector.
| notificationId required | integer <int64> Managed notification ID |
| customerId required | integer <int64> >= 1 Customer whose custom notifications are managed; must be within the caller's access. |
| select | string Field projection. |
{- "id": 0,
- "type": "ALERT_DEVICES",
- "severity": "INFO",
- "createdBy": "string",
- "title": "string",
- "message": "string",
- "titleKey": "string",
- "messageKey": "string",
- "params": {
- "values": {
- "property1": "string",
- "property2": "string"
}
}, - "entityKind": "device",
- "entityId": "string",
- "createdAt": 1683802510000,
- "expiresAt": 1683802510000,
- "seen": true,
- "customerId": 0,
- "createdByUser": {
- "email": "string",
- "name": "string"
}, - "seenCount": 0,
- "audiences": [
- {
- "type": "CUSTOMER",
- "customerId": 0,
- "userEmail": "string"
}
]
}Permanently remove one manageable CUSTOM notification for all its recipients.
Personal dismissal uses DELETE /api/notifications/{id} instead.
An unavailable or out-of-scope ID returns HTTP 404 with key notification.error.notFound.
Minimum role: OWNER with customer selector.
| notificationId required | integer <int64> Managed notification ID |
| customerId required | integer <int64> >= 1 Customer whose custom notifications are managed; must be within the caller's access. |
Replace a manageable CUSTOM notification with a new one. The original audience,
ownership, and target are retained; title, message, severity, and optional lifetime
describe the replacement. Recipient seen and dismissal state resets. If lifetime is omitted,
the original total lifetime is used from the replacement's creation time.
An unavailable or out-of-scope ID returns HTTP 404 with key notification.error.notFound.
Minimum role: OWNER with customer selector.
| notificationId required | integer <int64> Managed notification ID |
| customerId required | integer <int64> >= 1 Customer whose custom notifications are managed; must be within the caller's access. |
| severity required | string Enum: "INFO" "SUCCESS" "WARNING" "CRITICAL" |
| title required | string [ 1 .. 255 ] characters Nonblank text. |
| message required | string [ 1 .. 2000 ] characters Nonblank text. |
| lifetimeSeconds | integer <int64> >= 1 Optional lifetime in seconds, at most the configured notification retention period. |
{- "severity": "INFO",
- "title": "string",
- "message": "string",
- "lifetimeSeconds": 1
}{- "id": 0,
- "type": "ALERT_DEVICES",
- "severity": "INFO",
- "createdBy": "string",
- "title": "string",
- "message": "string",
- "titleKey": "string",
- "messageKey": "string",
- "params": {
- "values": {
- "property1": "string",
- "property2": "string"
}
}, - "entityKind": "device",
- "entityId": "string",
- "createdAt": 1683802510000,
- "expiresAt": 1683802510000,
- "seen": true
}