Google Home

This is an unofficial documentation of the local API used by the Home app to communicate with the device.

Getting Started

The port for the http server is 8008 so the base url for these endpoints is:

http://<google-home-ip>:8008

Get the IP of Google Home from the Google Home app (Device Settings -> End of list) or from your router.

There is no auth mechanism in place as of now.

GET requests are simple, in the browser kind.

POST requests need to set the header: content-type: application/json

Device Info

Eureka Info

GET http://192.168.1.15:8008/setup/eureka_info
Responses200
Headers
Content-Type: application/json
Body
{
  "audio": {
    "digital": false
  },
  "build_info": {
    "build_type": 2,
    "cast_build_revision": "1.32.118652",
    "cast_control_version": 1,
    "preview_channel_state": 4,
    "release_track": "preview-joining-stable-channel",
    "system_build_number": "118652"
  },
  "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": {
      "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,
      "display_supported": false,
      "fdr_supported": false,
      "hdmi_prefer_50hz_supported": false,
      "hdmi_prefer_high_fps_supported": false,
      "hi_res_audio_supported": false,
      "hotspot_supported": true,
      "input_management_supported": true,
      "multi_user_supported": true,
      "multichannel_group_supported": false,
      "multizone_supported": true,
      "night_mode_supported": true,
      "night_mode_supported_v2": true,
      "opencast_supported": true,
      "preview_channel_supported": true,
      "proxy_server_supported": false,
      "reboot_supported": true,
      "remote_ducking_supported": true,
      "setup_supported": true,
      "show_debug_overlay_supported": false,
      "stats_supported": true,
      "system_sound_effects_supported": false,
      "ui_flipping_supported": false,
      "user_eq_supported": true,
      "wifi_regulatory_domain_locked": true,
      "wifi_supported": true
    },
    "cloud_device_id": "XXXXX",
    "factory_country_code": "US",
    "hotspot_bssid": "XX:XX:XX:XX:XX:XX",
    "mac_address": "XX:XX:XX:XX:XX:XX",
    "manufacturer": "Google Inc.",
    "model_name": "Google Home",
    "product_name": "pineapple",
    "public_key": "XXXXX",
    "ssdp_udn": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "uma_client_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "uptime": 4332.29
  },
  "multizone": {
    "audio_output_delay": 0,
    "audio_output_delay_oem": 0,
    "aux_in_group": "",
    "groups": [],
    "multichannel_status": 0
  },
  "name": "Living Room",
  "net": {
    "ethernet_connected": false,
    "ip_address": "192.168.X.X",
    "online": true
  },
  "night_mode_params": {
    "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
      }
    ]
  },
  "opencast": {
    "pin_code": "4602"
  },
  "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,
    "opencast": true,
    "preview_channel": true,
    "remote_ducking": true,
    "stats": true,
    "ui_flipped": false
  },
  "proxy": {
    "mode": "system"
  },
  "settings": {
    "closed_caption": {},
    "control_notifications": 2,
    "country_code": "IN",
    "locale": "en-US",
    "network_standby": 0,
    "system_sound_effects": true,
    "time_format": 1,
    "timezone": "Asia/Kolkata",
    "wake_on_cast": 1
  },
  "setup": {
    "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
  },
  "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": 9,
  "wifi": {
    "bssid": "XX:XX:XX:XX:XX:XX",
    "has_changes": false,
    "noise_level": -92,
    "signal_level": -52,
    "ssid": "XXXXX",
    "wpa_configured": true,
    "wpa_id": 1,
    "wpa_state": 10
  }
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "audio": {
      "type": "object",
      "properties": {
        "digital": {
          "type": "boolean"
        }
      },
      "required": [
        "digital"
      ]
    },
    "build_info": {
      "type": "object",
      "properties": {
        "build_type": {
          "type": "number"
        },
        "cast_build_revision": {
          "type": "string"
        },
        "cast_control_version": {
          "type": "number"
        },
        "preview_channel_state": {
          "type": "number"
        },
        "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"
      ]
    },
    "detail": {
      "type": "object",
      "properties": {
        "icon_list": {
          "type": "array"
        },
        "locale": {
          "type": "object",
          "properties": {
            "display_string": {
              "type": "string"
            }
          },
          "required": [
            "display_string"
          ]
        },
        "timezone": {
          "type": "object",
          "properties": {
            "display_string": {
              "type": "string"
            },
            "offset": {
              "type": "number"
            }
          },
          "required": [
            "display_string",
            "offset"
          ]
        }
      },
      "required": [
        "icon_list",
        "locale",
        "timezone"
      ]
    },
    "device_info": {
      "type": "object",
      "properties": {
        "4k_blocked": {
          "type": "number"
        },
        "capabilities": {
          "type": "object",
          "properties": {
            "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"
            },
            "display_supported": {
              "type": "boolean"
            },
            "fdr_supported": {
              "type": "boolean"
            },
            "hdmi_prefer_50hz_supported": {
              "type": "boolean"
            },
            "hdmi_prefer_high_fps_supported": {
              "type": "boolean"
            },
            "hi_res_audio_supported": {
              "type": "boolean"
            },
            "hotspot_supported": {
              "type": "boolean"
            },
            "input_management_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"
            },
            "proxy_server_supported": {
              "type": "boolean"
            },
            "reboot_supported": {
              "type": "boolean"
            },
            "remote_ducking_supported": {
              "type": "boolean"
            },
            "setup_supported": {
              "type": "boolean"
            },
            "show_debug_overlay_supported": {
              "type": "boolean"
            },
            "stats_supported": {
              "type": "boolean"
            },
            "system_sound_effects_supported": {
              "type": "boolean"
            },
            "ui_flipping_supported": {
              "type": "boolean"
            },
            "user_eq_supported": {
              "type": "boolean"
            },
            "wifi_regulatory_domain_locked": {
              "type": "boolean"
            },
            "wifi_supported": {
              "type": "boolean"
            }
          },
          "required": [
            "assistant_supported",
            "audio_hdr_supported",
            "audio_surround_mode_supported",
            "ble_supported",
            "bluetooth_audio_sink_supported",
            "bluetooth_audio_source_supported",
            "bluetooth_supported",
            "cloudcast_supported",
            "display_supported",
            "fdr_supported",
            "hdmi_prefer_50hz_supported",
            "hdmi_prefer_high_fps_supported",
            "hi_res_audio_supported",
            "hotspot_supported",
            "input_management_supported",
            "multi_user_supported",
            "multichannel_group_supported",
            "multizone_supported",
            "night_mode_supported",
            "night_mode_supported_v2",
            "opencast_supported",
            "preview_channel_supported",
            "proxy_server_supported",
            "reboot_supported",
            "remote_ducking_supported",
            "setup_supported",
            "show_debug_overlay_supported",
            "stats_supported",
            "system_sound_effects_supported",
            "ui_flipping_supported",
            "user_eq_supported",
            "wifi_regulatory_domain_locked",
            "wifi_supported"
          ]
        },
        "cloud_device_id": {
          "type": "string"
        },
        "factory_country_code": {
          "type": "string"
        },
        "hotspot_bssid": {
          "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"
        }
      },
      "required": [
        "4k_blocked",
        "capabilities",
        "cloud_device_id",
        "factory_country_code",
        "hotspot_bssid",
        "mac_address",
        "manufacturer",
        "model_name",
        "product_name",
        "public_key",
        "ssdp_udn",
        "uma_client_id",
        "uptime"
      ]
    },
    "multizone": {
      "type": "object",
      "properties": {
        "audio_output_delay": {
          "type": "number"
        },
        "audio_output_delay_oem": {
          "type": "number"
        },
        "aux_in_group": {
          "type": "string"
        },
        "groups": {
          "type": "array"
        },
        "multichannel_status": {
          "type": "number"
        }
      },
      "required": [
        "audio_output_delay",
        "audio_output_delay_oem",
        "aux_in_group",
        "groups",
        "multichannel_status"
      ]
    },
    "name": {
      "type": "string"
    },
    "net": {
      "type": "object",
      "properties": {
        "ethernet_connected": {
          "type": "boolean"
        },
        "ip_address": {
          "type": "string"
        },
        "online": {
          "type": "boolean"
        }
      },
      "required": [
        "ethernet_connected",
        "ip_address",
        "online"
      ]
    },
    "night_mode_params": {
      "type": "object",
      "properties": {
        "do_not_disturb": {
          "type": "boolean"
        },
        "enabled": {
          "type": "boolean"
        },
        "led_brightness": {
          "type": "number"
        },
        "volume": {
          "type": "number"
        },
        "windows": {
          "type": "array"
        }
      },
      "required": [
        "do_not_disturb",
        "enabled",
        "led_brightness",
        "volume",
        "windows"
      ]
    },
    "opencast": {
      "type": "object",
      "properties": {
        "pin_code": {
          "type": "string"
        }
      },
      "required": [
        "pin_code"
      ]
    },
    "opt_in": {
      "type": "object",
      "properties": {
        "audio_hdr": {
          "type": "boolean"
        },
        "audio_surround_mode": {
          "type": "number"
        },
        "autoplay_on_signal": {
          "type": "boolean"
        },
        "cloud_ipc": {
          "type": "boolean"
        },
        "hdmi_prefer_50hz": {
          "type": "boolean"
        },
        "hdmi_prefer_high_fps": {
          "type": "boolean"
        },
        "opencast": {
          "type": "boolean"
        },
        "preview_channel": {
          "type": "boolean"
        },
        "remote_ducking": {
          "type": "boolean"
        },
        "stats": {
          "type": "boolean"
        },
        "ui_flipped": {
          "type": "boolean"
        }
      },
      "required": [
        "audio_hdr",
        "audio_surround_mode",
        "autoplay_on_signal",
        "cloud_ipc",
        "hdmi_prefer_50hz",
        "hdmi_prefer_high_fps",
        "opencast",
        "preview_channel",
        "remote_ducking",
        "stats",
        "ui_flipped"
      ]
    },
    "proxy": {
      "type": "object",
      "properties": {
        "mode": {
          "type": "string"
        }
      },
      "required": [
        "mode"
      ]
    },
    "settings": {
      "type": "object",
      "properties": {
        "closed_caption": {
          "type": "object",
          "properties": {}
        },
        "control_notifications": {
          "type": "number"
        },
        "country_code": {
          "type": "string"
        },
        "locale": {
          "type": "string"
        },
        "network_standby": {
          "type": "number"
        },
        "system_sound_effects": {
          "type": "boolean"
        },
        "time_format": {
          "type": "number"
        },
        "timezone": {
          "type": "string"
        },
        "wake_on_cast": {
          "type": "number"
        }
      },
      "required": [
        "closed_caption",
        "control_notifications",
        "country_code",
        "locale",
        "network_standby",
        "system_sound_effects",
        "time_format",
        "timezone",
        "wake_on_cast"
      ]
    },
    "setup": {
      "type": "object",
      "properties": {
        "setup_state": {
          "type": "number"
        },
        "ssid_suffix": {
          "type": "string"
        },
        "stats": {
          "type": "object",
          "properties": {
            "num_check_connectivity": {
              "type": "number"
            },
            "num_connect_wifi": {
              "type": "number"
            },
            "num_connected_wifi_not_saved": {
              "type": "number"
            },
            "num_initial_eureka_info": {
              "type": "number"
            },
            "num_obtain_ip": {
              "type": "number"
            }
          },
          "required": [
            "num_check_connectivity",
            "num_connect_wifi",
            "num_connected_wifi_not_saved",
            "num_initial_eureka_info",
            "num_obtain_ip"
          ]
        },
        "tos_accepted": {
          "type": "boolean"
        }
      },
      "required": [
        "setup_state",
        "ssid_suffix",
        "stats",
        "tos_accepted"
      ]
    },
    "user_eq": {
      "type": "object",
      "properties": {
        "high_shelf": {
          "type": "object",
          "properties": {
            "frequency": {
              "type": "number"
            },
            "gain_db": {
              "type": "number"
            },
            "quality": {
              "type": "number"
            }
          },
          "required": [
            "frequency",
            "gain_db",
            "quality"
          ]
        },
        "low_shelf": {
          "type": "object",
          "properties": {
            "frequency": {
              "type": "number"
            },
            "gain_db": {
              "type": "number"
            },
            "quality": {
              "type": "number"
            }
          },
          "required": [
            "frequency",
            "gain_db",
            "quality"
          ]
        },
        "max_peaking_eqs": {
          "type": "number"
        },
        "peaking_eqs": {
          "type": "array"
        }
      },
      "required": [
        "high_shelf",
        "low_shelf",
        "max_peaking_eqs",
        "peaking_eqs"
      ]
    },
    "version": {
      "type": "number"
    },
    "wifi": {
      "type": "object",
      "properties": {
        "bssid": {
          "type": "string"
        },
        "has_changes": {
          "type": "boolean"
        },
        "noise_level": {
          "type": "number"
        },
        "signal_level": {
          "type": "number"
        },
        "ssid": {
          "type": "string"
        },
        "wpa_configured": {
          "type": "boolean"
        },
        "wpa_id": {
          "type": "number"
        },
        "wpa_state": {
          "type": "number"
        }
      },
      "required": [
        "bssid",
        "has_changes",
        "noise_level",
        "signal_level",
        "ssid",
        "wpa_configured",
        "wpa_id",
        "wpa_state"
      ]
    }
  },
  "required": [
    "audio",
    "build_info",
    "detail",
    "device_info",
    "multizone",
    "name",
    "net",
    "night_mode_params",
    "opencast",
    "opt_in",
    "proxy",
    "settings",
    "setup",
    "user_eq",
    "version",
    "wifi"
  ]
}

