Skip to main content

Wallboard API - Administration (2.0)

API Support: [email protected]

Administrative endpoints for the Wallboard digital signage platform.

Overview

Administration endpoints provide customer/tenant management, UI customization, system statistics, activity logs, and tag management.

Key Concepts

Concept Description
Customer Tenant organization in multi-tenant system
Network Owner Subreseller managing multiple customers
UI Profile User interface customization (hide/show menu items, features)
License Device activation entitlement
Statistics System and network usage metrics
Tags Labels for organizing content, devices, and other resources

Customer Profiles

Profile Description
BASIC Basic feature set
ADVANCED Advanced features enabled
PROFESSIONAL Professional tier features
INHERIT Inherit from parent (network owner)

License Types

Type Description
BASIC Lite tier with basic features
PROFESSIONAL Professional tier
DBA Broadcaster (legacy, not used for new orders)
ENTERPRISE Premium tier with all features
VIDEO_WALL Video wall support

License Tiers

Tier Description
STARTER Entry-level tier
BUSINESS Business tier
ENTERPRISE Enterprise tier

customer

Customer/tenant management (customer-level). For metadata writes, see the shared path and array semantics.

List customers

Retrieve a paginated list of customers. Regular users see only their customer. Network owners see their network members. ADMINs see all customers.

Minimum role: DEVICE_USER with customer selector

Authorizations:
bearer
query Parameters
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: field,direction

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

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

select
string

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

date
integer <int64>

Filter by date timestamp (for billing/reporting calculations)

Responses

Response samples

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

Create customer

Create a new customer/tenant.

Minimum role: OWNER

Authorizations:
bearer
Request Body schema: application/json
required
name
required
string
comment
string
country
string
location
string
type
string
profile
string (CustomerProfile)
Enum: "BASIC" "ADVANCED" "PROFESSIONAL" "INHERIT"

Customer profile/feature tier

vertical
string (CustomerVertical)
Enum: "BANKING_AND_FINANCE" "EMPLOYEE_CORPORATE_COMMUNICATION" "CORPORATE_MEETING_ROOMS" "DIGITAL_SIGNAGE" "EDUCATION_COLLAGE_AND_UNIVERSITIES" "CONFERENCE_AND_CONVENTION_CENTERS" "GOVERNMENT" "HEALTHCARE" "HOSPITALITY" "QUICK_SERVICE_RESTAURANT" "RETAIL" "SPORTS" "PETROL_STATIONS" "TRANSPORTATION" "ENTERTAINMENT" "WAYFINDING_AND_DIRECTORIES" "OTHER" "FACTORY_PRODUCEMENT" "BUSINESS_PARTNER" "RESELLER_PARTNER" "TECHNOLOGY_PARTNER"

Industry vertical

licenseType
string (LicenseType)
Enum: "BASIC" "PROFESSIONAL" "DBA" "ENTERPRISE" "VIDEO_WALL"

Device license type. Note: DBA (Broadcaster) is legacy and not used for new license orders.

licenseTier
string (CustomerLicenseTier)
Enum: "STARTER" "BUSINESS" "ENTERPRISE"

Customer licenseTier field, used to select package resource-limit defaults. Separate from licenseType.

freeLicenses
integer <int64>
Default: 0
browserSessionLicenses
integer <int64>
Default: 0
deviceSessionLimit
integer <int64>
Default: 0
integer or string (DateInput)

Date input accepts Unix milliseconds or an ISO 8601 date-time string. Date responses use Unix milliseconds.

restricted
boolean
Default: false
contentDesignerEmail
string
supportEmail
string
needsToBeInvoiced
boolean
Default: true
storageSize
integer <int64>
hiddenUIElementRules
object
customerMetadata
object
enableAutomaticDistributionToDms
boolean
Default: false
userFullAccessIfNotInTeam
boolean
Default: true
accessResourcesWithoutTeam
boolean
Default: true
force2FA
boolean
Default: false
brandingGuideline
object
slaveId
string
createAsSubreseller
boolean
Default: false
ownerSubresellerId
integer <int64>
uiVersion
string
Default: "V1"
Enum: "V1" "V2"

UI version

loopDisplayerVersion
string
Enum: "LEGACY_LOOP" "LEGACY_CONTENT" "V2"

Default displayer version for playlists

contentDisplayerVersion
string
Enum: "LEGACY_LOOP" "LEGACY_CONTENT" "V2"

Default displayer version for content

deviceUpdatePolicy
string
Default: "FAST"
Enum: "IMMEDIATE" "FAST" "SLOW" "CUSTOM"

