Get started
  • English
  • 简体中文
Official Site
Get started
  • English
  • 简体中文
Official Site
  • Get started
  • Concepts
  • Guides
  • Device capabilities & events
    • Browse by device type
    • Device capabilities
      • Common methods
      • Detection and alarms
      • Image
      • PTZ
      • Light
      • Recording
      • Audio
      • Media
      • Network
      • Power
      • Privacy
      • Call
      • Storage
      • System
      • Algorithm
      • Maintenance
        • device.reboot.execute (Reboot device)
        • device.restore.execute (Factory reset)
        • device.time.sync (Platform time sync)
        • device.time.get (Read UTC clock)
        • device.timezone.set (Set time zone)
        • device.timezone.get (Read time zone)
        • device.timezonerule.get (Query daylight saving rules)
        • device.wifi.current (Current Wi-Fi)
        • device.wifi.scan (Scan Wi-Fi hotspots)
        • device.wifi.control (Connect or disconnect Wi-Fi)
        • device.upgrade.process (Upgrade progress)
        • device.upgrade.execute (Trigger upgrade)
        • device.name.set (Rename device)
        • device.cover.refresh (Refresh cover image)
        • device.password.verify (Verify password)
        • device.password.set (Change password)
      • Control
    • Events overview
    • Permission codes
    • Capability error codes
    • Alarm and capability messages
    • Capability FAQ
    • Legacy ability and push types
  • API reference
  • SDK and tools
  • Solutions
  • Platform and support
On this page
What it does
Request URL
Minimum permission
Request parameters
Password field encryption
Request example
Response data fields
Response example
Error codes

device.password.verify (Verify password)

device.password.verify: Verify password

What it does

Parameter passwordV2 is deviceId-context AES ciphertext (not plaintext). This method does not appear in device.capability.list. On success, data is {}. Same rules as change-password oldPasswordV2 / newPasswordV2. See Change password.

Request URL

POST https://openapi-[DataCenter].easy4ip.com/openapi/v2/device.password.verify

Minimum permission

The administrator does not need an extra permission on a device they bound. A shared device needs the basic configuration permission. A bound sub-user does not. A sub-account needs Config.

Request parameters

NameTypeRequiredDefaultLegal valuesDescription
tokenStringyesAccess token for an administrator, sub-user, or sub-account
deviceIdStringyesDevice serial number
productIdStringnoOptional. If sent and it does not match the device model → DV2009
passwordV2StringyesDevice password v2 ciphertext (see Password field encryption below)

For common request fields and signing, see Signing conventions and Common request payload.

Password field encryption

Device password field encryption (v2 OpenAPI)

Applies to passwordV2 on device.password.verify and oldPasswordV2 / newPasswordV2 on device.password.set. All three use the same algorithm (same family as bind encryptCodeV2; different field names).

StepDescription
1. PlaintextDevice password as a UTF-8 string (newPasswordV2 must meet the strength rules below before encryption)
2. FactorpwdFactor = "op_api_" + appId + "_PWD_KEY_" + deviceId (appId from system.appId; must match derivation)
3. SaltFirst 16 bytes of SHA-256(UTF-8(pwdFactor))
4. PBKDF2PBKDF2WithHmacSHA256: password = deviceId, salt as above, 1200 iterations, 256-bit output → kdfRaw
5. AES keykdfBase64 = Base64(kdfRaw) (standard Base64); aesKey = SHA-256(UTF-8(kdfBase64.toUpperCase())) → 32-byte AES-256 key
6. Nonce12 random bytes per encryption (changes each time)
7. EncryptAES/GCM/NoPadding, GCM tag 128 bits; cipher block = AES-GCM(plaintext) (includes tag)
8. Wire valueBase64(nonce[12] ‖ cipher block) as the request field string

appSecret is not used in v2 key derivation.

New password plaintext (before encrypting newPasswordV2 only): length 8–32; at least two of digit, uppercase, lowercase, special; special means visible chars except ', ", ;, :, &, and space; no CJK.

After a successful verify, the full passwordV2 ciphertext from that request may be copied into oldPasswordV2 (same appId, deviceId, same plaintext).

Request example

{
 "id": "d5c287b4-5b2f-4f03-baf5-8032c5c354af",
 "system": {
 "ver": "1.0",
 "appId": "lcdxxxxxxxxx",
 "sign": "xjhCQBoJ9hRDsCjyDcHjtDNzRZ3ZJezcawsfWeiaoxU=",
 "time": 1706511734,
 "nonce": "f5a1ae2d-c09c-4d39-a744-83a5c2c653c2"
 },
 "params": {
 "token": "<yourAccessToken>",
 "deviceId": "TESTIPC000012345",
 "passwordV2": "encrypted-password"
 }
}

Response data fields

No business fields. On success, code is "0" and data is {}.

Response example

{
 "id": "d5c287b4-5b2f-4f03-baf5-8032c5c354af",
 "result": {
 "code": "0",
 "msg": "Operation is successful",
 "data": {}
 }
}

Error codes

This API may return the codes below.

CodeMeaningNext step
SN1001Signature errorCheck sign per Development specification
TK1002Token invalid or expiredRefresh accessToken
OP1002Missing required parameterAdd required fields
OP1003Invalid parameterMatch this page’s parameter table
OP1009Permission deniedCheck token and device bind/share grants
OP1013Total call limit exceededReduce call rate
OP1014Daily per-interface limit exceededSee Interface call limits
DV1007Device offlineWait until the device is online

See Return codes · OP/SN/TK for the full catalog.

CodeMeaningNext step
DV2003Property not on deviceUse device.capability.list
DV2004Value out of rangeCheck properties values
DV2007channelId vs scope mismatchRequired for channel scope; omit for device scope
DV2008Mixed device and channel propertiesSplit the request
DV2009productId mismatchOmit or set actual model id

See Capability errors.

device.cover.refresh (Refresh cover image)
device.password.set (Change password)