Eureka Info
GET/setup/eureka_info

This gives most of the device info. The GET parameter params 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

Nested items can also be filtered using the dot notation. Example: audio.digital

The options GET parameter is always set to detail. No other value is known.


Get App Device Id

POST http://192.168.1.15:8008/setup/get_app_device_id
Requestsexample 1
Headers
Content-Type: application/json
Body
{
  "app_id": "E8C28D3C"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "app_id": {
      "type": "string"
    }
  },
  "required": [
    "app_id"
  ]
}
Responses200404
Headers
Content-Type: application/json
Body
{
  "app_device_id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "certificate": "`",
  "signed_data": "HAjp4Jqm6vKiIsQxAIF6jHmVSomqW4gC5W67OY1NzhPnmCQW2pjF2hWnaeTXwkd3DlI4tu+VsLR8q9pfEAV1KAJseku43f3iT6mg7etJ5HMym6y97ri4LB2tva1dxfK3YhIPVyGdEc4s2O+eTrI6kmY1nXxXLKuTeF8Hg+Akp2eOREljj+KNwVa+LA5EWtcA3Lq09qAfBcWj0fu+A1Gxi1YZNvDfjcrz3SF32hzXHl24xADxvbnlJ6O0atQNqvybB5ENaaqOoSoRct9JhuVRT8EkJd3MWm3gwADEA3hP11Oo8m3GIuBhcF3VBt946035kg9rf+9GLF+fme2sJQBGuA=="
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "app_device_id": {
      "type": "string"
    },
    "certificate": {
      "type": "string",
      "description": "----BEGIN CERTIFICATE-----\n\nMIIDyzCCArOgAwIBAgIEWAVEujANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC\nVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx\nEzARBgNVBAoMCkdvb2dsZSBJbmMxDTALBgNVBAsMBENhc3QxKDAmBgNVBAMMH0No\ncm9tZWNhc3QgSUNBIDYgKEF1ZGlvIEFzc2lzdCkwHhcNMTYxMDE3MjEzODAyWhcN\nMzYxMDEyMjEzODAyWjB8MRMwEQYDVQQIDApDYWxpZm9ybmlhMQswCQYDVQQGEwJV\nUzEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzENMAsGA1UECwwEQ2FzdDETMBEGA1UE\nCgwKR29vZ2xlIEluYzEcMBoGA1UEAwwTQVkwTTdOIEZBOEZDQTMwNDE3MTCCASIw\nDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJrs4oARV4dn68gam78NWTscGx+x\np6hm23DQWdazzkoRdUdmb/BnCNPWCM1sw6eVKoc+wfiNtE2RSXO72+WBS11LAf3u\n/7SIpuTs63oQCZoijAbJ58sF6VLgItt1NrtLOGyE2zyCowWnVXgS0KJbZn6Gy3fn\nc6qWNW7RVl99vuUctjKVep0iRpXk2f/7gNjZZVSssg/BfN55NFaYvArmppJJu4RZ\nR7sEu+Jd+zO9a93Re8wDGEHnLAvw5TuVwkRrm2+rLWOzej+6TBuF8pXKfttwGb47\n/6JDD28rwEH1aT263BZolPTf6GqPyjKqiK42pOE6GU4iwKllC+y2irHhwLkCAwEA\nAaNIMEYwCQYDVR0TBAIwADALBgNVHQ8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUH\nAwIwFwYDVR0gBBAwDjAMBgorBgEEAdZ5AgUCMA0GCSqGSIb3DQEBBQUAA4IBAQCu\nOkrf/PVBaDPWR+YeiE/3UauwMXCN4VakJ7OYG3hy1r6AhA62H3ITdM2cXCV7T9NL\nDSL02DphIsbU1Us9uUU3v7tiWy5A1VT23EPqsJYFk146VySDvqg7xx6xkpHs7r59\ntn2tffpxUjSeUep1VQpcQpgcVT2JZHt4LwNtbbXyu3U98bz/dT78QIFYtu5WTqRA\nyOaw+0nAI6hrEbPnoJ/8rtb1WCmB4zmvoLiamwajwMaEzQrF9oc04LCHSHgRmFqy\nGopFA2pW8eHR8RYzds3HRExxx4E8HozV8V2EoQC9hmfE48Teky4SXzCWf9arFNXq\nqwp7/thZVuJIg+BZOeb0\n-----END CERTIFICATE-----` (string, required) "
    },
    "signed_data": {
      "type": "string"
    }
  },
  "required": [
    "app_device_id",
    "signed_data"
  ]
}
Body
Not Found