Device update policy

deviceUpdateDelayStartDays
integer

Days to delay device updates (start)

deviceUpdateDelayEndDays
integer

Days to delay device updates (end)

vistarNetworkId
string

Vistar network ID for programmatic advertising

vistarApiKey
string

Vistar API key

jsonSchema
any

JSON value.

restrictionMessage
string

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "comment": "string",
  • "country": "string",
  • "location": "string",
  • "type": "string",
  • "profile": "BASIC",
  • "vertical": "BANKING_AND_FINANCE",
  • "licenseType": "BASIC",
  • "licenseTier": "STARTER",
  • "freeLicenses": 0,
  • "browserSessionLicenses": 0,
  • "deviceSessionLimit": 0,
  • "expirationDate": 1704067200000,
  • "restricted": false,
  • "contentDesignerEmail": "string",
  • "supportEmail": "string",
  • "needsToBeInvoiced": true,
  • "storageSize": 0,
  • "hiddenUIElementRules": { },
  • "customerMetadata": { },
  • "enableAutomaticDistributionToDms": false,
  • "userFullAccessIfNotInTeam": true,
  • "accessResourcesWithoutTeam": true,
  • "force2FA": false,
  • "brandingGuideline": { },
  • "slaveId": "string",
  • "createAsSubreseller": false,
  • "ownerSubresellerId": 0,
  • "uiVersion": "V1",
  • "loopDisplayerVersion": "LEGACY_LOOP",
  • "contentDisplayerVersion": "LEGACY_LOOP",
  • "deviceUpdatePolicy": "IMMEDIATE",
  • "deviceUpdateDelayStartDays": 0,
  • "deviceUpdateDelayEndDays": 0,
  • "vistarNetworkId": "string",
  • "vistarApiKey": "string",
  • "jsonSchema": null,
  • "restrictionMessage": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "comment": "string",
  • "country": "string",
  • "location": "string",
  • "type": "string",
  • "profile": "BASIC",
  • "vertical": "BANKING_AND_FINANCE",
  • "licenseType": "BASIC",
  • "licenseTier": "STARTER",
  • "freeLicenses": 0,
  • "browserSessionLicenses": 0,
  • "deviceSessionLimit": 0,
  • "expirationDate": 0,
  • "createdDate": 0,
  • "restricted": true,
  • "contentDesignerEmail": "string",
  • "supportEmail": "string",
  • "needsToBeInvoiced": true,
  • "storageSize": 0,
  • "hiddenUIElementRules": { },
  • "enableAutomaticDistributionToDms": true,
  • "userFullAccessIfNotInTeam": true,
  • "accessResourcesWithoutTeam": true,
  • "deviceAndGroupCreationEnabledInRootForTeamUsers": true,
  • "contentAndGroupCreationEnabledInRootForTeamUsers": true,
  • "fileAndFolderCreationEnabledInRootForTeamUsers": true,
  • "brandingGuideline": { },
  • "uiVersion": "string",
  • "slaveId": "string",
  • "ownerSubresellerId": 0,
  • "force2FA": true,
  • "onlineLicenses": 0,
  • "totalLicenses": 0,
  • "usedFree": 0,
  • "activeLicenses": 0,
  • "subreseller": {
    },
  • "customerMetadata": null,
  • "jsonSchema": null,
  • "userInterfaceProfileTemplateId": 0
}

Update customer

Update customer settings.

Minimum role: OWNER with customer selector

Optional resourceLimits field: only a platform ADMIN can apply per-customer overrides, and the customer's licenseTier must be ENTERPRISE. This condition applies to writing resource-limit overrides, not to ordinary customer settings. It refers to licenseTier, not licenseType. Other callers' supplied resourceLimits values are ignored. An ADMIN override write with another/null tier, or a negative override value, returns HTTP 400 with resourceLimit.error.overrideNotAllowed. The tier is evaluated after any permitted licenseTier change in the same request.

Authorizations:
bearer
path Parameters
customerId
required
integer <int64>
Request Body schema: application/json
required
name
string
comment
string
country
string
location
string
type
string
profile
string (CustomerProfile)
Enum: "BASIC" "ADVANCED" "PROFESSIONAL" "INHERIT"

Customer profile/feature tier

