npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

wyze-api

v1.1.12

Published

An unoficial API wrapper for Wyze products.

Downloads

1,744

Readme

wyze-api

npm npm Chat GitHub last commit

Funding Donate Donate Donate

This is an unofficial Wyze API. This library uses the internal APIs from the Wyze mobile app. A list of all Wyze devices can be retrieved to check the status of Cameras, Senors, Bulbs, Plugs, Locks and more. This API can turn on and off cameras, lightbulbs and plugs and more.

Setup

npm install wyze-api --save

Example

const Wyze = require('wyze-api')

const options = {
  username: process.env.username,
  password: process.env.password,
  keyId: process.env.keyId,
  apiKey: process.env.apiKey,
  persistPath: "./",
  logLevel: "none"
}
const wyze = new Wyze(options)

  ; (async () => {
    let device, state, result

    // Get all Wyze devices
    const devices = await wyze.getDeviceList()
    console.log(devices); // you could also use apiLogEnabled in options instead of your own console.log

    // Get a Wyze Bulb by name and turn it off.
    device = await wyze.getDeviceByName('Porch Light')
    result = await wyze.lightTurnOff(device.mac, device.product_model)
    console.log(result)

    // Get the state of a Wyze Sense contact sensor
    device = await wyze.getDeviceByName('Front Door')
    state = await wyze.getDeviceState(device)
    console.log(`${device.nickname} is ${state}`)

  })()

Run

[email protected] password=123456 keyId=2222222 apiKey=222222 node index.js

Helper methods

Use these helper methods to interact with wyze-api.

Generic Device Methods

  • wyze.getDeviceList()
  • wyze.getDeviceByName(nickname)
  • wyze.getDeviceByMac(mac)
  • wyze.getDevicesByType(type)
  • wyze.getDevicesByModel(model)
  • wyze.getDeviceGroupsList()
  • wyze.getDeviceSortList()
  • wyze.getDeviceStatus(device)
  • wyze.getDeviceState(device)
  • wyze.getDevicePID(device.mac, device.product_model)
  • wyze.getDeviceStatePID(device.mac, device.product_model, pid)

Camera Methods

  • wyze.cameraPrivacy(device.mac, device.product_model, value)
  • wyze.cameraTurnOn(device.mac, device.product_model)
  • wyze.cameraTurnOff(device.mac, device.product_model)
  • wyze.cameraSiren(device.mac, device.product_model, value)
  • wyze.cameraSirenOn(device.mac, device.product_model)
  • wyze.cameraSirenOff(device.mac, device.product_model)
  • wyze.cameraFloodLight(device.mac, device.product_model, value)
  • wyze.cameraFloodLightOn(device.mac, device.product_model)
  • wyze.cameraFloodLightOff(device.mac, device.product_model)
  • wyze.cameraSpotLight(device.mac, device.product_model, value)
  • wyze.cameraSpotLightOn(device.mac, device.product_model)
  • wyze.cameraSpotLightOff(device.mac, device.product_model)
  • wyze.cameraMotionOn(device.mac, device.product_model)
  • wyze.cameraMotionOff(device.mac, device.product_model)
  • wyze.cameraSoundNotificationOn(device.mac, device.product_model)
  • wyze.cameraSoundNotificationOff(device.mac, device.product_model)
  • wyze.cameraNotifications(device.mac, device.product_model, value)
  • wyze.cameraNotificationsOn(device.mac, device.product_model)
  • wyze.cameraNotificationsOff(device.mac, device.product_model)
  • wyze.cameraMotionRecording(device.mac, device.product_model, value)
  • wyze.cameraMotionRecordingOn(device.mac, device.product_model)
  • wyze.cameraMotionRecordingOff(device.mac, device.product_model)

Camera Stream Methods (WebRTC)

These return the credentials a WebRTC client (werift, go2rtc, Kinesis Video Streams WebRTC SDK) needs to negotiate a live stream — they do not return a playable URL on their own.