App Device ID
POST/setup/get_app_device_id

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.


Offer

GET http://192.168.1.15:8008/setup/offer
Responses200
Headers
Content-Type: application/json
Body
{
  "token": "ADtqmfShz74YuyEyF8hNAP8uLTEKGZjp-qnKOAzuXYcYWw5H9dqtUBOYxN_gOyvR9ibEefxiM0EZaiBWhwvPkBg1jnLNdCycWuCv9bKdn-6zUa06a6sah55gvtA8VkiDObuc8RKmvB2tq3UCAM9u_7xnZNHFswfbW99Lh1-qAp-NB0xZIu-un3JKZ0EfMQywHMs9fNY_QjcDgaLyqaqAsAE1GwZZ_IEtmw=="
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "token": {
      "type": "string"
    }
  },
  "required": [
    "token"
  ]
}

Offer
GET/setup/offer

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.


Assistant Check Ready Status

POST http://192.168.1.15:8008/setup/assistant/check_ready_status
Requestsexample 1
Headers
Content-Type: application/json
Body
{
  "play_ready_message": true,
  "user_id": "xxxxx"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "play_ready_message": {
      "type": "boolean"
    },
    "user_id": {
      "type": "string"
    }
  },
  "required": [
    "play_ready_message",
    "user_id"
  ]
}
Responses200
Headers
Content-Type: application/json
Body
{
  "can_enroll": false,
  "enrollment_state": 8,
  "error": "NEED_RELINK",
  "error_code": 7,
  "ready": false,
  "retryable": false
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "can_enroll": {
      "type": "boolean"
    },
    "enrollment_state": {
      "type": "number"
    },
    "error": {
      "type": "string"
    },
    "error_code": {
      "type": "number"
    },
    "ready": {
      "type": "boolean"
    },
    "retryable": {
      "type": "boolean"
    }
  },
  "required": [
    "can_enroll",
    "enrollment_state",
    "error",
    "error_code",
    "ready",
    "retryable"
  ]
}

