| 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 |
| 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 → only playlistsincludeLoops=false → only slides/contentincludeLoops=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 first, then content| 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 Customer/tenant ID for multi-tenant filtering.
|
| search | string WBQL filter expression. Operators: |
| 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:
|
| 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 |
{- "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": { },
- "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
}, - "assignedDeviceCount": 0,
- "assignedAsNextDeviceCount": 0,
- "assignedAsEmergencyDeviceCount": 0,
- "previewPath": "string",
- "data": { },
- "shortUrl": "string",
- "orientation": "LANDSCAPE",
- "readOnly": true,
- "campaignUsageDetails": { },
- "topLevelCampaignUsageDetails": { },
- "messageUsageDetails": { },
- "saveInfo": {
- "hasAutoSave": true,
- "lastAutoSaveDate": 0
}
}
]
}Export device content types to CSV format.
Minimum role: TECHNICIAN
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
Add tags to device content types.
Minimum role: EDITOR
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
| search | string WBQL filter expression. Operators: |
[- "string"
]Replace all tags on device content types.
Minimum role: EDITOR
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
| search | string WBQL filter expression. Operators: |
[- "string"
]Remove tags from device content types.
Minimum role: EDITOR
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
| search | string WBQL filter expression. Operators: |
[- "string"
]Upload a manual preview image for a device content.
Minimum role: EDITOR
| contentId required | string |
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
Delete a manual preview image from a device content.
Minimum role: EDITOR
| contentId required | string |
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
Retrieve device contents and content groups in a combined view.
Minimum role: VIEWER
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
| 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 .. 1000 ] Default: 20 Number of elements per page (max 1000) |
| select | string Field projection. |
{- "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 Customer/tenant ID for multi-tenant filtering.
|
| contentGroupId required | string |
{- "path": [
- {
- "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",
- "signageKey": "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",
- "signageKey": "string"
}Update team assignments for a device content.
Minimum role: OWNER
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
| 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 Customer/tenant ID for multi-tenant filtering.
|
| contentGroupId | string Parent content group (folder) ID |
| teamIds | string Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:true,00a22e86602c4a88914614aa9516a481:false Team assignment filter. Format: |
| 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": { },
- "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
}, - "assignedDeviceCount": 0,
- "assignedAsNextDeviceCount": 0,
- "assignedAsEmergencyDeviceCount": 0,
- "previewPath": "string",
- "data": { },
- "shortUrl": "string",
- "orientation": "LANDSCAPE",
- "readOnly": true,
- "campaignUsageDetails": { },
- "topLevelCampaignUsageDetails": { },
- "messageUsageDetails": { },
- "saveInfo": {
- "hasAutoSave": true,
- "lastAutoSaveDate": 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 Customer/tenant ID for multi-tenant filtering.
|
| contentGroupId | string Target content group ID for the duplicate |
| teamIds | string Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:true,00a22e86602c4a88914614aa9516a481:false Team assignment filter. Format: |
| 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": { },
- "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
}, - "assignedDeviceCount": 0,
- "assignedAsNextDeviceCount": 0,
- "assignedAsEmergencyDeviceCount": 0,
- "previewPath": "string",
- "data": { },
- "shortUrl": "string",
- "orientation": "LANDSCAPE",
- "readOnly": true,
- "campaignUsageDetails": { },
- "topLevelCampaignUsageDetails": { },
- "messageUsageDetails": { },
- "saveInfo": {
- "hasAutoSave": true,
- "lastAutoSaveDate": 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 Customer/tenant ID for multi-tenant filtering.
|
| 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 assignment filter. Format: |
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": { },
- "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
}, - "assignedDeviceCount": 0,
- "assignedAsNextDeviceCount": 0,
- "assignedAsEmergencyDeviceCount": 0,
- "previewPath": "string",
- "data": { },
- "shortUrl": "string",
- "orientation": "LANDSCAPE",
- "readOnly": true,
- "campaignUsageDetails": { },
- "topLevelCampaignUsageDetails": { },
- "messageUsageDetails": { },
- "saveInfo": {
- "hasAutoSave": true,
- "lastAutoSaveDate": 0
}
}Import content from a ZIP file (exported content package).
Minimum role: EDITOR with customer selector
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
| 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 assignment filter. Format: |
| 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>'
Upload a preview image for content.
Minimum role: EDITOR
| contentId required | string Content ID |
| fileName | string Preview file name |
| createdAt | integer <int64> Creation timestamp (Unix ms) |
| previewData | object Base64 encoded preview data |
{- "previewData": { }
}Export content list to CSV format.
Minimum role: VIEWER with customer selector
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
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 Customer/tenant ID for multi-tenant filtering.
|
| search | string WBQL filter expression. Operators: |
| 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:
|
{- "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 Customer/tenant ID for multi-tenant filtering.
|
| parentGroupId | string Parent group ID for nested folders |
| teamIds | string Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:true,00a22e86602c4a88914614aa9516a481:false Team assignment filter. Format: |
| 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
}Retrieve a paginated list of content groups (folders).
Minimum role: VIEWER with customer selector
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
| search | string WBQL filter expression. Operators: |
| 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:
|
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
}
]
}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 Customer/tenant ID for multi-tenant filtering.
|
| 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 Customer/tenant ID for multi-tenant filtering.
|
| 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 Customer/tenant ID for multi-tenant filtering.
|
| search | string WBQL filter expression. Operators: |
| 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:
|
| 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"
}
}
]
}Create a new simple loop (playlist) for content rotation.
Minimum role: EDITOR with customer selector
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
| contentGroupId | string Target content group ID |
| teamIds | string Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:true,00a22e86602c4a88914614aa9516a481:false Team assignment filter. Format: |
| 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": { },
- "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
}, - "assignedDeviceCount": 0,
- "assignedAsNextDeviceCount": 0,
- "assignedAsEmergencyDeviceCount": 0,
- "previewPath": "string",
- "data": { },
- "shortUrl": "string",
- "orientation": "LANDSCAPE",
- "readOnly": true,
- "campaignUsageDetails": { },
- "topLevelCampaignUsageDetails": { },
- "messageUsageDetails": { },
- "saveInfo": {
- "hasAutoSave": true,
- "lastAutoSaveDate": 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 Customer/tenant ID for multi-tenant filtering.
|
| contentGroupId | string Target content group ID |
| teamIds | string Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:true,00a22e86602c4a88914614aa9516a481:false Team assignment filter. Format: |
| 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"
}Upload a preview image for a simple loop.
Minimum role: EDITOR
| simpleLoopId required | string Simple loop ID |
| fileName | string Preview file name |
| createdAt | integer <int64> Creation timestamp (Unix ms) |
| previewData | object |
{- "previewData": { }
}Export simple loops list to CSV format.
Minimum role: TECHNICIAN with customer selector
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
Get the count of online and offline devices for each simple loop.
Minimum role: VIEWER with customer selector
| customerId | integer Customer/tenant ID for multi-tenant filtering.
|
| search | string Search filter |
| 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:
|
{- "property1": {
- "onlineCount": 0,
- "offlineCount": 0
}, - "property2": {
- "onlineCount": 0,
- "offlineCount": 0
}
}