Primary:

  • wyze.getCameraWebRTCConnectionInfo(mac, model, [options]) — bundled, ready-to-use shape: {signalingUrl, iceServers, authToken, clientId, mac, model, substream, cached}. iceServers are normalized to the {urls, ...} shape RTCPeerConnection expects; signalingUrl has any double-encoding decoded and (by default) the generated clientId injected as X-Amz-ClientId. Cached for 60s per (mac, substream). Options: substream, includeClientId, clientId, clientIdPrefix, noCache, cacheTtlMs.
  • wyze.getCameraWebRTCConnectionInfoWithReconnect(mac, model, [options], [retryOptions]) — same, with exponential-backoff retry. retryOptions: {maxAttempts=3, baseDelayMs=2000, onRetry}.

Lower-level:

  • wyze.cameraGetStreamInfo(mac, model, [options]) — raw API shape {signaling_url, ice_servers, auth_token, ...}. options.substream requests the lower-bitrate sub stream.
  • wyze.cameraGetSignalingUrl(mac, model, [options]) — just the raw signaling URL string
  • wyze.cameraGetIceServers(mac, model, [options]) — just the raw ICE/STUN/TURN server list

Helpers:

  • wyze.createCameraStreamClientId(deviceOrMac, [prefix="viewer"]) — generate a unique viewer client ID
  • wyze.normalizeCameraSignalingUrl(url) — fix double-encoded Kinesis URLs
  • wyze.sanitizeCameraIceServers(iceServers) — convert {url} entries to {urls} for RTCPeerConnection
  • wyze.parseCameraStatus(streamInfoResponse) — non-throwing parse → {online, powered} or null
  • wyze.cameraStreamWithReconnect(fn, [retryOptions]) — exponential-backoff retry wrapper for any stream call
  • wyze.clearCameraStreamCache([mac]) — clear cached stream info (one camera or all)
  • WyzeAPI.StreamStatus — lifecycle constants (OFFLINE, STOPPING, DISABLED, STOPPED, CONNECTING, CONNECTED)

Camera Helper Methods

Pure (sync, take a device object):

  • wyze.cameraIsOnline(device) — true if device.device_params.status === 1
  • wyze.cameraGetThumbnail(device) — first thumbnail URL, or null
  • wyze.cameraGetSnapshot(device) — first thumbnail object ({url, type, ts, ...}), or null
  • wyze.cameraToSummary(device) — {mac, productModel, nickname, online, thumbnail}
  • wyze.cameraGetSignalStrength(device) / cameraGetIp(device) / cameraGetFirmware(device) / cameraGetTimezone(device) / cameraGetLastSeen(device)

Lookups (async):

  • wyze.getCameras() — list of all camera devices
  • wyze.getOnlineCameras() / getOfflineCameras()
  • wyze.getCamera(mac) — by MAC, or undefined
  • wyze.getCameraByName(nickname) — by nickname (case-insensitive)
  • wyze.getCameraSnapshot(mac) — cloud snapshot metadata object (or null)
  • wyze.getCameraSnapshotUrl(mac) — cloud snapshot URL only
  • wyze.getCameraSummaries() — summaries for all cameras
  • wyze.cameraCaptureSnapshot(mac, model, [options]) — capture a JPEG frame from the live WebRTC stream. ffmpeg is provided by the bundled ffmpeg-static npm dep — no system install. Cached per-mac for cacheTtlMs (default 10s). Returns a Buffer.
  • wyze.getCameraSnapshotImage(mac, [options]) — returns {buffer, source} where source is "cloud" or "capture". Tries the cloud thumbnail first; on missing or download failure, falls back to cameraCaptureSnapshot. Pass skipCloud: true to go straight to live capture.

Plug Methods

  • wyze.plugPower(device.mac, device.product_model, value)
  • wyze.plugTurnOn(device.mac, device.product_model)
  • wyze.plugTurnOff(device.mac, device.product_model)

Light Bulb Methods

  • wyze.lightPower(device.mac, device.product_model, value)
  • wyze.lightTurnOn(device.mac, device.product_model)
  • wyze.lightTurnOff(device.mac, device.product_model)
  • wyze.setBrightness(device.mac, device.product_model, value)
  • wyze.setColorTemperature(device.mac, device.product_model, value)