Check Ready Status
POST/setup/assistant/check_ready_status

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.”


Supported Timezones

GET http://192.168.1.15:8008/setup/supported_timezones
Responses200
Headers
Content-Type: application/json
Body
[
  {
    "display_string": "Samoa Standard Time (Midway)",
    "offset": -660,
    "timezone": "Pacific/Midway"
  }
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}

Timezones
GET/setup/supported_timezones

Simply returns a list of all supported timezones.


Supported Locales

GET http://192.168.1.15:8008/setup/supported_locales
Responses200
Headers
Content-Type: application/json
Body
[
  {
    "display_string": "Amharic - አማርኛ",
    "locale": "am"
  }
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}

Locales
GET/setup/supported_locales

Simply returns a list of all supported locales.


Test Internet Download Speed

POST http://192.168.1.15:8008/setup/test_internet_download_speed
Requestsexample 1
Headers
Content-Type: application/json
Body
{
  "url": "https://storage.googleapis.com/reliability-speedtest/random.txt"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "url": {
      "type": "string"
    }
  },
  "required": [
    "url"
  ]
}
Responses200
Headers
Content-Type: application/json
Body
{
  "bytes_received": 31457280,
  "response_code": 200,
  "time_for_data_fetch": 4722,
  "time_for_http_response": 316
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "bytes_received": {
      "type": "number"
    },
    "response_code": {
      "type": "number"
    },
    "time_for_data_fetch": {
      "type": "number"
    },
    "time_for_http_response": {
      "type": "number"
    }
  },
  "required": [
    "bytes_received",
    "response_code",
    "time_for_data_fetch",
    "time_for_http_response"
  ]
}

