Skip to main content

Wallboard API - Content Management (2.0)

API Support: [email protected]

Content Management API

Manages all content types assignable to devices in Wallboard.


Endpoint Strategy

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.


Content Types

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 layout
  • COMPLEX = multi-page with widgets, data binding, interactivity

Type Filtering

Using query params (recommended):

  • includeContents=false → only playlists
  • includeLoops=false → only slides/content
  • includeLoops=false&search=structureType=SLIDE → only slides

Using WBQL search:

  • search=deviceContentType=content → slides/content
  • search=deviceContentType=simpleLoop → playlists

Pagination mode (shuffleDeviceContents):

  • true (default): mixed pagination, all types together
  • false: sequential - playlists first, then content

Content Organization

Concept Description
Content Group Folder for organizing content (hierarchical)
Template Pre-made design for quick customization

all-content

All content types (Content, Playlist) - unified API

List all content (unified)

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:

  • Content: Single layouts/designs
  • Playlist: Simple content loops (API path: /api/simpleLoop/)

Minimum role: VIEWER

Authorizations:
bearer
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
search
string

WBQL filter expression. Operators: : (contains), = (equals), , , ^ (starts with), >, , <, , (in set). Logic: , (AND), | (OR). Special: NULL, !NULL. Example: name:lobby,deviceStatus=ONLINE

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: field,direction

  • Directions: asc, desc
  • Multiple sorts: sort=name,asc&sort=lastActivity,desc
  • Nested fields: sort=content.name,asc
select
string

Field projection. * = all primitives, field,field = specific, relation(fields) = nested. Example: select=*,customer(id,name)

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 readOnly attribute in response. Set to false for better performance when not needed.

Responses

Response samples

Content type
application/json
{
  • "first": true,
  • "last": true,
  • "number": 0,
  • "numberOfElements": 0,
  • "totalElements": 0,
  • "totalPages": 0,
  • "size": 0,
  • "content": [
    ]
}

Export device contents to CSV

Export device content types to CSV format.

Minimum role: TECHNICIAN

Authorizations:
bearer
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)

Responses

Add tags to device contents

Add tags to device content types.

Minimum role: EDITOR

Authorizations:
bearer
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
search
string

WBQL filter expression. Operators: : (contains), = (equals), , , ^ (starts with), >, , <, , (in set). Logic: , (AND), | (OR). Special: NULL, !NULL. Example: name:lobby,deviceStatus=ONLINE

Request Body schema: application/json
Array
string

Responses

Request samples

Content type
application/json
[
  • "string"
]

Set tags on device contents

Replace all tags on device content types.

Minimum role: EDITOR

Authorizations:
bearer
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
search
string

WBQL filter expression. Operators: : (contains), = (equals), , , ^ (starts with), >, , <, , (in set). Logic: , (AND), | (OR). Special: NULL, !NULL. Example: name:lobby,deviceStatus=ONLINE

Request Body schema: application/json
Array
string

Responses

Request samples

Content type
application/json
[
  • "string"
]

Remove tags from device contents

Remove tags from device content types.

Minimum role: EDITOR

Authorizations:
bearer
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
search
string

WBQL filter expression. Operators: : (contains), = (equals), , , ^ (starts with), >, , <, , (in set). Logic: , (AND), | (OR). Special: NULL, !NULL. Example: name:lobby,deviceStatus=ONLINE

Request Body schema: application/json
Array
string

Responses

Request samples

Content type
application/json
[
  • "string"
]

Upload content preview image

Upload a manual preview image for a device content.

Minimum role: EDITOR