vertical
string (CustomerVertical)
Enum: "BANKING_AND_FINANCE" "EMPLOYEE_CORPORATE_COMMUNICATION" "CORPORATE_MEETING_ROOMS" "DIGITAL_SIGNAGE" "EDUCATION_COLLAGE_AND_UNIVERSITIES" "CONFERENCE_AND_CONVENTION_CENTERS" "GOVERNMENT" "HEALTHCARE" "HOSPITALITY" "QUICK_SERVICE_RESTAURANT" "RETAIL" "SPORTS" "PETROL_STATIONS" "TRANSPORTATION" "ENTERTAINMENT" "WAYFINDING_AND_DIRECTORIES" "OTHER" "FACTORY_PRODUCEMENT" "BUSINESS_PARTNER" "RESELLER_PARTNER" "TECHNOLOGY_PARTNER"

Industry vertical

licenseType
string (LicenseType)
Enum: "BASIC" "PROFESSIONAL" "DBA" "ENTERPRISE" "VIDEO_WALL"

Device license type. Note: DBA (Broadcaster) is legacy and not used for new license orders.

licenseTier
string (CustomerLicenseTier)
Enum: "STARTER" "BUSINESS" "ENTERPRISE"

Customer licenseTier field, used to select package resource-limit defaults. Separate from licenseType.

freeLicenses
integer <int64>
browserSessionLicenses
integer <int64>
deviceSessionLimit
integer <int64>
integer or string (DateInput)

Date input accepts Unix milliseconds or an ISO 8601 date-time string. Date responses use Unix milliseconds.

resetExpirationDate
boolean

Set to true to clear expiration date

integer or string (DateInput)

Date input accepts Unix milliseconds or an ISO 8601 date-time string. Date responses use Unix milliseconds.

restricted
boolean
contentDesignerEmail
string
supportEmail
string
needsToBeInvoiced
boolean
storageSize
integer <int64>
hiddenUIElementRules
object
customerMetadata
object
enableAutomaticDistributionToDms
boolean
force2FA
boolean
brandingGuideline
object
uiVersion
string
Enum: "V1" "V2"

UI version

loopDisplayerVersion
string
Enum: "LEGACY_LOOP" "LEGACY_CONTENT" "V2"

Default displayer version for playlists

resetLoopDisplayerVersion
boolean

Reset to default displayer version for playlists

contentDisplayerVersion
string
Enum: "LEGACY_LOOP" "LEGACY_CONTENT" "V2"

Default displayer version for content

resetContentDisplayerVersion
boolean

Reset to default displayer version for content

deviceUpdatePolicy
string
Enum: "IMMEDIATE" "FAST" "SLOW" "CUSTOM"

Device update policy

deviceUpdateDelayStartDays
integer

Days to delay device updates (start)

deviceUpdateDelayEndDays
integer

Days to delay device updates (end)

vistarNetworkId
string

Vistar network ID for programmatic advertising

resetVistarNetworkId
boolean

Reset Vistar network ID

vistarApiKey
string

Vistar API key

resetVistarApiKey
boolean

Reset Vistar API key

jsonSchema
any

JSON value.

resetAdminOverrideHourly
boolean
resetAdminOverrideMonthly
boolean
resetCustomerSelfCapHourly
boolean
resetCustomerSelfCapMonthly
boolean
resetRestrictionMessage
boolean
resetUserInterfaceProfileTemplateId
boolean
restrictionMessage
string
userInterfaceProfileTemplateId
integer <int64>
object (CustomerResourceLimits)

