Wallboard API - User & Team Management (2.0)
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, data sources, 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:
- Assign users to teams
- Assign resources (devices, content, files, etc.) to teams
- Users only see resources from their teams
- Resources can be
readOnlyfor 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.
List users (V2)
Retrieve a paginated list of users with support for field selection.
Minimum role: DEVICE_USER
Authorizations:
query Parameters
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
| 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:
|
| search | string WBQL filter expression. Operators: |
| select | string Field projection. |
Responses
Response samples
- 200
{- "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": "2019-08-24T14:15:22Z",
- "createdDate": "2019-08-24T14:15:22Z",
- "termsOfServiceAcceptDate": "2019-08-24T14:15:22Z",
- "logins": 0,
- "presenceTime": 0,
- "lastActivity": "2019-08-24T14:15:22Z",
- "editorLevel": "BASIC",
- "role": "DEVICE_USER",
- "readOnly": true,
- "forceToSet2FA": true,
- "authProvider": "LOCAL",
- "use2FA": true,
- "restricted": true,
- "hiddenUIElementRules": { },
- "userMetaData": { },
- "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"
}, - "trustedAdmin": true,
- "oauthPasswordFlowEnabled": true,
- "active": true,
- "customer": {
- "id": 0,
- "name": "string",
- "subreseller": true
}, - "userInterfaceProfile": {
- "id": 0,
- "name": "string",
- "comment": "string",
- "hiddenUIElementRules": { },
- "customerId": 0
}
}
]
}Get current user
Get the authenticated user's profile. Returns role, customerId, and customer details.
Minimum role: DEVICE_USER
Authorizations:
Responses
Response samples
- 200
{- "name": "string",
- "language": "string",
- "address": "string",
- "comment": "string",
- "iconUrl": "string",
- "lastLogin": "2019-08-24T14:15:22Z",
- "createdDate": "2019-08-24T14:15:22Z",
- "termsOfServiceAcceptDate": "2019-08-24T14:15:22Z",
- "logins": 0,
- "presenceTime": 0,
- "lastActivity": "2019-08-24T14:15:22Z",
- "editorLevel": "BASIC",
- "role": "DEVICE_USER",
- "readOnly": true,
- "forceToSet2FA": true,
- "authProvider": "LOCAL",
- "use2FA": true,
- "restricted": true,
- "hiddenUIElementRules": { },
- "userMetaData": { },
- "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"
}, - "trustedAdmin": true,
- "oauthPasswordFlowEnabled": true,
- "active": true,
- "customer": {
- "id": 0,
- "name": "string",
- "subreseller": true
}, - "userInterfaceProfile": {
- "id": 0,
- "name": "string",
- "comment": "string",
- "hiddenUIElementRules": { },
- "customerId": 0
}
}Create user
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).
Authorizations:
query Parameters
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
| teamIds | string Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:true,00a22e86602c4a88914614aa9516a481:false Team assignment filter. Format: |
Request Body schema: application/jsonrequired
| 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 |
Responses
Request samples
- Payload
{- "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
}Response samples
- 200
{- "name": "string",
- "language": "string",
- "address": "string",
- "comment": "string",
- "iconUrl": "string",
- "lastLogin": "2019-08-24T14:15:22Z",
- "createdDate": "2019-08-24T14:15:22Z",
- "termsOfServiceAcceptDate": "2019-08-24T14:15:22Z",
- "logins": 0,
- "presenceTime": 0,
- "lastActivity": "2019-08-24T14:15:22Z",
- "editorLevel": "BASIC",
- "role": "DEVICE_USER",
- "readOnly": true,
- "forceToSet2FA": true,
- "authProvider": "LOCAL",
- "use2FA": true,
- "restricted": true,
- "hiddenUIElementRules": { },
- "userMetaData": { },
- "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"
}, - "trustedAdmin": true,
- "oauthPasswordFlowEnabled": true,
- "active": true,
- "customer": {
- "id": 0,
- "name": "string",
- "subreseller": true
}, - "userInterfaceProfile": {
- "id": 0,
- "name": "string",
- "comment": "string",
- "hiddenUIElementRules": { },
- "customerId": 0
}
}Update user
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).
Authorizations:
query Parameters
| email required | string <email> Email of the user to update |
Request Body schema: application/jsonrequired
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 |
Responses
Request samples
- Payload
{- "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
}Change password
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).
Authorizations:
query Parameters
| oldPassword required | string <password> |
| newPassword required | string <password> |
| totp | string TOTP code if 2FA is enabled |
Responses
Enable/disable 2FA
Enable or disable two-factor authentication for current user.
Minimum role: DEVICE_USER
⚠️ Protected: Requires g-recaptcha-response header (if CAPTCHA enabled).
Authorizations:
query Parameters
| totp required | string Current TOTP code to verify |
| enable required | boolean Whether to enable or disable 2FA |
Responses
Get terms of service acceptance info
Get information about the user's terms of service acceptance status.
Minimum role: DEVICE_USER
Authorizations:
Responses
Response samples
- 200
{- "userAcceptedTermsOfServiceDate": "2019-08-24T14:15:22Z",
- "termsOfServiceLastUpdatedDate": "2019-08-24T14:15:22Z",
- "userAcceptedLatestTermsOfService": true
}Update user team assignments
Update which teams a user belongs to.
Minimum role: OWNER
Authorizations:
query Parameters
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
| email required | string <email> Email of the user to update |
Request Body schema: application/jsonrequired
Array of objects (DefaultTeamAssignmentParams) Teams to assign the resource to | |
| removeFromTeamIds | Array of strings Team IDs to remove the resource from |
Responses
Request samples
- Payload
{- "assignToTeams": [
- {
- "teamId": "string",
- "readOnly": false
}
], - "removeFromTeamIds": [
- "string"
]
}Export users as CSV
Export user list as CSV file.
Minimum role: OWNER
Authorizations:
query Parameters
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
| search | string WBQL filter expression. Operators: |
Responses
Send feedback
Submit feedback about the platform.
Minimum role: DEVICE_USER
Authorizations:
Request Body schema: application/jsonrequired
| message required | string |
| messageType | string Type of feedback (e.g., "bug", "feature", "question") |
Array of objects (ImageAttachment) |
Responses
Request samples
- Payload
{- "message": "string",
- "messageType": "string",
- "images": [
- {
- "imageUrl": "string",
- "fileName": "string"
}
]
}Send content request
Request custom content creation assistance.
Minimum role: DEVICE_USER
Authorizations:
Request Body schema: application/jsonrequired
| 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 |
Responses
Request samples
- Payload
{- "message": "string",
- "messageType": "string",
- "images": [
- {
- "imageUrl": "string",
- "fileName": "string"
}
], - "contentName": "string",
- "startDate": "string",
- "endDate": "string",
- "targetScreenGroup": "string"
}Check user access and role
Check if current user has access to a customer and optionally verify role.
Minimum role: DEVICE_USER
Authorizations:
query Parameters
| customerId required | integer |
| role | string (UserRole) Enum: "DEVICE_USER" "VIEWER" "EDITOR" "APPROVER" "TECHNICIAN" "OWNER" "ADMIN" Minimum role to check for |
Responses
List teams
Retrieve a paginated list of teams.
Minimum role: VIEWER
Authorizations:
query Parameters
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
| 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:
|
| 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 |
Responses
Response samples
- 200
{- "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 team
Create a new team (user group).
Minimum role: OWNER
Authorizations:
query Parameters
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
Request Body schema: application/jsonrequired
| name required | string |
| comment | string |
| hiddenUIElementRules | string JSON rules for hiding UI elements |
Responses
Request samples
- Payload
{- "name": "string",
- "comment": "string",
- "hiddenUIElementRules": "string"
}Response samples
- 200
{- "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 team
Update an existing team.
Minimum role: OWNER
Authorizations:
query Parameters
| teamId required | string |
Request Body schema: application/jsonrequired
| name required | string |
| comment | string |
| hiddenUIElementRules | string JSON rules for hiding UI elements |
Responses
Request samples
- Payload
{- "name": "string",
- "comment": "string",
- "hiddenUIElementRules": "string"
}Response samples
- 200
{- "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 all teams (non-paginated)
Retrieve all teams without pagination.
Minimum role: VIEWER
Authorizations:
query Parameters
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
| search | string WBQL filter expression. Operators: |
| includeTeamUserNumber | boolean Default: false |
| includeTeamResourceNumber | boolean Default: false |
Responses
Response samples
- 200
[- {
- "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 team assignments for user
Get which teams a user belongs to, including readOnly status for each.
Returns shallow DTOs with teamId, resourceId, and readOnly flag.
Minimum role: OWNER
Authorizations:
path Parameters
| userEmail required | string <email> |
Responses
Response samples
- 200
[- {
- "resourceId": "string",
- "teamId": "string",
- "readOnly": true
}
]Update team user assignments
Bulk update user assignments for a team.
Minimum role: OWNER
Authorizations:
query Parameters
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
| teamId required | string |
Request Body schema: application/jsonrequired
Array of objects (SimpleStringIdResourceAssignmentParams) Resources to add to the team | |
| resourceIdsToRemove | Array of strings Resource IDs to remove from the team |
Responses
Request samples
- Payload
{- "resourcesToAdd": [
- {
- "id": "string",
- "readOnly": false
}
], - "resourceIdsToRemove": [
- "string"
]
}List UI profiles
Retrieve UI customization profiles.
Minimum role: OWNER
Authorizations:
query Parameters
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
| 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:
|
| search | string WBQL filter expression. Operators: |
| select | string Field projection. |
Responses
Response samples
- 200
{- "first": true,
- "last": true,
- "number": 0,
- "numberOfElements": 0,
- "totalElements": 0,
- "totalPages": 0,
- "size": 0,
- "content": [
- {
- "id": 0,
- "name": "string",
- "comment": "string",
- "hiddenUIElementRules": { },
- "customerId": 0
}
]
}Create UI profile
Create a new UI customization profile.
Minimum role: OWNER
Authorizations:
query Parameters
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
Request Body schema: application/jsonrequired
| name required | string |
| comment | string |
| hiddenUIElementRules | object |
Responses
Request samples
- Payload
{- "name": "string",
- "comment": "string",
- "hiddenUIElementRules": { }
}Response samples
- 200
{- "id": 0,
- "name": "string",
- "comment": "string",
- "hiddenUIElementRules": { },
- "customerId": 0
}Update UI profile
Minimum role: OWNER
Authorizations:
path Parameters
| userInterfaceProfileId required | integer <int64> |
Request Body schema: application/jsonrequired
| name required | string |
| comment | string |
| hiddenUIElementRules | object |
Responses
Request samples
- Payload
{- "name": "string",
- "comment": "string",
- "hiddenUIElementRules": { }
}Response samples
- 200
{- "id": 0,
- "name": "string",
- "comment": "string",
- "hiddenUIElementRules": { },
- "customerId": 0
}Assign UI profile to users
Bulk assign or remove a UI profile from users.
Minimum role: OWNER
Authorizations:
path Parameters
| userInterfaceProfileId required | integer <int64> |
Request Body schema: application/jsonrequired
| assignUserIds | Array of strings <email> [ items <email > ] User emails to assign the profile to |
| removeUserIds | Array of strings <email> [ items <email > ] User emails to remove the profile from |
Responses
Request samples
- Payload
{
}