Test Internet Download Speed
POST/setup/test_internet_download_speed

This endpoint tests internet download speed. Any sample file URL can be provided.


Device Settings

Set Eureka Info

POST http://192.168.1.15:8008/setup/set_eureka_info
Requestsexample 1
Headers
Content-Type: application/json
Body
{
  "name": "Living Room",
  "settings": {
    "control_notifications": 2
  },
  "opt_in": {
    "opencast": true,
    "preview_channel": true,
    "remote_ducking": true,
    "stats": true
  }
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "settings": {
      "type": "object",
      "properties": {
        "control_notifications": {
          "type": "number"
        }
      },
      "required": [
        "control_notifications"
      ]
    },
    "opt_in": {
      "type": "object",
      "properties": {
        "opencast": {
          "type": "boolean"
        },
        "preview_channel": {
          "type": "boolean"
        },
        "remote_ducking": {
          "type": "boolean"
        },
        "stats": {
          "type": "boolean"
        }
      },
      "required": [
        "opencast",
        "preview_channel",
        "remote_ducking",
        "stats"
      ]
    }
  },
  "required": [
    "name",
    "settings",
    "opt_in"
  ]
}
Responses200
Headers
Access-Control-Allow-Headers: Content-Type
Cache-Control: no-cache
Content-Length: 0

Set Eureka Info
POST/setup/set_eureka_info

This can set custom values to some options.

Only fields to be modified need to be sent, not all. The example has all modifiable fields (#TODO).

Sending non-existant fields will still return a 200 OK, but they are not saved.


Assistant Set Night Mode Params

POST http://192.168.1.15:8008/setup/assistant/set_night_mode_params
Requestsexample 1
Headers
Content-Type: application/json
Body
{
  "enabled": false,
  "do_not_disturb": true,
  "led_brightness": 0.449999988079071,
  "volume": 0.46000000834465,
  "demo_to_user": true,
  "windows": [
    null
  ]
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "enabled": {
      "type": "boolean"
    },
    "do_not_disturb": {
      "type": "boolean"
    },
    "led_brightness": {
      "type": "number"
    },
    "volume": {
      "type": "number"
    },
    "demo_to_user": {
      "type": "boolean"
    },
    "windows": {
      "type": "array"
    }
  },
  "required": [
    "enabled",
    "do_not_disturb",
    "led_brightness",
    "volume",
    "demo_to_user",
    "windows"
  ]
}
Responses200
Headers
Content-Type: application/json
Body
{
  "do_not_disturb": true,
  "enabled": false,
  "led_brightness": 0.449999988079071,
  "volume": 0.46000000834465,
  "windows": [
    null
  ]
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "do_not_disturb": {
      "type": "boolean"
    },
    "enabled": {
      "type": "boolean"
    },
    "led_brightness": {
      "type": "number"
    },
    "volume": {
      "type": "number"
    },
    "windows": {
      "type": "array"
    }
  },
  "required": [
    "do_not_disturb",
    "enabled",
    "led_brightness",
    "volume",
    "windows"
  ]
}

Night Mode settings
POST/setup/assistant/set_night_mode_params

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.


Reboot

