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