Authorizations:
bearer
path Parameters
contentId
required
string
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
Request Body schema: image/*
string <binary>

Responses

Delete content preview image

Delete a manual preview image from a device content.

Minimum role: EDITOR

Authorizations:
bearer
path Parameters
contentId
required
string
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)

Responses

Get device contents and groups summary

Retrieve device contents and content groups in a combined view.

Minimum role: VIEWER

Authorizations:
bearer
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
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. * = all primitives, field,field = specific, relation(fields) = nested. Example: select=*,customer(id,name)

Responses

Response samples

Content type
application/json
{
  • "first": true,
  • "last": true,
  • "number": 0,
  • "numberOfElements": 0,
  • "totalElements": 0,
  • "totalPages": 0,
  • "size": 0,
  • "content": [
    ]
}

Get content group breadcrumb

Retrieve breadcrumb navigation path for a content group.

Minimum role: VIEWER

Authorizations:
bearer
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
contentGroupId
required
string

Responses

Response samples

Content type
application/json
{
  • "path": [
    ]
}

Get content signage path

Get the signage URL path for a content.

Minimum role: TECHNICIAN

Authorizations:
bearer
path Parameters
contentId
required
string
query Parameters
reset
boolean
Default: false

Reset the path

Responses

Response samples

Content type
application/json
{
  • "path": "string",
  • "signageKey": "string"
}

Get content displayer path

Get the displayer preview URL for a content.

Minimum role: VIEWER

Authorizations:
bearer
path Parameters
contentId
required
string
query Parameters
autoSaved
boolean
noSync
boolean
editorPreview
boolean
startLoopPaused
boolean
stopAfterOneCycle
boolean
page
string
timeZone
string
datarowlabel
string
datasourceId
string
deviceId
string
mute
boolean

Responses

Response samples

Content type
application/json
{
  • "path": "string",
  • "signageKey": "string"
}

Update device content team assignments

Update team assignments for a device content.

Minimum role: OWNER

Authorizations:
bearer
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
deviceContentId
required
string
Request Body schema: application/json
Array of objects

Teams to assign the resource to

removeFromTeamIds
Array of strings

Team IDs to remove the resource from

Responses

Request samples

Content type
application/json
{
  • "assignToTeams": [
    ],
  • "removeFromTeamIds": [
    ]
}

content

Content management (layouts/designs)

Create content

Create new content design.

Minimum role: EDITOR with customer selector

Authorizations:
bearer
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
contentGroupId
string

Parent content group (folder) ID

teamIds
string
Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:true,00a22e86602c4a88914614aa9516a481:false

Team assignment filter. Format: {teamId}:{readOnly},{teamId}:{readOnly}

Request Body schema: application/json
required
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:

  • COMPLEX: Interactive multi-page content with widgets and data binding
  • SLIDE: Simple single-page static layout

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "comment": "string",
  • "version": "string",
  • "data": { },
  • "advancedConfiguration": { },
  • "tags": [
    ],
  • "structureType": "COMPLEX"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "comment": "string",
  • "lastSaved": 0,
  • "customerId": 0,
  • "contentGroupId": "string",
  • "tags": [
    ],
  • "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": {
    },
  • "customer": {
    },
  • "contentGroup": {
    },
  • "assignedDeviceCount": 0,
  • "assignedAsNextDeviceCount": 0,
  • "assignedAsEmergencyDeviceCount": 0,
  • "previewPath": "string",
  • "data": { },
  • "shortUrl": "string",
  • "orientation": "LANDSCAPE",
  • "readOnly": true,
  • "campaignUsageDetails": { },
  • "topLevelCampaignUsageDetails": { },
  • "messageUsageDetails": { },
  • "saveInfo": {
    }
}

Update content

Update an existing content design.

Minimum role: EDITOR

Authorizations:
bearer
path Parameters
contentId
required
string

Content ID

query Parameters
autoSave
required
boolean

Whether this is an autosave (true) or final save (false)

Request Body schema: application/json
required
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:

  • COMPLEX: Interactive multi-page content with widgets and data binding
  • SLIDE: Simple single-page static layout

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "comment": "string",
  • "version": "string",
  • "data": { },
  • "advancedConfiguration": { },
  • "tags": [
    ],
  • "displayerVersion": "LEGACY_LOOP",
  • "resetDisplayerVersion": true,
  • "structureType": "COMPLEX"
}

Delete content

Delete a content design.

Minimum role: EDITOR

Authorizations:
bearer
path Parameters
contentId
required
string

Content ID

query Parameters
autoSave
required
boolean

Whether to also delete autosave version

Responses

Request samples

curl -X DELETE \
  'https://{server}/api/content/asd50b6232b4eb19bce33c16c6db148?autoSave=true' \
  -H 'Authorization: Bearer <token>'

Duplicate content

Create a copy of existing content.

Minimum role: EDITOR with customer selector

Authorizations:
bearer
path Parameters
contentId
required
string

Source content ID to duplicate

query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
contentGroupId
string

Target content group ID for the duplicate

teamIds
string
Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:true,00a22e86602c4a88914614aa9516a481:false

Team assignment filter. Format: {teamId}:{readOnly},{teamId}:{readOnly}

Request Body schema: application/json
name
string

Name for the duplicated content

comment
string

Comment/description

structureType
string
Enum: "COMPLEX" "SLIDE"

Content structure type:

  • COMPLEX: Interactive multi-page content with widgets and data binding
  • SLIDE: Simple single-page static layout

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "comment": "string",
  • "structureType": "COMPLEX"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "comment": "string",
  • "lastSaved": 0,
  • "customerId": 0,
  • "contentGroupId": "string",
  • "tags": [
    ],
  • "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": {
    },
  • "customer": {
    },
  • "contentGroup": {
    },
  • "assignedDeviceCount": 0,
  • "assignedAsNextDeviceCount": 0,
  • "assignedAsEmergencyDeviceCount": 0,
  • "previewPath": "string",
  • "data": { },
  • "shortUrl": "string",
  • "orientation": "LANDSCAPE",
  • "readOnly": true,
  • "campaignUsageDetails": { },
  • "topLevelCampaignUsageDetails": { },
  • "messageUsageDetails": { },
  • "saveInfo": {
    }
}

Create content from template

Create new content based on a template.

Minimum role: EDITOR with customer selector

Authorizations:
bearer
path Parameters
templateId
required
string

Template ID to use as base

query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
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: {teamId}:{readOnly},{teamId}:{readOnly}

Responses

Request samples

curl -X POST \
  'https://{server}/api/content/fromTemplate/16ff4c6b85e14969ae081392fd9003bb?customerId=182&name=NewContent' \
  -H 'Authorization: Bearer <token>'

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "comment": "string",
  • "lastSaved": 0,
  • "customerId": 0,
  • "contentGroupId": "string",
  • "tags": [
    ],
  • "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": {
    },
  • "customer": {
    },
  • "contentGroup": {
    },
  • "assignedDeviceCount": 0,
  • "assignedAsNextDeviceCount": 0,
  • "assignedAsEmergencyDeviceCount": 0,
  • "previewPath": "string",
  • "data": { },
  • "shortUrl": "string",
  • "orientation": "LANDSCAPE",
  • "readOnly": true,
  • "campaignUsageDetails": { },
  • "topLevelCampaignUsageDetails": { },
  • "messageUsageDetails": { },
  • "saveInfo": {
    }
}

Import content

Import content from a ZIP file (exported content package).

Minimum role: EDITOR with customer selector

Authorizations:
bearer
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
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: {teamId}:{readOnly},{teamId}:{readOnly}

Request Body schema: multipart/form-data
required
content
string <binary>

ZIP file containing exported content

Responses

Request samples

curl -X POST \
  'https://{server}/api/content/import?customerId=182' \
  -H 'Authorization: Bearer <token>' \
  -F '[email protected]'

Export content

Export content to a ZIP file for backup or transfer.

Minimum role: EDITOR

Authorizations:
bearer
query Parameters
search
string

WBQL filter expression. Operators: : (contains), = (equals), , , ^ (starts with), >, , <, , (in set). Logic: , (AND), | (OR). Special: NULL, !NULL. Example: name:lobby,deviceStatus=ONLINE

Responses

Request samples

curl -X POST \
  'https://{server}/api/content/export?search=name:myContent' \
  -H 'Authorization: Bearer <token>' \
  -o content-export.zip

Lock/unlock content

Lock or unlock content to prevent/allow editing.

Minimum role: APPROVER

Authorizations:
bearer
path Parameters
contentId
required
string

Content ID

locked
required
boolean

Lock state (true to lock, false to unlock)

Responses

Request samples

curl -X POST \
  'https://{server}/api/content/lock/asd50b6232b4eb19bce33c16c6db148/true' \
  -H 'Authorization: Bearer <token>'

Upload content preview

Upload a preview image for content.

Minimum role: EDITOR

Authorizations:
bearer
path Parameters
contentId
required
string

Content ID

query Parameters
fileName
string

Preview file name

createdAt
integer <int64>

Creation timestamp (Unix ms)

Request Body schema: application/json
required
previewData
object

Base64 encoded preview data

Responses

Request samples

Content type
application/json
{
  • "previewData": { }
}

Remove content preview

Remove the preview image from content.

Minimum role: EDITOR

Authorizations:
bearer
path Parameters
contentId
required
string

Content ID

query Parameters
fileName
string

Specific preview file to remove

Responses

Export content as CSV

Export content list to CSV format.

Minimum role: VIEWER with customer selector

Authorizations:
bearer
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)

Responses

Request samples

curl -X GET \
  'https://{server}/api/content/csv?customerId=182' \
  -H 'Authorization: Bearer <token>' \
  -o content.csv

Get device online/offline ratio for content

Get the count of online and offline devices for each content.

Minimum role: VIEWER with customer selector

Authorizations:
bearer
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
search
string

WBQL filter expression. Operators: : (contains), = (equals), , , ^ (starts with), >, , <, , (in set). Logic: , (AND), | (OR). Special: NULL, !NULL. Example: name:lobby,deviceStatus=ONLINE

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: field,direction

  • Directions: asc, desc
  • Multiple sorts: sort=name,asc&sort=lastActivity,desc
  • Nested fields: sort=content.name,asc

Responses

Response samples

Content type
application/json
{
  • "property1": {
    },
  • "property2": {
    }
}

content-group

Content organization (folders)

Create content group

Create a new content group (folder) for organizing content.

Minimum role: EDITOR with customer selector

Authorizations:
bearer
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
parentGroupId
string

Parent group ID for nested folders

teamIds
string
Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:true,00a22e86602c4a88914614aa9516a481:false

Team assignment filter. Format: {teamId}:{readOnly},{teamId}:{readOnly}

Request Body schema: application/json
required
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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "deviceContentType": "content",
  • "isTemplateGroup": true
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "deviceContentType": "string",
  • "customerId": 0,
  • "parentId": "string",
  • "isTemplateGroup": true,
  • "simpleLoopCount": 0,
  • "contentCount": 0,
  • "scheduleCount": 0,
  • "readOnly": true
}

List content groups

Retrieve a paginated list of content groups (folders).

Minimum role: VIEWER with customer selector

Authorizations:
bearer
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
search
string

WBQL filter expression. Operators: : (contains), = (equals), , , ^ (starts with), >, , <, , (in set). Logic: , (AND), | (OR). Special: NULL, !NULL. Example: name:lobby,deviceStatus=ONLINE

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: field,direction

  • Directions: asc, desc
  • Multiple sorts: sort=name,asc&sort=lastActivity,desc
  • Nested fields: sort=content.name,asc

Responses

Request samples

curl -X GET \
  'https://{server}/api/contentGroup/?customerId=182&page=0&size=15&sort=name' \
  -H 'Authorization: Bearer <token>'

Response samples

Content type
application/json
{
  • "first": true,
  • "last": true,
  • "number": 0,
  • "numberOfElements": 0,
  • "totalElements": 0,
  • "totalPages": 0,
  • "size": 0,
  • "content": [
    ]
}

Update content group

Update an existing content group.

Minimum role: EDITOR

Authorizations:
bearer
path Parameters
contentGroupId
required
string

Content group ID

Request Body schema: application/json
required
name
string

Content group name

isTemplateGroup
boolean

Whether this is a template group

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "isTemplateGroup": true
}

Delete content group

Delete a content group. Optionally remove all content inside.

Minimum role: EDITOR

Authorizations:
bearer
path Parameters
contentGroupId
required
string

Content group ID

query Parameters
removeContents
boolean
Default: false

If true, also delete all content in the group

Responses

Request samples

curl -X DELETE \
  'https://{server}/api/contentGroup/asd50b6232b4eb19bce33c16c6db148?removeContents=true' \
  -H 'Authorization: Bearer <token>'

Move content to group

Move content items and/or content groups to a target group.

Minimum role: EDITOR with customer selector

Authorizations:
bearer
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
Request Body schema: application/json
required
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)

Responses

Request samples

Content type
application/json
{
  • "contentGroupIds": [
    ],
  • "contentIds": [
    ],
  • "targetGroupId": "string"
}

Lock/unlock contents in group

Lock or unlock all content items within a content group.

Minimum role: EDITOR

Authorizations:
bearer
path Parameters
contentGroupId
required
string

Content group ID

query Parameters
locked
required
boolean

Lock state to apply

isRecursive
boolean
Default: false

Apply to nested groups as well

Responses

Request samples

curl -X PUT \
  'https://{server}/api/contentGroup/asd50b6232b4eb19bce33c16c6db148/lockContentsInGroup?locked=true' \
  -H 'Authorization: Bearer <token>'

Update team assignments

Update team assignments for a content group.

Minimum role: OWNER with customer selector

Authorizations:
bearer
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
contentGroupId
required
string

Content group ID

Request Body schema: application/json
required
Array of objects

Teams to assign the resource to

removeFromTeamIds
Array of strings

Team IDs to remove the resource from

Responses

Request samples

Content type
application/json
{
  • "assignToTeams": [
    ],
  • "removeFromTeamIds": [
    ]
}

template

Content templates

List templates

Retrieve a paginated list of available templates.

Minimum role: VIEWER with customer selector

Authorizations:
bearer
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
search
string

WBQL filter expression. Operators: : (contains), = (equals), , , ^ (starts with), >, , <, , (in set). Logic: , (AND), | (OR). Special: NULL, !NULL. Example: name:lobby,deviceStatus=ONLINE

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: field,direction

  • Directions: asc, desc
  • Multiple sorts: sort=name,asc&sort=lastActivity,desc
  • Nested fields: sort=content.name,asc
includeGlobal
boolean
Default: true

Include global templates

includeDedicated
boolean
Default: true

Include customer-specific templates

Responses

Request samples

curl -X GET \
  'https://{server}/api/template/?customerId=182&page=0&size=15' \
  -H 'Authorization: Bearer <token>'

Response samples

Content type
application/json
{
  • "first": true,
  • "last": true,
  • "number": 0,
  • "numberOfElements": 0,
  • "totalElements": 0,
  • "totalPages": 0,
  • "size": 0,
  • "content": [
    ]
}

playlist

Playlists (simple content loops)

Create simple loop (playlist)

Create a new simple loop (playlist) for content rotation.

Minimum role: EDITOR with customer selector

Authorizations:
bearer
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
contentGroupId
string

Target content group ID

teamIds
string
Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:true,00a22e86602c4a88914614aa9516a481:false

Team assignment filter. Format: {teamId}:{readOnly},{teamId}:{readOnly}

Request Body schema: application/json
required
name
string

Playlist name

comment
string

Playlist description

version
string
Default: "2.0"
Enum: "1.0" "2.0"

Playlist engine version. Always use 2.0.

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)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "comment": "string",
  • "version": "1.0",
  • "data": { },
  • "advancedConfiguration": { },
  • "tags": [
    ],
  • "simpleLoopType": "NORMAL"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "comment": "string",
  • "lastSaved": 0,
  • "customerId": 0,
  • "contentGroupId": "string",
  • "tags": [
    ],
  • "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": {
    },
  • "customer": {
    },
  • "contentGroup": {
    },
  • "assignedDeviceCount": 0,
  • "assignedAsNextDeviceCount": 0,
  • "assignedAsEmergencyDeviceCount": 0,
  • "previewPath": "string",
  • "data": { },
  • "shortUrl": "string",
  • "orientation": "LANDSCAPE",
  • "readOnly": true,
  • "campaignUsageDetails": { },
  • "topLevelCampaignUsageDetails": { },
  • "messageUsageDetails": { },
  • "saveInfo": {
    }
}

Update simple loop

Update an existing simple loop.

Minimum role: EDITOR

Authorizations:
bearer
path Parameters
simpleLoopId
required
string

Simple loop ID

query Parameters
autoSave
required
boolean

Whether this is an autosave

Request Body schema: application/json
required
name
string

Playlist name

comment
string

Playlist description

version
string
Enum: "1.0" "2.0"

Playlist engine version. Always use 2.0 (1.0 is legacy).

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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "comment": "string",
  • "version": "1.0",
  • "data": { },
  • "advancedConfiguration": { },
  • "tags": [
    ],
  • "displayerVersion": "LEGACY_LOOP",
  • "resetDisplayerVersion": true
}

Delete simple loop

Delete a simple loop.

Minimum role: EDITOR

Authorizations:
bearer
path Parameters
simpleLoopId
required
string

Simple loop ID

query Parameters
autoSave
required
boolean

Whether to also delete autosave version

Responses

Duplicate simple loop

Create a copy of an existing simple loop.

Minimum role: EDITOR with customer selector

Authorizations:
bearer
path Parameters
simpleLoopId
required
string

Source simple loop ID

query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
contentGroupId
string

Target content group ID

teamIds
string
Example: teamIds=000c08d294df48efb1b0f5aa754d7ef9:true,00a22e86602c4a88914614aa9516a481:false

Team assignment filter. Format: {teamId}:{readOnly},{teamId}:{readOnly}

Request Body schema: application/json
name
string

Name for the duplicated content

comment
string

Comment/description

structureType
string
Enum: "COMPLEX" "SLIDE"

Content structure type:

  • COMPLEX: Interactive multi-page content with widgets and data binding
  • SLIDE: Simple single-page static layout

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "comment": "string",
  • "structureType": "COMPLEX"
}

Lock/unlock simple loop

Lock or unlock a simple loop.

Minimum role: APPROVER

Authorizations:
bearer
path Parameters
simpleLoopId
required
string

Simple loop ID

locked
required
boolean

Lock state

Responses

Upload simple loop preview

Upload a preview image for a simple loop.

Minimum role: EDITOR

Authorizations:
bearer
path Parameters
simpleLoopId
required
string

Simple loop ID

query Parameters
fileName
string

Preview file name

createdAt
integer <int64>

Creation timestamp (Unix ms)

Request Body schema: application/json
required
previewData
object

Responses

Request samples

Content type
application/json
{
  • "previewData": { }
}

Export simple loops as CSV

Export simple loops list to CSV format.

Minimum role: TECHNICIAN with customer selector

Authorizations:
bearer
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)

Responses

Get device online/offline ratio for simple loops

Get the count of online and offline devices for each simple loop.

Minimum role: VIEWER with customer selector

Authorizations:
bearer
query Parameters
customerId
integer

Customer/tenant ID for multi-tenant filtering.

  • Required for ADMIN users to select tenant context
  • Non-admin users can omit (defaults to their tenant)
  • Set to -1 to query all tenants (ADMIN only)
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: field,direction

  • Directions: asc, desc
  • Multiple sorts: sort=name,asc&sort=lastActivity,desc
  • Nested fields: sort=content.name,asc

Responses

Response samples

Content type
application/json
{
  • "property1": {
    },
  • "property2": {
    }
}