Skip to main content

Wallboard API - Customer-owned Apps (2.0)

Create, upload and manage private apps owned by the selected customer. All operations require OWNER access. The customerId selector is available to callers permitted to manage that customer; these operations cannot transfer an app to another customer. Available app types depend on the server version.

Create, upload and enable an app

  1. Create an app with POST /api/customApp/myApps. Supply a nonempty name; type defaults to WIDGET and widgetCategory to CUSTOM_APPS. The new app is disabled and private, with automatic repository updates disabled.
  2. Upload its ZIP to POST /api/customApp/myApps/{id}/upload using the multipart field file.
  3. Enable it with PUT /api/customApp/myApps/{id} and {"enabled":true}.
Type ZIP requirements
WIDGET config.json with nonempty name and version, each at most 255 characters; these determine package identity/version
HTML_BUNDLE index.html at the ZIP root; the server generates the manifest and identity

Uploading replaces the package. Identity conflicts in the customer's effective catalog return 409. Invalid names or packages return 400. Downloading an app before its first package upload fails.

Manage existing apps

List the customer's own apps with GET /api/customApp/myApps; this is not the combined platform/customer catalog. Updates accept name, description, enabled and widgetCategory. Ownership, app type and repository-update settings cannot be changed through these operations. Use returned appRootPath, entryPoint and iconPath values when available instead of constructing storage URLs.

custom-app

List private apps

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.

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)

Responses

Response samples

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

Create a disabled private app

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
description
string
type
string
Default: "WIDGET"
Enum: "WIDGET" "HTML_BUNDLE"
widgetCategory
string
Default: "CUSTOM_APPS"
Enum: "CUSTOM_APPS" "BASIC" "MEDIA" "CHARTS" "INTERACTIONS"

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "type": "WIDGET",
  • "widgetCategory": "CUSTOM_APPS"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "appId": "string",
  • "description": "string",
  • "enabled": true,
  • "version": "string",
  • "ownershipType": "PLATFORM",
  • "customerId": 0,
  • "sizeBytes": 0,
  • "lastUpdated": 0,
  • "type": "WIDGET",
  • "widgetCategory": "CUSTOM_APPS",
  • "config": null,
  • "appRootPath": "string",
  • "entryPoint": "string",
  • "iconPath": "string",
  • "resourceList": [
    ]
}

Update a private app

Minimum role: OWNER.

Authorizations:
bearer
path Parameters
id
required
integer <int64>
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
string
enabled
boolean
description
string
widgetCategory
string
Enum: "CUSTOM_APPS" "BASIC" "MEDIA" "CHARTS" "INTERACTIONS"

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "enabled": true,
  • "description": "string",
  • "widgetCategory": "CUSTOM_APPS"
}

Delete a private app

Minimum role: OWNER.

Authorizations:
bearer
path Parameters
id
required
integer <int64>
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

Upload a private app ZIP

Multipart field file, Content-Type application/zip or application/x-zip-compressed. WIDGET packages require config.json; HTML_BUNDLE packages require root index.html.

Minimum role: OWNER.

Authorizations:
bearer
path Parameters
id
required
integer <int64>
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: multipart/form-data
required
file
required
string <binary>

Responses

Download a private app ZIP

Minimum role: OWNER.

Authorizations:
bearer
path Parameters
id
required
integer <int64>
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