Per-customer resource-limit overrides for a customer whose licenseTier is ENTERPRISE. In a customer update, only a platform ADMIN can apply this field; values supplied by other callers are ignored. A supplied resourceLimits replaces the complete map. Omitted/null resourceLimits preserves it while the tier remains ENTERPRISE. If the resulting licenseTier is another value or null, stored overrides are cleared. An empty overrides map restores package defaults. These are rules for this optional field, not prerequisites for updating other customer settings.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "comment": "string",
  • "country": "string",
  • "location": "string",
  • "type": "string",
  • "profile": "BASIC",
  • "vertical": "BANKING_AND_FINANCE",
  • "licenseType": "BASIC",
  • "licenseTier": "STARTER",
  • "freeLicenses": 0,
  • "browserSessionLicenses": 0,
  • "deviceSessionLimit": 0,
  • "expirationDate": 1704067200000,
  • "resetExpirationDate": true,
  • "createdDate": 1704067200000,
  • "restricted": true,
  • "contentDesignerEmail": "string",
  • "supportEmail": "string",
  • "needsToBeInvoiced": true,
  • "storageSize": 0,
  • "hiddenUIElementRules": { },
  • "customerMetadata": { },
  • "enableAutomaticDistributionToDms": true,
  • "force2FA": true,
  • "brandingGuideline": { },
  • "uiVersion": "V1",
  • "loopDisplayerVersion": "LEGACY_LOOP",
  • "resetLoopDisplayerVersion": true,
  • "contentDisplayerVersion": "LEGACY_LOOP",
  • "resetContentDisplayerVersion": true,
  • "deviceUpdatePolicy": "IMMEDIATE",
  • "deviceUpdateDelayStartDays": 0,
  • "deviceUpdateDelayEndDays": 0,
  • "vistarNetworkId": "string",
  • "resetVistarNetworkId": true,
  • "vistarApiKey": "string",
  • "resetVistarApiKey": true,
  • "jsonSchema": null,
  • "resetAdminOverrideHourly": true,
  • "resetAdminOverrideMonthly": true,
  • "resetCustomerSelfCapHourly": true,
  • "resetCustomerSelfCapMonthly": true,
  • "resetRestrictionMessage": true,
  • "resetUserInterfaceProfileTemplateId": true,
  • "restrictionMessage": "string",
  • "userInterfaceProfileTemplateId": 0,
  • "resourceLimits": {
    }
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "comment": "string",
  • "country": "string",
  • "location": "string",
  • "type": "string",
  • "profile": "BASIC",
  • "vertical": "BANKING_AND_FINANCE",
  • "licenseType": "BASIC",
  • "licenseTier": "STARTER",
  • "freeLicenses": 0,
  • "browserSessionLicenses": 0,
  • "deviceSessionLimit": 0,
  • "expirationDate": 0,
  • "createdDate": 0,
  • "restricted": true,
  • "contentDesignerEmail": "string",
  • "supportEmail": "string",
  • "needsToBeInvoiced": true,
  • "storageSize": 0,
  • "hiddenUIElementRules": { },
  • "enableAutomaticDistributionToDms": true,
  • "userFullAccessIfNotInTeam": true,
  • "accessResourcesWithoutTeam": true,
  • "deviceAndGroupCreationEnabledInRootForTeamUsers": true,
  • "contentAndGroupCreationEnabledInRootForTeamUsers": true,
  • "fileAndFolderCreationEnabledInRootForTeamUsers": true,
  • "brandingGuideline": { },
  • "uiVersion": "string",
  • "slaveId": "string",
  • "ownerSubresellerId": 0,
  • "force2FA": true,
  • "onlineLicenses": 0,
  • "totalLicenses": 0,
  • "usedFree": 0,
  • "activeLicenses": 0,
  • "subreseller": {
    },
  • "customerMetadata": null,
  • "jsonSchema": null,
  • "userInterfaceProfileTemplateId": 0
}

Delete customer

Delete a customer and all associated data. This is a destructive operation.

Minimum role: OWNER with customer selector

Headers:

  • x-totp: TOTP code for verification (optional)
  • x-captcha: Captcha token (optional)
  • x-captcha-version: Captcha version V2 or V3 (default: V2)
Authorizations:
bearer
path Parameters
customerId
required
integer <int64>

Responses

Select customer context

Get the current customer context including user and subscription info. Used after login to establish session context.

Minimum role: DEVICE_USER with customer selector

Authorizations:
bearer
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "user": {
    },
  • "customer": {
    },
  • "subscriptionId": "string",
  • "subscriptionUrl": "string"
}

Get customer info

Get current customer information with license usage details.

Minimum role: TECHNICIAN with customer selector

Authorizations:
bearer
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "comment": "string",
  • "country": "string",
  • "location": "string",
  • "type": "string",
  • "profile": "BASIC",
  • "vertical": "BANKING_AND_FINANCE",
  • "licenseType": "BASIC",
  • "licenseTier": "STARTER",
  • "freeLicenses": 0,
  • "browserSessionLicenses": 0,
  • "deviceSessionLimit": 0,
  • "expirationDate": 0,
  • "createdDate": 0,
  • "restricted": true,
  • "contentDesignerEmail": "string",
  • "supportEmail": "string",
  • "needsToBeInvoiced": true,
  • "storageSize": 0,
  • "hiddenUIElementRules": { },
  • "enableAutomaticDistributionToDms": true,
  • "userFullAccessIfNotInTeam": true,
  • "accessResourcesWithoutTeam": true,
  • "deviceAndGroupCreationEnabledInRootForTeamUsers": true,
  • "contentAndGroupCreationEnabledInRootForTeamUsers": true,
  • "fileAndFolderCreationEnabledInRootForTeamUsers": true,
  • "brandingGuideline": { },
  • "uiVersion": "string",
  • "slaveId": "string",
  • "ownerSubresellerId": 0,
  • "force2FA": true,
  • "onlineLicenses": 0,
  • "totalLicenses": 0,
  • "usedFree": 0,
  • "activeLicenses": 0,
  • "subreseller": {
    },
  • "customerMetadata": null,
  • "jsonSchema": null,
  • "userInterfaceProfileTemplateId": 0
}

