/wyzecam-api

Wyzecam API reverse engineered to support Wyzecam alternatives applications.

Primary LanguageJava

Wyzecam API (unofficial, reverse engineered for experimental use only).

Wyzecams are awesome. At 19$, these are the perfect Wi-Fi cameras. They are reliable, well built and the Wyzecam mobile app is well made. But, the mobile application lacks a feature I really need: a way to access the cameras feed outside its walled garden. This repository is my attempt to document the Wyzecam API protocol to locally get my cameras feed in a cross-platform desktop application.

Feel free to participate, issue pull requests, etc.

Disclaimer : This repository is for fun only. WizeLabs is a wonderful company, do no harm and be civilized.

URL : https://api.wyzecam.com:8443

1. Login method.

URL POST: https://api.wyzecam.com:8443

JSON payload :

{
    "sc": "f5609af3fa9541fd82a486df5fd9965a",
    "sv": "1ee66ee1fe03403b9ded3fe2fa869f2a",
    "app_ver": "com.hualai___1.1.52",
    "ts": 1524247514196,
    "access_token": "",
    "phone_id": "bc151f39-787b-4871-be27-5a20fd0a1937",
    "user_name": "email@domain.com",
    "password": "password"
}
Field Key Field Type Details
sc String (32 char length) TBD.
sv String (32 char length) TBD.
app_ver String Mobile app version. Curently using com.hualai___1.1.52.
ts Time Current time in milliseconds.
access_token String For the login request, this field is empty. Upon a successful login, the access_token will be returned as a JSON value (see data.access_token in the next section).
phone_id GUID A unique phone identifiant. For that purpose, you may generate a new GUID. As example, here is a valid GUID : bc151f39-787b-4871-be27-5a20fd0a1937.
user_name String Your Wyzecam email.
password String Your Wyzecam password. Hash is made of MD5(MD5(password)).

Example with cURL :

curl -H "Content-Type: application/json" -X POST -d '{"sc":""f5609af3fa9541fd82a486df5fd9965a",","sv":""1ee66ee1fe03403b9ded3fe2fa869f2a",","app_ver":"com.hualai___1.1.52","ts":1524248711789,"access_token":"","phone_id":"bc151f39-787b-4871-be27-5a20fd0a1937","user_name":"email@domain.com","password":"password"}' https://api.wyzecam.com:8443/app/user/login

JSON response example :

{
   "ts":1524249332073,
   "code":"1",
   "msg":"",
   "data":{
      "access_token":"access token",
      "refresh_token":"refresh token"
   }
}

JSON login error :

TBD

JSON account locked error :

TBD

2. List devices (get list of cameras).

URL: POST https://api.wyzecam.com:8443/app/device/get_device_list

JSON payload:

{
	"sv": "01463873df804629b15694df13126d31",
	"sc": "01dd431d098546f9baf5233724fa2ee2",
	"ts": 1525365683583,
	"app_ver": "com.hualai.WyzeCam___1.3.116",
	"phone_id": "bc151f39-787b-4871-be27-5a20fd0a1937",
	"access_token": "ACQUIRED_AT_LOGIN"
}
Field Key Field Type Details
sc String (32 char length) TBD.
sv String (32 char length) TBD.
app_ver String Mobile app version. Curently using com.hualai___1.1.52.
ts Time Current time in milliseconds.
access_token String An access token acquired at login. (see data.access_token).
phone_id GUID A unique phone identifiant. For that purpose, you may generate a new GUID. As example, here is a valid GUID : bc151f39-787b-4871-be27-5a20fd0a1937.

Example with cURL:

    curl -H 'Host: api.wyzecam.com:8443' -H 'Content-Type: application/json' -H 'Accept: */*' -H 'User-Agent: HLHome/1.3.116 (iPhone; iOS 11.3; Scale/3.00)' -H 'Accept-Language: en-US;q=1' --data-binary '{"sv":"01463873df804629b15694df13126d31","sc":"01dd431d098546f9baf5233724fa2ee2","ts":1525365683583,"app_ver":"com.hualai.WyzeCam___1.1.52","phone_id":"bc151f39-787b-4871-be27-5a20fd0a1937","access_token":"ACQUIRED_AT_LOGIN"}' --compressed 'https://api.wyzecam.com:8443/app/device/get_device_list'

JSON response example:

{
	"ts": 1525365690660,
	"code": "1",
	"msg": "",
	"data": {
		"device_info_list": [{
			"mac": "CAMERA_MAC_ADDRESS",
			"enr": "TBD",
			"p2p_id": "PEER_TO_PEER_IDENTIFIER",
			"p2p_type": 3,
			"product_model": "WYZEC1-JZ",
			"product_type": "Camera",
			"hardware_ver": "0.0.0.0",
			"firmware_ver": "4.9.1.42",
			"role": 1,
			"nickname": "LilCam",
			"device_logo": "",
			"device_timezone": "",
			"binding_user_nickname": "ACCOUNT_EMAIL_ADDRESS",
			"ssid": "CAMERA_CONNECTED_WIFI_SSIDE",
			"ip": "CAMERA_IP_ADDRESS",
			"conn_state": 1,
			"power_switch": 1
		}],
		"device_sort_list": [{
			"device_id": "CAMERA_ID",
			"product_model": "WYZEC1-JZ"
		}]
	}
}

URLs to document: