Administrative endpoints for the Wallboard digital signage platform.
Administration endpoints provide customer/tenant management, UI customization, system statistics, activity logs, and tag management.
| 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 |
| Profile | Description |
|---|---|
BASIC |
Basic feature set |
ADVANCED |
Advanced features enabled |
PROFESSIONAL |
Professional tier features |
INHERIT |
Inherit from parent (network owner) |
| 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 |
| Tier | Description |
|---|---|
STARTER |
Entry-level tier |
BUSINESS |
Business tier |
ENTERPRISE |
Enterprise tier |
Customer/tenant management (customer-level). For metadata writes, see the shared path and array semantics.
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
| page | integer >= 0 Default: 0 Page index (0-based) |
| size | integer >= 1 Default: 20 Requested page size; server limits and endpoint overrides apply. |
| sort | string Example: sort=name,asc Sort expression. Format:
|
| search | string WBQL filter expression. Operators: |
| select | string Field projection. |
| date | integer <int64> Filter by date timestamp (for billing/reporting calculations) |
{- "first": true,
- "last": true,
- "number": 0,
- "numberOfElements": 0,
- "totalElements": 0,
- "totalPages": 0,
- "size": 0,
- "content": [
- {
- "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,
- "currentTotalCustomerStorageSize": 0,
- "currentDatasourceStorageSize": 0,
- "currentCustomerFilesStorageSize": 0,
- "hiddenUIElementRules": { },
- "customerMetadata": { },
- "uiVersion": "string",
- "force2FA": true,
- "slaveId": "string",
- "samlIdentifier": "string",
- "enableAutomaticDistributionToDms": true,
- "userFullAccessIfNotInTeam": true,
- "accessResourcesWithoutTeam": true,
- "isDeviceAndGroupCreationEnabledInRootForTeamUsers": true,
- "isContentAndGroupCreationEnabledInRootForTeamUsers": true,
- "isFileAndFolderCreationEnabledInRootForTeamUsers": true,
- "brandingGuideline": { },
- "ownerSubresellerId": 0,
- "activeLicenses": 0,
- "totalLicenses": 0,
- "lastActivity": 0,
- "lastDeviceActivity": 0,
- "totalUserLoginCount": 0,
- "totalUserPresenceTime": 0,
- "ownerSubresellerName": "string",
- "subreseller": {
- "id": 0
}, - "owner": {
- "id": 0
}, - "canvaExportCounter": 0,
- "canvaExportLimit": 0,
- "contentDisplayerVersion": "LEGACY_LOOP",
- "deviceUpdateDelayEndDays": 0,
- "deviceUpdateDelayStartDays": 0,
- "deviceUpdatePolicy": "IMMEDIATE",
- "jsonSchema": null,
- "loopDisplayerVersion": "LEGACY_LOOP",
- "restrictionMessage": "string",
- "totalBasicLicenseCount": 0,
- "totalCampaignCount": 0,
- "totalContentCount": 0,
- "totalDatasourceCount": 0,
- "totalDbaLicenseCount": 0,
- "totalEnterpriseLicenseCount": 0,
- "totalFileCount": 0,
- "totalGoogleCredentialCount": 0,
- "totalMessageCount": 0,
- "totalMicrosoftTenantCount": 0,
- "totalPerpetualLicenseCount": 0,
- "totalProfessionalLicenseCount": 0,
- "totalScheduleCount": 0,
- "totalSimpleLoopCount": 0,
- "totalSubscriptionLicenseCount": 0,
- "totalVideoWallLicenseCount": 0,
- "userInterfaceProfileTemplateId": 0,
- "vistarNetworkId": "string",
- "resourceLimits": {
- "overrides": {
- "property1": 0,
- "property2": 0
}
}
}
]
}Create a new customer/tenant.
Minimum role: OWNER
| 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 |
{- "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"
}{- "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": {
- "id": 0
}, - "customerMetadata": null,
- "jsonSchema": null,
- "userInterfaceProfileTemplateId": 0
}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.
| customerId required | integer <int64> |
| 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 |
{- "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": {
- "overrides": {
- "property1": 0,
- "property2": 0
}
}
}{- "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": {
- "id": 0
}, - "customerMetadata": null,
- "jsonSchema": null,
- "userInterfaceProfileTemplateId": 0
}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)| customerId required | integer <int64> |
Get the current customer context including user and subscription info. Used after login to establish session context.
Minimum role: DEVICE_USER with customer selector
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
{- "user": {
- "email": "string",
- "name": "string",
- "language": "string",
- "role": "ADMIN",
- "editorLevel": "string",
- "lastLogin": 0,
- "createdDate": 0,
- "logins": 0,
- "presenceTime": 0,
- "use2FA": true,
- "restricted": true,
- "customerId": 0,
- "active": true,
- "address": "string",
- "authProvider": "LOCAL",
- "comment": "string",
- "forceToSet2FA": true,
- "hasProfilePicture": true,
- "hiddenUIElementRules": null,
- "iconUrl": "string",
- "lastActivity": 0,
- "magicCodeLoginEnabled": true,
- "microsoftSsoEnabled": true,
- "ownerCanAccessNetworkMember": true,
- "pinCodePresent": true,
- "profilePictureApiPath": "string",
- "readOnly": true,
- "regionalFormatSettings": null,
- "restrictionMessage": "string",
- "ssoLoginEnabled": true,
- "termsOfServiceAcceptDate": 0,
- "trustedAdmin": true,
- "userInterfaceProfileId": 0,
- "userMetadata": null
}, - "customer": {
- "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": {
- "id": 0
}, - "customerMetadata": null,
- "jsonSchema": null,
- "userInterfaceProfileTemplateId": 0
}, - "subscriptionId": "string",
- "subscriptionUrl": "string"
}Get current customer information with license usage details.
Minimum role: TECHNICIAN with customer selector
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
{- "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": {
- "id": 0
}, - "customerMetadata": null,
- "jsonSchema": null,
- "userInterfaceProfileTemplateId": 0
}Get detailed statistics for a specific customer including device counts, user activity, content counts, and pie chart data.
Minimum role: OWNER with customer selector
| customerId required | integer <int64> |
{- "totalDevices": 0,
- "totalLicenses": 0,
- "lastDeviceActivity": 0,
- "activeDevicesInLastWeek": 0,
- "totalUsers": 0,
- "totalUserPresenceTime": 0,
- "totalUserLoginCount": 0,
- "activeUsersInLastWeek": 0,
- "totalContents": 0,
- "totalDatasources": 0,
- "ownedCustomerCount": 0,
- "devicesByState": {
- "slices": [
- {
- "name": "string",
- "value": 0.1
}
], - "total": 0.1
}, - "devicesByLicensePayType": {
- "slices": [
- {
- "name": "string",
- "value": 0.1
}
], - "total": 0.1
}, - "devicesByLicenseType": {
- "slices": [
- {
- "name": "string",
- "value": 0.1
}
], - "total": 0.1
}, - "contentsByType": {
- "slices": [
- {
- "name": "string",
- "value": 0.1
}
], - "total": 0.1
}
}Get license dashboard view for a customer.
Minimum role: OWNER with customer selector
| customerId required | integer <int64> |
{- "activeBrowserSessionCount": 0,
- "assignedLicenseCount": 0,
- "browserSessionLimit": 0,
- "freeCount": 0,
- "unAssignedLicenseCount": 0,
- "usedFreeCount": 0
}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
| customerId required | integer <int64> Customer ID |
| date required | string <date-time> Reference date for invoice calculation (ISO-8601, e.g. |
{- "recurringRevenueList": [
- {
- "currency": "USD",
- "monthlyAverage": 0.1
}
], - "totalInvoiceTables": [
- {
- "recurrence": {
- "recurrenceType": "DAILY",
- "frequency": 1
}, - "currency": "USD",
- "items": [
- {
- "licenseType": "BASIC",
- "quantity": 0,
- "price": 0.1
}
]
}
], - "networkOwnerInvoiceTables": [
- {
- "recurrence": {
- "recurrenceType": "DAILY",
- "frequency": 1
}, - "currency": "USD",
- "items": [
- {
- "licenseType": "BASIC",
- "quantity": 0,
- "price": 0.1
}
]
}
], - "networkMembersInvoiceTables": [
- {
- "recurrence": {
- "recurrenceType": "DAILY",
- "frequency": 1
}, - "currency": "USD",
- "items": [
- {
- "licenseType": "BASIC",
- "quantity": 0,
- "price": 0.1
}
]
}
], - "networkMemberLicenseTierCounts": {
- "STARTER": 12,
- "BUSINESS": 4,
- "ENTERPRISE": 1
}
}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
| date required | string <date-time> Reference date for invoice calculation (ISO-8601, e.g. |
{- "recurringRevenueList": [
- {
- "currency": "USD",
- "monthlyAverage": 0.1
}
]
}Update team-related settings for a customer.
Minimum role: OWNER with customer selector
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
| userFullAccessIfNotInTeam | boolean |
| accessResourcesWithoutTeam | boolean |
| isDeviceAndGroupCreationEnabledInRootForTeamUsers | boolean |
| isContentAndGroupCreationEnabledInRootForTeamUsers | boolean |
| isFileAndFolderCreationEnabledInRootForTeamUsers | boolean |
{- "userFullAccessIfNotInTeam": true,
- "accessResourcesWithoutTeam": true,
- "isDeviceAndGroupCreationEnabledInRootForTeamUsers": true,
- "isContentAndGroupCreationEnabledInRootForTeamUsers": true,
- "isFileAndFolderCreationEnabledInRootForTeamUsers": true
}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.
| customerId required | integer <int64> |
required | Array of strings or integers [ 1 .. 32 ] items |
| value required | any or null Required JSON value. JSON null is valid; omitting value is invalid. |
{- "path": [
- "preferences",
- "columns",
- 0,
- "width"
], - "value": null
}An absent/empty path is rejected. Requires write access to the selected customer.
Minimum role: OWNER.
| customerId required | integer <int64> |
| 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. |
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.
| 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. |
[- {
- "resource": "user",
- "limit": 0,
- "used": 0
}
]A null/omitted canvaExportLimit means no cap. The export counter resets daily.
Minimum role: EDITOR.
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
{- "customerId": 0,
- "canva": {
- "canvaExportLimit": 0,
- "canvaExportCounter": 0
}
}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.
Retrieve user interface profiles with optional filtering and pagination.
Minimum role: OWNER
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
| search | string WBQL filter expression. Operators: |
| select | string Field projection. |
| 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:
|
{- "first": true,
- "last": true,
- "number": 0,
- "numberOfElements": 0,
- "totalElements": 0,
- "totalPages": 0,
- "size": 0,
- "content": [
- {
- "id": 0,
- "name": "string",
- "comment": "string",
- "hiddenUIElementRules": {
- "version": "2.1",
- "legacy": { },
- "newUi": { },
- "dashboard": {
- "DEVICES_SEE": false
}, - "loopEditor": { },
- "contentEditor": { },
- "playlistEditor": { },
- "regionalFormatSettings": { }
}, - "customerId": 0
}
]
}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
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
| name required | string 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. |
{- "name": "Limited Editor",
- "comment": "Disable the Devices view",
- "hiddenUIElementRules": {
- "version": "2.1",
- "legacy": { },
- "newUi": { },
- "dashboard": {
- "DEVICES_SEE": false
}, - "loopEditor": { },
- "contentEditor": { },
- "playlistEditor": { },
- "regionalFormatSettings": { }
}
}{- "id": 42,
- "name": "Limited Editor",
- "comment": "Disable the Devices view",
- "hiddenUIElementRules": {
- "version": "2.1",
- "legacy": { },
- "newUi": { },
- "dashboard": {
- "DEVICES_SEE": false
}, - "loopEditor": { },
- "contentEditor": { },
- "playlistEditor": { },
- "regionalFormatSettings": { }
}, - "customerId": 123
}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
| userInterfaceProfileId required | integer <int64> UI profile ID |
| 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. |
{- "name": "Renamed profile"
}{- "id": 42,
- "name": "Limited Editor",
- "comment": "Disable the Devices view",
- "hiddenUIElementRules": {
- "version": "2.1",
- "legacy": { },
- "newUi": { },
- "dashboard": {
- "DEVICES_SEE": false
}, - "loopEditor": { },
- "contentEditor": { },
- "playlistEditor": { },
- "regionalFormatSettings": { }
}, - "customerId": 123
}Assign or remove user interface profile to/from users.
Minimum role: OWNER
| userInterfaceProfileId required | integer <int64> UI profile ID |
| assignUserIds | Array of strings User IDs to assign profile to |
| removeUserIds | Array of strings User IDs to remove profile from |
{- "assignUserIds": [
- "user123",
- "user456"
], - "removeUserIds": [
- "user789"
]
}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
| 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 |
{- "unassignedDeviceStatusCounts": {
- "property1": 0,
- "property2": 0
}, - "assignedDeviceStatusCounts": {
- "property1": 0,
- "property2": 0
}, - "assignedLicenseCount": 0,
- "unAssignedLicenseCount": 0,
- "deviceLicenseTypeCounts": {
- "property1": 0,
- "property2": 0
}, - "deviceLicenseStatusCounts": {
- "property1": 0,
- "property2": 0
}, - "customerCount": 0,
- "activeCustomerCount": 0,
- "customerByVerticalCounts": {
- "property1": 0,
- "property2": 0
}, - "customerLicenseTierCounts": {
- "property1": 0,
- "property2": 0
}, - "userCount": 0,
- "activeUserCount": 0,
- "simpleLoopCount": 0,
- "contentCount": 0,
- "slideCount": 0,
- "scheduleCount": 0,
- "datasourceByTypeCounts": {
- "property1": 0,
- "property2": 0
}, - "datasourceByIncomingDataFormatCounts": {
- "property1": 0,
- "property2": 0
}, - "activeExternalDatasourceCount": 0,
- "brokenExternalDatasourceCount": 0,
- "browserSessionLimit": 0,
- "activeBrowserSessionCount": 0,
- "activeGoogleCredentials": {
- "property1": 0,
- "property2": 0
}, - "activeMicrosoftCredentials": {
- "property1": 0,
- "property2": 0
}, - "licenseValidTo": 0,
- "supportValidTo": 0,
- "activeUsersWith2FA": 0,
- "activeUsersWithout2FA": 0
}Get active session statistics for a customer including browser sessions and device content sessions.
Minimum role: VIEWER with customer selector
| customerId required | integer <int64> Customer ID |
{- "browserSessions": {
- "current": 0,
- "total": 0
}, - "deviceContentSessions": {
- "current": 0,
- "total": 0
}
}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.
| 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) |
{- "content": [
- {
- "time": "2019-08-24T14:15:22Z",
- "contentId": "string",
- "customerId": 0,
- "deviceId": "string",
- "logLevel": "INFO",
- "message": "string",
- "userEmail": "string",
- "contentName": "string",
- "customerName": "string",
- "deviceName": "string",
- "datasourceId": "string",
- "datasourceName": "string",
- "actionType": "string",
- "aiGenerated": true,
- "audit": true
}
], - "totalPages": 0,
- "last": true,
- "totalElements": 0,
- "size": 0,
- "number": 0,
- "first": true,
- "numberOfElements": 0
}Download activity logs as a CSV file.
Note: This endpoint is served by the wb-log-service microservice.
| 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 |
Get all tags organized by entity type for a customer.
Minimum role: VIEWER with customer selector
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
| select | string Field projection. |
{- "id": 0,
- "campaignTags": {
- "property1": {
- "count": 0,
- "comment": "string"
}, - "property2": {
- "count": 0,
- "comment": "string"
}
}, - "messageTags": {
- "property1": {
- "count": 0,
- "comment": "string"
}, - "property2": {
- "count": 0,
- "comment": "string"
}
}, - "deviceContentTags": {
- "property1": {
- "count": 0,
- "comment": "string"
}, - "property2": {
- "count": 0,
- "comment": "string"
}
}, - "deviceTags": {
- "property1": {
- "count": 0,
- "comment": "string"
}, - "property2": {
- "count": 0,
- "comment": "string"
}
}, - "deviceGroupTags": {
- "property1": {
- "count": 0,
- "comment": "string"
}, - "property2": {
- "count": 0,
- "comment": "string"
}
}, - "fileTags": {
- "property1": {
- "count": 0,
- "comment": "string"
}, - "property2": {
- "count": 0,
- "comment": "string"
}
}
}Create a new tag for a specific entity type.
Minimum role: EDITOR with customer selector
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
| tagType required | string (CustomerTagType) Enum: "CONTENT" "DEVICE" "CAMPAIGN" "MESSAGE" "FILE" Entity type for the tag |
| tag required | string Tag name |
| comment | string Tag description |
{- "tag": "string",
- "comment": "string"
}{- "tag": "string",
- "tagInfo": {
- "count": 0,
- "comment": "string"
}
}Update an existing tag's comment.
Minimum role: EDITOR with customer selector
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
| tag required | string Tag name to update |
| tagType required | string (CustomerTagType) Enum: "CONTENT" "DEVICE" "CAMPAIGN" "MESSAGE" "FILE" Entity type for the tag |
| comment | string Updated tag description |
{- "comment": "string"
}Delete an existing tag.
Minimum role: EDITOR with customer selector
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
| tag required | string Tag name to delete |
| tagType required | string (CustomerTagType) Enum: "CONTENT" "DEVICE" "CAMPAIGN" "MESSAGE" "FILE" Entity type for the tag |
Get all tags merged across entity types with their usage counts.
Minimum role: VIEWER with customer selector
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
{- "lobby": 5,
- "reception": 3,
- "floor-1": 12
}Get tag suggestions based on keyword and entity type.
Minimum role: VIEWER with customer selector
| customerId | integer <int64> Select a customer/tenant within the caller's access. When this parameter is optional, omitting it uses the caller's scope: global for ADMIN, owned member customers for a network owner, and the own customer for other callers. Use an explicit customerId for customer-specific operations. Requiredness is declared per endpoint. |
| keyword | string Keyword to filter suggestions |
| entity | string (CustomerTagType) Enum: "CONTENT" "DEVICE" "CAMPAIGN" "MESSAGE" "FILE" Entity type to filter by |
[- "string"
]Export customer list as CSV file (all customers in the system).
Minimum role: ADMIN
| search | string WBQL filter expression. Operators: |
Get global platform statistics including device counts, customer counts, user activity, and content statistics across all customers.
Minimum role: ADMIN
| force | boolean Default: false Force refresh cached data |
{- "unassignedDeviceStatusCounts": {
- "property1": 0,
- "property2": 0
}, - "assignedDeviceStatusCounts": {
- "property1": 0,
- "property2": 0
}, - "assignedLicenseCount": 0,
- "unAssignedLicenseCount": 0,
- "deviceLicenseTypeCounts": {
- "property1": 0,
- "property2": 0
}, - "deviceLicenseStatusCounts": {
- "property1": 0,
- "property2": 0
}, - "customerCount": 0,
- "activeCustomerCount": 0,
- "customerByVerticalCounts": {
- "property1": 0,
- "property2": 0
}, - "customerLicenseTierCounts": {
- "property1": 0,
- "property2": 0
}, - "userCount": 0,
- "activeUserCount": 0,
- "simpleLoopCount": 0,
- "contentCount": 0,
- "slideCount": 0,
- "scheduleCount": 0,
- "datasourceByTypeCounts": {
- "property1": 0,
- "property2": 0
}, - "datasourceByIncomingDataFormatCounts": {
- "property1": 0,
- "property2": 0
}, - "activeExternalDatasourceCount": 0,
- "brokenExternalDatasourceCount": 0,
- "browserSessionLimit": 0,
- "activeBrowserSessionCount": 0,
- "activeGoogleCredentials": {
- "property1": 0,
- "property2": 0
}, - "activeMicrosoftCredentials": {
- "property1": 0,
- "property2": 0
}, - "licenseValidTo": 0,
- "supportValidTo": 0,
- "activeUsersWith2FA": 0,
- "activeUsersWithout2FA": 0
}