Get customer statistics

Get detailed statistics for a specific customer including device counts, user activity, content counts, and pie chart data.

Minimum role: OWNER with customer selector

Authorizations:
bearer
path Parameters
customerId
required
integer <int64>

Responses

Response samples

Content type
application/json
{
  • "totalDevices": 0,
  • "totalLicenses": 0,
  • "lastDeviceActivity": 0,
  • "activeDevicesInLastWeek": 0,
  • "totalUsers": 0,
  • "totalUserPresenceTime": 0,
  • "totalUserLoginCount": 0,
  • "activeUsersInLastWeek": 0,
  • "totalContents": 0,
  • "totalDatasources": 0,
  • "ownedCustomerCount": 0,
  • "devicesByState": {
    },
  • "devicesByLicensePayType": {
    },
  • "devicesByLicenseType": {
    },
  • "contentsByType": {
    }
}

Get customer license dashboard

Get license dashboard view for a customer.

Minimum role: OWNER with customer selector

Authorizations:
bearer
path Parameters
customerId
required
integer <int64>

Responses

Response samples

Content type
application/json
{
  • "activeBrowserSessionCount": 0,
  • "assignedLicenseCount": 0,
  • "browserSessionLimit": 0,
  • "freeCount": 0,
  • "unAssignedLicenseCount": 0,
  • "usedFreeCount": 0
}

Get customer invoice view

Get invoice view for a specific customer, including monthly recurring revenue (MRR) and itemized billing tables grouped by recurrence and license type.

The view includes the customer's own license orders and those of their subresellers (network members) up to 3 levels deep. Only approved, SUBSCRIPTION-type orders are included; orders with a future invoiceStartDate (relative to the date parameter) are excluded.

Minimum role: ADMIN

Authorizations:
bearer
path Parameters
customerId
required
integer <int64>

Customer ID

query Parameters
date
required
string <date-time>

Reference date for invoice calculation (ISO-8601, e.g. 2026-04-16T00:00:00Z). Subscriptions are considered active as of this date.

Responses

Response samples

Content type
application/json
{
  • "recurringRevenueList": [
    ],
  • "totalInvoiceTables": [
    ],
  • "networkOwnerInvoiceTables": [
    ],
  • "networkMembersInvoiceTables": [
    ],
  • "networkMemberLicenseTierCounts": {
    }
}

Get global invoice view

Get system-wide recurring revenue across all customers on the instance, grouped by currency.

Only approved, SUBSCRIPTION-type orders are included; orders with a future invoiceStartDate (relative to the date parameter) are excluded. No currency conversion is performed — each currency is reported separately.

Minimum role: ADMIN

Authorizations:
bearer
query Parameters
date
required
string <date-time>

Reference date for invoice calculation (ISO-8601, e.g. 2026-04-16T00:00:00Z). Subscriptions are considered active as of this date.

Responses

Response samples

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

Update team settings

Update team-related settings for a customer.

Minimum role: OWNER with customer selector

Authorizations:
bearer
query Parameters
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.

Request Body schema: application/json
required
userFullAccessIfNotInTeam
boolean
accessResourcesWithoutTeam
boolean
isDeviceAndGroupCreationEnabledInRootForTeamUsers
boolean
isContentAndGroupCreationEnabledInRootForTeamUsers
boolean
isFileAndFolderCreationEnabledInRootForTeamUsers
boolean

Responses

Request samples

Content type
application/json
{
  • "userFullAccessIfNotInTeam": true,
  • "accessResourcesWithoutTeam": true,
  • "isDeviceAndGroupCreationEnabledInRootForTeamUsers": true,
  • "isContentAndGroupCreationEnabledInRootForTeamUsers": true,
  • "isFileAndFolderCreationEnabledInRootForTeamUsers": true
}

Write customer metadata at a path

Creates missing levels and replaces the value at the addressed path. String segments are object keys; integer segments are array indexes. Requires write access to the selected customer.

Minimum role: OWNER.

Authorizations:
bearer
path Parameters
customerId
required
integer <int64>
Request Body schema: application/json
required
required
Array of strings or integers [ 1 .. 32 ] items
value
required
any or null

Required JSON value. JSON null is valid; omitting value is invalid.

