{ "openapi": "3.0.0", "info": { "title": "Google Home", "description": "# Google Home Local API\nThis is an unofficial documentation of the local API used by the Home app to communicate with GH devices.\n[GitHub Repo](https://github.com/rithvikvibhu/GHLocalApi)\n\n[![GitHub stars](https://img.shields.io/github/stars/rithvikvibhu/GHLocalApi)](https://github.com/rithvikvibhu/GHLocalApi/stargazers) [![GitHub license](https://img.shields.io/github/license/rithvikvibhu/GHLocalApi)](https://github.com/rithvikvibhu/GHLocalApi/blob/master/LICENSE.md)\n\n## Getting Started\n\nRequests must be made over HTTPS, port 8443, so the base URL for these endpoints is: `https://:8443/setup/`\n\nGet the IP of Google Home from the Google Home app (Device Settings -> End of the list) or from your router.\n\nGET requests are simple, in the browser kind. \nPOST requests need to set the header (when there's a body): `content-type: application/json`\n\n## Authentication\n\nSince June 2019, most requests (with exceptions like `/setup/eureka_info`) need a local authorization token.\n\nThere are 3 kinds of tokens involved here:\n\n### Local Authorization Token\nThis token must be sent in all requests in the header `cast-local-authorization-token`. It is short-lived (~1 day) and may change unexpectedly (with a sync, change in homegraph, etc.)\n##### Get this token\n- With access to an android device, [get this token directly by either method](https://gist.github.com/rithvikvibhu/1a0f4937af957ef6a78453e3be482c1f).\n- Without a device, or to integrate it with a script, use an access token to get the homegraph and extract the token. To get an access token, read the next section. Check the example section for more info.\n\n### Access Token\nThis is a standard google oauth2 access token. It is in the form `ya29.***`.\nThis gives access to the Google Home Foyer API. These expire in an hour.\nUse this to get the homegraph (and then the local authorization token above).\n##### Get this token\nTo get this access token, either a Google account username/password or a Google Master Token is needed. More info in the gist.\nUse the script [from this gist](https://gist.github.com/rithvikvibhu/952f83ea656c6782fbd0f1645059055d).\n\n### Master Token\nThis is in the form `aas_et/***` and can be used to request access tokens.\n##### Get this token\nThe same [script in the gist](https://gist.github.com/rithvikvibhu/952f83ea656c6782fbd0f1645059055d) that gets the access token can also get the master token. Needs Google account creds.\n\n## Example\n\nHere's the whole flow from just a pair of username/password to using the local API.\n\nPrerequisites:\n- [grpcurl](https://github.com/fullstorydev/grpcurl)\n- [Proto files](https://drive.google.com/drive/folders/1RvnN3y-G23pd2SWHmfV_7sef8QU5GNF4?usp=sharing) (preserve folder structure)\n\n### 1. Get an access token with the script\n- Download get_tokens.py\n- Fill in username and password\n```sh\npython3 get_tokens.py\n# Note down the access token printed.\n```\n\n### 2. Use the access token and get home graph\n- This prints the json and uses jq to parse and filter out the fields deviceName and localAuthToken\n- This will give a list of all devices and their local auth tokens\n```sh\n./grpcurl -H 'authorization: Bearer ya29.a0Af****' \\\n\t-import-path /path/to/protos \\\n\t-proto /path/to/protos/google/internal/home/foyer/v1.proto \\\n\tgooglehomefoyer-pa.googleapis.com:443 \\\n\tgoogle.internal.home.foyer.v1.StructuresService/GetHomeGraph | jq '.home.devices[] | {deviceName, localAuthToken}'\n# Note down the local auth token for the device you want.\n```\n\n### 3. Make the call to the local device using the local auth token\n```sh\ncurl -H \"cast-local-authorization-token: LOCAL_AUTH_TOKEN\" --verbose --insecure https://192.168.0.18:8443/setup/bluetooth/status\n```", "contact": {}, "version": "2.0", "x-codegen-settings": { "Nullify404": false, "GenerateAsyncCode": true, "UseMethodPrefix": true, "UseModelPostfix": false, "UseControllerPrefix": true, "UseEnumPostfix": true, "CollectParameters": false, "UseConstructorsForConfig": false, "UseCommonSDKLibrary": false, "iOSUseAppInfoPlist": false, "AndroidUseAppManifest": false, "BodySerialization": 0, "EnableAdditionalModelProperties": false, "PreserveParameterOrder": true, "AppendContentHeaders": true, "iOSGenerateCoreData": false, "GenerateInterfaces": false, "NodeHttpClient": "NODE_REQUEST", "ValidateRequiredParameters": false, "JavaUsePropertiesConfig": false, "Timeout": 0.0, "StoreTimezoneInformation": false, "EnablePHPComposerVersionString": false, "EnableLogging": false, "ArraySerialization": "Indexed", "ModelSerializationScheme": "Json", "UseExceptionPrefix": true, "RunscopeEnabled": false, "AndroidHttpClient": "ANDROID_OK", "ObjCHttpClient": "UNIREST", "CSharpHttpClient": "UNIREST", "PHPHttpClient": "UNIREST", "JavaHttpClient": "JAVA_OK", "ParameterArrayFormat": "ParamArrayWithIndex", "SecurityProtocols": [ "Ssl3", "Tls" ], "GenerateTravisConfig": false, "GenerateCircleConfig": false, "GenerateAppveyorConfig": false, "GenerateJenkinsConfig": false, "EnableHttpCache": false, "Retries": 0, "RetryInterval": 1.0, "GenerateAdvancedDocs": true, "UnderscoreNumbers": true, "UseSingletonPattern": true, "DisableLinting": false, "ApplyCustomizations": [], "SortResources": false, "AllowSkippingSSLCertVerification": false, "DoNotSplitWords": [], "EnableGlobalUserAgent": true, "ReturnCompleteHttpResponse": false, "GenerateModels": true, "GenerateExceptions": true, "IgnoreIfNullJson": false, "DisableDocs": false, "LiftParameterDescriptionFromCustomType": false, "ThrowForHttpErrorStatusCodes": true, "ResponseMapping": { "Type": "Simple" }, "ForceKeywordArgsInRuby": false, "SymbolizeHashKeysInRuby": false, "UsageExampleEndpoint": { "Description": "", "EndpointGroupName": "", "EndpointName": "" }, "IsLatestVersion": false, "EnableImmutableModels": false, "GenerateEnums": true, "BackoffFactor": 0.0, "UserConfigurableRetries": true, "UseEndpointMethodName": false, "EncodeTemplateParameters": true }, "x-server-configuration": { "default-environment": "production", "default-server": "Server 1", "environments": [ { "name": "production", "servers": [ { "name": "Server 1", "url": "http://example.com/setup" } ] } ], "parameters": [] }, "x-image-uri": "" }, "servers": [ { "url": "http://example.com/setup", "variables": {} } ], "paths": { "/supported_timezones": { "get": { "tags": [ "Device Info" ], "summary": "Timezones", "description": "Simply returns a list of all supported timezones.", "operationId": "Timezones", "parameters": [], "responses": { "200": { "description": "", "headers": {}, "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Example14" } }, "example": [ { "display_string": "Samoa Standard Time (Midway)", "offset": -660, "timezone": "Pacific/Midway" }, { "display_string": "Hawaii-Aleutian Standard Time (Honolulu)", "offset": -600, "timezone": "Pacific/Honolulu" } ] } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "GET", "uri": "/supported_timezones" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "KEYS", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "11800", "Content-Type": "application/json" }, "body": "[\n {\n \"display_string\": \"Samoa Standard Time (Midway)\",\n \"offset\": -660,\n \"timezone\": \"Pacific/Midway\"\n },\n {\n \"display_string\": \"Hawaii-Aleutian Standard Time (Honolulu)\",\n \"offset\": -600,\n \"timezone\": \"Pacific/Honolulu\"\n }\n]" }, "x-testShouldPass": true, "x-testEnabled": false, "x-testName": "Timezones", "x-testDescription": "Simply returns a list of all supported timezones." } ] } }, "/get_app_device_id": { "post": { "tags": [ "Device Info" ], "summary": "App Device ID", "description": "This gives \"app device id\", \"certificate\" and \"signed data\". \nThe `app_id` in the request is mandatory and refers to Chromecast backdrop/screensaver app. It has to be set to `E8C28D3C`. \n\nThe certificate is valid and issued by `Chromecast ICA 6 (Audio Assist), Google Inc`.\n\nNot sure what the other two are.", "operationId": "AppDeviceID", "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AppDeviceIDRequest" }, "example": { "app_id": "E8C28D3C" } } }, "required": true }, "responses": { "200": { "description": "", "headers": {}, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Example11" }, "example": { "app_device_id": "...", "certificate": "-----BEGIN CERTIFICATE-----\nMIID...Oeb0\n-----END CERTIFICATE-----\n", "signed_data": "HAjp..." } } } }, "404": { "description": "Not Found" } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "POST", "uri": "/get_app_device_id", "headers": { "Content-Type": "application/json" }, "body": "{\r\n \"app_id\": \"E8C28D3C\"\r\n}" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "KEYS", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "1828", "Content-Type": "application/json" }, "body": "{\r\n \"app_device_id\": \"...\",\r\n \"certificate\": \"-----BEGIN CERTIFICATE-----\\nMIID...Oeb0\\n-----END CERTIFICATE-----\\n\",\r\n \"signed_data\": \"HAjp...\"\r\n}" }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "App Device ID", "x-testDescription": "This gives \"app device id\", \"certificate\" and \"signed data\". \nThe `app_id` in the request is mandatory and refers to Chromecast backdrop/screensaver app. It has to be set to `E8C28D3C`. \n\nThe certificate is valid and issued by `Chromecast ICA 6 (Audio Assist), Google Inc`.\n\nNot sure what the other two are." } ] } }, "/supported_locales": { "get": { "tags": [ "Device Info" ], "summary": "Locales", "description": "Simply returns a list of all supported locales.", "operationId": "Locales", "parameters": [], "responses": { "200": { "description": "", "headers": {}, "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Example15" } }, "example": [ { "display_string": "Arabic - العربية", "locale": "ar" }, { "display_string": "German - Deutsch", "locale": "de" }, { "display_string": "English (United States)", "locale": "en-US" } ] } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "GET", "uri": "/supported_locales" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "KEYS", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "3553", "Content-Type": "application/json" }, "body": "[\n {\n \"display_string\": \"Arabic - العربية\",\n \"locale\": \"ar\"\n },\n {\n \"display_string\": \"German - Deutsch\",\n \"locale\": \"de\"\n },\n {\n \"display_string\": \"English (United States)\",\n \"locale\": \"en-US\"\n }\n]" }, "x-testShouldPass": true, "x-testEnabled": false, "x-testName": "Locales", "x-testDescription": "Simply returns a list of all supported locales." } ] } }, "/assistant/check_ready_status": { "post": { "tags": [ "Device Info" ], "summary": "Check Ready Status", "description": "**Update:** This seems to have changed now and is no longer possible. The error is also new.\n\nSetting `play_ready_message` to true plays a welcome message on the device saying \"Hi, I'm your Google Assistant. I'm here to help. To learn a few things you can do, continue in the Google Home app.\"", "operationId": "CheckReadyStatus", "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CheckReadyStatusRequest" }, "example": { "play_ready_message": true, "user_id": "xxxxx" } } }, "required": true }, "responses": { "200": { "description": "", "headers": {}, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Example13" }, "example": { "can_enroll": true, "enrollment_state": 0, "error_code": 0, "ready": false, "retryable": true } } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "POST", "uri": "/assistant/check_ready_status", "headers": { "Content-Type": "application/json" }, "body": "{\r\n \"play_ready_message\": true,\r\n \"user_id\": \"xxxxx\"\r\n}" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "KEYS", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "86", "Content-Type": "application/json" }, "body": "{\r\n \"can_enroll\": true,\r\n \"enrollment_state\": 0,\r\n \"error_code\": 0,\r\n \"ready\": false,\r\n \"retryable\": true\r\n}" }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Check Ready Status", "x-testDescription": "**Update:** This seems to have changed now and is no longer possible. The error is also new.\n\nSetting `play_ready_message` to true plays a welcome message on the device saying \"Hi, I'm your Google Assistant. I'm here to help. To learn a few things you can do, continue in the Google Home app.\"" } ] } }, "/offer": { "get": { "tags": [ "Device Info" ], "summary": "Offer", "description": "This gives a token which is used by the Home app to get offers. The offers themselves are not stored on the device. \nA new token is generated for every request.", "operationId": "Offer", "parameters": [], "responses": { "200": { "description": "", "headers": {}, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Example12" }, "example": { "token": "ADtq..." } } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "GET", "uri": "/offer" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "KEYS", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "240", "Content-Type": "application/json" }, "body": "{\"token\":\"ADtq...\"}" }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Offer", "x-testDescription": "This gives a token which is used by the Home app to get offers. The offers themselves are not stored on the device. \nA new token is generated for every request." } ] } }, "/eureka_info": { "get": { "tags": [ "Device Info" ], "summary": "Eureka Info", "description": "This gives most of the device info. The GET parameter `param` is a comma separated list of json keys to fetch. Currently, these params are known: `version,audio,name,build_info,detail,device_info,net,wifi,setup,settings,opt_in,opencast,multizone,proxy,night_mode_params,user_eq,room_equalizer,sign,aogh,ultrasound,mesh`\n\nNested items can also be filtered using the dot notation. Example: `audio.digital`\n\nThe `options` GET parameter is always set to `detail` or `detail,sign`. `sign` signs the `nonce` and returns some value.\n\nThe `nonce` GET parameter is an integer value signed with needed (see `option` parameter above).", "operationId": "EurekaInfo", "parameters": [ { "name": "params", "in": "query", "required": true, "style": "form", "explode": true, "schema": { "type": "string", "example": "version,audio,name,build_info,detail,device_info,net,wifi,setup,settings,opt_in,opencast,multizone,proxy,night_mode_params,user_eq,room_equalizer,sign,aogh,ultrasound,mesh" } }, { "name": "options", "in": "query", "required": true, "style": "form", "explode": true, "schema": { "type": "string", "example": "detail,sign" } }, { "name": "nonce", "in": "query", "required": true, "style": "form", "explode": true, "schema": { "type": "integer", "format": "int32", "example": 1234512345 } } ], "responses": { "200": { "description": "", "headers": {}, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Example1" }, "example": { "aogh": { "aogh_api_version": "2" }, "audio": { "digital": false }, "build_info": { "build_type": 2, "cast_build_revision": "1.46.195690", "cast_control_version": 1, "preview_channel_state": 4, "release_track": "preview-joining-stable-channel", "system_build_number": "195690" }, "detail": { "icon_list": [ { "depth": 32, "height": 55, "mimetype": "image/png", "url": "/setup/icon.png", "width": 98 } ], "locale": { "display_string": "English (United States)" }, "timezone": { "display_string": "India Standard Time (Kolkata)", "offset": 330 } }, "device_info": { "4k_blocked": 0, "capabilities": { "aogh_supported": true, "assistant_supported": true, "audio_hdr_supported": false, "audio_surround_mode_supported": false, "ble_supported": true, "bluetooth_audio_sink_supported": true, "bluetooth_audio_source_supported": true, "bluetooth_supported": true, "cloudcast_supported": true, "content_filters_supported": true, "display_supported": false, "fdr_supported": false, "hdmi_prefer_50hz_supported": false, "hdmi_prefer_high_fps_supported": false, "hotspot_supported": true, "https_setup_supported": true, "input_management_supported": true, "keep_hotspot_until_connected_supported": true, "multi_user_supported": true, "multichannel_group_supported": true, "multizone_supported": true, "night_mode_supported": true, "night_mode_supported_v2": true, "opencast_supported": false, "preview_channel_supported": true, "reboot_supported": true, "remote_ducking_supported": true, "separate_tts_volume_supported": true, "setup_supported": true, "sleep_mode_supported": true, "stats_supported": true, "system_sound_effects_supported": false, "user_eq_supported": true, "wifi_auto_save_supported": true, "wifi_regulatory_domain_locked": true, "wifi_supported": true }, "cloud_device_id": "003D...", "factory_country_code": "US", "hotspot_bssid": "FA:8F:CA:30:41:71", "local_authorization_token_hash": "hBt2...", "mac_address": "F4:F5:...", "manufacturer": "Google Inc.", "model_name": "Google Home", "product_name": "pineapple", "public_key": "MIIB...", "ssdp_udn": "baab...", "uma_client_id": "8ce0...", "uptime": 48509.169282, "weave_device_id": "" }, "multizone": { "audio_output_delay": 0, "audio_output_delay_hdmi": 0, "audio_output_delay_oem": 0, "aux_in_group": "", "dynamic_groups": [], "groups": [], "multichannel_status": 0 }, "name": "Bedroom Speaker", "net": { "ethernet_connected": false, "ip_address": "192.168.0.18", "online": true }, "night_mode_params": { "device_override_do_not_disturb": 0, "do_not_disturb": true, "enabled": true, "led_brightness": 0.57999998331069946, "volume": 0.5899999737739563, "windows": [ { "days": [ 0, 1, 2, 3, 4, 5, 6 ], "length_hours": 6, "start_hour": 23 } ] }, "opencast": { "pin_code": "" }, "opt_in": { "audio_hdr": false, "audio_surround_mode": 0, "autoplay_on_signal": true, "cloud_ipc": true, "hdmi_prefer_50hz": false, "hdmi_prefer_high_fps": true, "managed_mode": false, "opencast": true, "preview_channel": true, "remote_ducking": true, "stats": true, "ui_flipped": false, "wpa3_support_enabled": false }, "proxy": { "mode": "system" }, "settings": { "closed_caption": {}, "control_notifications": 1, "country_code": "IN", "locale": "en-US", "network_standby": 0, "system_sound_effects": true, "time_format": 1, "timezone": "Asia/Kolkata", "wake_on_cast": 1 }, "setup": { "qr_ssid_suffix": "", "setup_state": 60, "ssid_suffix": "k", "stats": { "num_check_connectivity": 0, "num_connect_wifi": 0, "num_connected_wifi_not_saved": 0, "num_initial_eureka_info": 0, "num_obtain_ip": 0 }, "tos_accepted": true }, "sign": { "certificate": "-----BEGIN CERTIFICATE-----\nMIID...Oeb0\n-----END CERTIFICATE-----\n", "intermediate_certs": [ "-----BEGIN CERTIFICATE-----\nMIID...O/bYS\n-----END CERTIFICATE-----\n" ], "nonce": "1234512345", "signed_data": "Rr5Q..." }, "user_eq": { "high_shelf": { "frequency": 4500, "gain_db": 0, "quality": 0.707 }, "low_shelf": { "frequency": 150, "gain_db": 0, "quality": 0.707 }, "max_peaking_eqs": 0, "peaking_eqs": [] }, "version": 10, "wifi": { "bssid": "a0:ab:...", "has_changes": false, "noise_level": -90, "signal_level": -50, "ssid": "Nucl...", "wpa_configured": true, "wpa_id": 1, "wpa_state": 10 } } } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "GET", "uri": "/eureka_info?params=version%2Caudio%2Cname%2Cbuild_info%2Cdetail%2Cdevice_info%2Cnet%2Cwifi%2Csetup%2Csettings%2Copt_in%2Copencast%2Cmultizone%2Cproxy%2Cnight_mode_params%2Cuser_eq%2Croom_equalizer%2Csign%2Caogh%2Cultrasound%2Cmesh&options=detail%2Csign&nonce=1234512345" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "KEYS", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "7380", "Content-Type": "application/json" }, "body": "{\r\n \"aogh\": {\r\n \"aogh_api_version\": \"2\"\r\n },\r\n \"audio\": {\r\n \"digital\": false\r\n },\r\n \"build_info\": {\r\n \"build_type\": 2,\r\n \"cast_build_revision\": \"1.46.195690\",\r\n \"cast_control_version\": 1,\r\n \"preview_channel_state\": 4,\r\n \"release_track\": \"preview-joining-stable-channel\",\r\n \"system_build_number\": \"195690\"\r\n },\r\n \"detail\": {\r\n \"icon_list\": [\r\n {\r\n \"depth\": 32,\r\n \"height\": 55,\r\n \"mimetype\": \"image/png\",\r\n \"url\": \"/setup/icon.png\",\r\n \"width\": 98\r\n }\r\n ],\r\n \"locale\": {\r\n \"display_string\": \"English (United States)\"\r\n },\r\n \"timezone\": {\r\n \"display_string\": \"India Standard Time (Kolkata)\",\r\n \"offset\": 330\r\n }\r\n },\r\n \"device_info\": {\r\n \"4k_blocked\": 0,\r\n \"capabilities\": {\r\n \"aogh_supported\": true,\r\n \"assistant_supported\": true,\r\n \"audio_hdr_supported\": false,\r\n \"audio_surround_mode_supported\": false,\r\n \"ble_supported\": true,\r\n \"bluetooth_audio_sink_supported\": true,\r\n \"bluetooth_audio_source_supported\": true,\r\n \"bluetooth_supported\": true,\r\n \"cloudcast_supported\": true,\r\n \"content_filters_supported\": true,\r\n \"display_supported\": false,\r\n \"fdr_supported\": false,\r\n \"hdmi_prefer_50hz_supported\": false,\r\n \"hdmi_prefer_high_fps_supported\": false,\r\n \"hotspot_supported\": true,\r\n \"https_setup_supported\": true,\r\n \"input_management_supported\": true,\r\n \"keep_hotspot_until_connected_supported\": true,\r\n \"multi_user_supported\": true,\r\n \"multichannel_group_supported\": true,\r\n \"multizone_supported\": true,\r\n \"night_mode_supported\": true,\r\n \"night_mode_supported_v2\": true,\r\n \"opencast_supported\": false,\r\n \"preview_channel_supported\": true,\r\n \"reboot_supported\": true,\r\n \"remote_ducking_supported\": true,\r\n \"separate_tts_volume_supported\": true,\r\n \"setup_supported\": true,\r\n \"sleep_mode_supported\": true,\r\n \"stats_supported\": true,\r\n \"system_sound_effects_supported\": false,\r\n \"user_eq_supported\": true,\r\n \"wifi_auto_save_supported\": true,\r\n \"wifi_regulatory_domain_locked\": true,\r\n \"wifi_supported\": true\r\n },\r\n \"cloud_device_id\": \"003D...\",\r\n \"factory_country_code\": \"US\",\r\n \"hotspot_bssid\": \"FA:8F:CA:30:41:71\",\r\n \"local_authorization_token_hash\": \"hBt2...\",\r\n \"mac_address\": \"F4:F5:...\",\r\n \"manufacturer\": \"Google Inc.\",\r\n \"model_name\": \"Google Home\",\r\n \"product_name\": \"pineapple\",\r\n \"public_key\": \"MIIB...\",\r\n \"ssdp_udn\": \"baab...\",\r\n \"uma_client_id\": \"8ce0...\",\r\n \"uptime\": 48509.169282,\r\n \"weave_device_id\": \"\"\r\n },\r\n \"multizone\": {\r\n \"audio_output_delay\": 0,\r\n \"audio_output_delay_hdmi\": 0,\r\n \"audio_output_delay_oem\": 0,\r\n \"aux_in_group\": \"\",\r\n \"dynamic_groups\": [],\r\n \"groups\": [],\r\n \"multichannel_status\": 0\r\n },\r\n \"name\": \"Bedroom Speaker\",\r\n \"net\": {\r\n \"ethernet_connected\": false,\r\n \"ip_address\": \"192.168.0.18\",\r\n \"online\": true\r\n },\r\n \"night_mode_params\": {\r\n \"device_override_do_not_disturb\": 0,\r\n \"do_not_disturb\": true,\r\n \"enabled\": true,\r\n \"led_brightness\": 0.57999998331069946,\r\n \"volume\": 0.5899999737739563,\r\n \"windows\": [\r\n {\r\n \"days\": [\r\n 0,\r\n 1,\r\n 2,\r\n 3,\r\n 4,\r\n 5,\r\n 6\r\n ],\r\n \"length_hours\": 6,\r\n \"start_hour\": 23\r\n }\r\n ]\r\n },\r\n \"opencast\": {\r\n \"pin_code\": \"\"\r\n },\r\n \"opt_in\": {\r\n \"audio_hdr\": false,\r\n \"audio_surround_mode\": 0,\r\n \"autoplay_on_signal\": true,\r\n \"cloud_ipc\": true,\r\n \"hdmi_prefer_50hz\": false,\r\n \"hdmi_prefer_high_fps\": true,\r\n \"managed_mode\": false,\r\n \"opencast\": true,\r\n \"preview_channel\": true,\r\n \"remote_ducking\": true,\r\n \"stats\": true,\r\n \"ui_flipped\": false,\r\n \"wpa3_support_enabled\": false\r\n },\r\n \"proxy\": {\r\n \"mode\": \"system\"\r\n },\r\n \"settings\": {\r\n \"closed_caption\": {},\r\n \"control_notifications\": 1,\r\n \"country_code\": \"IN\",\r\n \"locale\": \"en-US\",\r\n \"network_standby\": 0,\r\n \"system_sound_effects\": true,\r\n \"time_format\": 1,\r\n \"timezone\": \"Asia/Kolkata\",\r\n \"wake_on_cast\": 1\r\n },\r\n \"setup\": {\r\n \"qr_ssid_suffix\": \"\",\r\n \"setup_state\": 60,\r\n \"ssid_suffix\": \"k\",\r\n \"stats\": {\r\n \"num_check_connectivity\": 0,\r\n \"num_connect_wifi\": 0,\r\n \"num_connected_wifi_not_saved\": 0,\r\n \"num_initial_eureka_info\": 0,\r\n \"num_obtain_ip\": 0\r\n },\r\n \"tos_accepted\": true\r\n },\r\n \"sign\": {\r\n \"certificate\": \"-----BEGIN CERTIFICATE-----\\nMIID...Oeb0\\n-----END CERTIFICATE-----\\n\",\r\n \"intermediate_certs\": [\r\n \"-----BEGIN CERTIFICATE-----\\nMIID...O/bYS\\n-----END CERTIFICATE-----\\n\"\r\n ],\r\n \"nonce\": \"1234512345\",\r\n \"signed_data\": \"Rr5Q...\"\r\n },\r\n \"user_eq\": {\r\n \"high_shelf\": {\r\n \"frequency\": 4500,\r\n \"gain_db\": 0,\r\n \"quality\": 0.707\r\n },\r\n \"low_shelf\": {\r\n \"frequency\": 150,\r\n \"gain_db\": 0,\r\n \"quality\": 0.707\r\n },\r\n \"max_peaking_eqs\": 0,\r\n \"peaking_eqs\": []\r\n },\r\n \"version\": 10,\r\n \"wifi\": {\r\n \"bssid\": \"a0:ab:...\",\r\n \"has_changes\": false,\r\n \"noise_level\": -90,\r\n \"signal_level\": -50,\r\n \"ssid\": \"Nucl...\",\r\n \"wpa_configured\": true,\r\n \"wpa_id\": 1,\r\n \"wpa_state\": 10\r\n }\r\n}" }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Eureka Info", "x-testDescription": "This gives most of the device info. The GET parameter `param` is a comma separated list of json keys to fetch. Currently, these params are known: `version,audio,name,build_info,detail,device_info,net,wifi,setup,settings,opt_in,opencast,multizone,proxy,night_mode_params,user_eq,room_equalizer,sign,aogh,ultrasound,mesh`\n\nNested items can also be filtered using the dot notation. Example: `audio.digital`\n\nThe `options` GET parameter is always set to `detail` or `detail,sign`. `sign` signs the `nonce` and returns some value.\n\nThe `nonce` GET parameter is an integer value signed with needed (see `option` parameter above)." } ] } }, "/test_internet_download_speed": { "post": { "tags": [ "Device Info" ], "summary": "Test Internet Download Speed", "description": "**Update:** This seems to have been removed. Returns 404 Not Found.\n\nThis endpoint tests internet download speed. Any sample file URL can be provided.", "operationId": "TestInternetDownloadSpeed", "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TestInternetDownloadSpeedRequest" }, "example": { "url": "https://storage.googleapis.com/reliability-speedtest/random.txt" } } }, "required": true }, "responses": { "200": { "description": "", "headers": {}, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Example16" }, "example": { "bytes_received": 31457280, "response_code": 200, "time_for_data_fetch": 4722, "time_for_http_response": 316 } } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "POST", "uri": "/test_internet_download_speed", "headers": { "Content-Type": "application/json" }, "body": "{\r\n \"url\": \"https://storage.googleapis.com/reliability-speedtest/random.txt\"\r\n}" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "KEYS", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "103", "Content-Type": "application/json" }, "body": "{\"bytes_received\":31457280,\"response_code\":200,\"time_for_data_fetch\":4722,\"time_for_http_response\":316}" }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Test Internet Download Speed", "x-testDescription": "**Update:** This seems to have been removed. Returns 404 Not Found.\n\nThis endpoint tests internet download speed. Any sample file URL can be provided." } ] } }, "/reboot": { "post": { "tags": [ "Device Settings" ], "summary": "Reboot and Factory Reset", "description": "This can simply reboot the device (`params: \"now\"`) or factory reset the device (`params: \"fdr\"`).", "operationId": "RebootandFactoryReset", "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RebootandFactoryResetRequest" }, "example": { "params": "now" } } }, "required": true }, "responses": { "200": { "description": "", "headers": {}, "content": { "text/plain": { "schema": { "type": "object", "x-is-dynamic": true } } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "POST", "uri": "/reboot", "headers": { "Content-Type": "application/json" }, "body": "{\r\n \"params\": \"now\"\r\n}" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "NONE", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "0" } }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Reboot and Factory Reset", "x-testDescription": "This can simply reboot the device (`params: \"now\"`) or factory reset the device (`params: \"fdr\"`)." } ] } }, "/assistant/set_night_mode_params": { "post": { "tags": [ "Device Settings" ], "summary": "Night Mode settings", "description": "This sets night mode options. \nTo view currently set values, use /setup/eureka_info. \nIf `enabled` is set to false, night mode is disabled and the other values do not matter. \n`led_brightness` and `volume` refer to the maximum LED Brightness and Volume that is set during night mode. \n`demo_to_user` is always set to `true` so change in values will be visible in realtime (like brightness). \n`windows`: A combination of `length_hours` and `start_hour` is used to define start and end times for night mode. In this example, night mode starts at 10 PM (22) and ends at 6 AM (8 hours later). `windows.days` is an array of days of week when night mode will be enabled. Example: 0->Sunday, 1-> Monday, ..., 6->Saturday.", "operationId": "NightModesettings", "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NightModesettingsRequest" }, "example": { "enabled": false, "do_not_disturb": true, "led_brightness": 0.44999998807907104, "volume": 0.46000000834465027, "demo_to_user": true, "windows": [ { "length_hours": 8, "days": [ 0, 1, 2, 3, 4, 5, 6 ], "start_hour": 22 } ] } } }, "required": true }, "responses": { "200": { "description": "", "headers": {}, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Example17" }, "example": { "do_not_disturb": true, "enabled": false, "led_brightness": 0.44999998807907104, "volume": 0.46000000834465027, "windows": [ { "days": [ 0, 1, 2, 3, 4, 5, 6 ], "length_hours": 8.0, "start_hour": 22.0 } ] } } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "POST", "uri": "/assistant/set_night_mode_params", "headers": { "Content-Type": "application/json" }, "body": "{\r\n \"enabled\": false,\r\n \"do_not_disturb\": true,\r\n \"led_brightness\": 0.44999998807907104,\r\n \"volume\": 0.46000000834465027,\r\n \"demo_to_user\": true,\r\n \"windows\": [\r\n {\r\n \"length_hours\": 8,\r\n \"days\": [\r\n 0,\r\n 1,\r\n 2,\r\n 3,\r\n 4,\r\n 5,\r\n 6\r\n ],\r\n \"start_hour\": 22\r\n }\r\n ]\r\n}" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "KEYS", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "179", "Content-Type": "application/json" }, "body": "{\"do_not_disturb\":true,\"enabled\":false,\"led_brightness\":0.44999998807907104,\"volume\":0.46000000834465027,\"windows\":[{\"days\":[0,1,2,3,4,5,6],\"length_hours\":8.0,\"start_hour\":22.0}]}" }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Night Mode settings", "x-testDescription": "This sets night mode options. \nTo view currently set values, use /setup/eureka_info. \nIf `enabled` is set to false, night mode is disabled and the other values do not matter. \n`led_brightness` and `volume` refer to the maximum LED Brightness and Volume that is set during night mode. \n`demo_to_user` is always set to `true` so change in values will be visible in realtime (like brightness). \n`windows`: A combination of `length_hours` and `start_hour` is used to define start and end times for night mode. In this example, night mode starts at 10 PM (22) and ends at 6 AM (8 hours later). `windows.days` is an array of days of week when night mode will be enabled. Example: 0->Sunday, 1-> Monday, ..., 6->Saturday." } ] } }, "/set_eureka_info": { "post": { "tags": [ "Device Settings" ], "summary": "Set Eureka Info", "description": "This can set custom values to some options.\n\nOnly fields to be modified need to be sent, not all. The example has some modifiable fields.\n\nTODO: List all modifiable fields.\n\nSending non-existant fields will still return a 200 OK, but they are not saved.", "operationId": "SetEurekaInfo", "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SetEurekaInfoRequest" }, "example": { "name": "Living Room", "settings": { "control_notifications": 2 }, "opt_in": { "opencast": true, "preview_channel": true, "remote_ducking": true, "stats": true } } } }, "required": true }, "responses": { "200": { "description": "", "headers": {}, "content": { "text/plain": { "schema": { "type": "object", "x-is-dynamic": true } } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "POST", "uri": "/set_eureka_info", "headers": { "Content-Type": "application/json" }, "body": "{\r\n \"name\": \"Living Room\",\r\n \"settings\": {\r\n \"control_notifications\": 2\r\n },\r\n \"opt_in\": {\r\n \"opencast\": true,\r\n \"preview_channel\": true,\r\n \"remote_ducking\": true,\r\n \"stats\": true\r\n }\r\n}" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "NONE", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "0" } }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Set Eureka Info", "x-testDescription": "This can set custom values to some options.\n\nOnly fields to be modified need to be sent, not all. The example has some modifiable fields.\n\nTODO: List all modifiable fields.\n\nSending non-existant fields will still return a 200 OK, but they are not saved." } ] } }, "/assistant/alarms": { "get": { "tags": [ "Assistant" ], "summary": "Get Alarms and Timers", "description": "This gives a list of all active alarms and timers.\n\nBoth alarms and timers have `id`s which can be used to delete them. (There is no known way of creating/deleting yet). The value of `status` have different meanings for alarms and timers (given below).\n\nAlarms have `date_pattern` and `time_pattern` with day, month, year, hour, minute, second. `fire_time` is the same in unix time (milliseconds, not seconds). \n`status` is 1 for set up and 2 for ringing.\n\nTimers have `original_duration` is the original duration. \n`status` is 1 for set up and 3 for ringing.", "operationId": "GetAlarmsandTimers", "parameters": [], "responses": { "200": { "description": "", "headers": {}, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Example18" }, "example": { "alarm": [ { "date_pattern": { "day": 15, "month": 1, "year": 2018 }, "time_pattern": { "hour": 6, "minute": 50, "second": 0 }, "fire_time": 1515995400000.0, "id": "alarm/xxx", "status": 1 } ], "timer": [ { "fire_time": 1516176765589, "id": "timer/xxx", "original_duration": 20000, "status": 1 } ] } } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "GET", "uri": "/assistant/alarms" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "KEYS", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "23", "Content-Type": "application/json" }, "body": "{\r\n \"alarm\": [\r\n {\r\n \"date_pattern\": {\r\n \"day\": 15,\r\n \"month\": 1,\r\n \"year\": 2018\r\n },\r\n \"time_pattern\": {\r\n \"hour\": 6,\r\n \"minute\": 50,\r\n \"second\": 0\r\n },\r\n \"fire_time\": 1515995400000.0,\r\n \"id\": \"alarm/xxx\",\r\n \"status\": 1\r\n }\r\n ],\r\n \"timer\": [\r\n {\r\n \"fire_time\": 1516176765589,\r\n \"id\": \"timer/xxx\",\r\n \"original_duration\": 20000,\r\n \"status\": 1\r\n }\r\n ]\r\n}" }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Get Alarms and Timers", "x-testDescription": "This gives a list of all active alarms and timers.\n\nBoth alarms and timers have `id`s which can be used to delete them. (There is no known way of creating/deleting yet). The value of `status` have different meanings for alarms and timers (given below).\n\nAlarms have `date_pattern` and `time_pattern` with day, month, year, hour, minute, second. `fire_time` is the same in unix time (milliseconds, not seconds). \n`status` is 1 for set up and 2 for ringing.\n\nTimers have `original_duration` is the original duration. \n`status` is 1 for set up and 3 for ringing." } ] } }, "/assistant/alarms/delete": { "post": { "tags": [ "Assistant" ], "summary": "Delete Alarms and Timers", "description": "This deletes alarms and timers by their id.\n\n`ids` is a list of ids to be deleted. Sending invalid id still returns a 200 OK. The `/` in the ids have to be escaped like `\\/`.", "operationId": "DeleteAlarmsandTimers", "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteAlarmsandTimersRequest" }, "example": { "ids": [ "timer/xxx", "alarm/xxx" ] } } }, "required": true }, "responses": { "200": { "description": "", "headers": {}, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Example19" }, "example": { "success": true } } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "POST", "uri": "/assistant/alarms/delete", "headers": { "Content-Type": "application/json" }, "body": "{\r\n \"ids\": [\r\n \"timer/xxx\",\r\n \"alarm/xxx\"\r\n ]\r\n}" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "KEYS", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "16", "Content-Type": "application/json" }, "body": "{\"success\":true}" }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Delete Alarms and Timers", "x-testDescription": "This deletes alarms and timers by their id.\n\n`ids` is a list of ids to be deleted. Sending invalid id still returns a 200 OK. The `/` in the ids have to be escaped like `\\/`." } ] } }, "/assistant/notifications": { "post": { "tags": [ "Assistant" ], "summary": "Do Not Disturb", "description": "This is for the Do Not Disturb option. Sending an empty-body POST returns the current value. Sending a new value changes it.", "operationId": "DoNotDisturb", "parameters": [ { "name": "Content-Type", "in": "header", "required": true, "style": "simple", "schema": { "type": "string", "example": "application/json" } } ], "responses": { "200": { "description": "", "headers": {}, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Getcurrentstate" }, "example": { "notifications_enabled": true } } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "POST", "uri": "/assistant/notifications", "headers": { "Content-Type": "application/json" } }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "KEYS", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "30", "Content-Type": "application/json" }, "body": "{\"notifications_enabled\":true}" }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Do Not Disturb", "x-testDescription": "This is for the Do Not Disturb option. Sending an empty-body POST returns the current value. Sending a new value changes it." } ] } }, "/assistant/alarms/volume": { "post": { "tags": [ "Assistant" ], "summary": "Alarm Volume", "description": "This gets and sets alarms and timers volume. \n**Note:** This is not the same as normal volume.\n\nVolume is a float number in [0, 1] where 0 is minimum and 1 is maximum. \nSending an empty body gets the volume. Sending `volume` sets the volume.", "operationId": "AlarmVolume", "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AlarmVolumeRequest" }, "example": { "volume": 1 } } }, "required": true }, "responses": { "200": { "description": "", "headers": {}, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Getvolume" }, "example": { "volume": 1.0 } } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "POST", "uri": "/assistant/alarms/volume", "headers": { "Content-Type": "application/json" }, "body": "{\r\n \"volume\": 1\r\n}" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "KEYS", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "14", "Content-Type": "application/json" }, "body": "{\"volume\":1.0}" }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Alarm Volume", "x-testDescription": "This gets and sets alarms and timers volume. \n**Note:** This is not the same as normal volume.\n\nVolume is a float number in [0, 1] where 0 is minimum and 1 is maximum. \nSending an empty body gets the volume. Sending `volume` sets the volume." } ] } }, "/user_eq/set_equalizer": { "post": { "tags": [ "Assistant" ], "summary": "Set Equalizer Values", "description": "This can only set new equalizer values. To get already set values, use /setup/eureka_info.\n\nThe body is mandatory. It can either contain `low_shelf` or `high_shelf` or both.\n\n`low_shelf.gain_db` and `high_shelf.gain_db` refer to **bass** and **treble** respectively.\n\nDefault values are 0 for both. \nWhile the slider in the Home app only ranges from -6 to +6, they can be set to any integer like 50 or -100. These changes persist.", "operationId": "SetEqualizerValues", "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SetEqualizerValuesRequest" }, "example": { "low_shelf": { "gain_db": 0 }, "high_shelf": { "gain_db": 0 } } } }, "required": true }, "responses": { "200": { "description": "", "headers": {}, "content": { "text/plain": { "schema": { "type": "object", "x-is-dynamic": true } } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "POST", "uri": "/user_eq/set_equalizer", "headers": { "Content-Type": "application/json" }, "body": "{\r\n \"low_shelf\": {\r\n \"gain_db\": 0\r\n },\r\n \"high_shelf\": {\r\n \"gain_db\": 0\r\n }\r\n}" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "NONE", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "0" } }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Set Equalizer Values", "x-testDescription": "This can only set new equalizer values. To get already set values, use /setup/eureka_info.\n\nThe body is mandatory. It can either contain `low_shelf` or `high_shelf` or both.\n\n`low_shelf.gain_db` and `high_shelf.gain_db` refer to **bass** and **treble** respectively.\n\nDefault values are 0 for both. \nWhile the slider in the Home app only ranges from -6 to +6, they can be set to any integer like 50 or -100. These changes persist." } ] } }, "/assistant/a11y_mode": { "post": { "tags": [ "Assistant" ], "summary": "Accessibility", "description": "This controls Accessibility sounds. `hotword_enabled` is for 'Play start sound' and `endpoint_enabled` is for 'Play end sound'. \nSending an empty-body POST request returns the current values. \nEither of the fields or both can be sent and new values will be saved.", "operationId": "Accessibility", "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AccessibilityRequest" }, "example": { "hotword_enabled": false, "endpoint_enabled": false } } }, "required": true }, "responses": { "200": { "description": "", "headers": {}, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Getcurrentvalues" }, "example": { "endpoint_enabled": false, "hotword_enabled": false } } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "POST", "uri": "/assistant/a11y_mode", "headers": { "Content-Type": "application/json" }, "body": "{\r\n \"hotword_enabled\": false,\r\n \"endpoint_enabled\": false\r\n}" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "KEYS", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "50", "Content-Type": "application/json" }, "body": "{\"endpoint_enabled\":false,\"hotword_enabled\":false}" }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Accessibility", "x-testDescription": "This controls Accessibility sounds. `hotword_enabled` is for 'Play start sound' and `endpoint_enabled` is for 'Play end sound'. \nSending an empty-body POST request returns the current values. \nEither of the fields or both can be sent and new values will be saved." } ] } }, "/bluetooth/scan_results": { "get": { "tags": [ "Bluetooth" ], "summary": "Get Scan Results", "description": "*See note for Bluetooth under `/setup/bluetooth/status`*\n\n**For Part 2 only**\n\nThis returns a list of all nearby bluetooth devices. While the Home app only shows speakers, this list contains all devices including TVs, mobiles, etc.\n\n`rssi` is signal strength, `name` is name, `mac_address` is mac address. \n`device_class` and `device_type` are bluetooth codes. \n\nThe Home app only lists those devices with `expected_profiles` > 0. Basically, the device should function as a speaker.", "operationId": "GetScanResults", "parameters": [], "responses": { "200": { "description": "", "headers": {}, "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Example112" } }, "example": [ { "device_class": 525372, "device_type": 3, "expected_profiles": 0, "mac_address": "xx:xx:xx:xx:xx:xx", "name": "KD-49X8200E", "rssi": -90 }, { "device_class": 5898764, "device_type": 1, "expected_profiles": 0, "mac_address": "xx:xx:xx:xx:xx:xx", "name": "vivo 1714", "rssi": -96 }, { "device_class": 2491396, "device_type": 1, "expected_profiles": 1, "mac_address": "xx:xx:xx:xx:xx:xx", "name": "Bluetooth Speaker", "rssi": -93 } ] } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "GET", "uri": "/bluetooth/scan_results" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "KEYS", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "256", "Content-Type": "application/json" }, "body": "[\r\n {\r\n \"device_class\": 525372,\r\n \"device_type\": 3,\r\n \"expected_profiles\": 0,\r\n \"mac_address\": \"xx:xx:xx:xx:xx:xx\",\r\n \"name\": \"KD-49X8200E\",\r\n \"rssi\": -90\r\n },\r\n {\r\n \"device_class\": 5898764,\r\n \"device_type\": 1,\r\n \"expected_profiles\": 0,\r\n \"mac_address\": \"xx:xx:xx:xx:xx:xx\",\r\n \"name\": \"vivo 1714\",\r\n \"rssi\": -96\r\n },\r\n {\r\n \"device_class\": 2491396,\r\n \"device_type\": 1,\r\n \"expected_profiles\": 1,\r\n \"mac_address\": \"xx:xx:xx:xx:xx:xx\",\r\n \"name\": \"Bluetooth Speaker\",\r\n \"rssi\": -93\r\n }\r\n]" }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Get Scan Results", "x-testDescription": "*See note for Bluetooth under `/setup/bluetooth/status`*\n\n**For Part 2 only**\n\nThis returns a list of all nearby bluetooth devices. While the Home app only shows speakers, this list contains all devices including TVs, mobiles, etc.\n\n`rssi` is signal strength, `name` is name, `mac_address` is mac address. \n`device_class` and `device_type` are bluetooth codes. \n\nThe Home app only lists those devices with `expected_profiles` > 0. Basically, the device should function as a speaker." } ] } }, "/bluetooth/bond": { "post": { "tags": [ "Bluetooth" ], "summary": "Forget paired device", "description": "*See note for Bluetooth under `/setup/bluetooth/status`*\n\n**For both parts**\n\nThis is to forget paired devices by mac address. Works for both kinds of devices (Part 1 and Part 2).", "operationId": "Forgetpaireddevice", "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ForgetpaireddeviceRequest" }, "example": { "mac_address": "xx:xx:xx:xx:xx:xx", "bond": false } } }, "required": true }, "responses": { "200": { "description": "", "headers": {}, "content": { "text/plain": { "schema": { "type": "object", "x-is-dynamic": true } } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "POST", "uri": "/bluetooth/bond", "headers": { "Content-Type": "application/json" }, "body": "{\r\n \"mac_address\": \"xx:xx:xx:xx:xx:xx\",\r\n \"bond\": false\r\n}" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "NONE", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": {} }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Forget paired device", "x-testDescription": "*See note for Bluetooth under `/setup/bluetooth/status`*\n\n**For both parts**\n\nThis is to forget paired devices by mac address. Works for both kinds of devices (Part 1 and Part 2)." } ] } }, "/bluetooth/discovery": { "post": { "tags": [ "Bluetooth" ], "summary": "Change Discoverability", "description": "*See note for Bluetooth under `/setup/bluetooth/status`*\n\n**For Part 1 only**\n\nThis enables/disables Home's bluetooth discovery and other devices can pair with Home (where Home acts as a speaker).", "operationId": "ChangeDiscoverability", "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ChangeDiscoverabilityRequest" }, "example": { "enable_discovery": true } } }, "required": true }, "responses": { "200": { "description": "", "headers": {}, "content": { "text/plain": { "schema": { "type": "object", "x-is-dynamic": true } } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "POST", "uri": "/bluetooth/discovery", "headers": { "Content-Type": "application/json" }, "body": "{\r\n \"enable_discovery\": true\r\n}" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "NONE", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": {} }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Change Discoverability", "x-testDescription": "*See note for Bluetooth under `/setup/bluetooth/status`*\n\n**For Part 1 only**\n\nThis enables/disables Home's bluetooth discovery and other devices can pair with Home (where Home acts as a speaker)." } ] } }, "/bluetooth/connect": { "post": { "tags": [ "Bluetooth" ], "summary": "Pair with Speaker", "description": "*See note for Bluetooth under `/setup/bluetooth/status`*\n\n**For Part 2 only**\n\nThis pairs with other bluetooth speakers by mac address.", "operationId": "PairwithSpeaker", "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PairwithSpeakerRequest" }, "example": { "mac_address": "54:13:79:49:19:22", "connect": true, "profile": 2 } } }, "required": true }, "responses": { "200": { "description": "", "headers": {}, "content": { "text/plain": { "schema": { "type": "object", "x-is-dynamic": true } } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "POST", "uri": "/bluetooth/connect", "headers": { "Content-Type": "application/json" }, "body": "{\r\n \"mac_address\": \"54:13:79:49:19:22\",\r\n \"connect\": true,\r\n \"profile\": 2\r\n}" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "NONE", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "0" } }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Pair with Speaker", "x-testDescription": "*See note for Bluetooth under `/setup/bluetooth/status`*\n\n**For Part 2 only**\n\nThis pairs with other bluetooth speakers by mac address." } ] } }, "/bluetooth/status": { "get": { "tags": [ "Bluetooth" ], "summary": "Status", "description": "> **There are 2 parts of Bluetooth.**\n>\n> *Part 1*: Devices like phones connect to Home and play audio through Home. \n> For this, /setup/bluetooth/discovery is used to make Home discoverable. Then devices can connect to it as if Home is just another bluetooth speaker.\n>\n> *Part 2*: Bluetooth speakers connect to Home and Home plays audio through the speakers.\n> For this, /setup/bluetooth/scan and /setup/bluetooth/scan_results are used to connect to other speakers.\n>\n> The other endpoints are common for both parts.\n\n\n**For both parts**\n\nThis gives the status of all bluetooth things.\n- Not sure what `audio_mode` is.\n- `discovery_enabled` states whether Home is discoverable. (**Part 1**)\n- `connecting_devices` is a list of all media sources (like phones) connected to Home. (**Part 1**)\n- `scanning_enabled` states whether Home scanning for other bluetooth speakers/devices. (**Part 2**)\n- `connected_devices` is a list of all speakers connected to Home. (**Part 2**)", "operationId": "Status", "parameters": [], "responses": { "200": { "description": "", "headers": {}, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Example110" }, "example": { "audio_mode": 0, "connecting_devices": [], "connected_devices": [ { "device": { "bond_date": 1529248165656.613, "device_class": 2491396, "device_type": 1, "last_connect_date": 0, "mac_address": "xx:xx:xx:xx:xx:xx", "name": "PHILIPS BT64", "rssi": -255, "service_uuids": [ "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" ] }, "enabled_profiles": 2 } ], "remote_sink": { "bond_date": 1529248165656.613, "device_class": 2491396, "device_type": 1, "last_connect_date": 0, "mac_address": "xx:xx:xx:xx:xx:xx", "name": "PHILIPS BT64", "rssi": -255, "service_uuids": [ "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" ] }, "discovery_enabled": false, "scanning_enabled": false } } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "GET", "uri": "/bluetooth/status" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "KEYS", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "114", "Content-Type": "application/json" }, "body": "{\r\n \"audio_mode\": 0,\r\n \"connecting_devices\": [],\r\n \"connected_devices\": [\r\n {\r\n \"device\": {\r\n \"bond_date\": 1529248165656.613,\r\n \"device_class\": 2491396,\r\n \"device_type\": 1,\r\n \"last_connect_date\": 0,\r\n \"mac_address\": \"xx:xx:xx:xx:xx:xx\",\r\n \"name\": \"PHILIPS BT64\",\r\n \"rssi\": -255,\r\n \"service_uuids\": [\r\n \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\r\n \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\r\n \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\r\n \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\r\n \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\r\n \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\r\n ]\r\n },\r\n \"enabled_profiles\": 2\r\n }\r\n ],\r\n \"remote_sink\": {\r\n \"bond_date\": 1529248165656.613,\r\n \"device_class\": 2491396,\r\n \"device_type\": 1,\r\n \"last_connect_date\": 0,\r\n \"mac_address\": \"xx:xx:xx:xx:xx:xx\",\r\n \"name\": \"PHILIPS BT64\",\r\n \"rssi\": -255,\r\n \"service_uuids\": [\r\n \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\r\n \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\r\n \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\r\n \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\r\n \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\r\n \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\r\n ]\r\n },\r\n \"discovery_enabled\": false,\r\n \"scanning_enabled\": false\r\n}" }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Status", "x-testDescription": "> **There are 2 parts of Bluetooth.**\n>\n> *Part 1*: Devices like phones connect to Home and play audio through Home. \n> For this, /setup/bluetooth/discovery is used to make Home discoverable. Then devices can connect to it as if Home is just another bluetooth speaker.\n>\n> *Part 2*: Bluetooth speakers connect to Home and Home plays audio through the speakers.\n> For this, /setup/bluetooth/scan and /setup/bluetooth/scan_results are used to connect to other speakers.\n>\n> The other endpoints are common for both parts.\n\n\n**For both parts**\n\nThis gives the status of all bluetooth things.\n- Not sure what `audio_mode` is.\n- `discovery_enabled` states whether Home is discoverable. (**Part 1**)\n- `connecting_devices` is a list of all media sources (like phones) connected to Home. (**Part 1**)\n- `scanning_enabled` states whether Home scanning for other bluetooth speakers/devices. (**Part 2**)\n- `connected_devices` is a list of all speakers connected to Home. (**Part 2**)" } ] } }, "/bluetooth/scan": { "post": { "tags": [ "Bluetooth" ], "summary": "Scan for devices", "description": "*See note for Bluetooth under `/setup/bluetooth/status`*\n\n**For Part 2 only**\n\nThis initiates scan for other bluetooth speakers/devices. Scan results will be updated continuously for `timeout` seconds. \nTo get the scan results, see /setup/bluetooth/scan_results.", "operationId": "Scanfordevices", "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ScanfordevicesRequest" }, "example": { "enable": true, "clear_results": true, "timeout": 60 } } }, "required": true }, "responses": { "200": { "description": "", "headers": {}, "content": { "text/plain": { "schema": { "type": "object", "x-is-dynamic": true } } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "POST", "uri": "/bluetooth/scan", "headers": { "Content-Type": "application/json" }, "body": "{\r\n \"enable\": true,\r\n \"clear_results\": true,\r\n \"timeout\": 60\r\n}" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "NONE", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "0" } }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Scan for devices", "x-testDescription": "*See note for Bluetooth under `/setup/bluetooth/status`*\n\n**For Part 2 only**\n\nThis initiates scan for other bluetooth speakers/devices. Scan results will be updated continuously for `timeout` seconds. \nTo get the scan results, see /setup/bluetooth/scan_results." } ] } }, "/bluetooth/get_bonded": { "get": { "tags": [ "Bluetooth" ], "summary": "Get Paired Devices", "description": "*See note for Bluetooth under `/setup/bluetooth/status`*\n\n**For both parts**\n\nThis gives a list of all paired or 'bonded' devices. The response field names are self-descriptive.", "operationId": "GetPairedDevices", "parameters": [], "responses": { "200": { "description": "", "headers": {}, "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Example111" } }, "example": [ { "bond_date": 1503212407260.55, "device_class": 5898764, "device_type": 1, "last_connect_date": 1514807829482.1111, "mac_address": "xx:xx:xx:xx:xx:xx", "name": "Device Name", "rssi": -255, "service_uuids": [ "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" ] } ] } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "GET", "uri": "/bluetooth/get_bonded" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "KEYS", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Content-Type", "Cache-Control": "no-cache", "Content-Length": "2", "Content-Type": "application/json" }, "body": "[\r\n {\r\n \"bond_date\": 1503212407260.55,\r\n \"device_class\": 5898764,\r\n \"device_type\": 1,\r\n \"last_connect_date\": 1514807829482.1111,\r\n \"mac_address\": \"xx:xx:xx:xx:xx:xx\",\r\n \"name\": \"Device Name\",\r\n \"rssi\": -255,\r\n \"service_uuids\": [\r\n \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\r\n \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\r\n ]\r\n }\r\n]" }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Get Paired Devices", "x-testDescription": "*See note for Bluetooth under `/setup/bluetooth/status`*\n\n**For both parts**\n\nThis gives a list of all paired or 'bonded' devices. The response field names are self-descriptive." } ] } }, "/connect_wifi": { "post": { "tags": [ "Wifi" ], "summary": "Connect to Wi-Fi Network", "description": "**Note:** Not sure how the password is encrypted. Might be using the public certificate from /setup/eureka_info. So this cannot be used as of now. If someone figures it out, please [create a new issue here](https://github.com/rithvikvibhu/GHLocalApi/issues/new).", "operationId": "ConnecttoWi-FiNetwork", "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConnecttoWi-FiNetworkRequest" }, "example": { "bssid": "5c:0a:xx:xx:xx:xx", "signal_level": -42, "ssid": "myotherssid", "wpa_auth": 7, "wpa_cipher": 4, "enc_passwd": "xxxxxfPY=" } } }, "required": true }, "responses": { "200": { "description": "", "headers": {} } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "POST", "uri": "/connect_wifi", "headers": { "Content-Type": "application/json" }, "body": "{\r\n \"bssid\": \"5c:0a:xx:xx:xx:xx\",\r\n \"signal_level\": -42,\r\n \"ssid\": \"myotherssid\",\r\n \"wpa_auth\": 7,\r\n \"wpa_cipher\": 4,\r\n \"enc_passwd\": \"xxxxxfPY=\"\r\n}" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "NONE", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": {} }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Connect to Wi-Fi Network", "x-testDescription": "**Note:** Not sure how the password is encrypted. Might be using the public certificate from /setup/eureka_info. So this cannot be used as of now. If someone figures it out, please [create a new issue here](https://github.com/rithvikvibhu/GHLocalApi/issues/new)." } ] } }, "/scan_wifi": { "post": { "tags": [ "Wifi" ], "summary": "Scan for Networks", "description": "This initiates scanning for Wi-Fi networks.\n\nThe results can be obtained with `/setup/scan_results` after triggering the scan with this request.", "operationId": "ScanforNetworks", "parameters": [], "responses": { "200": { "description": "", "headers": {}, "content": { "text/plain": { "schema": { "type": "object", "x-is-dynamic": true } } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "POST", "uri": "/scan_wifi" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "NONE", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": {} }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Scan for Networks", "x-testDescription": "This initiates scanning for Wi-Fi networks.\n\nThe results can be obtained with `/setup/scan_results` after triggering the scan with this request." } ] } }, "/configured_networks": { "get": { "tags": [ "Wifi" ], "summary": "Get Saved Networks", "description": "This gets a list of all saved Wi-Fi networks.\n\nEach network has `ssid`, `wpa_auth`, `wpa_cipher` and `wpa_id`. \n`wpa_id` is an incrementing number used to identify a saved network. \n#TODO: Add values for `wpa_auth` and `wpa_cipher`.", "operationId": "GetSavedNetworks", "parameters": [], "responses": { "200": { "description": "", "headers": {}, "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Example113" } }, "example": [ { "ssid": "Wifi name", "wpa_auth": 7, "wpa_cipher": 4, "wpa_id": 0 } ] } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "GET", "uri": "/configured_networks" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "KEYS", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": {}, "body": "[\r\n {\r\n \"ssid\": \"Wifi name\",\r\n \"wpa_auth\": 7,\r\n \"wpa_cipher\": 4,\r\n \"wpa_id\": 0\r\n }\r\n]" }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Get Saved Networks", "x-testDescription": "This gets a list of all saved Wi-Fi networks.\n\nEach network has `ssid`, `wpa_auth`, `wpa_cipher` and `wpa_id`. \n`wpa_id` is an incrementing number used to identify a saved network. \n#TODO: Add values for `wpa_auth` and `wpa_cipher`." } ] } }, "/forget_wifi": { "post": { "tags": [ "Wifi" ], "summary": "Forget Wi-Fi Network", "description": "This is to forget a saved network by `wpa_id`. Get the `wpa_id` from /setup/configured_networks", "operationId": "ForgetWi-FiNetwork", "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ForgetWi-FiNetworkRequest" }, "example": { "wpa_id": 0 } } }, "required": true }, "responses": { "200": { "description": "", "headers": {}, "content": { "text/plain": { "schema": { "type": "object", "x-is-dynamic": true } } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "POST", "uri": "/forget_wifi", "headers": { "Content-Type": "application/json" }, "body": "{\r\n \"wpa_id\": 0\r\n}" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "NONE", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": {} }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Forget Wi-Fi Network", "x-testDescription": "This is to forget a saved network by `wpa_id`. Get the `wpa_id` from /setup/configured_networks" } ] } }, "/scan_results": { "get": { "tags": [ "Wifi" ], "summary": "Get Wi-Fi Scan Results", "description": "This gets a list of all nearby Wi-Fi access points.\n\nThe list only has the connected AP by default. Once a scan is triggered by `/setup/scan_wifi`, the whole list is cached for ~3 minutes. Then it will revert to returning only the connected AP again.", "operationId": "GetWi-FiScanResults", "parameters": [], "responses": { "200": { "description": "", "headers": {}, "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Example114" } }, "example": [ { "bssid": "APBSSID1", "signal_level": -20, "ssid": "APSSID1", "wpa_auth": 7, "wpa_cipher": 4, "wpa_id": 0 } ] } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "GET", "uri": "/scan_results" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "KEYS", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": {}, "body": "[\r\n {\r\n \"bssid\": \"APBSSID1\",\r\n \"signal_level\": -20,\r\n \"ssid\": \"APSSID1\",\r\n \"wpa_auth\": 7,\r\n \"wpa_cipher\": 4,\r\n \"wpa_id\": 0\r\n }\r\n]" }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Get Wi-Fi Scan Results", "x-testDescription": "This gets a list of all nearby Wi-Fi access points.\n\nThe list only has the connected AP by default. Once a scan is triggered by `/setup/scan_wifi`, the whole list is cached for ~3 minutes. Then it will revert to returning only the connected AP again." } ] } }, "/NOTICE.html.gz": { "get": { "tags": [ "Static Files" ], "summary": "Legal Notice", "description": "All licenses of programs used by Home.", "operationId": "LegalNotice", "parameters": [], "responses": { "200": { "description": "", "headers": {}, "content": { "text/plain": { "schema": { "type": "string", "example": "" }, "example": "" } } } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "GET", "uri": "/NOTICE.html.gz" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "RAW", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": { "Access-Control-Allow-Headers": "Range", "Access-Control-Allow-Methods": "GET, OPTIONS", "Content-Encoding": "gzip", "Content-Length": "131302", "Content-Type": "text/html" }, "body": "" }, "x-testShouldPass": true, "x-testEnabled": false, "x-testName": "Legal Notice", "x-testDescription": "All licenses of programs used by Home." } ] } }, "/icon.png": { "get": { "tags": [ "Static Files" ], "summary": "Chromecast Icon", "description": "**Update:** This no longer exists. It's not useful, anyway.\n\nA redirect to `http://www.gstatic.com/eureka/images/eureka_device.png`", "operationId": "ChromecastIcon", "parameters": [], "responses": { "200": { "description": "", "headers": {} } }, "deprecated": false, "x-operation-settings": { "CollectParameters": false, "AllowDynamicQueryParameters": false, "AllowDynamicFormParameters": false, "IsMultiContentStreaming": false }, "x-unitTests": [ { "request": { "method": "GET", "uri": "/icon.png" }, "expectedResponse": { "x-allowExtraHeaders": true, "x-bodyMatchMode": "NONE", "x-arrayOrderedMatching": false, "x-arrayCheckCount": false, "x-matchResponseSchema": true, "statusCode": "200", "headers": {} }, "x-testShouldPass": true, "x-testEnabled": true, "x-testName": "Chromecast Icon", "x-testDescription": "**Update:** This no longer exists. It's not useful, anyway.\n\nA redirect to `http://www.gstatic.com/eureka/images/eureka_device.png`" } ] } } }, "components": { "schemas": { "Setup": { "title": "Setup", "required": [ "qr_ssid_suffix", "setup_state", "ssid_suffix", "stats", "tos_accepted" ], "type": "object", "properties": { "qr_ssid_suffix": { "type": "string" }, "setup_state": { "type": "integer", "format": "int32" }, "ssid_suffix": { "type": "string" }, "stats": { "$ref": "#/components/schemas/Stats" }, "tos_accepted": { "type": "boolean" } }, "example": { "qr_ssid_suffix": "", "setup_state": 60, "ssid_suffix": "k", "stats": { "num_check_connectivity": 0, "num_connect_wifi": 0, "num_connected_wifi_not_saved": 0, "num_initial_eureka_info": 0, "num_obtain_ip": 0 }, "tos_accepted": true } }, "IconList": { "title": "IconList", "required": [ "depth", "height", "mimetype", "url", "width" ], "type": "object", "properties": { "depth": { "type": "integer", "format": "int32" }, "height": { "type": "integer", "format": "int32" }, "mimetype": { "type": "string" }, "url": { "type": "string" }, "width": { "type": "integer", "format": "int32" } }, "example": { "depth": 32, "height": 55, "mimetype": "image/png", "url": "/setup/icon.png", "width": 98 } }, "Stats": { "title": "Stats", "required": [ "num_check_connectivity", "num_connect_wifi", "num_connected_wifi_not_saved", "num_initial_eureka_info", "num_obtain_ip" ], "type": "object", "properties": { "num_check_connectivity": { "type": "integer", "format": "int32" }, "num_connect_wifi": { "type": "integer", "format": "int32" }, "num_connected_wifi_not_saved": { "type": "integer", "format": "int32" }, "num_initial_eureka_info": { "type": "integer", "format": "int32" }, "num_obtain_ip": { "type": "integer", "format": "int32" } }, "example": { "num_check_connectivity": 0, "num_connect_wifi": 0, "num_connected_wifi_not_saved": 0, "num_initial_eureka_info": 0, "num_obtain_ip": 0 } }, "LowShelf": { "title": "LowShelf", "required": [ "frequency", "gain_db", "quality" ], "type": "object", "properties": { "frequency": { "type": "integer", "format": "int32" }, "gain_db": { "type": "integer", "format": "int32" }, "quality": { "type": "number" } }, "example": { "frequency": 150, "gain_db": 0, "quality": 0.707 } }, "Capabilities": { "title": "Capabilities", "required": [ "aogh_supported", "assistant_supported", "audio_hdr_supported", "audio_surround_mode_supported", "ble_supported", "bluetooth_audio_sink_supported", "bluetooth_audio_source_supported", "bluetooth_supported", "cloudcast_supported", "content_filters_supported", "display_supported", "fdr_supported", "hdmi_prefer_50hz_supported", "hdmi_prefer_high_fps_supported", "hotspot_supported", "https_setup_supported", "input_management_supported", "keep_hotspot_until_connected_supported", "multi_user_supported", "multichannel_group_supported", "multizone_supported", "night_mode_supported", "night_mode_supported_v2", "opencast_supported", "preview_channel_supported", "reboot_supported", "remote_ducking_supported", "separate_tts_volume_supported", "setup_supported", "sleep_mode_supported", "stats_supported", "system_sound_effects_supported", "user_eq_supported", "wifi_auto_save_supported", "wifi_regulatory_domain_locked", "wifi_supported" ], "type": "object", "properties": { "aogh_supported": { "type": "boolean" }, "assistant_supported": { "type": "boolean" }, "audio_hdr_supported": { "type": "boolean" }, "audio_surround_mode_supported": { "type": "boolean" }, "ble_supported": { "type": "boolean" }, "bluetooth_audio_sink_supported": { "type": "boolean" }, "bluetooth_audio_source_supported": { "type": "boolean" }, "bluetooth_supported": { "type": "boolean" }, "cloudcast_supported": { "type": "boolean" }, "content_filters_supported": { "type": "boolean" }, "display_supported": { "type": "boolean" }, "fdr_supported": { "type": "boolean" }, "hdmi_prefer_50hz_supported": { "type": "boolean" }, "hdmi_prefer_high_fps_supported": { "type": "boolean" }, "hotspot_supported": { "type": "boolean" }, "https_setup_supported": { "type": "boolean" }, "input_management_supported": { "type": "boolean" }, "keep_hotspot_until_connected_supported": { "type": "boolean" }, "multi_user_supported": { "type": "boolean" }, "multichannel_group_supported": { "type": "boolean" }, "multizone_supported": { "type": "boolean" }, "night_mode_supported": { "type": "boolean" }, "night_mode_supported_v2": { "type": "boolean" }, "opencast_supported": { "type": "boolean" }, "preview_channel_supported": { "type": "boolean" }, "reboot_supported": { "type": "boolean" }, "remote_ducking_supported": { "type": "boolean" }, "separate_tts_volume_supported": { "type": "boolean" }, "setup_supported": { "type": "boolean" }, "sleep_mode_supported": { "type": "boolean" }, "stats_supported": { "type": "boolean" }, "system_sound_effects_supported": { "type": "boolean" }, "user_eq_supported": { "type": "boolean" }, "wifi_auto_save_supported": { "type": "boolean" }, "wifi_regulatory_domain_locked": { "type": "boolean" }, "wifi_supported": { "type": "boolean" } }, "example": { "aogh_supported": true, "assistant_supported": true, "audio_hdr_supported": false, "audio_surround_mode_supported": false, "ble_supported": true, "bluetooth_audio_sink_supported": true, "bluetooth_audio_source_supported": true, "bluetooth_supported": true, "cloudcast_supported": true, "content_filters_supported": true, "display_supported": false, "fdr_supported": false, "hdmi_prefer_50hz_supported": false, "hdmi_prefer_high_fps_supported": false, "hotspot_supported": true, "https_setup_supported": true, "input_management_supported": true, "keep_hotspot_until_connected_supported": true, "multi_user_supported": true, "multichannel_group_supported": true, "multizone_supported": true, "night_mode_supported": true, "night_mode_supported_v2": true, "opencast_supported": false, "preview_channel_supported": true, "reboot_supported": true, "remote_ducking_supported": true, "separate_tts_volume_supported": true, "setup_supported": true, "sleep_mode_supported": true, "stats_supported": true, "system_sound_effects_supported": false, "user_eq_supported": true, "wifi_auto_save_supported": true, "wifi_regulatory_domain_locked": true, "wifi_supported": true } }, "TimePattern": { "title": "TimePattern", "required": [ "hour", "minute", "second" ], "type": "object", "properties": { "hour": { "type": "integer", "format": "int32" }, "minute": { "type": "integer", "format": "int32" }, "second": { "type": "integer", "format": "int32" } }, "example": { "hour": 6, "minute": 50, "second": 0 } }, "SetEurekaInfoRequest": { "title": "SetEurekaInfoRequest", "required": [ "name", "settings", "opt_in" ], "type": "object", "properties": { "name": { "type": "string" }, "settings": { "$ref": "#/components/schemas/Settings1" }, "opt_in": { "$ref": "#/components/schemas/OptIn1" } }, "example": { "name": "Living Room", "settings": { "control_notifications": 2 }, "opt_in": { "opencast": true, "preview_channel": true, "remote_ducking": true, "stats": true } } }, "NightModesettingsRequest": { "title": "NightModesettingsRequest", "required": [ "enabled", "do_not_disturb", "led_brightness", "volume", "demo_to_user", "windows" ], "type": "object", "properties": { "enabled": { "type": "boolean" }, "do_not_disturb": { "type": "boolean" }, "led_brightness": { "type": "number" }, "volume": { "type": "number" }, "demo_to_user": { "type": "boolean" }, "windows": { "type": "array", "items": { "$ref": "#/components/schemas/Window" } } }, "example": { "enabled": false, "do_not_disturb": true, "led_brightness": 0.44999998807907104, "volume": 0.46000000834465027, "demo_to_user": true, "windows": [ { "length_hours": 8, "days": [ 0, 1, 2, 3, 4, 5, 6 ], "start_hour": 22 } ] } }, "Getvolume": { "title": "Getvolume", "required": [ "volume" ], "type": "object", "properties": { "volume": { "type": "number" } }, "example": { "volume": 1.0 } }, "Timezone": { "title": "Timezone", "required": [ "display_string", "offset" ], "type": "object", "properties": { "display_string": { "type": "string" }, "offset": { "type": "integer", "format": "int32" } }, "example": { "display_string": "India Standard Time (Kolkata)", "offset": 330 } }, "NightModeParams": { "title": "NightModeParams", "required": [ "device_override_do_not_disturb", "do_not_disturb", "enabled", "led_brightness", "volume", "windows" ], "type": "object", "properties": { "device_override_do_not_disturb": { "type": "integer", "format": "int32" }, "do_not_disturb": { "type": "boolean" }, "enabled": { "type": "boolean" }, "led_brightness": { "type": "number" }, "volume": { "type": "number" }, "windows": { "type": "array", "items": { "$ref": "#/components/schemas/Window" } } }, "example": { "device_override_do_not_disturb": 0, "do_not_disturb": true, "enabled": true, "led_brightness": 0.57999998331069946, "volume": 0.5899999737739563, "windows": [ { "days": [ 0, 1, 2, 3, 4, 5, 6 ], "length_hours": 6, "start_hour": 23 } ] } }, "ConnectedDevice": { "title": "ConnectedDevice", "required": [ "device", "enabled_profiles" ], "type": "object", "properties": { "device": { "$ref": "#/components/schemas/Device" }, "enabled_profiles": { "type": "integer", "format": "int32" } }, "example": { "device": { "bond_date": 1529248165656.613, "device_class": 2491396, "device_type": 1, "last_connect_date": 0, "mac_address": "xx:xx:xx:xx:xx:xx", "name": "PHILIPS BT64", "rssi": -255, "service_uuids": [ "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" ] }, "enabled_profiles": 2 } }, "Example110": { "title": "Example110", "required": [ "audio_mode", "connecting_devices", "connected_devices", "remote_sink", "discovery_enabled", "scanning_enabled" ], "type": "object", "properties": { "audio_mode": { "type": "integer", "format": "int32" }, "connecting_devices": { "type": "array", "items": { "type": "string" } }, "connected_devices": { "type": "array", "items": { "$ref": "#/components/schemas/ConnectedDevice" } }, "remote_sink": { "$ref": "#/components/schemas/RemoteSink" }, "discovery_enabled": { "type": "boolean" }, "scanning_enabled": { "type": "boolean" } }, "example": { "audio_mode": 0, "connecting_devices": [], "connected_devices": [ { "device": { "bond_date": 1529248165656.613, "device_class": 2491396, "device_type": 1, "last_connect_date": 0, "mac_address": "xx:xx:xx:xx:xx:xx", "name": "PHILIPS BT64", "rssi": -255, "service_uuids": [ "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" ] }, "enabled_profiles": 2 } ], "remote_sink": { "bond_date": 1529248165656.613, "device_class": 2491396, "device_type": 1, "last_connect_date": 0, "mac_address": "xx:xx:xx:xx:xx:xx", "name": "PHILIPS BT64", "rssi": -255, "service_uuids": [ "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" ] }, "discovery_enabled": false, "scanning_enabled": false } }, "Sign": { "title": "Sign", "required": [ "certificate", "intermediate_certs", "nonce", "signed_data" ], "type": "object", "properties": { "certificate": { "type": "string" }, "intermediate_certs": { "type": "array", "items": { "type": "string" } }, "nonce": { "type": "string" }, "signed_data": { "type": "string" } }, "example": { "certificate": "-----BEGIN CERTIFICATE-----\nMIID...Oeb0\n-----END CERTIFICATE-----\n", "intermediate_certs": [ "-----BEGIN CERTIFICATE-----\nMIID...O/bYS\n-----END CERTIFICATE-----\n" ], "nonce": "1234512345", "signed_data": "Rr5Q..." } }, "Example14": { "title": "Example14", "required": [ "display_string", "offset", "timezone" ], "type": "object", "properties": { "display_string": { "type": "string" }, "offset": { "type": "integer", "format": "int32" }, "timezone": { "type": "string" } }, "example": { "display_string": "Samoa Standard Time (Midway)", "offset": -660, "timezone": "Pacific/Midway" } }, "Example16": { "title": "Example16", "required": [ "bytes_received", "response_code", "time_for_data_fetch", "time_for_http_response" ], "type": "object", "properties": { "bytes_received": { "type": "integer", "format": "int32" }, "response_code": { "type": "integer", "format": "int32" }, "time_for_data_fetch": { "type": "integer", "format": "int32" }, "time_for_http_response": { "type": "integer", "format": "int32" } }, "example": { "bytes_received": 31457280, "response_code": 200, "time_for_data_fetch": 4722, "time_for_http_response": 316 } }, "AccessibilityRequest": { "title": "AccessibilityRequest", "required": [ "hotword_enabled", "endpoint_enabled" ], "type": "object", "properties": { "hotword_enabled": { "type": "boolean" }, "endpoint_enabled": { "type": "boolean" } }, "example": { "hotword_enabled": false, "endpoint_enabled": false } }, "DeviceInfo": { "title": "DeviceInfo", "required": [ "4k_blocked", "capabilities", "cloud_device_id", "factory_country_code", "hotspot_bssid", "local_authorization_token_hash", "mac_address", "manufacturer", "model_name", "product_name", "public_key", "ssdp_udn", "uma_client_id", "uptime", "weave_device_id" ], "type": "object", "properties": { "4k_blocked": { "type": "integer", "format": "int32" }, "capabilities": { "$ref": "#/components/schemas/Capabilities" }, "cloud_device_id": { "type": "string" }, "factory_country_code": { "type": "string" }, "hotspot_bssid": { "type": "string" }, "local_authorization_token_hash": { "type": "string" }, "mac_address": { "type": "string" }, "manufacturer": { "type": "string" }, "model_name": { "type": "string" }, "product_name": { "type": "string" }, "public_key": { "type": "string" }, "ssdp_udn": { "type": "string" }, "uma_client_id": { "type": "string" }, "uptime": { "type": "number" }, "weave_device_id": { "type": "string" } }, "example": { "4k_blocked": 0, "capabilities": { "aogh_supported": true, "assistant_supported": true, "audio_hdr_supported": false, "audio_surround_mode_supported": false, "ble_supported": true, "bluetooth_audio_sink_supported": true, "bluetooth_audio_source_supported": true, "bluetooth_supported": true, "cloudcast_supported": true, "content_filters_supported": true, "display_supported": false, "fdr_supported": false, "hdmi_prefer_50hz_supported": false, "hdmi_prefer_high_fps_supported": false, "hotspot_supported": true, "https_setup_supported": true, "input_management_supported": true, "keep_hotspot_until_connected_supported": true, "multi_user_supported": true, "multichannel_group_supported": true, "multizone_supported": true, "night_mode_supported": true, "night_mode_supported_v2": true, "opencast_supported": false, "preview_channel_supported": true, "reboot_supported": true, "remote_ducking_supported": true, "separate_tts_volume_supported": true, "setup_supported": true, "sleep_mode_supported": true, "stats_supported": true, "system_sound_effects_supported": false, "user_eq_supported": true, "wifi_auto_save_supported": true, "wifi_regulatory_domain_locked": true, "wifi_supported": true }, "cloud_device_id": "003D...", "factory_country_code": "US", "hotspot_bssid": "FA:8F:CA:30:41:71", "local_authorization_token_hash": "hBt2...", "mac_address": "F4:F5:...", "manufacturer": "Google Inc.", "model_name": "Google Home", "product_name": "pineapple", "public_key": "MIIB...", "ssdp_udn": "baab...", "uma_client_id": "8ce0...", "uptime": 48509.169282, "weave_device_id": "" } }, "Net": { "title": "Net", "required": [ "ethernet_connected", "ip_address", "online" ], "type": "object", "properties": { "ethernet_connected": { "type": "boolean" }, "ip_address": { "type": "string" }, "online": { "type": "boolean" } }, "example": { "ethernet_connected": false, "ip_address": "192.168.0.18", "online": true } }, "Example12": { "title": "Example12", "required": [ "token" ], "type": "object", "properties": { "token": { "type": "string" } }, "example": { "token": "ADtq..." } }, "CheckReadyStatusRequest": { "title": "CheckReadyStatusRequest", "required": [ "play_ready_message", "user_id" ], "type": "object", "properties": { "play_ready_message": { "type": "boolean" }, "user_id": { "type": "string" } }, "example": { "play_ready_message": true, "user_id": "xxxxx" } }, "Example13": { "title": "Example13", "required": [ "can_enroll", "enrollment_state", "error_code", "ready", "retryable" ], "type": "object", "properties": { "can_enroll": { "type": "boolean" }, "enrollment_state": { "type": "integer", "format": "int32" }, "error_code": { "type": "integer", "format": "int32" }, "ready": { "type": "boolean" }, "retryable": { "type": "boolean" } }, "example": { "can_enroll": true, "enrollment_state": 0, "error_code": 0, "ready": false, "retryable": true } }, "TestInternetDownloadSpeedRequest": { "title": "TestInternetDownloadSpeedRequest", "required": [ "url" ], "type": "object", "properties": { "url": { "type": "string" } }, "example": { "url": "https://storage.googleapis.com/reliability-speedtest/random.txt" } }, "Settings1": { "title": "Settings1", "required": [ "control_notifications" ], "type": "object", "properties": { "control_notifications": { "type": "integer", "format": "int32" } }, "example": { "control_notifications": 2 } }, "Example17": { "title": "Example17", "required": [ "do_not_disturb", "enabled", "led_brightness", "volume", "windows" ], "type": "object", "properties": { "do_not_disturb": { "type": "boolean" }, "enabled": { "type": "boolean" }, "led_brightness": { "type": "number" }, "volume": { "type": "number" }, "windows": { "type": "array", "items": { "$ref": "#/components/schemas/Window2" } } }, "example": { "do_not_disturb": true, "enabled": false, "led_brightness": 0.44999998807907104, "volume": 0.46000000834465027, "windows": [ { "days": [ 0, 1, 2, 3, 4, 5, 6 ], "length_hours": 8.0, "start_hour": 22.0 } ] } }, "Getcurrentstate": { "title": "Getcurrentstate", "required": [ "notifications_enabled" ], "type": "object", "properties": { "notifications_enabled": { "type": "boolean" } }, "example": { "notifications_enabled": true } }, "HighShelf1": { "title": "HighShelf1", "required": [ "gain_db" ], "type": "object", "properties": { "gain_db": { "type": "integer", "format": "int32" } }, "example": { "gain_db": 0 } }, "ScanfordevicesRequest": { "title": "ScanfordevicesRequest", "required": [ "enable", "clear_results", "timeout" ], "type": "object", "properties": { "enable": { "type": "boolean" }, "clear_results": { "type": "boolean" }, "timeout": { "type": "integer", "format": "int32" } }, "example": { "enable": true, "clear_results": true, "timeout": 60 } }, "Audio": { "title": "Audio", "required": [ "digital" ], "type": "object", "properties": { "digital": { "type": "boolean" } }, "example": { "digital": false } }, "Settings": { "title": "Settings", "required": [ "closed_caption", "control_notifications", "country_code", "locale", "network_standby", "system_sound_effects", "time_format", "timezone", "wake_on_cast" ], "type": "object", "properties": { "closed_caption": { "type": "object" }, "control_notifications": { "type": "integer", "format": "int32" }, "country_code": { "type": "string" }, "locale": { "type": "string" }, "network_standby": { "type": "integer", "format": "int32" }, "system_sound_effects": { "type": "boolean" }, "time_format": { "type": "integer", "format": "int32" }, "timezone": { "type": "string" }, "wake_on_cast": { "type": "integer", "format": "int32" } }, "example": { "closed_caption": {}, "control_notifications": 1, "country_code": "IN", "locale": "en-US", "network_standby": 0, "system_sound_effects": true, "time_format": 1, "timezone": "Asia/Kolkata", "wake_on_cast": 1 } }, "Example19": { "title": "Example19", "required": [ "success" ], "type": "object", "properties": { "success": { "type": "boolean" } }, "example": { "success": true } }, "RemoteSink": { "title": "RemoteSink", "required": [ "bond_date", "device_class", "device_type", "last_connect_date", "mac_address", "name", "rssi", "service_uuids" ], "type": "object", "properties": { "bond_date": { "type": "number" }, "device_class": { "type": "integer", "format": "int32" }, "device_type": { "type": "integer", "format": "int32" }, "last_connect_date": { "type": "integer", "format": "int32" }, "mac_address": { "type": "string" }, "name": { "type": "string" }, "rssi": { "type": "integer", "format": "int32" }, "service_uuids": { "type": "array", "items": { "type": "string" } } }, "example": { "bond_date": 1529248165656.613, "device_class": 2491396, "device_type": 1, "last_connect_date": 0, "mac_address": "xx:xx:xx:xx:xx:xx", "name": "PHILIPS BT64", "rssi": -255, "service_uuids": [ "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" ] } }, "UserEq": { "title": "UserEq", "required": [ "high_shelf", "low_shelf", "max_peaking_eqs", "peaking_eqs" ], "type": "object", "properties": { "high_shelf": { "$ref": "#/components/schemas/HighShelf" }, "low_shelf": { "$ref": "#/components/schemas/LowShelf" }, "max_peaking_eqs": { "type": "integer", "format": "int32" }, "peaking_eqs": { "type": "array", "items": { "type": "string" } } }, "example": { "high_shelf": { "frequency": 4500, "gain_db": 0, "quality": 0.707 }, "low_shelf": { "frequency": 150, "gain_db": 0, "quality": 0.707 }, "max_peaking_eqs": 0, "peaking_eqs": [] } }, "Detail": { "title": "Detail", "required": [ "icon_list", "locale", "timezone" ], "type": "object", "properties": { "icon_list": { "type": "array", "items": { "$ref": "#/components/schemas/IconList" } }, "locale": { "$ref": "#/components/schemas/Locale" }, "timezone": { "$ref": "#/components/schemas/Timezone" } }, "example": { "icon_list": [ { "depth": 32, "height": 55, "mimetype": "image/png", "url": "/setup/icon.png", "width": 98 } ], "locale": { "display_string": "English (United States)" }, "timezone": { "display_string": "India Standard Time (Kolkata)", "offset": 330 } } }, "Example11": { "title": "Example11", "required": [ "app_device_id", "certificate", "signed_data" ], "type": "object", "properties": { "app_device_id": { "type": "string" }, "certificate": { "type": "string" }, "signed_data": { "type": "string" } }, "example": { "app_device_id": "...", "certificate": "-----BEGIN CERTIFICATE-----\nMIID...Oeb0\n-----END CERTIFICATE-----\n", "signed_data": "HAjp..." } }, "Window2": { "title": "Window2", "required": [ "days", "length_hours", "start_hour" ], "type": "object", "properties": { "days": { "type": "array", "items": { "type": "integer", "format": "int32" } }, "length_hours": { "type": "number" }, "start_hour": { "type": "number" } }, "example": { "days": [ 0, 1, 2, 3, 4, 5, 6 ], "length_hours": 8.0, "start_hour": 22.0 } }, "DatePattern": { "title": "DatePattern", "required": [ "day", "month", "year" ], "type": "object", "properties": { "day": { "type": "integer", "format": "int32" }, "month": { "type": "integer", "format": "int32" }, "year": { "type": "integer", "format": "int32" } }, "example": { "day": 15, "month": 1, "year": 2018 } }, "Timer": { "title": "Timer", "required": [ "fire_time", "id", "original_duration", "status" ], "type": "object", "properties": { "fire_time": { "type": "integer", "format": "int64" }, "id": { "type": "string" }, "original_duration": { "type": "integer", "format": "int32" }, "status": { "type": "integer", "format": "int32" } }, "example": { "fire_time": 1516176765589, "id": "timer/xxx", "original_duration": 20000, "status": 1 } }, "Device": { "title": "Device", "required": [ "bond_date", "device_class", "device_type", "last_connect_date", "mac_address", "name", "rssi", "service_uuids" ], "type": "object", "properties": { "bond_date": { "type": "number" }, "device_class": { "type": "integer", "format": "int32" }, "device_type": { "type": "integer", "format": "int32" }, "last_connect_date": { "type": "integer", "format": "int32" }, "mac_address": { "type": "string" }, "name": { "type": "string" }, "rssi": { "type": "integer", "format": "int32" }, "service_uuids": { "type": "array", "items": { "type": "string" } } }, "example": { "bond_date": 1529248165656.613, "device_class": 2491396, "device_type": 1, "last_connect_date": 0, "mac_address": "xx:xx:xx:xx:xx:xx", "name": "PHILIPS BT64", "rssi": -255, "service_uuids": [ "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" ] } }, "Aogh": { "title": "Aogh", "required": [ "aogh_api_version" ], "type": "object", "properties": { "aogh_api_version": { "type": "string" } }, "example": { "aogh_api_version": "2" } }, "OptIn": { "title": "OptIn", "required": [ "audio_hdr", "audio_surround_mode", "autoplay_on_signal", "cloud_ipc", "hdmi_prefer_50hz", "hdmi_prefer_high_fps", "managed_mode", "opencast", "preview_channel", "remote_ducking", "stats", "ui_flipped", "wpa3_support_enabled" ], "type": "object", "properties": { "audio_hdr": { "type": "boolean" }, "audio_surround_mode": { "type": "integer", "format": "int32" }, "autoplay_on_signal": { "type": "boolean" }, "cloud_ipc": { "type": "boolean" }, "hdmi_prefer_50hz": { "type": "boolean" }, "hdmi_prefer_high_fps": { "type": "boolean" }, "managed_mode": { "type": "boolean" }, "opencast": { "type": "boolean" }, "preview_channel": { "type": "boolean" }, "remote_ducking": { "type": "boolean" }, "stats": { "type": "boolean" }, "ui_flipped": { "type": "boolean" }, "wpa3_support_enabled": { "type": "boolean" } }, "example": { "audio_hdr": false, "audio_surround_mode": 0, "autoplay_on_signal": true, "cloud_ipc": true, "hdmi_prefer_50hz": false, "hdmi_prefer_high_fps": true, "managed_mode": false, "opencast": true, "preview_channel": true, "remote_ducking": true, "stats": true, "ui_flipped": false, "wpa3_support_enabled": false } }, "RebootandFactoryResetRequest": { "title": "RebootandFactoryResetRequest", "required": [ "params" ], "type": "object", "properties": { "params": { "type": "string" } }, "example": { "params": "now" } }, "ChangeDiscoverabilityRequest": { "title": "ChangeDiscoverabilityRequest", "required": [ "enable_discovery" ], "type": "object", "properties": { "enable_discovery": { "type": "boolean" } }, "example": { "enable_discovery": true } }, "Window": { "title": "Window", "required": [ "days", "length_hours", "start_hour" ], "type": "object", "properties": { "days": { "type": "array", "items": { "type": "integer", "format": "int32" } }, "length_hours": { "type": "integer", "format": "int32" }, "start_hour": { "type": "integer", "format": "int32" } }, "example": { "days": [ 0, 1, 2, 3, 4, 5, 6 ], "length_hours": 6, "start_hour": 23 } }, "Multizone": { "title": "Multizone", "required": [ "audio_output_delay", "audio_output_delay_hdmi", "audio_output_delay_oem", "aux_in_group", "dynamic_groups", "groups", "multichannel_status" ], "type": "object", "properties": { "audio_output_delay": { "type": "integer", "format": "int32" }, "audio_output_delay_hdmi": { "type": "integer", "format": "int32" }, "audio_output_delay_oem": { "type": "integer", "format": "int32" }, "aux_in_group": { "type": "string" }, "dynamic_groups": { "type": "array", "items": { "type": "string" } }, "groups": { "type": "array", "items": { "type": "string" } }, "multichannel_status": { "type": "integer", "format": "int32" } }, "example": { "audio_output_delay": 0, "audio_output_delay_hdmi": 0, "audio_output_delay_oem": 0, "aux_in_group": "", "dynamic_groups": [], "groups": [], "multichannel_status": 0 } }, "BuildInfo": { "title": "BuildInfo", "required": [ "build_type", "cast_build_revision", "cast_control_version", "preview_channel_state", "release_track", "system_build_number" ], "type": "object", "properties": { "build_type": { "type": "integer", "format": "int32" }, "cast_build_revision": { "type": "string" }, "cast_control_version": { "type": "integer", "format": "int32" }, "preview_channel_state": { "type": "integer", "format": "int32" }, "release_track": { "type": "string" }, "system_build_number": { "type": "string" } }, "example": { "build_type": 2, "cast_build_revision": "1.46.195690", "cast_control_version": 1, "preview_channel_state": 4, "release_track": "preview-joining-stable-channel", "system_build_number": "195690" } }, "AppDeviceIDRequest": { "title": "AppDeviceIDRequest", "required": [ "app_id" ], "type": "object", "properties": { "app_id": { "type": "string" } }, "example": { "app_id": "E8C28D3C" } }, "Getcurrentvalues": { "title": "Getcurrentvalues", "required": [ "endpoint_enabled", "hotword_enabled" ], "type": "object", "properties": { "endpoint_enabled": { "type": "boolean" }, "hotword_enabled": { "type": "boolean" } }, "example": { "endpoint_enabled": false, "hotword_enabled": false } }, "Opencast": { "title": "Opencast", "required": [ "pin_code" ], "type": "object", "properties": { "pin_code": { "type": "string" } }, "example": { "pin_code": "" } }, "Proxy": { "title": "Proxy", "required": [ "mode" ], "type": "object", "properties": { "mode": { "type": "string" } }, "example": { "mode": "system" } }, "HighShelf": { "title": "HighShelf", "required": [ "frequency", "gain_db", "quality" ], "type": "object", "properties": { "frequency": { "type": "integer", "format": "int32" }, "gain_db": { "type": "integer", "format": "int32" }, "quality": { "type": "number" } }, "example": { "frequency": 4500, "gain_db": 0, "quality": 0.707 } }, "OptIn1": { "title": "OptIn1", "required": [ "opencast", "preview_channel", "remote_ducking", "stats" ], "type": "object", "properties": { "opencast": { "type": "boolean" }, "preview_channel": { "type": "boolean" }, "remote_ducking": { "type": "boolean" }, "stats": { "type": "boolean" } }, "example": { "opencast": true, "preview_channel": true, "remote_ducking": true, "stats": true } }, "ForgetpaireddeviceRequest": { "title": "ForgetpaireddeviceRequest", "required": [ "mac_address", "bond" ], "type": "object", "properties": { "mac_address": { "type": "string" }, "bond": { "type": "boolean" } }, "example": { "mac_address": "xx:xx:xx:xx:xx:xx", "bond": false } }, "SetEqualizerValuesRequest": { "title": "SetEqualizerValuesRequest", "required": [ "low_shelf", "high_shelf" ], "type": "object", "properties": { "low_shelf": { "$ref": "#/components/schemas/LowShelf1" }, "high_shelf": { "$ref": "#/components/schemas/HighShelf1" } }, "example": { "low_shelf": { "gain_db": 0 }, "high_shelf": { "gain_db": 0 } } }, "LowShelf1": { "title": "LowShelf1", "required": [ "gain_db" ], "type": "object", "properties": { "gain_db": { "type": "integer", "format": "int32" } }, "example": { "gain_db": 0 } }, "Example111": { "title": "Example111", "required": [ "bond_date", "device_class", "device_type", "last_connect_date", "mac_address", "name", "rssi", "service_uuids" ], "type": "object", "properties": { "bond_date": { "type": "number" }, "device_class": { "type": "integer", "format": "int32" }, "device_type": { "type": "integer", "format": "int32" }, "last_connect_date": { "type": "number" }, "mac_address": { "type": "string" }, "name": { "type": "string" }, "rssi": { "type": "integer", "format": "int32" }, "service_uuids": { "type": "array", "items": { "type": "string" } } }, "example": { "bond_date": 1503212407260.55, "device_class": 5898764, "device_type": 1, "last_connect_date": 1514807829482.1111, "mac_address": "xx:xx:xx:xx:xx:xx", "name": "Device Name", "rssi": -255, "service_uuids": [ "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" ] } }, "Example1": { "title": "Example1", "required": [ "aogh", "audio", "build_info", "detail", "device_info", "multizone", "name", "net", "night_mode_params", "opencast", "opt_in", "proxy", "settings", "setup", "sign", "user_eq", "version", "wifi" ], "type": "object", "properties": { "aogh": { "$ref": "#/components/schemas/Aogh" }, "audio": { "$ref": "#/components/schemas/Audio" }, "build_info": { "$ref": "#/components/schemas/BuildInfo" }, "detail": { "$ref": "#/components/schemas/Detail" }, "device_info": { "$ref": "#/components/schemas/DeviceInfo" }, "multizone": { "$ref": "#/components/schemas/Multizone" }, "name": { "type": "string" }, "net": { "$ref": "#/components/schemas/Net" }, "night_mode_params": { "$ref": "#/components/schemas/NightModeParams" }, "opencast": { "$ref": "#/components/schemas/Opencast" }, "opt_in": { "$ref": "#/components/schemas/OptIn" }, "proxy": { "$ref": "#/components/schemas/Proxy" }, "settings": { "$ref": "#/components/schemas/Settings" }, "setup": { "$ref": "#/components/schemas/Setup" }, "sign": { "$ref": "#/components/schemas/Sign" }, "user_eq": { "$ref": "#/components/schemas/UserEq" }, "version": { "type": "integer", "format": "int32" }, "wifi": { "$ref": "#/components/schemas/Wifi" } }, "example": { "aogh": { "aogh_api_version": "2" }, "audio": { "digital": false }, "build_info": { "build_type": 2, "cast_build_revision": "1.46.195690", "cast_control_version": 1, "preview_channel_state": 4, "release_track": "preview-joining-stable-channel", "system_build_number": "195690" }, "detail": { "icon_list": [ { "depth": 32, "height": 55, "mimetype": "image/png", "url": "/setup/icon.png", "width": 98 } ], "locale": { "display_string": "English (United States)" }, "timezone": { "display_string": "India Standard Time (Kolkata)", "offset": 330 } }, "device_info": { "4k_blocked": 0, "capabilities": { "aogh_supported": true, "assistant_supported": true, "audio_hdr_supported": false, "audio_surround_mode_supported": false, "ble_supported": true, "bluetooth_audio_sink_supported": true, "bluetooth_audio_source_supported": true, "bluetooth_supported": true, "cloudcast_supported": true, "content_filters_supported": true, "display_supported": false, "fdr_supported": false, "hdmi_prefer_50hz_supported": false, "hdmi_prefer_high_fps_supported": false, "hotspot_supported": true, "https_setup_supported": true, "input_management_supported": true, "keep_hotspot_until_connected_supported": true, "multi_user_supported": true, "multichannel_group_supported": true, "multizone_supported": true, "night_mode_supported": true, "night_mode_supported_v2": true, "opencast_supported": false, "preview_channel_supported": true, "reboot_supported": true, "remote_ducking_supported": true, "separate_tts_volume_supported": true, "setup_supported": true, "sleep_mode_supported": true, "stats_supported": true, "system_sound_effects_supported": false, "user_eq_supported": true, "wifi_auto_save_supported": true, "wifi_regulatory_domain_locked": true, "wifi_supported": true }, "cloud_device_id": "003D...", "factory_country_code": "US", "hotspot_bssid": "FA:8F:CA:30:41:71", "local_authorization_token_hash": "hBt2...", "mac_address": "F4:F5:...", "manufacturer": "Google Inc.", "model_name": "Google Home", "product_name": "pineapple", "public_key": "MIIB...", "ssdp_udn": "baab...", "uma_client_id": "8ce0...", "uptime": 48509.169282, "weave_device_id": "" }, "multizone": { "audio_output_delay": 0, "audio_output_delay_hdmi": 0, "audio_output_delay_oem": 0, "aux_in_group": "", "dynamic_groups": [], "groups": [], "multichannel_status": 0 }, "name": "Bedroom Speaker", "net": { "ethernet_connected": false, "ip_address": "192.168.0.18", "online": true }, "night_mode_params": { "device_override_do_not_disturb": 0, "do_not_disturb": true, "enabled": true, "led_brightness": 0.57999998331069946, "volume": 0.5899999737739563, "windows": [ { "days": [ 0, 1, 2, 3, 4, 5, 6 ], "length_hours": 6, "start_hour": 23 } ] }, "opencast": { "pin_code": "" }, "opt_in": { "audio_hdr": false, "audio_surround_mode": 0, "autoplay_on_signal": true, "cloud_ipc": true, "hdmi_prefer_50hz": false, "hdmi_prefer_high_fps": true, "managed_mode": false, "opencast": true, "preview_channel": true, "remote_ducking": true, "stats": true, "ui_flipped": false, "wpa3_support_enabled": false }, "proxy": { "mode": "system" }, "settings": { "closed_caption": {}, "control_notifications": 1, "country_code": "IN", "locale": "en-US", "network_standby": 0, "system_sound_effects": true, "time_format": 1, "timezone": "Asia/Kolkata", "wake_on_cast": 1 }, "setup": { "qr_ssid_suffix": "", "setup_state": 60, "ssid_suffix": "k", "stats": { "num_check_connectivity": 0, "num_connect_wifi": 0, "num_connected_wifi_not_saved": 0, "num_initial_eureka_info": 0, "num_obtain_ip": 0 }, "tos_accepted": true }, "sign": { "certificate": "-----BEGIN CERTIFICATE-----\nMIID...Oeb0\n-----END CERTIFICATE-----\n", "intermediate_certs": [ "-----BEGIN CERTIFICATE-----\nMIID...O/bYS\n-----END CERTIFICATE-----\n" ], "nonce": "1234512345", "signed_data": "Rr5Q..." }, "user_eq": { "high_shelf": { "frequency": 4500, "gain_db": 0, "quality": 0.707 }, "low_shelf": { "frequency": 150, "gain_db": 0, "quality": 0.707 }, "max_peaking_eqs": 0, "peaking_eqs": [] }, "version": 10, "wifi": { "bssid": "a0:ab:...", "has_changes": false, "noise_level": -90, "signal_level": -50, "ssid": "Nucl...", "wpa_configured": true, "wpa_id": 1, "wpa_state": 10 } } }, "DeleteAlarmsandTimersRequest": { "title": "DeleteAlarmsandTimersRequest", "required": [ "ids" ], "type": "object", "properties": { "ids": { "type": "array", "items": { "type": "string" } } }, "example": { "ids": [ "timer/xxx", "alarm/xxx" ] } }, "Locale": { "title": "Locale", "required": [ "display_string" ], "type": "object", "properties": { "display_string": { "type": "string" } }, "example": { "display_string": "English (United States)" } }, "Wifi": { "title": "Wifi", "required": [ "bssid", "has_changes", "noise_level", "signal_level", "ssid", "wpa_configured", "wpa_id", "wpa_state" ], "type": "object", "properties": { "bssid": { "type": "string" }, "has_changes": { "type": "boolean" }, "noise_level": { "type": "integer", "format": "int32" }, "signal_level": { "type": "integer", "format": "int32" }, "ssid": { "type": "string" }, "wpa_configured": { "type": "boolean" }, "wpa_id": { "type": "integer", "format": "int32" }, "wpa_state": { "type": "integer", "format": "int32" } }, "example": { "bssid": "a0:ab:...", "has_changes": false, "noise_level": -90, "signal_level": -50, "ssid": "Nucl...", "wpa_configured": true, "wpa_id": 1, "wpa_state": 10 } }, "Example15": { "title": "Example15", "required": [ "display_string", "locale" ], "type": "object", "properties": { "display_string": { "type": "string" }, "locale": { "type": "string" } }, "example": { "display_string": "Amharic - አማርኛ", "locale": "am" } }, "Example18": { "title": "Example18", "required": [ "alarm", "timer" ], "type": "object", "properties": { "alarm": { "type": "array", "items": { "$ref": "#/components/schemas/Alarm" } }, "timer": { "type": "array", "items": { "$ref": "#/components/schemas/Timer" } } }, "example": { "alarm": [ { "date_pattern": { "day": 15, "month": 1, "year": 2018 }, "time_pattern": { "hour": 6, "minute": 50, "second": 0 }, "fire_time": 1515995400000.0, "id": "alarm/xxx", "status": 1 } ], "timer": [ { "fire_time": 1516176765589, "id": "timer/xxx", "original_duration": 20000, "status": 1 } ] } }, "Alarm": { "title": "Alarm", "required": [ "date_pattern", "time_pattern", "fire_time", "id", "status" ], "type": "object", "properties": { "date_pattern": { "$ref": "#/components/schemas/DatePattern" }, "time_pattern": { "$ref": "#/components/schemas/TimePattern" }, "fire_time": { "type": "number" }, "id": { "type": "string" }, "status": { "type": "integer", "format": "int32" } }, "example": { "date_pattern": { "day": 15, "month": 1, "year": 2018 }, "time_pattern": { "hour": 6, "minute": 50, "second": 0 }, "fire_time": 1515995400000.0, "id": "alarm/xxx", "status": 1 } }, "AlarmVolumeRequest": { "title": "AlarmVolumeRequest", "required": [ "volume" ], "type": "object", "properties": { "volume": { "type": "integer", "format": "int32" } }, "example": { "volume": 1 } }, "ForgetWi-FiNetworkRequest": { "title": "ForgetWi-FiNetworkRequest", "required": [ "wpa_id" ], "type": "object", "properties": { "wpa_id": { "type": "integer", "format": "int32" } }, "example": { "wpa_id": 0 } }, "Example112": { "title": "Example112", "required": [ "device_class", "device_type", "expected_profiles", "mac_address", "name", "rssi" ], "type": "object", "properties": { "device_class": { "type": "integer", "format": "int32" }, "device_type": { "type": "integer", "format": "int32" }, "expected_profiles": { "type": "integer", "format": "int32" }, "mac_address": { "type": "string" }, "name": { "type": "string" }, "rssi": { "type": "integer", "format": "int32" } }, "example": { "device_class": 525372, "device_type": 3, "expected_profiles": 0, "mac_address": "xx:xx:xx:xx:xx:xx", "name": "KD-49X8200E", "rssi": -90 } }, "Example114": { "title": "Example114", "required": [ "bssid", "signal_level", "ssid", "wpa_auth", "wpa_cipher", "wpa_id" ], "type": "object", "properties": { "bssid": { "type": "string" }, "signal_level": { "type": "integer", "format": "int32" }, "ssid": { "type": "string" }, "wpa_auth": { "type": "integer", "format": "int32" }, "wpa_cipher": { "type": "integer", "format": "int32" }, "wpa_id": { "type": "integer", "format": "int32" } }, "example": { "bssid": "APBSSID1", "signal_level": -20, "ssid": "APSSID1", "wpa_auth": 7, "wpa_cipher": 4, "wpa_id": 0 } }, "Example113": { "title": "Example113", "required": [ "ssid", "wpa_auth", "wpa_cipher", "wpa_id" ], "type": "object", "properties": { "ssid": { "type": "string" }, "wpa_auth": { "type": "integer", "format": "int32" }, "wpa_cipher": { "type": "integer", "format": "int32" }, "wpa_id": { "type": "integer", "format": "int32" } }, "example": { "ssid": "Wifi name", "wpa_auth": 7, "wpa_cipher": 4, "wpa_id": 0 } }, "PairwithSpeakerRequest": { "title": "PairwithSpeakerRequest", "required": [ "mac_address", "connect", "profile" ], "type": "object", "properties": { "mac_address": { "type": "string" }, "connect": { "type": "boolean" }, "profile": { "type": "integer", "format": "int32" } }, "example": { "mac_address": "54:13:79:49:19:22", "connect": true, "profile": 2 } }, "ConnecttoWi-FiNetworkRequest": { "title": "ConnecttoWi-FiNetworkRequest", "required": [ "bssid", "signal_level", "ssid", "wpa_auth", "wpa_cipher", "enc_passwd" ], "type": "object", "properties": { "bssid": { "type": "string" }, "signal_level": { "type": "integer", "format": "int32" }, "ssid": { "type": "string" }, "wpa_auth": { "type": "integer", "format": "int32" }, "wpa_cipher": { "type": "integer", "format": "int32" }, "enc_passwd": { "type": "string" } }, "example": { "bssid": "5c:0a:xx:xx:xx:xx", "signal_level": -42, "ssid": "myotherssid", "wpa_auth": 7, "wpa_cipher": 4, "enc_passwd": "xxxxxfPY=" } } }, "securitySchemes": { "cast-local-authorization-token": { "type": "apiKey", "description": "Local authorization token. For more details, check the [Authentication section](#section/Google-Home-Local-API/Authentication).", "name": "cast-local-authorization-token", "in": "header", "x-testValue": "" } } }, "security": [ { "cast-local-authorization-token": [] } ], "tags": [ { "name": "Device Info", "description": "Endpoints in this folder give information about the device." }, { "name": "Device Settings", "description": "This folder consists of all endpoints to modify and control the device." }, { "name": "Assistant", "description": "This folder contains all endpoints related to Assistant's tasks like Do Not Disturb, Alarms and Timers, Accessibility and equalizer." }, { "name": "Bluetooth", "description": "This folder contains Bluetooth related endpoints." }, { "name": "Wifi", "description": "This folder contains Wi-Fi related endpoints." }, { "name": "Static Files", "description": "This folder contains a list of static files stored in Home." } ] }