Overview
Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.
The Solstice OpenControl API supports third-party integration with Solstice hosts through a simple RESTful API. OpenControl can be an important component in a Solstice deployment because it allows integrators and installers to more deeply integrate Solstice with existing room infrastructure.
Getting Started
In the following steps, you will learn how to authenticate to the pod, retrieve specific configuration information about digital signage, and finally apply new settings to the digital signage configuration.
Once you have learned this scenario, the remainder of the API follows the same principals and should be easy to apply the configuration you desire.
Step 1: Authenticate
Code samples
export POD_IP=Replace with Pod IP address
export PASSWORD=Replace with Pod Password
curl -k -X POST \
--header "content-type: application/x-www-form-urlencoded" \
--header "Accept: application/json" \
"https://$POD_IP:5443/v2/token" \
-d "grant_type=password&username=admin&password=$PASSWORD"
import requests
pod_ip = '<Replace with Pod IP address>'
password = '<Replace with Pod Password>'
headers = {'content-type': 'application/x-www-form-urlencoded', 'Accept': 'application/json'}
payload = f'grant_type=password&username=admin&password={password}'
r = requests.post('https://' + pod_ip + ':5443/v2/token', headers=headers, data=payload, verify=False)
access_token = r.json()['access_token']
print(f'Status code: {r.status_code}')
print(f'Response: {r.json()}')
print(f'Access Token: {access_token}')
Your application must authenticate to the Pod in order to successfully execute API calls. The v2 API uses the Oauth2 "password grant flow", which returns a JSON object that contains the access_token
value. Use the access_token
in the Authorization
header of subsequent API calls. The Authorization
header value must start with Bearer
, and don't forget the space after Bearer
.
Example Authorization Header
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1OTMwMTQ2Mzh9.edUWf5f7WNfK91aniVX1jXd77C1YWMHOuIdYFPgPodo
Step 2: Get digital signage configuration
Code samples
export POD_IP=Replace with Pod IP address
export ACCESS_TOKEN=Replace with Access Token
curl -k -X GET \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "content-type: application/json" \
"https://$POD_IP:5443/v2/config/display/digital_signage"
import requests
pod_ip = '<Replace with Pod IP address>'
access_token = '<Replace with Access Token>'
headers = {'Authorization': 'Bearer ' + access_token, 'Accept': 'application/json'}
r = requests.get('https://' + pod_ip + ':5443/v2/config/display/digital_signage', headers=headers, verify=False)
print(f'Status code: {r.status_code}')
print(f'Response: {r.json()}')
Use the access_token
that you received from the /v2/token
as part of any additional API call to the Pod. The example code demonstrates how to view the configuration for the pod.
Step 3: Update digital signage configuration
Code samples
export POD_IP=Replace with Pod IP address
export ACCESS_TOKEN=Replace with Access Token
export PAYLOAD='{ "display": { "digital_signage": {"enabled": false, "url": "https://digitalsignage.mersive.com", "start_after": 10}}}'
curl -k -X PATCH \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "content-type: application/json" \
--header "Accept: application/json" \
"https://$POD_IP:5443/v2/config" \
-d "$PAYLOAD"
import requests
pod_ip = '<Replace with Pod IP address>'
access_token = '<Replace with Access Token>'
headers = {'Authorization': 'Bearer ' + access_token, 'content-type': 'application/json', 'Accept': 'application/json'}
# display.digital_signage
payload = {}
display_config = {}
signage_config = {}
signage_config['enabled'] = False
signage_config['external_caching_enabled'] = False
signage_config['start_after'] = 10
signage_config['url'] = 'https://digitalsignage.mersive.com'
display_config['digital_signage'] = signage_config
payload['display'] = display_config
r = requests.patch('https://' + pod_ip + ':5443/v2/config', headers=headers, json=payload, verify=False)
print(f'Status code: {r.status_code}')
print(f'Response: {r.json()}')
Set the enabled
value to true
to turn on Digital Signage. Note that more properties for digital signage are available than what is demonstrated in the example. See the DigitalSignage
schema for additional options.
Change the enabled
value to false
and execute the code again to disable digital signage.
API Navigation
Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.
The Solstice Open Control API v2 provides route navigation for children of the /config
route. You can navigate the routes using key names with the following pattern: /config/{key_name}
. While you have always been able to make updates to the state of the key name values, now you can also perform GETs with the key. This can make your API payloads smaller and easier to parse than navigating the full configuration payload.
Example using /v2/config/sharing
route
export POD_IP=Replace with Pod IP address
export ACCESS_TOKEN=Replace with Access Token
curl -k -X GET \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Accept: application/json" \
"https://$POD_IP:5443/v2/config/sharing"
import requests
pod_ip = '<Replace with Pod IP address>'
access_token = '<Replace with Access Token>'
headers = {'Authorization': 'Bearer ' + access_token, 'Accept': 'application/json'}
r = requests.get('https://' + pod_ip + ':5443/v2/config/sharing', headers=headers, verify=False)
print(f'Status code: {r.status_code}')
print(f'Response: {r.json()}')
To retrieve the sharing
values, you can perform a GET operation to the /v2/config/sharing
route.
Solstice Open Control API v2
Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.
Base URLs:
Authentication
-
oAuth2 authentication. Supports password flow https://tools.ietf.org/html/rfc6749#section-4.3.2
-
Flow: password
-
Token URL = /v2/token
-
Scope | Scope Description |
---|
Control HDMI Input
POST /config/hdmi_input
Kill/restart HDMI input
Code samples
POD_IP=Replace with Pod IP address
ACCESS_TOKEN=Replace with Access Token
PAYLOAD='{"force_off": false}'
curl -k -X POST \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "content-type: application/json" \
--header "Accept: application/json" \
"https://$POD_IP:5443/v2/config/hdmi_input" \
-d "$PAYLOAD"
import requests
pod_ip = '<Replace with Pod IP address>'
access_token = '<Replace with Access Token>'
headers = {'Authorization': 'Bearer ' + access_token, 'content-type': 'application/json', 'Accept': 'application/json'}
payload = {'force_off': False}
r = requests.post('https://' + pod_ip + ':5443/v2/config/hdmi_input', headers=headers, json=payload, verify=False)
print(f'Status code: {r.status_code}')
print(f'Response: {r.json()}')
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | object | true | Subset of config to update |
» force_off | body | boolean | true | none |
Example responses
200 Response
{
"message": "success!"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Returns success | Success |
400 | Bad Request | Bad request (e.g. malformed request body) | Errors |
401 | Unauthorized | Bad authorization token | Errors |
default | Default | An unexpected error | Errors |
Calendar
Get calendar entries
Code samples
POD_IP=Replace with Pod IP address
ACCESS_TOKEN=Replace with Access Token
curl -k -X GET \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Accept: application/json" \
"https://$POD_IP:5443/v2/calendar"
import requests
import datetime
def datetime_to_timestamp(dt) -> int:
return int(datetime.datetime.strptime(dt, '%Y-%m-%d %H:%M').timestamp())
pod_ip = '<Replace with Pod IP address>'
access_token = '<Replace with Access Token>'
headers = {'Authorization': 'Bearer ' + access_token, 'Accept': 'application/json'}
r = requests.get('https://' + pod_ip + ':5443/v2/calendar', headers=headers, verify=False)
print(f'Status code: {r.status_code}')
print(f'Response: {r.json()}')
Example responses
200 Response
{
"meetings:": []
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Returns calendar meetings configured for pod | Success |
400 | Bad Request | Bad request (e.g. malformed request body) | Errors |
401 | Unauthorized | Bad authorization token | Errors |
default | Default | An unexpected error | Errors |
Response Schema
Add calendar entry
This operation does not support the "3rd Party Only" calendar type. Use "Set calendar entries" instead.
Code samples
# You can also use wget
curl -X POST https://replace_with_pod_IP_or_host:5443/v2/calendar \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.post('https://replace_with_pod_IP_or_host:5443/v2/calendar', headers = headers)
print(r.json())
POST /calendar
Add calendar meeting
Body parameter
{
"title": "string",
"organizer": "string",
"start_time": 0,
"end_time": 0
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
title | body | string | false | none |
organizer | body | string | false | none |
start_time | body | integer(int64) | false | none |
end_time | body | integer(int64) | false | none |
Example responses
200 Response
{
"id": "string"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Adding calendar meeting was successful | Inline |
400 | Bad Request | Bad request (e.g. malformed request body) | Errors |
401 | Unauthorized | Bad authorization token | Errors |
default | Default | An unexpected error | Errors |
Response Schema
Set calendar entries
Code samples
POD_IP=Replace with Pod IP address
ACCESS_TOKEN=Replace with Access Token
START_TIME_1=$(date --date='07/25/2024 18:00' +'%s')
END_TIME_1=$(date --date='07/25/2024 19:00' +'%s')
START_TIME_2=$(date --date='07/25/2024 19:00' +'%s')
END_TIME_2=$(date --date='07/25/2024 21:30' +'%s')
PAYLOAD="{
\\"meetings\\": [
{
\\"id\\": \\"001\\",
\\"title\\": \\"Engineering Review\\",
\\"organizer\\": \\"Mersive\\",
\\"description\\": \\"Product Demo\\",
\\"start_time\\": $START_TIME_1,
\\"end_time\\": $END_TIME_1
},
{
\\"id\\": \\"002\\",
\\"title\\": \\"Happy Hour\\",
\\"organizer\\": \\"James Wallace\\",
\\"description\\": \\"Happy Hour\\",
\\"start_time\\": $START_TIME_2,
\\"end_time\\": $END_TIME_2
}
]
}"
curl -k -X PUT \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "content-type: application/json" \
--header "Accept: application/json" \
"https://$POD_IP:5443/v2/calendar" \
-d "$PAYLOAD"
import requests
import datetime
def datetime_to_timestamp(dt) -> int:
return int(datetime.datetime.strptime(dt, '%Y-%m-%d %H:%M').timestamp())
pod_ip = '<Replace with Pod IP address>'
access_token = '<Replace with Access Token>'
meetings = {
'meetings': [
{
'id': '001',
'title': 'Engineering Review',
'organizer': 'Mersive',
'description': 'Product Demo',
'start_time': datetime_to_timestamp('2024-07-25 18:00'),
'end_time': datetime_to_timestamp('2024-07-25 19:00')
},
{
'id': '002',
'title': 'Happy Hour',
'organizer': 'James Wallace',
'description': 'Happy Hour',
'start_time': datetime_to_timestamp('2024-07-25 19:00'),
'end_time': datetime_to_timestamp('2024-07-25 21:30')
}
]
}
headers = {'Authorization': 'Bearer ' + access_token, 'content-type': 'application/json', 'Accept': 'application/json'}
r = requests.put('https://' + pod_ip + ':5443/v2/calendar', headers=headers, json=meetings, verify=False)
print(f'Status code: {r.status_code}')
print(f'Response: {r.json()}')
Example responses
200 Response
{
"message": "success!",
"reboot_required": false,
"restart_required": false
}
PUT /calendar
Set calendar meetings
Body parameter
false
Parameters
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
meetings | array | true | none | an array of meeting objects |
id | string | true | none | none |
title | string | true | none | none |
description | string | false | none | none |
organizer | string | true | none | none |
start_time | integer | true | none | Unix timestamp |
end_time | integer | true | none | Unix timestamp |
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Adding calendar meeting was successful | Success |
400 | Bad Request | Bad request (e.g. malformed request body) | Errors |
401 | Unauthorized | Bad authorization token | Errors |
default | Default | An unexpected error | Errors |
Clear all calendar entries
Code samples
POD_IP=Replace with Pod IP address
ACCESS_TOKEN=Replace with Access Token
curl -k -X DELETE \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Accept: application/json" \
"https://$POD_IP:5443/v2/calendar"
import requests
pod_ip = '<Replace with Pod IP address>'
access_token = '<Replace with Access Token>'
headers = {'Authorization': 'Bearer ' + access_token, 'Accept': 'application/json'}
r = requests.delete('https://' + pod_ip + ':5443/v2/calendar', headers=headers, verify=False)
print(f'Status code: {r.status_code}')
print(f'Response: {r.json()}')
DELETE /calendar
Clear all calendar meetings
Example responses
200 Response
{
"message": "success!",
"reboot_required": false,
"restart_required": false
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Clearing calendar meetings was successful | Success |
400 | Bad Request | Bad request (e.g. malformed request body) | Errors |
401 | Unauthorized | Bad authorization token | Errors |
default | Default | An unexpected error | Errors |
Get calendar entry
Code samples
POD_IP=Replace with Pod IP address
ACCESS_TOKEN=Replace with Access Token
MEETING_ID=Replace with Meeting ID
curl -k -X GET \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Accept: application/json" \
"https://$POD_IP:5443/v2/calendar/$MEETING_ID"
import requests
pod_ip = '<Replace with Pod IP address>'
access_token = '<Replace with Access Token>'
meeting_id = '<Replace with Meeting ID>'
headers = {'Authorization': 'Bearer ' + access_token, 'Accept': 'application/json'}
r = requests.get('https://' + pod_ip + ':5443/v2/calendar/' + meeting_id, headers=headers, verify=False)
print(f'Status code: {r.status_code}')
print(f'Response: {r.json()}')
GET /calendar/{id}
Get calendar meeting with specified id
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
id | path | string | true | Meeting id |
Example responses
200 Response
{
"id": "string",
"title": "string",
"organizer": "string",
"description": "string",
"start_time": 0,
"end_time": 0
}
500 Response
{
"errors": [
{
"error": "internal",
"description": "Failed to find meeting"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Getting calendar meeting was successful | Meeting |
400 | Bad Request | Bad request (e.g. malformed request body) | Errors |
401 | Unauthorized | Bad authorization token | Errors |
default | Default | An unexpected error | Errors |
Delete calendar entry
This operation does not support the "3rd Party Only" calendar type; use "Set calendar entries" instead.
Code samples
# You can also use wget
curl -X DELETE https://replace_with_pod_IP_or_host:5443/v2/calendar/{id} \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.delete('https://replace_with_pod_IP_or_host:5443/v2/calendar/{id}', headers = headers)
print(r.json())
DELETE /calendar/{id}
Delete calendar meeting with specified id
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
id | path | string | true | Meeting id |
Example responses
200 Response
{
"message": "string",
"reboot_required": true,
"restart_required": true
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Deleting calendar meeting was successful | Success |
400 | Bad Request | Bad request (e.g. malformed request body) | Errors |
401 | Unauthorized | Bad authorization token | Errors |
default | Default | An unexpected error | Errors |
Modify a calendar entry
This operation does not support the "3rd Party Only" calendar type; use "Set calendar entries" instead.
Code samples
# You can also use wget
curl -X PATCH https://replace_with_pod_IP_or_host:5443/v2/calendar/{id} \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.patch('https://replace_with_pod_IP_or_host:5443/v2/calendar/{id}', headers = headers)
print(r.json())
PATCH /calendar/{id}
Modify calendar meeting with specified id
Body parameter
{
"id": "string",
"title": "string",
"organizer": "string",
"description": "string",
"start_time": 0,
"end_time": 0
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
id | path | string | true | Meeting id |
body | body | CalendarEntry | true | CalendarEntry with only changed fields |
Example responses
200 Response
{
"message": "string",
"reboot_required": true,
"restart_required": true
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Modification of the meeting was successful | Success |
400 | Bad Request | Bad request (e.g. malformed request body) | Errors |
401 | Unauthorized | Bad authorization token | Errors |
default | Default | An unexpected error | Errors |
Config
Get Pod configuration
Code samples
POD_IP=Replace with Pod IP address
ACCESS_TOKEN=Replace with Access Token
curl -k -X GET \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Accept: application/json" \
"https://$POD_IP:5443/v2/config"
import requests
pod_ip = '<Replace with Pod IP address>'
access_token = '<Replace with Access Token>'
headers = {'Authorization': 'Bearer ' + access_token, 'Accept': 'application/json'}
r = requests.get('https://' + pod_ip + ':5443/v2/config', headers=headers, verify=False)
print(f'Status code: {r.status_code}')
print(f'Response: {r.json()}')
GET /config
The configuration endpoint returns the configuration object for the pod
Example responses
200 Response
{
"display": {
"name": "string",
"splash": {
"images": [
{
"enabled": true,
"position": 1,
"image": {
"hash": "5i3hihsdfhi134",
"width": 1280,
"height": 800,
"format": "jpeg"
}
},
{
"enabled": true,
"position": 2,
"image": {
"hash": "5GSUIS0EGIQLIG8H",
"width": 1280,
"height": 700,
"format": "png"
}
},
{
"enabled": false,
"position": 3,
"image": null
},
{
"enabled": false,
"position": 4,
"image": null
},
{
"enabled": false,
"position": 5,
"image": null
},
{
"enabled": false,
"position": 6,
"image": null
}
]
},
"clock": {
"show": true,
"timezone": "string",
"current_time": "string",
"show_24_hours": true,
"ntp_server": {
"enabled": true,
"hostname": "string"
}
},
"presence_bar": {
"show": true,
"auto_hide": true,
"show_name": true,
"show_ip_address": true,
"show_screenkey": true
},
"instructions": {
"overlay": "hide",
"custom_text": "string",
"show_airplay": true,
"show_miracast": true
},
"calendar": {
"enabled": true,
"show": true,
"type": "exchange",
"update_interval": 0,
"show_titles": true,
"show_organizers": true,
"exchange": {
"url": "http://example.com",
"authorization_type": "basic",
"ntlm_domain": "http://example.com",
"user_account_unique": "string",
"user_password_unique": {
"secret_salt": "string",
"secret_hash": "string"
},
"user_account_shared": "string",
"user_password_shared": {
"secret_salt": "string",
"secret_hash": "string"
},
"mailbox_type": "default",
"impersonation_mailbox": "user@example.com",
"delegation_mailbox": "user@example.com"
},
"o365": {
"tenant": "string",
"client_id": "string",
"client_secret": {
"secret_salt": "string",
"secret_hash": "string"
},
"username": "string"
},
"google": {
"credentials": {
"name": "string",
"data": {
"secret_salt": "string",
"secret_hash": "string"
}
},
"room_mailbox": "string"
}
},
"output_mode": "single",
"input_mode": "standard",
"input_hdcp_mode": true,
"license_agree": true,
"preferred_input": {
"enabled": true,
"resolution_options": "1080p"
},
"digital_signage": {
"enabled": true,
"url": "string",
"start_after": 0,
"screen_options": "fullscreen",
"instruction_options": "network_only"
},
"usb_audio_to_hdmi_enabled": true
},
"connection": {
"ethernet": {
"enabled": true,
"name": "INTERNAL",
"vlans": [
{
"enabled": true,
"label": "Guest",
"tag": 12,
"ip_configuration": {
"ip_type": "static",
"ip_address": "192.168.2.123",
"gateway": "192.168.10.47",
"network_prefix_length": 8,
"dns1": "192.168.1.10",
"dns2": "192.168.1.20",
"allow_admin": false
}
},
{
"enabled": true,
"label": "Guest",
"tag": 12,
"ip_configuration": {
"ip_type": "dhcp",
"ip_address": "",
"gateway": "",
"network_prefix_length": 0,
"dns1": "",
"dns2": "",
"allow_admin": false
}
}
],
"ip_configuration": {
"ip_type": "static",
"ip_address": "192.168.1.111",
"gateway": "192.168.10.47",
"network_prefix_length": 16,
"dns1": "192.168.1.10",
"dns2": "192.168.1.20",
"allow_admin": false
},
"enterprise_configuration": {
"eap_method": "TTLS",
"phase2_auth": "none",
"ca_certificate": "",
"tls_user_certificate": "",
"identity": "",
"password": ""
}
}
},
"security": {
"admin_password": {
"secret_salt": "string",
"secret_hash": "string"
},
"enforce_admin_password_validation_rules": true,
"allow_local_configuration": true,
"allow_web_browser_configuration": true,
"deliver_app_on_443": true,
"disable_icmp_ping_replies": true,
"disable_captive_portal": true,
"https_quick_connect_redirect": true,
"encryption_enabled": true,
"display_certificate": {
"cert": {
"name": "string",
"data": {
"secret_salt": "string",
"secret_hash": "string"
}
},
"key": {
"name": "string",
"data": {
"secret_salt": "string",
"secret_hash": "string"
}
},
"password": {
"secret_salt": "string",
"secret_hash": "string"
}
},
"use_ca_certificate_bundle": true,
"ca_certificate_bundle": {
"name": "string",
"data": "string"
}
},
"locale": {
"language": "string"
},
"maintenance": {
"daily_restart": {
"enabled": true,
"time": "string"
},
"power_management": {
"occupancy_enabled": true,
"occupancy_delay_minutes": 0,
"off_hours_enabled": true,
"weekend": {
"suspend_after": 0,
"all_day": true,
"start_time": "string",
"end_time": "string"
},
"weekday": {
"suspend_after": 0,
"all_day": true,
"start_time": "string",
"end_time": "string"
},
"control": {
"control_method": "hdmi",
"command_display_on": "string",
"command_display_off": "string"
},
"force_suspend": true
}
},
"sharing": {
"moderator_mode_disallowed": true,
"multi_room_enabled": true,
"miracast": {
"wifi_direct_enabled": true,
"infrastructure_enabled": true
},
"android_mirroring_enabled": true,
"airplay": {
"enabled": true,
"proxy_enabled": true,
"bluetooth_enabled": true
},
"quick_connect_action": "launch_and_connect",
"alignment": "grid",
"browser_look_in": "enabled",
"webrtc_enabled": true,
"relay_enabled": true
},
"room_services": {
"location_services": {
"enabled": true
},
"occupancy_counting": {
"enabled": true,
"auto_reserve_enabled": true
},
"workplace_discovery": {
"enabled": true
}
},
"kepler": {
"enabled": true,
"secret_key": {
"secret_salt": "string",
"secret_hash": "string"
}
},
"conference": {
"url_parsing": {
"property1": "string",
"property2": "string"
}
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | The current Solstice configuration | Config |
401 | Unauthorized | Bad authorization token | Errors |
default | Default | An unexpected error | Errors |
Get legacy Pod configuration
Code samples
GET /config
This configuration endpoint returns the V1 API configuration object for the pod, as documented here.
POD_IP=Replace with Pod IP address
ACCESS_TOKEN=Replace with Access Token
curl -k -X GET \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Accept: application/json" \
"https://$POD_IP:5443/v2/api/config"
import requests
pod_ip = '<Replace with Pod IP address>'
access_token = '<Replace with Access Token>'
headers = {'Authorization': 'Bearer ' + access_token, 'Accept': 'application/json'}
r = requests.get('https://' + pod_ip + ':5443/v2/api/config', headers=headers, verify=False)
print(f'Status code: {r.status_code}')
print(f'Response: {r.json()}')
Update configuration
Code samples
POD_IP=Replace with Pod IP address
ACCESS_TOKEN=Replace with Access Token
ROLLBACK_TIMEOUT=30
# This may be the entirety or a subset of the configuration object.
PAYLOAD='{
"sharing": {
"airplay": {
"bluetooth_enabled": false,
"enabled": potato,
"proxy_enabled": false
}
}
}'
curl -k -X PATCH \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "content-type: application/json" \
--header "Accept: application/json" \
"https://$POD_IP:5443/v2/config?rollback_timeout_seconds=$ROLLBACK_TIMEOUT" \
-d "$PAYLOAD"
import requests
pod_ip = '<Replace with Pod IP address>'
access_token = '<Replace with Access Token>'
headers = {'Authorization': 'Bearer ' + access_token, 'content-type': 'application/json', 'Accept': 'application/json'}
# This may be the entirety or a subset of the configuration object.
payload = {
'sharing': {
'airplay': {
'bluetooth_enabled': False,
'enabled': True,
'proxy_enabled': False
}
}
}
r = requests.patch('https://' + pod_ip + ':5443/v2/config?rollback_timeout_seconds=30', headers=headers, json=payload, verify=False)
print(f'Status code: {r.status_code}')
print(f'Response: {r.json()}')
PATCH /config
Update the Solstice Pod configuration
Body parameter
{
# This may be the entirety or a subset of the pod configuration object.
"display": {
"name": "string",
"splash": {
"images": [
{
"enabled": true,
"position": 1,
"image": {
"hash": "5i3hihsdfhi134",
"width": 1280,
"height": 800,
"format": "jpeg"
}
},
{
"enabled": true,
"position": 2,
"image": {
"hash": "5GSUIS0EGIQLIG8H",
"width": 1280,
"height": 700,
"format": "png"
}
},
{
"enabled": false,
"position": 3,
"image": null
},
{
"enabled": false,
"position": 4,
"image": null
},
{
"enabled": false,
"position": 5,
"image": null
},
{
"enabled": false,
"position": 6,
"image": null
}
]
},
"clock": {
"show": true,
"timezone": "string",
"current_time": "string",
"show_24_hours": true,
"ntp_server": {
"enabled": true,
"hostname": "string"
}
},
"presence_bar": {
"show": true,
"auto_hide": true,
"show_name": true,
"show_ip_address": true,
"show_screenkey": true
},
"instructions": {
"overlay": "hide",
"custom_text": "string",
"show_airplay": true,
"show_miracast": true
},
"calendar": {
"enabled": true,
"show": true,
"type": "exchange",
"update_interval": 0,
"show_titles": true,
"show_organizers": true,
"exchange": {
"url": "http://example.com",
"authorization_type": "basic",
"ntlm_domain": "http://example.com",
"user_account_unique": "string",
"user_password_unique": {
"secret": "string"
},
"user_account_shared": "string",
"user_password_shared": {
"secret": "string"
},
"mailbox_type": "default",
"impersonation_mailbox": "user@example.com",
"delegation_mailbox": "user@example.com"
},
"o365": {
"tenant": "string",
"client_id": "string",
"client_secret": {
"secret": "string"
},
"username": "string"
},
"google": {
"credentials": {
"name": "string",
"data": {
"secret": "string"
}
},
"room_mailbox": "string"
}
},
"output_mode": "single",
"input_mode": "standard",
"input_hdcp_mode": true,
"license_agree": true,
"preferred_input": {
"enabled": true,
"resolution_options": "1080p"
},
"digital_signage": {
"enabled": true,
"url": "string",
"start_after": 0,
"screen_options": "fullscreen",
"instruction_options": "network_only"
},
"usb_audio_to_hdmi_enabled": true
},
"connection": {
"ethernet": {
"enabled": true,
"name": "INTERNAL",
"vlans": [
{
"enabled": true,
"label": "Guest",
"tag": 12,
"ip_configuration": {
"ip_type": "static",
"ip_address": "192.168.2.123",
"gateway": "192.168.10.47",
"network_prefix_length": 8,
"dns1": "192.168.1.10",
"dns2": "192.168.1.20",
"allow_admin": false
}
},
{
"enabled": true,
"label": "Guest",
"tag": 12,
"ip_configuration": {
"ip_type": "dhcp",
"ip_address": "",
"gateway": "",
"network_prefix_length": 0,
"dns1": "",
"dns2": "",
"allow_admin": false
}
}
],
"ip_configuration": {
"ip_type": "static",
"ip_address": "192.168.1.111",
"gateway": "192.168.10.47",
"network_prefix_length": 16,
"dns1": "192.168.1.10",
"dns2": "192.168.1.20",
"allow_admin": false
},
"enterprise_configuration": {
"eap_method": "TTLS",
"phase2_auth": "none",
"ca_certificate": "",
"tls_user_certificate": "",
"identity": "",
"password": ""
}
}
},
"security": {
"admin_password": {
"secret": "string"
},
"enforce_admin_password_validation_rules": true,
"allow_local_configuration": true,
"allow_web_browser_configuration": true,
"deliver_app_on_443": true,
"disable_icmp_ping_replies": true,
"disable_captive_portal": true,
"https_quick_connect_redirect": true,
"encryption_enabled": true,
"display_certificate": {
"cert": {
"name": "string",
"data": {
"secret": "string"
}
},
"key": {
"name": "string",
"data": {
"secret": "string"
}
},
"password": {
"secret": "string"
}
},
"use_ca_certificate_bundle": true,
"ca_certificate_bundle": {
"name": "string",
"data": "string"
}
},
"locale": {
"language": "string"
},
"maintenance": {
"daily_restart": {
"enabled": true,
"time": "string"
},
"power_management": {
"occupancy_enabled": true,
"occupancy_delay_minutes": 0,
"off_hours_enabled": true,
"weekend": {
"suspend_after": 0,
"all_day": true,
"start_time": "string",
"end_time": "string"
},
"weekday": {
"suspend_after": 0,
"all_day": true,
"start_time": "string",
"end_time": "string"
},
"control": {
"control_method": "hdmi",
"command_display_on": "string",
"command_display_off": "string"
},
"force_suspend": true
}
},
"sharing": {
"moderator_mode_disallowed": true,
"multi_room_enabled": true,
"miracast": {
"wifi_direct_enabled": true,
"infrastructure_enabled": true
},
"android_mirroring_enabled": true,
"airplay": {
"enabled": true,
"proxy_enabled": true,
"bluetooth_enabled": true
},
"quick_connect_action": "launch_and_connect",
"alignment": "grid",
"browser_look_in": "enabled",
"webrtc_enabled": true,
"relay_enabled": true
},
"room_services": {
"location_services": {
"enabled": true
},
"occupancy_counting": {
"enabled": true,
"auto_reserve_enabled": true
},
"workplace_discovery": {
"enabled": true
}
},
"kepler": {
"enabled": true,
"secret_key": {
"secret": "string"
}
},
"conference": {
"url_parsing": {
"property1": "string",
"property2": "string"
}
}
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
rollback_timeout_seconds | query | integer | false | Timeout in seconds after which to roll back any networking changes if the Kepler Local Monitoring Service is unable to connect to Kepler (default: no timeout) |
body | body | Config | true | Subset of config to update |
Example responses
200 Response
{
"device_id": "string",
"message": "success!"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Patch applied successfully | PatchSuccess |
400 | Bad Request | Bad request (e.g. malformed request body) | Errors |
401 | Unauthorized | Bad authorization token | Errors |
default | Default | An unexpected error | Errors |
Get splash screen image
Code samples
POD_IP=Replace with Pod IP address
ACCESS_TOKEN=Replace with Access Token
POSITION=Replace with Image Position
ASPECT=Replace with Image Aspect Ratio
OUTPUT_FILE=Replace with Output File Name
curl -k -X GET \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Accept: image/*" \
"https://$POD_IP:5443/v2/config/display/splash/images/$POSITION/$ASPECT" \
-o $OUTPUT_FILE
import requests
pod_ip = '<Replace with Pod IP address>'
access_token = '<Replace with Access Token>'
position = '<Replace with Image Position>'
aspect = '<Replace with Image Aspect Ratio>'
output_file = '<Replace with Output File Name>'
headers = {'Authorization': 'Bearer ' + access_token, 'Accept': 'image/*'}
r = requests.get('https://' + pod_ip + ':5443/v2/config/display/splash/images/' + position + '/' + aspect, headers=headers, verify=False, timeout=10)
image = r.content
print(f'Status code: {r.status_code}')
with open(output_file, 'wb') as file:
file.write(image)
GET /config/display/splash/images/{position}/{aspect}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
position | path | integer | true | The position of the image in the splash images collection. |
aspect | path | string | true | The aspect ratio of the image in the splash images collection. |
Enumerated Values
Parameter | Value |
---|---|
aspect | 16x9 |
aspect | 32x9 |
Example responses
200 Response
400 Response
{
"errors": [
{
"error": "invalid_request",
"description": "string"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Provide image data for an image at a specified image placeholder | string(binary) |
400 | Bad Request | Bad request (e.g. malformed request body) | Errors |
401 | Unauthorized | Bad authorization token | Errors |
default | Default | An unexpected error | Errors |
Upload splash screen image
Code samples
POD_IP=Replace with Pod IP address
ACCESS_TOKEN=Replace with Access Token
POSITION=Replace with Image Position
ASPECT=Replace with Image Aspect Ratio
IMAGE_FILE=Replace with Image File Name
curl -k -X PATCH \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "content-type: image/jpeg" \
--header "Accept: application/json" \
"https://$POD_IP:5443/v2/config/display/splash/images/$POSITION/$ASPECT" \
--data-binary "@$IMAGE_FILE"
import requests
pod_ip = '<Replace with Pod IP address>'
access_token = '<Replace with Access Token>'
image_file_path = '<Replace with Image File Path>'
position = '<Replace with Image Position>'
aspect = '<Replace with Image Aspect Ratio>'
headers = {'Authorization': 'Bearer ' + access_token, 'content-type': 'image/jpeg', 'Accept': 'application/json'}
with open(image_file_path, 'rb') as image_file:
payload = image_file.read()
r = requests.patch('https://' + pod_ip + ':5443/v2/config/display/splash/images/' + position + '/' + aspect, headers=headers, data=payload, verify=False)
print(f'Status code: {r.status_code}')
print(f'Response: {r.json()}')
PATCH /config/display/splash/images/{position}/{aspect}
Body parameter
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | string(binary) | true | Upload image bytes of the image at the specified image position |
position | path | integer | true | The position of the image in the splash images collection. |
aspect | path | string | true | The aspect ratio of the image in the splash images collection. |
Enumerated Values
Parameter | Value |
---|---|
aspect | 16x9 |
aspect | 32x9 |
Example responses
400 Response
{
"errors": [
{
"error": "invalid_request",
"description": "string"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Image resource has been updated | None |
400 | Bad Request | Bad request (e.g. malformed request body) | Errors |
401 | Unauthorized | Bad authorization token | Errors |
default | Default | An unexpected error | Errors |
Camera Firmware
Report STATUS for Logitech cameras
Code samples
POD_IP=Replace with Pod IP address
ACCESS_TOKEN=Replace with Access Token
curl -k -X GET \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Accept: application/json" \
"https://$POD_IP:5443/v2/control/cameras/status"
import requests
pod_ip = '<Replace with Pod IP address>'
access_token = '<Replace with Access Token>'
headers = {'Authorization': 'Bearer ' + access_token, 'Accept': 'application/json'}
r = requests.get('https://' + pod_ip + ':5443/v2/control/cameras/status', headers=headers, verify=False)
print(f'Status code: {r.status_code}')
print(f'Response: {r.json()}')
GET /control/cameras/status
Example responses
200 Response
{
"updateStatus": "idle"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | firmware update status | FirmwareStatus |
401 | Unauthorized | Bad authorization token | Errors |
404 | Not Found | Status of attached camera | None |
default | Default | An unexpected error | Errors |
Report VERSION for Logitech cameras
Code samples
POD_IP=Replace with Pod IP address
ACCESS_TOKEN=Replace with Access Token
CAMERA_GUID=Replace with Camera GUID
curl -k -X GET \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Accept: application/json" \
"https://$POD_IP:5443/v2/control/cameras/$CAMERA_GUID"
import requests
pod_ip = '<Replace with Pod IP address>'
access_token = '<Replace with Access Token>'
camera_guid = '<Replace with Camera GUID>'
headers = {'Authorization': 'Bearer ' + access_token, 'Accept': 'application/json'}
r = requests.get('https://' + pod_ip + ':5443/v2/control/cameras/' + camera_guid, headers=headers, verify=False)
print(f'Status code: {r.status_code}')
print(f'Response: {r.json()}')
GET /control/cameras/{guid}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
guid | path | string(uuid) | true | GUID of an attached camera |
Example responses
200 Response
{
"videoVersion": "string",
"audioVersion": "string",
"eepromVersion": "string",
"bluetoothVersion": "string",
"tablehubVersion": "string",
"videoFirmware": "string",
"audioFirmware": "string",
"eepromFirmware": "string",
"bluetoothFirmware": "string",
"tablehubFirmware": "string",
"updateAvailable": true
}
404 Response
{
"errors": [
{
"error": "not_found",
"description": "unknown camera specified!"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | specified camera version | FirmwareVersion |
401 | Unauthorized | Bad authorization token | Errors |
404 | Not Found | Version of attached camera | None |
default | Default | An unexpected error | Errors |
UPDATE attached camera firmware
Code samples
POD_IP=Replace with Pod IP address
ACCESS_TOKEN=Replace with Access Token
PAYLOAD='{"forceUpdate": true}'
curl -k -X PATCH \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "content-type: application/json" \
--header "Accept: application/json" \
"https://$POD_IP:5443/v2/control/cameras/{GUID}" \
-d "$PAYLOAD"
import requests
pod_ip = '<Replace with Pod IP address>'
access_token = '<Replace with Access Token>'
camera_guid = '<Replace with Camera GUID>'
headers = {'Authorization': 'Bearer ' + access_token, 'content-type': 'application/json', 'Accept': 'application/json'}
payload = {'forceUpdate': True}
r = requests.patch('https://' + pod_ip + ':5443/v2/control/cameras/' + camera_guid, headers=headers, json=payload, verify=False)
print(f'Status code: {r.status_code}')
print(f'Response: {r.json()}')
PATCH /control/cameras/{guid}
Body parameter
{
"forceUpdate": true
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | FirmwareUpdate | true | Request camera firmware update |
guid | path | string(uuid) | true | GUID of an attached camera |
Example responses
404 Response
{
"errors": [
{
"error": "not_found",
"description": "unknown camera specified!"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Update camera firmware initiated | None |
400 | Bad Request | Bad request (e.g. malformed request body) | Errors |
401 | Unauthorized | Bad authorization token | Errors |
default | Default | An unexpected error | Errors |
Info
Get information about the pod
NOTE: This requires Solstice 6.2 or higher.
Code samples
POD_IP=Replace with Pod IP address
ACCESS_TOKEN=Replace with Access Token
curl -k -X GET \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Accept: application/json" \
"https://$POD_IP:5443/v2/info"
import requests
pod_ip = '<Replace with Pod IP address>'
access_token = '<Replace with Access Token>'
headers = {'Authorization': 'Bearer ' + access_token, 'Accept': 'application/json'}
r = requests.get('https://' + pod_ip + ':5443/v2/info', headers=headers, verify=False)
print(f'Status code: {r.status_code}')
print(f'Response: {r.json()}')
GET /info
Retrieve configuration information about the pod. Primarily returns network information.
Example responses
200 Response
{
"connection": {
"ethernet": {
"dns1": "string",
"dns2": "string",
"gateway": "string",
"hostname": "string",
"ip_address": "string",
"ip_type": "string",
"mac_address": "string"
},
"wifi": {
"dns1": "string",
"dns2": "string",
"gateway": "string",
"hostname": "string",
"ip_address": "string",
"ip_type": "string",
"mac_address": "string",
"wifi_signal": {
"signal_quality": "string",
"signal_strength": 0,
"signal_units": "dBm"
}
},
"vlans": {
"property1": {
"ip_type": "string",
"ip_address": "string",
"gateway": "string",
"dns1": "string",
"dns2": "string",
"hostname": "string",
"mac_address": "string"
}
}
},
"usb_audio_devices": [
"string"
],
"wap_channels": {
"channels_2_4G": [
0
],
"channels_5G": [
0
]
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Return read-only configuration | Info |
401 | Unauthorized | Bad authorization token | Errors |
default | Default | An unexpected error | Errors |
Screen key verification
Code samples
POD_IP=Replace with Pod IP address
ACCESS_TOKEN=Replace with Access Token
PAYLOAD='{"screen_key": ""}'
curl -k -X POST \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "content-type: application/json" \
--header "Accept: application/json" \
"https://$POD_IP:5443/v2/info/screen_key" \
-d "$PAYLOAD" \
-w "%{http_code}\n"
import requests
pod_ip = '<Replace with Pod IP address>'
access_token = '<Replace with Access Token>'
screen_key = '<Replace with Pod Screen key>'
headers = {'content-type': 'application/json', 'Accept': 'application/json'}
payload = {'screen_key': screen_key}
r = requests.post('https://' + pod_ip + ':5443/v2/info/screen_key', headers=headers, json=payload, verify=False)
print(f'Status code: {r.status_code}')
POST /info
Verify that the screen key submitted is the valid screen key. Used by the Active Learning client.
Body parameter
{
"screen_key": "string"
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | object | true | Post screen key to verify if it matches pod |
» screen_key | body | string | false | none |
Example responses
400 Response
{
"errors": [
{
"error": "invalid_request",
"description": "string"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Screen key is valid | None |
400 | Bad Request | Bad request (e.g. malformed request body) | Errors |
401 | Unauthorized | Bad authorization token | Errors |
404 | Not Found | Screen key is not valid | None |
default | Default | An unexpected error | Errors |
Pod Metadata
Get metadata about display
Code samples
POD_IP=Replace with Pod IP address
ACCESS_TOKEN=Replace with Access Token
curl -k -X GET \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Accept: application/json" \
"https://$POD_IP:5443/v2/metadata"
import requests
pod_ip = '<Replace with Pod IP address>'
access_token = '<Replace with Access Token>'
headers = {'Authorization': 'Bearer ' + access_token, 'Accept': 'application/json'}
r = requests.get('https://' + pod_ip + ':5443/v2/metadata', headers=headers, verify=False)
print(f'Status code: {r.status_code}')
print(f'Response: {r.json()}')
GET /metadata
Example responses
200 Response
{
"device_id": "string"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Metadata payload | Metadata |
401 | Unauthorized | Bad authorization token | Errors |
default | Default | An unexpected error | Errors |
Token
Request a token
Code samples
POD_IP=Replace with Pod IP address
PASSWORD=Replace with Pod Password
curl -k -X POST \
--header "content-type: application/x-www-form-urlencoded" \
--header "Accept: application/json" \
"https://$POD_IP:5443/v2/token" \
-d "grant_type=password&username=admin&password=$PASSWORD"
import requests
pod_ip = '<Replace with Pod IP address>'
password = '<Replace with Pod Password>'
headers = {'content-type': 'application/x-www-form-urlencoded', 'Accept': 'application/json'}
payload = f'grant_type=password&username=admin&password={password}'
r = requests.post('https://' + pod_ip + ':5443/v2/token', headers=headers, data=payload, verify=False)
access_token = r.json()['access_token']
print(f'Status code: {r.status_code}')
print(f'Response: {r.json()}')
print(f'Access Token: {access_token}')
POST /token
Request a bearer token for the v2 API
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
grant_type | query | string | true | Authentication type, this will always be "password" |
username | query | string | true | Admin username for pod |
password | query | string | true | Admin password for pod |
Example responses
200 Response
{
"access_token": "string",
"token_type": "jwt"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OAuth 2.0 access token response | Token |
400 | Bad Request | Bad request (e.g. malformed body) | TokenError |
401 | Unauthorized | Invalid credentials | TokenError |
default | Default | An unexpected error | Errors |
Schemas
Audio
{
"usb": {
"microphone": {
"override": string
},
"speaker": {
"override": string
}
}
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
usb | object | false | none | none |
»microphone | object | false | none | none |
» »override | string | false | none | none |
»speaker | object | false | none | none |
» »override | string | false | none | none |
Conference
{
"url_parsing": {
}
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
url_parsing | object | false | none | none |
Config
{
"audio": object,
"conference": object,
"connection": object,
"debug": object,
"display": object,
"kepler": object,
"locale": object,
"maintenance": object,
"room_services": object,
"security": object,
"sharing": object
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
audio | Audio | false | none | none |
conference | Conference | false | none | none |
connection | Connection | false | none | none |
debug | Debug | false | none | none |
display | Display | false | none | none |
kepler | Kepler | false | none | none |
locale | Locale | false | none | none |
maintenance | Maintenance | false | none | none |
room_services | RoomServices | false | none | none |
security | Security | false | none | none |
sharing | Sharing | false | none | none |
Connection
{
"discovery": {
"broadcast": boolean,
"publish_to_sds": boolean,
"sds_hosts": {
"0": {
"hostname": string
},
"1": {
"hostname": string
},
"2": {
"hostname": string
},
"3": {
"hostname": string
},
"4": {
"hostname": string
}
}
},
"ethernet": {
"enabled": boolean,
"enterprise_configuration": {
"ca_certificate": {
"data": string,
"name": string
},
"eap_method": string,
"identity": string,
"password": {
"secret_hash": string,
"secret_salt": string
},
"phase2_auth": string,
"tls_user_certificate": {
"cert": {
"data": {
"secret_hash": string,
"secret_salt": string
},
"name": string
}
}
},
"ip_configuration": {
"allow_admin": boolean,
"dns1": string,
"dns2": string,
"gateway": string,
"hostname": string,
"ip_address": string,
"ip_type": string,
"network_prefix_length": integer
},
"name": string,
"vlans": {
"0": {
"enabled": boolean,
"ip_configuration": {
"allow_admin": boolean,
"dns1": string,
"dns2": string,
"gateway": string,
"hostname": string,
"ip_address": string,
"ip_type": string,
"network_prefix_length": integer
},
"label": string,
"tag": integer
},
"1": {
"enabled": boolean,
"ip_configuration": {
"allow_admin": boolean,
"dns1": string,
"dns2": string,
"gateway": string,
"hostname": string,
"ip_address": string,
"ip_type": string,
"network_prefix_length": integer
},
"label": string,
"tag": integer
},
"2": {
"enabled": boolean,
"ip_configuration": {
"allow_admin": boolean,
"dns1": string,
"dns2": string,
"gateway": string,
"hostname": string,
"ip_address": string,
"ip_type": string,
"network_prefix_length": integer
},
"label": string,
"tag": integer
}
}
},
"gateway_check_enabled": boolean,
"host_name": string,
"http_proxy": {
"bypass_on_same_subnet": boolean,
"enabled": boolean,
"exclusion_list": string,
"hostname": string,
"password": {
"secret_hash": string,
"secret_salt": string
},
"port": integer,
"username": string
},
"https_proxy": {
"bypass_on_same_subnet": boolean,
"enabled": boolean,
"exclusion_list": string,
"hostname": string,
"password": {
"secret_hash": string,
"secret_salt": string
},
"port": integer,
"username": string
},
"lldp": {
"enabled": boolean,
"poe_enabled": boolean
},
"qos": {
"audio_dscp": string,
"enabled": boolean,
"video_dscp": string
},
"wifi": {
"mode": string,
"wap": {
"channel": integer,
"hide_ssid": boolean,
"hostname": string,
"password": {
"secret_hash": string,
"secret_salt": string
},
"protocol": string,
"ssid": string
},
"wifi_client": {
"enterprise_configuration": {
"ca_certificate": {
"data": string,
"name": string
},
"eap_method": string,
"identity": string,
"password": {
"secret_hash": string,
"secret_salt": string
},
"phase2_auth": string,
"tls_user_certificate": {
"cert": {
"data": {
"secret_hash": string,
"secret_salt": string
},
"name": string
}
}
},
"ip_configuration": {
"allow_admin": boolean,
"dns1": string,
"dns2": string,
"gateway": string,
"hostname": string,
"ip_address": string,
"ip_type": string,
"network_prefix_length": integer
},
"protocol": string,
"ssid": string
}
}
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
discovery | object | false | none | none |
»broadcast | boolean | false | none | none |
»publish_to_sds | boolean | false | none | none |
»sds_hosts | object | false | none | none |
» »0 | object | false | none | none |
» » »hostname | string | false | none | none |
» »1 | object | false | none | none |
» » »hostname | string | false | none | none |
» »2 | object | false | none | none |
» » »hostname | string | false | none | none |
» »3 | object | false | none | none |
» » »hostname | string | false | none | none |
» »4 | object | false | none | none |
» » »hostname | string | false | none | none |
ethernet | object | false | none | none |
»enabled | boolean | false | none | none |
»enterprise_configuration | object | false | none | none |
» »ca_certificate | object | false | none | none |
» » »data | string | false | none | none |
» » »name | string | false | none | none |
» »eap_method | string | false | none | none |
» »identity | string | false | none | none |
» »password | object | false | none | none |
» » »secret_hash | string | false | none | none |
» » »secret_salt | string | false | none | none |
» »phase2_auth | string | false | none | none |
» »tls_user_certificate | object | false | none | none |
» » »cert | object | false | none | none |
» » » »data | object | false | none | none |
» » » » »secret_hash | string | false | none | none |
» » » » »secret_salt | string | false | none | none |
» » » »name | string | false | none | none |
»ip_configuration | object | false | none | none |
» »allow_admin | boolean | false | none | none |
» »dns1 | string | false | none | none |
» »dns2 | string | false | none | none |
» »gateway | string | false | none | none |
» »hostname | string | false | none | none |
» »ip_address | string | false | none | none |
» »ip_type | string | false | none | none |
» »network_prefix_length | integer | false | none | none |
»name | string | false | none | none |
»vlans | object | false | none | none |
» »0 | object | false | none | none |
» » »enabled | boolean | false | none | none |
» » »ip_configuration | object | false | none | none |
» » » »allow_admin | boolean | false | none | none |
» » » »dns1 | string | false | none | none |
» » » »dns2 | string | false | none | none |
» » » »gateway | string | false | none | none |
» » » »hostname | string | false | none | none |
» » » »ip_address | string | false | none | none |
» » » »ip_type | string | false | none | none |
» » » »network_prefix_length | integer | false | none | none |
» » »label | string | false | none | none |
» » »tag | integer | false | none | none |
» »1 | object | false | none | none |
» » »enabled | boolean | false | none | none |
» » »ip_configuration | object | false | none | none |
» » » »allow_admin | boolean | false | none | none |
» » » »dns1 | string | false | none | none |
» » » »dns2 | string | false | none | none |
» » » »gateway | string | false | none | none |
» » » »hostname | string | false | none | none |
» » » »ip_address | string | false | none | none |
» » » »ip_type | string | false | none | none |
» » » »network_prefix_length | integer | false | none | none |
» » »label | string | false | none | none |
» » »tag | integer | false | none | none |
» »2 | object | false | none | none |
» » »enabled | boolean | false | none | none |
» » »ip_configuration | object | false | none | none |
» » » »allow_admin | boolean | false | none | none |
» » » »dns1 | string | false | none | none |
» » » »dns2 | string | false | none | none |
» » » »gateway | string | false | none | none |
» » » »hostname | string | false | none | none |
» » » »ip_address | string | false | none | none |
» » » »ip_type | string | false | none | none |
» » » »network_prefix_length | integer | false | none | none |
» » »label | string | false | none | none |
» » »tag | integer | false | none | none |
gateway_check_enabled | boolean | false | none | none |
host_name | string | false | none | none |
http_proxy | object | false | none | none |
»bypass_on_same_subnet | boolean | false | none | none |
»enabled | boolean | false | none | none |
»exclusion_list | string | false | none | none |
»hostname | string | false | none | none |
»password | object | false | none | none |
» »secret_hash | string | false | none | none |
» »secret_salt | string | false | none | none |
»port | integer | false | none | none |
»username | string | false | none | none |
https_proxy | object | false | none | none |
»bypass_on_same_subnet | boolean | false | none | none |
»enabled | boolean | false | none | none |
»exclusion_list | string | false | none | none |
»hostname | string | false | none | none |
»password | object | false | none | none |
» »secret_hash | string | false | none | none |
» »secret_salt | string | false | none | none |
»port | integer | false | none | none |
»username | string | false | none | none |
lldp | object | false | none | none |
»enabled | boolean | false | none | none |
»poe_enabled | boolean | false | none | none |
qos | object | false | none | none |
»audio_dscp | string | false | none | none |
»enabled | boolean | false | none | none |
»video_dscp | string | false | none | none |
wifi | object | false | none | none |
»mode | string | false | none | none |
»wap | object | false | none | none |
» »channel | integer | false | none | none |
» »hide_ssid | boolean | false | none | none |
» »hostname | string | false | none | none |
» »password | object | false | none | none |
» » »secret_hash | string | false | none | none |
» » »secret_salt | string | false | none | none |
» »protocol | string | false | none | none |
» »ssid | string | false | none | none |
»wifi_client | object | false | none | none |
» »enterprise_configuration | object | false | none | none |
» » »ca_certificate | object | false | none | none |
» » » »data | string | false | none | none |
» » » »name | string | false | none | none |
» » »eap_method | string | false | none | none |
» » »identity | string | false | none | none |
» » »password | object | false | none | none |
» » » »secret_hash | string | false | none | none |
» » » »secret_salt | string | false | none | none |
» » »phase2_auth | string | false | none | none |
» » »tls_user_certificate | object | false | none | none |
» » » »cert | object | false | none | none |
» » » » »data | object | false | none | none |
» » » » » »secret_hash | string | false | none | none |
» » » » » »secret_salt | string | false | none | none |
» » » » »name | string | false | none | none |
» »ip_configuration | object | false | none | none |
» » »allow_admin | boolean | false | none | none |
» » »dns1 | string | false | none | none |
» » »dns2 | string | false | none | none |
» » »gateway | string | false | none | none |
» » »hostname | string | false | none | none |
» » »ip_address | string | false | none | none |
» » »ip_type | string | false | none | none |
» » »network_prefix_length | integer | false | none | none |
» »protocol | string | false | none | none |
» »ssid | string | false | none | none |
Debug
{
"fd_monitoring": {
"enabled": boolean,
"period_seconds": integer,
"process_names": {
}
}
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
fd_monitoring | object | false | none | none |
»enabled | boolean | false | none | none |
»period_seconds | integer | false | none | none |
»process_names | object | false | none | none |
Display
{
"calendar": {
"enabled": boolean,
"exchange": {
"authorization_type": string,
"delegation_mailbox": string,
"impersonation_mailbox": string,
"mailbox_type": string,
"ntlm_domain": string,
"url": string,
"user_account_shared": string,
"user_account_unique": string,
"user_password_shared": {
"secret_hash": string,
"secret_salt": string
},
"user_password_unique": {
"secret_hash": string,
"secret_salt": string
}
},
"google": {
"credentials": {
"data": {
"secret_hash": string,
"secret_salt": string
},
"name": string
},
"room_mailbox": string
},
"o365": {
"client_id": string,
"client_secret": {
"secret_hash": string,
"secret_salt": string
},
"tenant": string,
"username": string
},
"show": boolean,
"show_organizers": boolean,
"show_titles": boolean,
"type": string,
"update_interval": integer
},
"clock": {
"current_time": string,
"ntp_server": {
"enabled": boolean,
"hostname": string
},
"show": boolean,
"show_24_hours": boolean,
"timezone": string
},
"digital_signage": {
"enabled": boolean,
"external_caching_enabled": boolean,
"instruction_options": string,
"screen_options": string,
"start_after": integer,
"url": string
},
"display_message_enabled": boolean,
"first_run": {
"completed": boolean
},
"input_hdcp_mode": boolean,
"input_mode": string,
"instructions": {
"custom_text": string,
"overlay": string,
"show_airplay": boolean,
"show_miracast": boolean
},
"license_agree": boolean,
"name": string,
"output_mode": string,
"preferred_input": {
"enabled": boolean,
"resolution_options": string
},
"presence_bar": {
"auto_hide": boolean,
"show": boolean,
"show_ip_address": boolean,
"show_name": boolean,
"show_screenkey": boolean
},
"splash": {
"foreground_color": string,
"images": {
"0": {
"16x9": {
"hash": string
},
"32x9": {
"hash": string
},
"enabled": boolean
},
"1": {
"16x9": {
"hash": string
},
"32x9": {
"hash": string
},
"enabled": boolean
},
"2": {
"16x9": {
"hash": string
},
"32x9": {
"hash": string
},
"enabled": boolean
},
"3": {
"16x9": {
"hash": string
},
"32x9": {
"hash": string
},
"enabled": boolean
},
"4": {
"16x9": {
"hash": string
},
"32x9": {
"hash": string
},
"enabled": boolean
},
"5": {
"16x9": {
"hash": string
},
"32x9": {
"hash": string
},
"enabled": boolean
}
},
"is_modern": boolean,
"messaging": {
"custom_message": {
"enabled": boolean,
"text": string
},
"emergency_message": {
"enabled": boolean,
"text": string
},
"rss_feed_count": integer,
"rss_feeds": {
"0": {
"duration": integer,
"enabled": boolean,
"title": string,
"url": string
},
"1": {
"duration": integer,
"enabled": boolean,
"title": string,
"url": string
}
}
},
"screen_key": {
"enabled": boolean,
"show": boolean,
"speak": boolean
},
"should_animate_background": boolean,
"show_fully_qualified_name": boolean,
"show_hostname_instead_of_ip": boolean,
"show_name": boolean,
"show_wifi": boolean
},
"usb_audio_to_hdmi_enabled": boolean
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
calendar | object | false | none | none |
»enabled | boolean | false | none | none |
»exchange | object | false | none | none |
» »authorization_type | string | false | none | none |
» »delegation_mailbox | string | false | none | none |
» »impersonation_mailbox | string | false | none | none |
» »mailbox_type | string | false | none | none |
» »ntlm_domain | string | false | none | none |
» »url | string | false | none | none |
» »user_account_shared | string | false | none | none |
» »user_account_unique | string | false | none | none |
» »user_password_shared | object | false | none | none |
» » »secret_hash | string | false | none | none |
» » »secret_salt | string | false | none | none |
» »user_password_unique | object | false | none | none |
» » »secret_hash | string | false | none | none |
» » »secret_salt | string | false | none | none |
object | false | none | none | |
» »credentials | object | false | none | none |
» » »data | object | false | none | none |
» » » »secret_hash | string | false | none | none |
» » » »secret_salt | string | false | none | none |
» » »name | string | false | none | none |
» »room_mailbox | string | false | none | none |
»o365 | object | false | none | none |
» »client_id | string | false | none | none |
» »client_secret | object | false | none | none |
» » »secret_hash | string | false | none | none |
» » »secret_salt | string | false | none | none |
» »tenant | string | false | none | none |
» »username | string | false | none | none |
»show | boolean | false | none | none |
»show_organizers | boolean | false | none | none |
»show_titles | boolean | false | none | none |
»type | string | false | none | none |
»update_interval | integer | false | none | none |
clock | object | false | none | none |
»current_time | string | false | none | none |
»ntp_server | object | false | none | none |
» »enabled | boolean | false | none | none |
» »hostname | string | false | none | none |
»show | boolean | false | none | none |
»show_24_hours | boolean | false | none | none |
»timezone | string | false | none | none |
digital_signage | object | false | none | none |
»enabled | boolean | false | none | none |
»external_caching_enabled | boolean | false | none | none |
»instruction_options | string | false | none | none |
»screen_options | string | false | none | none |
»start_after | integer | false | none | none |
»url | string | false | none | none |
display_message_enabled | boolean | false | none | none |
first_run | object | false | none | none |
»completed | boolean | false | none | none |
input_hdcp_mode | boolean | false | none | none |
input_mode | string | false | none | none |
instructions | object | false | none | none |
»custom_text | string | false | none | none |
»overlay | string | false | none | none |
»show_airplay | boolean | false | none | none |
»show_miracast | boolean | false | none | none |
license_agree | boolean | false | none | none |
name | string | false | none | none |
output_mode | string | false | none | none |
preferred_input | object | false | none | none |
»enabled | boolean | false | none | none |
»resolution_options | string | false | none | none |
presence_bar | object | false | none | none |
»auto_hide | boolean | false | none | none |
»show | boolean | false | none | none |
»show_ip_address | boolean | false | none | none |
»show_name | boolean | false | none | none |
»show_screenkey | boolean | false | none | none |
splash | object | false | none | none |
»foreground_color | string | false | none | none |
»images | object | false | none | none |
» »0 | object | false | none | none |
» » »16x9 | object | false | none | none |
» » » »hash | string | false | none | none |
» » »32x9 | object | false | none | none |
» » » »hash | string | false | none | none |
» » »enabled | boolean | false | none | none |
» »1 | object | false | none | none |
» » »16x9 | object | false | none | none |
» » » »hash | string | false | none | none |
» » »32x9 | object | false | none | none |
» » » »hash | string | false | none | none |
» » »enabled | boolean | false | none | none |
» »2 | object | false | none | none |
» » »16x9 | object | false | none | none |
» » » »hash | string | false | none | none |
» » »32x9 | object | false | none | none |
» » » »hash | string | false | none | none |
» » »enabled | boolean | false | none | none |
» »3 | object | false | none | none |
» » »16x9 | object | false | none | none |
» » » »hash | string | false | none | none |
» » »32x9 | object | false | none | none |
» » » »hash | string | false | none | none |
» » »enabled | boolean | false | none | none |
» »4 | object | false | none | none |
» » »16x9 | object | false | none | none |
» » » »hash | string | false | none | none |
» » »32x9 | object | false | none | none |
» » » »hash | string | false | none | none |
» » »enabled | boolean | false | none | none |
» »5 | object | false | none | none |
» » »16x9 | object | false | none | none |
» » » »hash | string | false | none | none |
» » »32x9 | object | false | none | none |
» » » »hash | string | false | none | none |
» » »enabled | boolean | false | none | none |
»is_modern | boolean | false | none | none |
»messaging | object | false | none | none |
» »custom_message | object | false | none | none |
» » »enabled | boolean | false | none | none |
» » »text | string | false | none | none |
» »emergency_message | object | false | none | none |
» » »enabled | boolean | false | none | none |
» » »text | string | false | none | none |
» »rss_feed_count | integer | false | none | none |
» »rss_feeds | object | false | none | none |
» » »0 | object | false | none | none |
» » » »duration | integer | false | none | none |
» » » »enabled | boolean | false | none | none |
» » » »title | string | false | none | none |
» » » »url | string | false | none | none |
» » »1 | object | false | none | none |
» » » »duration | integer | false | none | none |
» » » »enabled | boolean | false | none | none |
» » » »title | string | false | none | none |
» » » »url | string | false | none | none |
»screen_key | object | false | none | none |
» »enabled | boolean | false | none | none |
» »show | boolean | false | none | none |
» »speak | boolean | false | none | none |
»should_animate_background | boolean | false | none | none |
»show_fully_qualified_name | boolean | false | none | none |
»show_hostname_instead_of_ip | boolean | false | none | none |
»show_name | boolean | false | none | none |
»show_wifi | boolean | false | none | none |
usb_audio_to_hdmi_enabled | boolean | false | none | none |
Errors
{
"errors": [
{
"error": string,
"description": string
}
]
}
Properties
Name | Type | Restrictions | Description |
---|---|---|---|
errors | array | none | none |
error | string | none | none |
description | string | none | none |
Enumerated Values
Property | Value |
---|---|
error | invalid_request |
error | not_found |
error | resource_conflict |
error | path_failed |
error | internal |
error | not_licensed |
error | invalid_token |
FirmwareStatus
{
"updateStatus": string
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
updateStatus | string | false | none | none |
Firmwareversion
{
"videoVersion": string,
"audioVersion": string,
"eepromVersion": string,
"bluetoothVersion": string,
"tablehubVersion": string,
"videoFirmware": string,
"audioFirmware": string,
"eepromFirmware": string,
"bluetoothFirmware": string,
"tablehubFirmware": string,
"updateAvailable": boolean
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
videoVersion | string | false | none | none |
audioVersion | string | false | none | none |
eepromVersion | string | false | none | none |
bluetoothVersion | string | false | none | none |
tablehubVersion | string | false | none | none |
videoFirmware | string | false | none | none |
audioFirmware | string | false | none | none |
eepromFirmware | string | false | none | none |
bluetoothFirmware | string | false | none | none |
tablehubFirmware | string | false | none | none |
updateAvailable | boolean | false | none | none |
Info
{
"connection": {
"ethernet": {
"dns1": string,
"dns2": string,
"gateway": string,
"hostname": string,
"ip_address": string,
"ip_type": string,
"mac_address": string
},
"wifi": {
"dns1": string,
"dns2": string,
"gateway": string,
"hostname": string,
"ip_address": string,
"ip_type": string,
"mac_address": string,
"wifi_signal": {
"signal_quality": string,
"signal_strength": integer,
"signal_units": string
}
}
},
"usb_audio_devices": [
"USB-Audio - HD Pro Webcam C920": string,
"USB-Audio - HD Pro Webcam C920": string
],
"wap_channels": {
"channels_2_4G": [
integer
],
"channels_5G": [
integer
]
}
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
connection | object | false | none | none |
»ethernet | object | false | none | none |
» »dns1 | string | false | none | none |
» »dns2 | string | false | none | none |
» »gateway | string | false | none | none |
» »hostname | string | false | none | none |
» »ip_address | string | false | none | none |
» »ip_type | string | false | none | none |
» »mac_address | string | false | none | none |
»wifi | object | false | none | none |
» »dns1 | string | false | none | none |
» »dns2 | string | false | none | none |
» »gateway | string | false | none | none |
» »hostname | string | false | none | none |
» »ip_address | string | false | none | none |
» »ip_type | string | false | none | none |
» »mac_address | string | false | none | none |
» »wifi_signal | object | false | none | none |
» » »signal_quality | string | false | none | none |
» » »signal_strength | integer | false | none | none |
» » »signal_units | string | false | none | none |
usb_audio_devices | array | false | none | none |
USB-Audio - HD Pro Webcam C920 | string | false | none | none |
wap_channels | object | false | none | none |
»channels_2_4G | array | false | none | a list of the available 2.4G wifi channels |
»channels_5G | array | false | none | a list of the available 5G wifi channels |
Kepler
{
"enabled": boolean,
"secret_key": {
"secret_hash": string,
"secret_salt": string
}
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
enabled | boolean | false | none | none |
secret_key | object | false | none | none |
»secret_hash | string | false | none | none |
»secret_salt | string | false | none | none |
Locale
{
"language": string
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
language | string | false | none | https://datatracker.ietf.org/doc/html/rfc5646 |
Maintenance
{
"daily_restart": {
"enabled": boolean,
"restart_with_hdmi": boolean,
"time": string
},
"power_management": {
"control": {
"command_display_off": string,
"command_display_on": string,
"control_method": string
},
"occupancy_delay_minutes": integer,
"occupancy_enabled": boolean,
"off_hours_enabled": boolean,
"weekday": {
"all_day": boolean,
"end_time": string,
"start_time": string,
"suspend_after": integer
},
"weekend": {
"all_day": boolean,
"end_time": string,
"start_time": string,
"suspend_after": integer
}
}
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
daily_restart | object | false | none | none |
»enabled | boolean | false | none | none |
»restart_with_hdmi | boolean | false | none | none |
»time | string | false | none | none |
power_management | object | false | none | none |
»control | object | false | none | none |
» »command_display_off | string | false | none | none |
» »command_display_on | string | false | none | none |
» »control_method | string | false | none | none |
»occupancy_delay_minutes | integer | false | none | none |
»occupancy_enabled | boolean | false | none | none |
»off_hours_enabled | boolean | false | none | none |
»weekday | object | false | none | none |
» »all_day | boolean | false | none | none |
» »end_time | string | false | none | none |
» »start_time | string | false | none | none |
» »suspend_after | integer | false | none | none |
»weekend | object | false | none | none |
» »all_day | boolean | false | none | none |
» »end_time | string | false | none | none |
» »start_time | string | false | none | none |
» »suspend_after | integer | false | none | none |
Meeting
{
"id": string,
"title": string,
"description": string,
"organizer": string,
"start_time": integer,
"end_time": integer
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | string | true | none | none |
title | string | true | none | none |
description | string | false | none | none |
organizer | string | true | none | none |
start_time | integer | true | none | Unix timestamp |
end_time | integer | true | none | Unix timestamp |
Meetings
{
"meetings": [
{
"id": string,
"title": string,
"description": string,
"organizer": string,
"start_time": integer,
"end_time": integer
}
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
meetings | array | true | none | an array of meeting objects |
id | string | true | none | none |
title | string | true | none | none |
description | string | false | none | none |
organizer | string | true | none | none |
start_time | integer | true | none | Unix timestamp |
end_time | integer | true | none | Unix timestamp |
Metadata
{
"device_id": string
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
device_id | string | false | none | none |
PatchSuccess
{
"device_id": string,
"message": string,
"reboot_required": boolean,
"restart_required": boolean
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
device_id | string | false | none | none |
message | string | false | none | none |
reboot_required | boolean | false | none | none |
restart_required | boolean | false | none | none |
Room_Services
{
"location_services": {
"enabled": boolean
},
"occupancy_counting": {
"auto_reserve_enabled": boolean,
"enabled": boolean
},
"reachthrough": {
"enabled": boolean
},
"room_integration": {
"enabled": boolean,
"http": {
},
"method": string,
"overlay": {
"banner_position": string,
"enabled": boolean,
"message": string,
"position": string
},
"roomtype": string,
"rs232": {
"usb_acquire_cmd": string,
"usb_release_cmd": string
}
},
"wework_sensor": {
"enabled": boolean
}
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
location_services | object | false | none | none |
»enabled | boolean | false | none | none |
occupancy_counting | object | false | none | none |
»auto_reserve_enabled | boolean | false | none | none |
»enabled | boolean | false | none | none |
reachthrough | object | false | none | none |
»enabled | boolean | false | none | none |
room_integration | object | false | none | none |
»enabled | boolean | false | none | none |
»http | object | false | none | none |
»method | string | false | none | none |
»overlay | object | false | none | none |
» »banner_position | string | false | none | none |
» »enabled | boolean | false | none | none |
» »message | string | false | none | none |
» »position | string | false | none | none |
»roomtype | string | false | none | none |
»rs232 | object | false | none | none |
» »usb_acquire_cmd | string | false | none | none |
» »usb_release_cmd | string | false | none | none |
wework_sensor | object | false | none | none |
»enabled | boolean | false | none | none |
Security
{
"admin_password": {
"secret_hash": string,
"secret_salt": string
},
"allow_local_configuration": boolean,
"allow_web_browser_configuration": boolean,
"ca_certificate_bundle": {
"data": string,
"name": string
},
"disable_captive_portal": boolean,
"disable_icmp_ping_replies": boolean,
"display_certificate": {
"cert": {
"data": {
"secret_hash": string,
"secret_salt": string
},
"name": string
},
"key": {
"data": {
"secret_hash": string,
"secret_salt": string
},
"name": string
},
"password": {
"secret_hash": string,
"secret_salt": string
}
},
"encryption_enabled": boolean,
"enforce_admin_password_validation_rules": boolean,
"https_quick_connect_redirect": boolean,
"use_ca_certificate_bundle": boolean
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
admin_password | object | false | none | none |
»secret_hash | string | false | none | none |
»secret_salt | string | false | none | none |
allow_local_configuration | boolean | false | none | none |
allow_web_browser_configuration | boolean | false | none | none |
ca_certificate_bundle | object | false | none | none |
»data | string | false | none | none |
»name | string | false | none | none |
disable_captive_portal | boolean | false | none | none |
disable_icmp_ping_replies | boolean | false | none | none |
display_certificate | object | false | none | none |
»cert | object | false | none | none |
» »data | object | false | none | none |
» » »secret_hash | string | false | none | none |
» » »secret_salt | string | false | none | none |
» »name | string | false | none | none |
»key | object | false | none | none |
» »data | object | false | none | none |
» » »secret_hash | string | false | none | none |
» » »secret_salt | string | false | none | none |
» »name | string | false | none | none |
»password | object | false | none | none |
» »secret_hash | string | false | none | none |
» »secret_salt | string | false | none | none |
encryption_enabled | boolean | false | none | none |
enforce_admin_password_validation_rules | boolean | false | none | none |
https_quick_connect_redirect | boolean | false | none | none |
use_ca_certificate_bundle | boolean | false | none | none |
Sharing
{
"airplay": {
"bluetooth_enabled": boolean,
"enabled": boolean,
"proxy_enabled": boolean
},
"alignment": string,
"android_mirroring_enabled": boolean,
"application": {
"enabled": boolean
},
"browser_look_in": string,
"desktop": {
"enabled": boolean
},
"miracast": {
"infrastructure_enabled": boolean,
"wifi_direct_enabled": boolean
},
"moderator_mode_disallowed": boolean,
"multi_room_enabled": boolean,
"quick_connect_action": string,
"relay_enabled": boolean,
"webrtc_enabled": boolean
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
airplay | object | false | none | none |
»bluetooth_enabled | boolean | false | none | none |
»enabled | boolean | false | none | none |
»proxy_enabled | boolean | false | none | none |
alignment | string | false | none | none |
android_mirroring_enabled | boolean | false | none | none |
application | object | false | none | none |
»enabled | boolean | false | none | none |
browser_look_in | string | false | none | none |
desktop | object | false | none | none |
»enabled | boolean | false | none | none |
miracast | object | false | none | none |
»infrastructure_enabled | boolean | false | none | none |
»wifi_direct_enabled | boolean | false | none | none |
moderator_mode_disallowed | boolean | false | none | none |
multi_room_enabled | boolean | false | none | none |
quick_connect_action | string | false | none | none |
relay_enabled | boolean | false | none | none |
webrtc_enabled | boolean | false | none | none |
Success
{
"message": string,
"reboot_required": boolean,
"restart_required": boolean
}
Properties
Name | Type | Restrictions | Description |
---|---|---|---|
message | string | none | none |
reboot_required | boolean | none | none |
restart_required | boolean | none | none |
Token
{
"access_token": string,
"token_type": string
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
access_token | string | false | none | none |
token_type | string | false | none | This will always be "jwt" |
TokenError
{
"error": string
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
error | string | false | none | none |