| Operation | Endpoint | Notes |
|---|---|---|
| Read/List | /api/v2/deviceContent |
Unified endpoint for ALL content types |
| Create/Edit Content | /api/content |
Slides and multi-page layouts |
| Create/Edit Playlist | /api/simpleLoop |
Playlists only |
| Duplicate | /api/content/duplicate/{contentId} or /api/simpleLoop/duplicate/{simpleLoopId} |
Type-specific routes; no shared device-content duplicate route |
| Tagging | /api/v2/deviceContent/tags/* |
Bulk tag operations |
| Folder Browser | /api/deviceContent/view/summary |
Folders + items together |
Playlist version: Always create playlists with version: "2.0". The "1.0" version is legacy and should not be used for new playlists.
The deviceContentType field distinguishes content types:
deviceContentType |
UI Term | structureType |
Description |
|---|---|---|---|
content |
Content / Slide | COMPLEX or SLIDE |
Designed layouts |
simpleLoop |
Playlist | - | Content rotation |
Slides vs Interactive: When deviceContentType=content, check structureType:
SLIDE = single-page static layoutCOMPLEX = multi-page with widgets, data binding, interactivityUsing query params (recommended):
includeContents=false&includeSchedules=false → only playlistsincludeLoops=false&includeSchedules=false → only slides/contentincludeLoops=false&includeSchedules=false&search=structureType=SLIDE → only slidesUsing WBQL search:
search=deviceContentType=content → slides/contentsearch=deviceContentType=simpleLoop → playlistsPagination mode (shuffleDeviceContents):
true (default): mixed pagination, all types togetherfalse: sequential - playlists, then content when using the type filters above| Concept | Description |
|---|---|
| Content Group | Folder for organizing content (hierarchical) |
| Template | Pre-made design for quick customization |
Retrieve a paginated list of all content types that can be assigned to devices.
Use this endpoint instead of individual list endpoints for Content or Playlist.
Filter by type using the includeContents and includeLoops parameters.
Content types:
/api/simpleLoop/)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: |
| 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:
|
| select | string Field projection. |
| includeLoops | boolean Default: true Include Playlist content types |
| includeContents | boolean Default: true Include Content (single layout) types |
| shuffleDeviceContents | boolean Default: true When true (default): all content types mixed together in single paginated result (more efficient). When false: sequential pagination - playlists first, then content (separate queries per type). |
| includeReadOnlyInfo | boolean Default: false Include |
| includeSchedules | boolean Default: true Set false to exclude old schedule records from content/playlist results. Does not control campaign-based scheduling. |
{- "first": true,
- "last": true,
- "number": 0,
- "numberOfElements": 0,
- "totalElements": 0,
- "totalPages": 0,
- "size": 0,
- "content": [
- {
- "id": "string",
- "name": "string",
- "comment": "string",
- "lastSaved": 0,
- "customerId": 0,
- "contentGroupId": "string",
- "tags": [
- "string"
], - "contentGroupPath": "string",
- "displayTime": 0,
- "locked": true,
- "startDate": 0,
- "signageModeSecret": "string",
- "signageModeShortUrl": "string",
- "deviceContentType": "content",
- "width": 0,
- "height": 0,
- "advancedConfiguration": { },
- "structureType": "SLIDE",
- "simpleLoopType": "NORMAL",
- "version": "string",
- "contentMetaData": { },
- "simpleLoopMetaData": { },
- "displayerVersion": "LEGACY_LOOP",
- "lastPreviewUploadTime": 0,
- "lastSavedByEmail": "string",
- "lastActivity": 0,
- "lastSavedBy": {
- "id": 0,
- "firstName": "string",
- "lastName": "string",
- "email": "string"
}, - "customer": {
- "id": 0,
- "name": "string"
}, - "contentGroup": {
- "id": "string",
- "name": "string",
- "deviceContentType": "string",
- "customerId": 0,
- "parentId": "string",
- "isTemplateGroup": true,
- "simpleLoopCount": 0,
- "contentCount": 0,
- "scheduleCount": 0,
- "readOnly": true,
- "contentGroupPath": "string"
}, - "assignedDeviceCount": 0,
- "assignedAsNextDeviceCount": 0,
- "assignedAsEmergencyDeviceCount": 0,
- "previewPath": "string",
- "data": { },
- "shortUrl": "string",
- "orientation": "LANDSCAPE",
- "readOnly": true,
- "campaignUsageDetails": { },
- "topLevelCampaignUsageDetails": { },
- "messageUsageDetails": { },
- "saveInfo": {
- "hasAutoSave": true,
- "lastAutoSaveDate": 0
}, - "hasManualPreview": true,
- "lastManualPreviewUploadTime": 0
}
]
}Export device content types to CSV format.
Minimum role: TECHNICIAN
| 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. |
Add tags to device content types.
Minimum role: EDITOR
| 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: |
[- "string"
]Replace all tags on device content types.
Minimum role: EDITOR
| 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: |
[- "string"
]Remove tags from device content types.
Minimum role: EDITOR
| 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: |
[- "string"
]Upload a manual preview image for a device content.
Minimum role: EDITOR
| contentId required | string |
| 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. |
Delete a manual preview image from a device content.
Minimum role: EDITOR
| contentId required | string |
| 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. |
Retrieve device contents and content groups in a combined view.
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. |
| contentGroupSearch | string WBQL search for content groups |
| contentSearch | string WBQL search for contents |
| quickFilterId | string Quick filter ID |
| groupSelect | string WBQL select for groups |
| includeLoops | boolean Default: true |
| includeContents | boolean Default: true |
| shuffleDeviceContents | boolean Default: true When true (default): all content types mixed together in single paginated result. When false: sequential pagination - playlists first, then content. |
| page | integer >= 0 Default: 0 Page index (0-based) |
| size | integer >= 1 Default: 20 Requested page size; server limits and endpoint overrides apply. |
| select | string Field projection. |
| includeSchedules | boolean Default: true Set false to exclude old schedule records from content/playlist results. Does not control campaign-based scheduling. |
{- "first": true,
- "last": true,
- "number": 0,
- "numberOfElements": 0,
- "totalElements": 0,
- "totalPages": 0,
- "size": 0,
- "content": [
- { }
]
}Retrieve breadcrumb navigation path for a content group.
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. |
| contentGroupId required | string |
{- "groups": [
- {
- "id": "string",
- "name": "string"
}
]
}Get the signage URL path for a content.
Minimum role: TECHNICIAN
| contentId required | string |
| reset | boolean Default: false Reset the path |
{- "path": "string",
- "shortUrl": "string"
}Get the displayer preview URL for a content.
Minimum role: VIEWER
| contentId required | string |
| autoSaved | boolean |
| noSync | boolean |
| editorPreview | boolean |
| startLoopPaused | boolean |
| stopAfterOneCycle | boolean |
| page | string |
| timeZone | string |
| datarowlabel | string |
| datasourceId | string |
| deviceId | string |
| mute | boolean |
{- "path": "string",
- "shortUrl": "string"
}Update team assignments for a device content.
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. |
| deviceContentId required | string |
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"
]
}Create new content design.
Minimum role: EDITOR 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. |
| contentGroupId | string Parent content group (folder) ID |
| teamIds | string Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:true,00a22e86602c4a88914614aa9516a481:false Team assignments for a newly created resource. Comma-separated teamId:readOnly pairs. |
| name | string Content name |
| comment | string Content description/comment |
| version | string Content engine version |
| data | object Content JSON data (editor structure) |
| advancedConfiguration | object Advanced configuration settings |
| tags | Array of strings Tags for categorization |
| structureType | string Default: "COMPLEX" Enum: "COMPLEX" "SLIDE" Content structure type:
|
{- "name": "string",
- "comment": "string",
- "version": "string",
- "data": { },
- "advancedConfiguration": { },
- "tags": [
- "string"
], - "structureType": "COMPLEX"
}{- "id": "string",
- "name": "string",
- "comment": "string",
- "lastSaved": 0,
- "customerId": 0,
- "contentGroupId": "string",
- "tags": [
- "string"
], - "contentGroupPath": "string",
- "displayTime": 0,
- "locked": true,
- "startDate": 0,
- "signageModeSecret": "string",
- "signageModeShortUrl": "string",
- "deviceContentType": "content",
- "width": 0,
- "height": 0,
- "advancedConfiguration": { },
- "structureType": "SLIDE",
- "simpleLoopType": "NORMAL",
- "version": "string",
- "contentMetaData": { },
- "simpleLoopMetaData": { },
- "displayerVersion": "LEGACY_LOOP",
- "lastPreviewUploadTime": 0,
- "lastSavedByEmail": "string",
- "lastActivity": 0,
- "lastSavedBy": {
- "id": 0,
- "firstName": "string",
- "lastName": "string",
- "email": "string"
}, - "customer": {
- "id": 0,
- "name": "string"
}, - "contentGroup": {
- "id": "string",
- "name": "string",
- "deviceContentType": "string",
- "customerId": 0,
- "parentId": "string",
- "isTemplateGroup": true,
- "simpleLoopCount": 0,
- "contentCount": 0,
- "scheduleCount": 0,
- "readOnly": true,
- "contentGroupPath": "string"
}, - "assignedDeviceCount": 0,
- "assignedAsNextDeviceCount": 0,
- "assignedAsEmergencyDeviceCount": 0,
- "previewPath": "string",
- "data": { },
- "shortUrl": "string",
- "orientation": "LANDSCAPE",
- "readOnly": true,
- "campaignUsageDetails": { },
- "topLevelCampaignUsageDetails": { },
- "messageUsageDetails": { },
- "saveInfo": {
- "hasAutoSave": true,
- "lastAutoSaveDate": 0
}, - "hasManualPreview": true,
- "lastManualPreviewUploadTime": 0
}Update an existing content design.
Minimum role: EDITOR
| contentId required | string Content ID |
| autoSave required | boolean Whether this is an autosave (true) or final save (false) |
| name | string Content name |
| comment | string Content description/comment |
| version | string Content engine version |
| data | object Content JSON data (editor structure) |
| advancedConfiguration | object Advanced configuration settings |
| tags | Array of strings Tags for categorization |
| displayerVersion | string Enum: "LEGACY_LOOP" "LEGACY_CONTENT" "V2" Displayer version for rendering |
| resetDisplayerVersion | boolean Reset displayer version to default |
| structureType | string Enum: "COMPLEX" "SLIDE" Content structure type:
|
{- "name": "string",
- "comment": "string",
- "version": "string",
- "data": { },
- "advancedConfiguration": { },
- "tags": [
- "string"
], - "displayerVersion": "LEGACY_LOOP",
- "resetDisplayerVersion": true,
- "structureType": "COMPLEX"
}Delete a content design.
Minimum role: EDITOR
| contentId required | string Content ID |
| autoSave required | boolean Whether to also delete autosave version |
curl -X DELETE \ 'https://{server}/api/content/asd50b6232b4eb19bce33c16c6db148?autoSave=true' \ -H 'Authorization: Bearer <token>'
Create a copy of existing content.
Minimum role: EDITOR with customer selector
| contentId required | string Source content ID to duplicate |
| 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. |
| contentGroupId | string Target content group ID for the duplicate |
| teamIds | string Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:true,00a22e86602c4a88914614aa9516a481:false Team assignments for a newly created resource. Comma-separated teamId:readOnly pairs. |
| name | string Name for the duplicated content |
| comment | string Comment/description |
| structureType | string Enum: "COMPLEX" "SLIDE" Content structure type:
|
{- "name": "string",
- "comment": "string",
- "structureType": "COMPLEX"
}{- "id": "string",
- "name": "string",
- "comment": "string",
- "lastSaved": 0,
- "customerId": 0,
- "contentGroupId": "string",
- "tags": [
- "string"
], - "contentGroupPath": "string",
- "displayTime": 0,
- "locked": true,
- "startDate": 0,
- "signageModeSecret": "string",
- "signageModeShortUrl": "string",
- "deviceContentType": "content",
- "width": 0,
- "height": 0,
- "advancedConfiguration": { },
- "structureType": "SLIDE",
- "simpleLoopType": "NORMAL",
- "version": "string",
- "contentMetaData": { },
- "simpleLoopMetaData": { },
- "displayerVersion": "LEGACY_LOOP",
- "lastPreviewUploadTime": 0,
- "lastSavedByEmail": "string",
- "lastActivity": 0,
- "lastSavedBy": {
- "id": 0,
- "firstName": "string",
- "lastName": "string",
- "email": "string"
}, - "customer": {
- "id": 0,
- "name": "string"
}, - "contentGroup": {
- "id": "string",
- "name": "string",
- "deviceContentType": "string",
- "customerId": 0,
- "parentId": "string",
- "isTemplateGroup": true,
- "simpleLoopCount": 0,
- "contentCount": 0,
- "scheduleCount": 0,
- "readOnly": true,
- "contentGroupPath": "string"
}, - "assignedDeviceCount": 0,
- "assignedAsNextDeviceCount": 0,
- "assignedAsEmergencyDeviceCount": 0,
- "previewPath": "string",
- "data": { },
- "shortUrl": "string",
- "orientation": "LANDSCAPE",
- "readOnly": true,
- "campaignUsageDetails": { },
- "topLevelCampaignUsageDetails": { },
- "messageUsageDetails": { },
- "saveInfo": {
- "hasAutoSave": true,
- "lastAutoSaveDate": 0
}, - "hasManualPreview": true,
- "lastManualPreviewUploadTime": 0
}Create new content based on a template.
Minimum role: EDITOR with customer selector
| templateId required | string Template ID to use as base |
| 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. |
| contentGroupId | string Target content group ID |
| name | string Name for the new content |
| comment | string Comment/description for the new content |
| teamIds | string Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:true,00a22e86602c4a88914614aa9516a481:false Team assignments for a newly created resource. Comma-separated teamId:readOnly pairs. |
curl -X POST \ 'https://{server}/api/content/fromTemplate/16ff4c6b85e14969ae081392fd9003bb?customerId=182&name=NewContent' \ -H 'Authorization: Bearer <token>'
{- "id": "string",
- "name": "string",
- "comment": "string",
- "lastSaved": 0,
- "customerId": 0,
- "contentGroupId": "string",
- "tags": [
- "string"
], - "contentGroupPath": "string",
- "displayTime": 0,
- "locked": true,
- "startDate": 0,
- "signageModeSecret": "string",
- "signageModeShortUrl": "string",
- "deviceContentType": "content",
- "width": 0,
- "height": 0,
- "advancedConfiguration": { },
- "structureType": "SLIDE",
- "simpleLoopType": "NORMAL",
- "version": "string",
- "contentMetaData": { },
- "simpleLoopMetaData": { },
- "displayerVersion": "LEGACY_LOOP",
- "lastPreviewUploadTime": 0,
- "lastSavedByEmail": "string",
- "lastActivity": 0,
- "lastSavedBy": {
- "id": 0,
- "firstName": "string",
- "lastName": "string",
- "email": "string"
}, - "customer": {
- "id": 0,
- "name": "string"
}, - "contentGroup": {
- "id": "string",
- "name": "string",
- "deviceContentType": "string",
- "customerId": 0,
- "parentId": "string",
- "isTemplateGroup": true,
- "simpleLoopCount": 0,
- "contentCount": 0,
- "scheduleCount": 0,
- "readOnly": true,
- "contentGroupPath": "string"
}, - "assignedDeviceCount": 0,
- "assignedAsNextDeviceCount": 0,
- "assignedAsEmergencyDeviceCount": 0,
- "previewPath": "string",
- "data": { },
- "shortUrl": "string",
- "orientation": "LANDSCAPE",
- "readOnly": true,
- "campaignUsageDetails": { },
- "topLevelCampaignUsageDetails": { },
- "messageUsageDetails": { },
- "saveInfo": {
- "hasAutoSave": true,
- "lastAutoSaveDate": 0
}, - "hasManualPreview": true,
- "lastManualPreviewUploadTime": 0
}Import content from a ZIP file (exported content package).
Minimum role: EDITOR 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. |
| contentGroupId | string Target content group ID |
| fileFolderId | string Target file folder ID for media files |
| useOriginalFilesOnDuplicate | boolean Default: false Reuse existing files if duplicates are found |
| teamIds | string Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:true,00a22e86602c4a88914614aa9516a481:false Team assignments for a newly created resource. Comma-separated teamId:readOnly pairs. |
| structureType | string Enum: "COMPLEX" "SLIDE" Structure type to use for the imported content. |
| requiredContentVariants | Array of strings Items Enum: "SLIDE_V1" "SLIDE_V2" "COMPLEX_V1" "COMPLEX_V2" Content variants to include during import. |
| content | string <binary> ZIP file containing exported content |
curl -X POST \ 'https://{server}/api/content/import?customerId=182' \ -H 'Authorization: Bearer <token>' \ -F '[email protected]'
Export content to a ZIP file for backup or transfer.
Minimum role: EDITOR
| search | string WBQL filter expression. Operators: |
curl -X POST \ 'https://{server}/api/content/export?search=name:myContent' \ -H 'Authorization: Bearer <token>' \ -o content-export.zip
Lock or unlock content to prevent/allow editing.
Minimum role: APPROVER
| contentId required | string Content ID |
| locked required | boolean Lock state (true to lock, false to unlock) |
curl -X POST \ 'https://{server}/api/content/lock/asd50b6232b4eb19bce33c16c6db148/true' \ -H 'Authorization: Bearer <token>'
Store an editor-generated page preview for this item. fileName/createdAt identify the generated preview; this operation does not set a manual thumbnail override.
Minimum role: EDITOR
| contentId required | string Content ID |
| fileName | string Preview file name |
| createdAt | integer <int64> Creation timestamp (Unix ms) |
| previewData required | string PNG preview as a Base64 data URL (data:image/png;base64,...). |
{- "previewData": "string"
}Export content list to CSV format.
Minimum role: VIEWER 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. |
curl -X GET \ 'https://{server}/api/content/csv?customerId=182' \ -H 'Authorization: Bearer <token>' \ -o content.csv
Get the count of online and offline devices for each content.
Minimum role: VIEWER 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. |
| search | string WBQL filter expression. Operators: |
| 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:
|
{- "property1": {
- "onlineCount": 0,
- "offlineCount": 0
}, - "property2": {
- "onlineCount": 0,
- "offlineCount": 0
}
}Create a new content group (folder) for organizing content.
Minimum role: EDITOR 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. |
| parentGroupId | string Parent group ID for nested folders |
| teamIds | string Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:true,00a22e86602c4a88914614aa9516a481:false Team assignments for a newly created resource. Comma-separated teamId:readOnly pairs. |
| name required | string Content group name |
| deviceContentType | string Enum: "content" "schedule" "simpleLoop" Type of content this group holds |
| isTemplateGroup | boolean Whether this is a template group |
{- "name": "string",
- "deviceContentType": "content",
- "isTemplateGroup": true
}{- "id": "string",
- "name": "string",
- "deviceContentType": "string",
- "customerId": 0,
- "parentId": "string",
- "isTemplateGroup": true,
- "simpleLoopCount": 0,
- "contentCount": 0,
- "scheduleCount": 0,
- "readOnly": true,
- "contentGroupPath": "string"
}Retrieve a paginated list of content groups (folders).
Minimum role: VIEWER 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. |
| search | string WBQL filter expression. Operators: |
| 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:
|
curl -X GET \ 'https://{server}/api/contentGroup/?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": "string",
- "name": "string",
- "deviceContentType": "string",
- "customerId": 0,
- "parentId": "string",
- "isTemplateGroup": true,
- "simpleLoopCount": 0,
- "contentCount": 0,
- "scheduleCount": 0,
- "readOnly": true,
- "contentGroupPath": "string"
}
]
}Update an existing content group.
Minimum role: EDITOR
| contentGroupId required | string Content group ID |
| name | string Content group name |
| isTemplateGroup | boolean Whether this is a template group |
{- "name": "string",
- "isTemplateGroup": true
}Delete a content group. Optionally remove all content inside.
Minimum role: EDITOR
| contentGroupId required | string Content group ID |
| removeContents | boolean Default: false If true, also delete all content in the group |
curl -X DELETE \ 'https://{server}/api/contentGroup/asd50b6232b4eb19bce33c16c6db148?removeContents=true' \ -H 'Authorization: Bearer <token>'
Move content items and/or content groups to a target group.
Minimum role: EDITOR 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. |
| contentGroupIds | Array of strings Content group IDs to move |
| contentIds | Array of strings Content IDs to move |
| targetGroupId | string Target content group ID (null to move to root) |
{- "contentGroupIds": [
- "string"
], - "contentIds": [
- "string"
], - "targetGroupId": "string"
}Lock or unlock all content items within a content group.
Minimum role: EDITOR
| contentGroupId required | string Content group ID |
| locked required | boolean Lock state to apply |
| isRecursive | boolean Default: false Apply to nested groups as well |
curl -X PUT \ 'https://{server}/api/contentGroup/asd50b6232b4eb19bce33c16c6db148/lockContentsInGroup?locked=true' \ -H 'Authorization: Bearer <token>'
Update team assignments for a content group.
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. |
| contentGroupId required | string Content group 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 available templates.
Minimum role: VIEWER 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. |
| search | string WBQL filter expression. Operators: |
| 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:
|
| includeGlobal | boolean Default: true Include global templates |
| includeDedicated | boolean Default: true Include customer-specific templates |
curl -X GET \ 'https://{server}/api/template/?customerId=182&page=0&size=15' \ -H 'Authorization: Bearer <token>'
{- "first": true,
- "last": true,
- "number": 0,
- "numberOfElements": 0,
- "totalElements": 0,
- "totalPages": 0,
- "size": 0,
- "content": [
- {
- "id": "string",
- "name": "string",
- "comment": "string",
- "width": 0,
- "height": 0,
- "tags": [
- "string"
], - "global": true,
- "previewPath": "string",
- "lastSaved": 0,
- "lastPreviewUploadTime": 0,
- "lastSavedBy": {
- "id": 0,
- "firstName": "string",
- "lastName": "string",
- "email": "string"
}, - "lastSavedByEmail": "string",
- "shortUrl": "string",
- "structureType": "COMPLEX",
- "usageCount": 0,
- "version": "string"
}
]
}Create a new simple loop (playlist) for content rotation.
Minimum role: EDITOR 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. |
| contentGroupId | string Target content group ID |
| teamIds | string Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:true,00a22e86602c4a88914614aa9516a481:false Team assignments for a newly created resource. Comma-separated teamId:readOnly pairs. |
| name | string Playlist name |
| comment | string Playlist description |
| version | string Default: "2.0" Enum: "1.0" "2.0" Playlist engine version. Always use |
| data | object Playlist JSON data |
| advancedConfiguration | object Advanced configuration |
| tags | Array of strings Playlist tags |
| simpleLoopType | string Enum: "NORMAL" "EINK" Playlist type (NORMAL or EINK for e-ink displays) |
{- "name": "string",
- "comment": "string",
- "version": "1.0",
- "data": { },
- "advancedConfiguration": { },
- "tags": [
- "string"
], - "simpleLoopType": "NORMAL"
}{- "id": "string",
- "name": "string",
- "comment": "string",
- "lastSaved": 0,
- "customerId": 0,
- "contentGroupId": "string",
- "tags": [
- "string"
], - "contentGroupPath": "string",
- "displayTime": 0,
- "locked": true,
- "startDate": 0,
- "signageModeSecret": "string",
- "signageModeShortUrl": "string",
- "deviceContentType": "content",
- "width": 0,
- "height": 0,
- "advancedConfiguration": { },
- "structureType": "SLIDE",
- "simpleLoopType": "NORMAL",
- "version": "string",
- "contentMetaData": { },
- "simpleLoopMetaData": { },
- "displayerVersion": "LEGACY_LOOP",
- "lastPreviewUploadTime": 0,
- "lastSavedByEmail": "string",
- "lastActivity": 0,
- "lastSavedBy": {
- "id": 0,
- "firstName": "string",
- "lastName": "string",
- "email": "string"
}, - "customer": {
- "id": 0,
- "name": "string"
}, - "contentGroup": {
- "id": "string",
- "name": "string",
- "deviceContentType": "string",
- "customerId": 0,
- "parentId": "string",
- "isTemplateGroup": true,
- "simpleLoopCount": 0,
- "contentCount": 0,
- "scheduleCount": 0,
- "readOnly": true,
- "contentGroupPath": "string"
}, - "assignedDeviceCount": 0,
- "assignedAsNextDeviceCount": 0,
- "assignedAsEmergencyDeviceCount": 0,
- "previewPath": "string",
- "data": { },
- "shortUrl": "string",
- "orientation": "LANDSCAPE",
- "readOnly": true,
- "campaignUsageDetails": { },
- "topLevelCampaignUsageDetails": { },
- "messageUsageDetails": { },
- "saveInfo": {
- "hasAutoSave": true,
- "lastAutoSaveDate": 0
}, - "hasManualPreview": true,
- "lastManualPreviewUploadTime": 0
}Update an existing simple loop.
Minimum role: EDITOR
| simpleLoopId required | string Simple loop ID |
| autoSave required | boolean Whether this is an autosave |
| name | string Playlist name |
| comment | string Playlist description |
| version | string Enum: "1.0" "2.0" Playlist engine version. Always use |
| data | object Playlist JSON data |
| advancedConfiguration | object Advanced configuration |
| tags | Array of strings Playlist tags |
| displayerVersion | string Enum: "LEGACY_LOOP" "LEGACY_CONTENT" "V2" Displayer version for rendering |
| resetDisplayerVersion | boolean Reset displayer version to default |
{- "name": "string",
- "comment": "string",
- "version": "1.0",
- "data": { },
- "advancedConfiguration": { },
- "tags": [
- "string"
], - "displayerVersion": "LEGACY_LOOP",
- "resetDisplayerVersion": true
}Create a copy of an existing simple loop.
Minimum role: EDITOR with customer selector
| simpleLoopId required | string Source simple loop ID |
| 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. |
| contentGroupId | string Target content group ID |
| teamIds | string Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:true,00a22e86602c4a88914614aa9516a481:false Team assignments for a newly created resource. Comma-separated teamId:readOnly pairs. |
| name | string Name for the duplicated content |
| comment | string Comment/description |
| structureType | string Enum: "COMPLEX" "SLIDE" Content structure type:
|
{- "name": "string",
- "comment": "string",
- "structureType": "COMPLEX"
}Store an editor-generated page preview for this item. fileName/createdAt identify the generated preview; this operation does not set a manual thumbnail override.
Minimum role: EDITOR
| simpleLoopId required | string Simple loop ID |
| fileName | string Preview file name |
| createdAt | integer <int64> Creation timestamp (Unix ms) |
| previewData required | string PNG preview as a Base64 data URL (data:image/png;base64,...). |
{- "previewData": "string"
}Export simple loops list to CSV format.
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. |
Get the count of online and offline devices for each simple loop.
Minimum role: VIEWER 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. |
| search | string Search filter |
| 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:
|
{- "property1": {
- "onlineCount": 0,
- "offlineCount": 0
}, - "property2": {
- "onlineCount": 0,
- "offlineCount": 0
}
}