Responses

Request samples

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

Remove a customer metadata path

An absent/empty path is rejected. Requires write access to the selected customer.

Minimum role: OWNER.

Authorizations:
bearer
path Parameters
customerId
required
integer <int64>
query Parameters
path
required
Array of strings [ 1 .. 32 ] items

Repeated query parameters, e.g. path=preferences&path=columns&path=0. Encode each segment; do not send a DELETE body.

Responses

Reset customer metadata

Replaces the whole metadata document with an empty object. Requires write access to the selected customer.

Minimum role: OWNER.

Authorizations:
bearer
path Parameters
customerId
required
integer <int64>

Responses

Read effective resource limits and usage

Returns effective package limits with applicable customer overrides. Limit-gated creation can fail with HTTP 400, key resourceLimit.error.limitReached, and details.resource, details.used, details.limit. A zero limit allows no new items; existing resources are not deleted by lowering a limit.

Minimum role: EDITOR.

Authorizations:
bearer
query Parameters
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.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Read Canva export limit and usage

A null/omitted canvaExportLimit means no cap. The export counter resets daily.

Minimum role: EDITOR.

Authorizations:
bearer
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "customerId": 0,
  • "canva": {
    }
}

user-interface-profile

Configure UI visibility and regional presentation for customers and users through hiddenUIElementRules. Its inner JSON is a frontend-owned contract: the backend stores it without validating namespace keys or their meaning. A successful save does not establish that the consuming frontend understands a rule.

Current documents use version: "2.1". The schema below lists the UI/editor namespaces and regional settings. In dashboard, newUi and playlistEditor, true enables/shows, false disables/hides, and null or an omitted key inherits. Parent visibility and role checks still apply; profile rules do not grant backend permissions. For example, {"version":"2.1","dashboard":{"DEVICES_SEE":false}} disables the Devices view. Keys belong to specific namespaces and frontend versions. Start from a profile configured in the matching UI.

UI inheritance: defaults → system → server-wide profile assigned to customer → customer → profile assigned to user → user. Later non-null values override earlier values. Regional formatting follows defaults → system → customer → profile assigned to user → user; it does not currently apply the server-wide profile layer.

Writes: creation requires a nonempty name and non-null rules. On update, omitting hiddenUIElementRules preserves it; supplying it replaces the entire JSON document. Read the existing rules, change the intended keys and send the complete document, preserving the remaining namespaces. Concurrent whole-document edits can overwrite each other. Regional settings change UI presentation, including date display, without changing API serialization.

List UI profiles

Retrieve user interface profiles with optional filtering and pagination.

Minimum role: OWNER

Authorizations:
bearer
query Parameters
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: : (contains), = (equals), , , ^ (starts with), >, , <, , (in set). Logic: , (AND), | (OR). Special: NULL, !NULL. Example: name:lobby,deviceStatus=ONLINE

select
string

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

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: 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
{
  • "first": true,
  • "last": true,
  • "number": 0,
  • "numberOfElements": 0,
  • "totalElements": 0,
  • "totalPages": 0,
  • "size": 0,
  • "content": [
    ]
}

Create UI profile

Create a user interface profile. Its inner JSON structure is defined by the frontend, not validated by the backend. See UI profile rules and inheritance and the request schema below.

Minimum role: OWNER

Authorizations:
bearer
query Parameters
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.

Request Body schema: application/json
required
name
required
string non-empty
comment
string
required
object (HiddenUIElementRules)

Frontend-owned rules document. The backend stores JSON without validating inner keys or value types; this schema describes the current frontend format, not backend validation. Use keys supported by the consuming frontend. Current writes use version "2.1". Supplying hiddenUIElementRules on update replaces the entire document. See UI profile rules and inheritance for how customer/user layers combine; the properties below describe namespaces and regional settings.

Responses

Request samples

Content type
application/json
{
  • "name": "Limited Editor",
  • "comment": "Disable the Devices view",
  • "hiddenUIElementRules": {
    }
}

Response samples

Content type
application/json
{
  • "id": 42,
  • "name": "Limited Editor",
  • "comment": "Disable the Devices view",
  • "hiddenUIElementRules": {
    },
  • "customerId": 123
}

Update UI profile

Update a user interface profile. Fields are optional. Omit hiddenUIElementRules to preserve it; supplying a value replaces the entire JSON document, without a nested merge. Read the existing rules before changing one key.

Minimum role: OWNER

Authorizations:
bearer
path Parameters
userInterfaceProfileId
required
integer <int64>

UI profile ID