POST http://192.168.1.15:8008/setup/reboot
Requestsexample 1Factory Reset
Headers
Content-Type: application/json
Body
{
  "params": "now"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "params": {
      "type": "string"
    }
  },
  "required": [
    "params"
  ]
}
Responses200
Headers
Access-Control-Allow-Headers: Content-Type
Cache-Control: no-cache
Content-Length: 0
Headers
Content-Type: application/json
Body
{
  "params": "now"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "params": {
      "type": "string"
    }
  },
  "required": [
    "params"
  ]
}
Responses200
Headers
Access-Control-Allow-Headers: Content-Type
Cache-Control: no-cache
Content-Length: 0

Reboot and Factory Reset
POST/setup/reboot

This can simply reboot the device (params: "now") or factory reset the device (params: "fdr").


Assistant

Assistant Notifications

POST http://192.168.1.15:8008/setup/assistant/notifications
RequestsGet current stateSet new state
Headers
Content-Type: application/json
Responses200
Headers
Content-Type: application/json
Body
{
  "notifications_enabled": true
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "notifications_enabled": {
      "type": "boolean"
    }
  },
  "required": [
    "notifications_enabled"
  ]
}
Headers
Content-Type: application/json
Body
{
  "notifications_enabled": true
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "notifications_enabled": {
      "type": "boolean"
    }
  },
  "required": [
    "notifications_enabled"
  ]
}
Responses200
Headers
Content-Type: application/json
Body
{
  "notifications_enabled": true
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "notifications_enabled": {
      "type": "boolean"
    }
  },
  "required": [
    "notifications_enabled"
  ]
}

Do Not Disturb
POST/setup/assistant/notifications

This is for the Do Not Disturb option. Sending an empty-body POST returns the current value. Sending a new value changes it.


Assistant A11y Mode

POST http://192.168.1.15:8008/setup/assistant/a11y_mode
RequestsGet current valuesSet new values
Headers
Content-Type: application/json
Body
{
  "hotword_enabled": false,
  "endpoint_enabled": false
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "hotword_enabled": {
      "type": "boolean"
    },
    "endpoint_enabled": {
      "type": "boolean"
    }
  },
  "required": [
    "hotword_enabled",
    "endpoint_enabled"
  ]
}
Responses200
Headers
Content-Type: application/json
Body
{
  "hotword_enabled": false,
  "endpoint_enabled": false
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "hotword_enabled": {
      "type": "boolean"
    },
    "endpoint_enabled": {
      "type": "boolean"
    }
  },
  "required": [
    "hotword_enabled",
    "endpoint_enabled"
  ]
}
Headers
Content-Type: application/json
Body
{
  "hotword_enabled": false,
  "endpoint_enabled": false
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "hotword_enabled": {
      "type": "boolean"
    },
    "endpoint_enabled": {
      "type": "boolean"
    }
  },
  "required": [
    "hotword_enabled",
    "endpoint_enabled"
  ]
}
Responses200
Headers
Content-Type: application/json
Body
{
  "hotword_enabled": false,
  "endpoint_enabled": false
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "hotword_enabled": {
      "type": "boolean"
    },
    "endpoint_enabled": {
      "type": "boolean"
    }
  },
  "required": [
    "hotword_enabled",
    "endpoint_enabled"
  ]
}

Accessibility
POST/setup/assistant/a11y_mode

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.


Assistant Alarms

GET http://192.168.1.15:8008/setup/assistant/alarms
Responses200
Headers
Content-Type: application/json
Body
{
  "alarm": [
    {
      "date_pattern": {
        "day": 15,
        "month": 1,
        "year": 2018
      },
      "time_pattern": {
        "hour": 6,
        "minute": 50,
        "second": 0
      },
      "fire_time": 1515995400000,
      "id": "alarm/xxx",
      "status": 1
    }
  ],
  "timer": [
    {
      "fire_time": 1516176765589,
      "id": "timer/xxx",
      "original_duration": 20000,
      "status": 1
    }
  ]
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "alarm": {
      "type": "array"
    },
    "timer": {
      "type": "array"
    }
  },
  "required": [
    "alarm",
    "timer"
  ]
}

Get Alarms and Timers
GET/setup/assistant/alarms

This gives a list of all active alarms and timers.

Both alarms and timers have ids 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.


Assistant Alarms Delete

POST http://192.168.1.15:8008/setup/assistant/alarms/delete
Requestsexample 1
Headers
Content-Type: application/json
Body
{
  "ids": "`["
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "ids": {
      "type": "string",
      "description": "\"timer/xxx\",\n\"alarm/xxx\"\n]` (array[string], required) "
    }
  }
}
Responses200
Headers
Content-Type: application/json
Body
{
  "success": true
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "success": {
      "type": "boolean"
    }
  },
  "required": [
    "success"
  ]
}

Delete Alarms and Timers
POST/setup/assistant/alarms/delete

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 \/.


Assistant Alarms Volume