Mesh Light/Plug Methods

  • wyze.turnMeshOn(device.mac, device.product_model)
  • wyze.turnMeshOff(device.mac, device.product_model)
  • wyze.lightMeshPower(device.mac, device.product_model, value)
  • wyze.lightMeshOn(device.mac, device.product_model)
  • wyze.lightMeshOff(device.mac, device.product_model)
  • wyze.setMeshBrightness(device.mac, device.product_model, value)
  • wyze.setMeshColorTemperature(device.mac, device.product_model, value)
  • wyze.setMeshHue(device.mac, device.product_model, value)
  • wyze.setMeshSaturation(device.mac, device.product_model, value)

Wall Switch Methods

  • wyze.wallSwitchPower(device.mac, device.product_model, value)
  • wyze.wallSwitchPowerOn(device.mac, device.product_model)
  • wyze.wallSwitchPowerOff(device.mac, device.product_model)
  • wyze.wallSwitchIot(device.mac, device.product_model, value)
  • wyze.wallSwitchIotOn(device.mac, device.product_model)
  • wyze.wallSwitchIotOff(device.mac, device.product_model)
  • wyze.wallSwitchLedStateOn(device.mac, device.product_model)
  • wyze.wallSwitchLedStateOff(device.mac, device.product_model)
  • wyze.wallSwitchVacationModeOn(device.mac, device.product_model)
  • wyze.wallSwitchVacationModeOff(device.mac, device.product_model)

Lock Methods

  • wyze.lockLock(device)
  • wyze.unlockLock(device)
  • wyze.lockInfo(device)

Lock Bolt V2 Methods (DX_LB2)

  • wyze.lockBoltV2GetProperties(device.mac, device.product_model)
  • wyze.lockBoltV2Lock(device.mac, device.product_model)
  • wyze.lockBoltV2Unlock(device.mac, device.product_model)

Palm Lock Methods (DX_PVLOC)

  • wyze.palmLockGetProperties(device.mac, device.product_model)

Garage Door Methods

  • wyze.garageDoor(device.mac, device.product_model)

Home Monitoring System (HMS) Methods

  • wyze.getHmsID()
  • wyze.setHMSState(hms_id, mode)
  • wyze.getHmsUpdate(hms_id)

Thermostat Methods

  • wyze.thermostatGetIotProp(device.mac)
  • wyze.thermostatSetIotProp(device.mac, device.product_model, propKey, value)

Irrigation (Sprinker) Methods

  • wyze.irrigationGetDeviceInfo(device.mac)
  • wyze.irrigationGetZones(device.mac)
  • wyze.irrigationQuickRun(device.mac, zoneNumber, duration)
  • wyze.irrigationStop(device.mac)
  • wyze.irrigationGetScheduleRuns(device.mac)
  • wyze.irrigationGetIotProp(device.mac)

Internal methods

  • wyze.login()
  • wyze.maybeLogin()
  • wyze.refreshToken()
  • wyze.getObjectList()
  • wyze.getPropertyList(device.mac, device.product_model)
  • wyze.setProperty(device.mac, device.product_model, propertyId, propertyValue)
  • wyze.runAction(device.mac, device.product_model, actionKey)
  • wyze.runActionList(device.mac, device.product_model, propertyId, propertyValue, actionKey)
  • wyze.controlLock(device.mac, device.product_model, action)
  • wyze.getLockInfo(device.mac, device.product_model)
  • wyze.getIotProp(device.mac)
  • wyze.setIotProp(device.mac, device.product_model, propKey, value)
  • wyze.getUserProfile()
  • wyze.disableRemeAlarm(hms_id)
  • wyze.getPlanBindingListByUser()
  • wyze.monitoringProfileStateStatus(hms_id)
  • wyze.monitoringProfileActive(hms_id, home, away)
  • wyze.iot3GetProperties(deviceMac, deviceModel, props)
  • wyze.iot3RunAction(deviceMac, deviceModel, action)

Other Info

Special thanks to the following projects for reference and inspiration:

  • ha-wyzeapi, a Wyze integration for Home Assistant.
  • wyze-node, a Node library for the Wyze API.
  • wyzeapy, a Python library for the Wyze API.