Request Body schema: application/json
required
name
string
comment
string
object (HiddenUIElementRules)

Frontend-owned rules document. The backend stores JSON without validating inner keys or value types; this schema describes the current frontend format, not backend validation. Use keys supported by the consuming frontend. Current writes use version "2.1". Supplying hiddenUIElementRules on update replaces the entire document. See UI profile rules and inheritance for how customer/user layers combine; the properties below describe namespaces and regional settings.

Responses

Request samples

Content type
application/json
{
  • "name": "Renamed profile"
}

Response samples

Content type
application/json
{
  • "id": 42,
  • "name": "Limited Editor",
  • "comment": "Disable the Devices view",
  • "hiddenUIElementRules": {
    },
  • "customerId": 123
}

Delete UI profile

Delete a user interface profile.

Minimum role: OWNER

Authorizations:
bearer
path Parameters
userInterfaceProfileId
required
integer <int64>

UI profile ID

Responses

Assign profile to users

Assign or remove user interface profile to/from users.

Minimum role: OWNER

Authorizations:
bearer
path Parameters
userInterfaceProfileId
required
integer <int64>

UI profile ID

Request Body schema: application/json
required
assignUserIds
Array of strings

User IDs to assign profile to

removeUserIds
Array of strings

User IDs to remove profile from

Responses

Request samples

Content type
application/json
{
  • "assignUserIds": [
    ],
  • "removeUserIds": [
    ]
}

statistics

Statistics and metrics (customer-level)

Get network dashboard statistics

Get statistics for a network owner and their members. Returns the same structure as system dashboard but scoped to the network.

Minimum role: VIEWER with customer selector

Authorizations:
bearer
query Parameters
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.

includeOwnerData
boolean
Default: false

Include network owner's own data in statistics

force
boolean
Default: false

Force refresh cached data

Responses

Response samples

Content type
application/json
{
  • "unassignedDeviceStatusCounts": {
    },
  • "assignedDeviceStatusCounts": {
    },
  • "assignedLicenseCount": 0,
  • "unAssignedLicenseCount": 0,
  • "deviceLicenseTypeCounts": {
    },
  • "deviceLicenseStatusCounts": {
    },
  • "customerCount": 0,
  • "activeCustomerCount": 0,
  • "customerByVerticalCounts": {
    },
  • "customerLicenseTierCounts": {
    },
  • "userCount": 0,
  • "activeUserCount": 0,
  • "simpleLoopCount": 0,
  • "contentCount": 0,
  • "slideCount": 0,
  • "scheduleCount": 0,
  • "datasourceByTypeCounts": {
    },
  • "datasourceByIncomingDataFormatCounts": {
    },
  • "activeExternalDatasourceCount": 0,
  • "brokenExternalDatasourceCount": 0,
  • "browserSessionLimit": 0,
  • "activeBrowserSessionCount": 0,
  • "activeGoogleCredentials": {
    },
  • "activeMicrosoftCredentials": {
    },
  • "licenseValidTo": 0,
  • "supportValidTo": 0,
  • "activeUsersWith2FA": 0,
  • "activeUsersWithout2FA": 0
}

Get session statistics

Get active session statistics for a customer including browser sessions and device content sessions.

Minimum role: VIEWER with customer selector

Authorizations:
bearer
query Parameters
customerId
required
integer <int64>

Customer ID

Responses

Response samples

Content type
application/json
{
  • "browserSessions": {
    },
  • "deviceContentSessions": {
    }
}

log

Activity logs

Get activity logs

Retrieve paginated activity logs for a customer. Logs include user actions, device events, and system messages.

Note: This endpoint is served by the wb-log-service microservice.

Authorizations:
bearer
query Parameters
customerId
integer <int64>

Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint.

page
integer
Default: 0

Page index (0-based)

size
integer
Default: 20

Page size

search
string

Search filter expression

order
string
Default: "DESC"
Enum: "ASC" "DESC"

Sort order

from
integer <int64>

Filter logs from this timestamp (Unix milliseconds)

to
integer <int64>

Filter logs until this timestamp (Unix milliseconds)

Responses

Response samples

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

Download logs as CSV

Download activity logs as a CSV file.

Note: This endpoint is served by the wb-log-service microservice.

Authorizations:
bearer
query Parameters
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 expression

Responses

tag

Tag management for resources

Get customer tags

Get all tags organized by entity type for a customer.

Minimum role: VIEWER with customer selector

Authorizations:
bearer
query Parameters
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.

