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> |