Skip to content

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

Joshua Mulliken edited this page Jun 3, 2020 · 1 revision

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. Feel free to participate, issue pull requests, etc.

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

1. Login method.

URL POST: https://api.wyzecam.com/app/user/login

JSON payload :

{
    "phone_id":"bc151f39-787b-4871-be27-5a20fd0a1937",
    "app_name":"com.hualai.WyzeCam",
    "app_ver":"com.hualai.WyzeCam___2.6.62",
    "app_version":"2.6.62",
    "sc":"9f275790cab94a72bd206c8876429f3c",
    "sv":"41267de22d1847c8b99bfba2658f88d7",
    "ts":"1575955440030",
    "password":"c991ddddfaed476feced186ae0f3428ac",
    "user_name":"[email protected]",
    "two_factor_auth":"",
    "phone_system_type":"1",
    "access_token": ""
}
Field Key Field Type Details
phone_id GUID A unique phone identifier. For that purpose, you may generate a new GUID. As example, here is a valid GUID : bc151f39-787b-4871-be27-5a20fd0a1937.
app_name String Mobile App Name. Currently using com.hualai.WyzeCam.
app_ver String Mobile app version. Currently using com.hualai___2.6.62.
sc String (32 char length) TBD.
sv String (32 char length) TBD.
ts Time Current time in milliseconds.
user_name String Your Wyzecam email.
password String Your Wyzecam password. Hash is made of MD5(MD5(password)).
access_token String For the login request, this field is empty. Upon successful login, the access_token is returned as a JSON value.

Example with cURL:

TBD

JSON response example :

{
    "ts": 1591107521474,
    "code": "1",
    "msg": "",
    "data": {
        "user_center_id": "368d248673fa3a859ae4334244bb767b",
        "access_token": "access_token",
        "refresh_token": "refresh_token"
    }
}

JSON login error :

{
    "ts": 1591107468085,
    "code": "2000",
    "msg": "UserNameOrPasswordError",
    "data": {}
}

JSON account locked error :

TBD

2. List devices (get a list of Wyze Devices).

URL: POST https://api.wyzecam.com/app/v2/home_page/get_object_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",
	"refresh_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. Currently using com.hualai___1.1.52.
ts Time Current time in milliseconds.
access_token String An access token acquired at login.
refresh_token String An access token acquired at login.
phone_id GUID A unique phone identifier. 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/app/v2/home_page/get_object_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"
		}]
	}
}

3. Get the Property List.

URL: POST https://api.wyzecam.com/app/v2/device/get_property_list

JSON payload:

	"target_pid_list":[],
	"phone_id":"bc151f39-787b-4871-be27-5a20fd0a1937",
	"device_model": "PIR3U",
	"app_name":"com.hualai.WyzeCam",
	"app_version":"2.6.62",
	"sc":"01dd431d098546f9baf5233724fa2ee2",
	"sv":"22bd9023a23b4b0b9977e4297ca100dd",
	"device_mac": "777F1FB1",
	"app_ver":"com.hualai.WyzeCam___2.6.62",
	"phone_system_type":"1",
	"ts":"1575955054511",
	"access_token": "ACQUIRED_AT_LOGIN",
	"refresh_token": "ACQUIRED_AT_LOGIN"
Field Key Field Type Details
taraget_pid_list TBD TBD
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.
device_model String Device model number.
app_name String Mabile App Name. Currenly using com.hualai.WyzeCam.
app_ver String Mobile app version. Currently using com.hualai___2.6.62.
sc String (32 char length) TBD.
sv String (32 char length) TBD.
device_mac String Device Mac.
app_ver String Mobile app version. Curently using com.hualai___2.6.62.
ts Time Current time in milliseconds.
access_token String An access token acquired at login.
refresh_token String An access token acquired at login.

Example with cURL:

TBD

JSON response example for Motion Sensor:

PID Value Details
P1302 0/1 0 = No Motion 1 = Motion
P1303 0/100 Current reported Battery Voltage.
P1304 0/100 Current reported RSSI. Lower the Number, the better.
P5 0/1 0 = Offline 1 = Online
{
    "ts": 1591122613649,
    "code": "1",
    "msg": "",
    "data": {
        "property_list": [
            {
                "pid": "P1",
                "value": "0",
                "ts": 1588815051461
            },
            {
                "pid": "P1300",
                "value": "0",
                "ts": 0
            },
            {
                "pid": "P1302",
                "value": "0",
                "ts": 1591122605885
            },
            {
                "pid": "P1303",
                "value": "93",
                "ts": 1591122605885
            },
            {
                "pid": "P1304",
                "value": "71",
                "ts": 1591122605885
            },
            {
                "pid": "P1314",
                "value": "1",
                "ts": 0
            },
            {
                "pid": "P1315",
                "value": "1",
                "ts": 0
            },
            {
                "pid": "P1316",
                "value": "0",
                "ts": 0
            },
            {
                "pid": "P1317",
                "value": "0",
                "ts": 0
            },
            {
                "pid": "P1318",
                "value": "0",
                "ts": 0
            },
            {
                "pid": "P1319",
                "value": "0",
                "ts": 0
            },
            {
                "pid": "P1320",
                "value": "0",
                "ts": 0
            },
            {
                "pid": "P1325",
                "value": "1",
                "ts": 0
            },
            {
                "pid": "P1326",
                "value": "1",
                "ts": 0
            },
            {
                "pid": "P1327",
                "value": "0",
                "ts": 0
            },
            {
                "pid": "P1328",
                "value": "0",
                "ts": 0
            },
            {
                "pid": "P1329",
                "value": "0",
                "ts": 1591122605885
            },
            {
                "pid": "P2",
                "value": "0",
                "ts": 0
            },
            {
                "pid": "P4",
                "value": "1",
                "ts": 0
            },
            {
                "pid": "P5",
                "value": "1",
                "ts": 1591121805351
            },
            {
                "pid": "P6",
                "value": "0",
                "ts": 0
            }
        ]
    }
}

URLs to document:

{
   "errorCode": 1000,
   "description": "Invalid User Name or Password.",
   "requestId": "f4d0ee9e-a31c-45d0-bbd6-86b8e61fc32b"
}