select
string

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

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "campaignTags": {
    },
  • "messageTags": {
    },
  • "deviceContentTags": {
    },
  • "deviceTags": {
    },
  • "deviceGroupTags": {
    },
  • "fileTags": {
    }
}

Create tag

Create a new tag for a specific entity type.

Minimum role: EDITOR with customer selector

Authorizations:
bearer
query Parameters
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.

tagType
required
string (CustomerTagType)
Enum: "CONTENT" "DEVICE" "CAMPAIGN" "MESSAGE" "FILE"

Entity type for the tag

Request Body schema: application/json
required
tag
required
string

Tag name

comment
string

Tag description

Responses

Request samples

Content type
application/json
{
  • "tag": "string",
  • "comment": "string"
}

Response samples

Content type
application/json
{
  • "tag": "string",
  • "tagInfo": {
    }
}

Update tag

Update an existing tag's comment.

Minimum role: EDITOR with customer selector

Authorizations:
bearer
query Parameters
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.

tag
required
string

Tag name to update

tagType
required
string (CustomerTagType)
Enum: "CONTENT" "DEVICE" "CAMPAIGN" "MESSAGE" "FILE"

Entity type for the tag

Request Body schema: application/json
required
comment
string

Updated tag description

Responses

Request samples

Content type
application/json
{
  • "comment": "string"
}

Delete tag

Delete an existing tag.

Minimum role: EDITOR with customer selector

Authorizations:
bearer
query Parameters
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.

tag
required
string

Tag name to delete

tagType
required
string (CustomerTagType)
Enum: "CONTENT" "DEVICE" "CAMPAIGN" "MESSAGE" "FILE"

Entity type for the tag

Responses

Get all tags with usage counts

Get all tags merged across entity types with their usage counts.

Minimum role: VIEWER with customer selector

Authorizations:
bearer
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "lobby": 5,
  • "reception": 3,
  • "floor-1": 12
}

Suggest tags

Get tag suggestions based on keyword and entity type.

Minimum role: VIEWER with customer selector

Authorizations:
bearer
query Parameters
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.

keyword
string

Keyword to filter suggestions

entity
string (CustomerTagType)
Enum: "CONTENT" "DEVICE" "CAMPAIGN" "MESSAGE" "FILE"

Entity type to filter by

Responses

Response samples

Content type
application/json
[
  • "string"
]

Suggest template tags

Get template tag suggestions based on keyword.

Minimum role: VIEWER

Authorizations:
bearer
query Parameters
keyword
string

Keyword to filter suggestions

Responses

Response samples

Content type
application/json
[
  • "string"
]

customer-admin

Customer administration (ADMIN only, system-wide)

Export customers as CSV

Export customer list as CSV file (all customers in the system).

Minimum role: ADMIN

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

Get global customer statistics

Get global statistics across all customers in the system.

Minimum role: ADMIN

Authorizations:
bearer

Responses

Response samples

Content type
application/json
{
  • "activeLastWeek": 0,
  • "totalActiveLicenses": 0,
  • "totalLicenses": 0
}

statistics-admin

System statistics (ADMIN only)

Get system dashboard statistics

Get global platform statistics including device counts, customer counts, user activity, and content statistics across all customers.

Minimum role: ADMIN

Authorizations:
bearer
query Parameters
force
boolean
Default: false

Force refresh cached data

Responses

Response samples

Content type
application/json
{
  • "unassignedDeviceStatusCounts": {
    },
  • "assignedDeviceStatusCounts": {
    },
  • "assignedLicenseCount": 0,
  • "unAssignedLicenseCount": 0,
  • "deviceLicenseTypeCounts": {
    },
  • "deviceLicenseStatusCounts": {
    },
  • "customerCount": 0,
  • "activeCustomerCount": 0,
  • "customerByVerticalCounts": {
    },
  • "customerLicenseTierCounts": {
    },
  • "userCount": 0,
  • "activeUserCount": 0,
  • "simpleLoopCount": 0,
  • "contentCount": 0,
  • "slideCount": 0,
  • "scheduleCount": 0,
  • "datasourceByTypeCounts": {
    },
  • "datasourceByIncomingDataFormatCounts": {
    },
  • "activeExternalDatasourceCount": 0,
  • "brokenExternalDatasourceCount": 0,
  • "browserSessionLimit": 0,
  • "activeBrowserSessionCount": 0,
  • "activeGoogleCredentials": {
    },
  • "activeMicrosoftCredentials": {
    },
  • "licenseValidTo": 0,
  • "supportValidTo": 0,
  • "activeUsersWith2FA": 0,
  • "activeUsersWithout2FA": 0
}