POST http://192.168.1.15:8008/setup/assistant/alarms/volume
RequestsGet volumeSet volume
Headers
Content-Type: application/json
Body
{
  "volume": 1
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "volume": {
      "type": "number"
    }
  },
  "required": [
    "volume"
  ]
}
Responses200
Headers
Content-Type: application/json
Body
{
  "volume": 1
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "volume": {
      "type": "number"
    }
  },
  "required": [
    "volume"
  ]
}
Headers
Content-Type: application/json
Body
{
  "volume": 1
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "volume": {
      "type": "number"
    }
  },
  "required": [
    "volume"
  ]
}
Responses200
Headers
Content-Type: application/json
Body
{
  "volume": 1
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "volume": {
      "type": "number"
    }
  },
  "required": [
    "volume"
  ]
}

Alarm Volume
POST/setup/assistant/alarms/volume

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.


User Eq Set Equalizer

POST http://192.168.1.15:8008/setup/user_eq/set_equalizer
Requestsexample 1
Headers
Content-Type: application/json
Body
{
  "low_shelf": {
    "gain_db": 0
  },
  "high_shelf": {
    "gain_db": 0
  }
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "low_shelf": {
      "type": "object",
      "properties": {
        "gain_db": {
          "type": "number"
        }
      },
      "required": [
        "gain_db"
      ]
    },
    "high_shelf": {
      "type": "object",
      "properties": {
        "gain_db": {
          "type": "number"
        }
      },
      "required": [
        "gain_db"
      ]
    }
  },
  "required": [
    "low_shelf",
    "high_shelf"
  ]
}
Responses200
Headers
Access-Control-Allow-Headers: Content-Type
Cache-Control: no-cache
Content-Length: 0

Set Equalizer Values
POST/setup/user_eq/set_equalizer

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.


Bluetooth

Bluetooth Status

GET http://192.168.1.15:8008/setup/bluetooth/status
Responses200
Headers
Content-Type: application/json
Body
{
  "audio_mode": 0,
  "connecting_devices": [
    "[]"
  ],
  "connected_devices": [
    null
  ],
  "remote_sink": {
    "bond_date": 1529248165656.61,
    "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": "`["
  },
  "discovery_enabled": false,
  "scanning_enabled": false
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "audio_mode": {
      "type": "number"
    },
    "connecting_devices": {
      "type": "array"
    },
    "connected_devices": {
      "type": "array"
    },
    "remote_sink": {
      "type": "object",
      "properties": {
        "bond_date": {
          "type": "number"
        },
        "device_class": {
          "type": "number"
        },
        "device_type": {
          "type": "number"
        },
        "last_connect_date": {
          "type": "number"
        },
        "mac_address": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "rssi": {
          "type": "number"
        },
        "service_uuids": {
          "type": "string",
          "description": "\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n]` (array[string], required) "
        }
      },
      "required": [
        "bond_date",
        "device_class",
        "device_type",
        "last_connect_date",
        "mac_address",
        "name",
        "rssi"
      ]
    },
    "discovery_enabled": {
      "type": "boolean"
    },
    "scanning_enabled": {
      "type": "boolean"
    }
  },
  "required": [
    "audio_mode",
    "connecting_devices",
    "connected_devices",
    "remote_sink",
    "discovery_enabled",
    "scanning_enabled"
  ]
}

Status
GET/setup/bluetooth/status

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)


Bluetooth Get Bonded

GET http://192.168.1.15:8008/setup/bluetooth/get_bonded
Responses200
Headers
Content-Type: application/json
Body
[
  {
    "bond_date": 1503212407260.55,
    "device_class": 5898764,
    "device_type": 1,
    "last_connect_date": 1514807829482.11,
    "mac_address": "xx:xx:xx:xx:xx:xx",
    "name": "Device Name",
    "rssi": -255,
    "service_uuids": "`["
  }
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}

Get Paired Devices
GET/setup/bluetooth/get_bonded

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.


Bluetooth Bond

POST http://192.168.1.15:8008/setup/bluetooth/bond
Requestsexample 1
Headers
Content-Type: application/json
Body
{
  "mac_address": "xx:xx:xx:xx:xx:xx",
  "bond": false
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "mac_address": {
      "type": "string"
    },
    "bond": {
      "type": "boolean"
    }
  },
  "required": [
    "mac_address",
    "bond"
  ]
}
Responses200
This response has no content.

Forget paired device
POST/setup/bluetooth/bond

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).


Bluetooth Discovery

POST http://192.168.1.15:8008/setup/bluetooth/discovery
RequestsSet discoverableSet non-discoverable
Headers
Content-Type: application/json
Body
{
  "enable_discovery": true
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "enable_discovery": {
      "type": "boolean"
    }
  },
  "required": [
    "enable_discovery"
  ]
}
Responses200
This response has no content.
Headers
Content-Type: application/json
Body
{
  "enable_discovery": true
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "enable_discovery": {
      "type": "boolean"
    }
  },
  "required": [
    "enable_discovery"
  ]
}
Responses200
This response has no content.

Change Discoverability
POST/setup/bluetooth/discovery

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).


Bluetooth Scan

POST http://192.168.1.15:8008/setup/bluetooth/scan
Requestsexample 1
Headers
Content-Type: application/json
Body
{
  "enable": true,
  "clear_results": true,
  "timeout": 60
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "enable": {
      "type": "boolean"
    },
    "clear_results": {
      "type": "boolean"
    },
    "timeout": {
      "type": "number"
    }
  },
  "required": [
    "enable",
    "clear_results",
    "timeout"
  ]
}
Responses200
Headers
Access-Control-Allow-Headers: Content-Type
Cache-Control: no-cache
Content-Length: 0

Scan for devices
POST/setup/bluetooth/scan

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.


Bluetooth Scan Results

GET http://192.168.1.15:8008/setup/bluetooth/scan_results
Responses200
Headers
Content-Type: application/json
Body
[
  {
    "device_class": 525372,
    "device_type": 3,
    "expected_profiles": 0,
    "mac_address": "xx:xx:xx:xx:xx:xx",
    "name": "KD-49X8200E",
    "rssi": -90
  }
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}

Get Scan Results
GET/setup/bluetooth/scan_results

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 speaker.


Bluetooth Connect

POST http://192.168.1.15:8008/setup/bluetooth/connect
Requestsexample 1
Headers
Content-Type: application/json
Body
{
  "mac_address": "54:13:79:49:19:22",
  "connect": true,
  "profile": 2
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "mac_address": {
      "type": "string"
    },
    "connect": {
      "type": "boolean"
    },
    "profile": {
      "type": "number"
    }
  },
  "required": [
    "mac_address",
    "connect",
    "profile"
  ]
}
Responses200
Headers
Access-Control-Allow-Headers: Content-Type
Cache-Control: no-cache
Content-Length: 0

Pair with Speaker
POST/setup/bluetooth/connect

See note for Bluetooth under /setup/bluetooth/status

For Part 2 only

This pairs with other bluetooth speakers by mac address.


Wifi

Configured Networks

GET http://192.168.1.15:8008/setup/configured_networks
Responses200
Headers
Content-Type: application/json
Body
[
  {
    "ssid": "Wifi name",
    "wpa_auth": 7,
    "wpa_cipher": 4,
    "wpa_id": 0
  }
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}

Get Saved Networks
GET/setup/configured_networks

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.


Scan Wifi

POST http://192.168.1.15:8008/setup/scan_wifi
Responses200
This response has no content.

Scan for Networks
POST/setup/scan_wifi

This initiates scanning for Wi-Fi networks.

For Chromecasts, this is required to populate results. For Google Home, this is not required. /setup/scan_results is always updated. (Related to GitHub #22).


Scan Results

GET http://192.168.1.15:8008/setup/scan_results
Responses200
Headers
Content-Type: application/json
Body
[
  {
    "bssid": "APBSSID1",
    "signal_level": -20,
    "ssid": "APSSID1",
    "wpa_auth": 7,
    "wpa_cipher": 4,
    "wpa_id": 0
  }
]
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "array"
}

Get WiFi Scan Results
GET/setup/scan_results

This gets a list of all nearby Wi-Fi access points.


Connect Wifi

POST http://192.168.1.15:8008/setup/connect_wifi
Requestsexample 1
Headers
Content-Type: application/json
Body
{
  "bssid": "5c:0a:xx:xx:xx:xx",
  "signal_level": -42,
  "ssid": "myotherssid",
  "wpa_auth": 7,
  "wpa_cipher": 4,
  "enc_passwd": "xxxxxfPY="
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "bssid": {
      "type": "string"
    },
    "signal_level": {
      "type": "number"
    },
    "ssid": {
      "type": "string"
    },
    "wpa_auth": {
      "type": "number"
    },
    "wpa_cipher": {
      "type": "number"
    },
    "enc_passwd": {
      "type": "string"
    }
  },
  "required": [
    "bssid",
    "signal_level",
    "ssid",
    "wpa_auth",
    "wpa_cipher",
    "enc_passwd"
  ]
}
Responses200
This response has no content.

Connect to WiFi Network
POST/setup/connect_wifi

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, create a new issue here.


Forget Wifi

POST http://192.168.1.15:8008/setup/forget_wifi
Requestsexample 1
Headers
Content-Type: application/json
Body
{
  "wpa_id": 0
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "wpa_id": {
      "type": "number"
    }
  },
  "required": [
    "wpa_id"
  ]
}
Responses200
This response has no content.

Forget WiFi Network
POST/setup/forget_wifi

This is to forget a saved network by wpa_id. Get the wpa_id from /setup/configured_networks


Static Files

NOTICEHtmlGz

GET http://192.168.1.15:8008/setup/NOTICE.html.gz
Responses200
This response has no content.

Legal Notice
GET/setup/NOTICE.html.gz

All licenses of programs used by Home.


IconPng

GET http://192.168.1.15:8008/setup/icon.png
Responses200
This response has no content.

Chromecast Icon
GET/setup/icon.png

A redirect to http://www.gstatic.com/eureka/images/eureka_device.png


Generated by aglio on 03 Nov 2018