Zoom Phone API - Device Handset / Line Settings

Hello Zoom Dev Forum! Looking for some assistance regarding handset line key configuration through the API.

Summary

The objective is to be able to retrieve and update device line keys on base stations with multiple handsets. The current API appears to lack the functionality to configure lines on each handset that a base station has configured (such as the Yealink W70B).

Steps to reproduce

I understand that there is an API endpoint at GET /phone/devices/{deviceId}/line_keys however for “base station” devices that can have multiple handsets the following response is returned:

{
  "code": 400,
  "message": "The given device type Yealink w70b does not support this action"
}

I understand that there is also an endpoint (GET /phone/extension/{extensionId}/line_keys) for configuring extension line settings that propagate to the device line settings however when configured in this fashion for a base station each line is configured on a different handset and the extension line key settings do not seem to affect the position in the handset configuration.

The configuration of the line does not affect which handset the line is set to nor does it affect its position on the handset.

Solution

If possible a set of API endpoints should be added. This would enable developers to be able to configure the handset’s lines.

Examples

GET /phone/devices/{deviceId}/handsets
PATCH /phone/devices/{deviceId}/handsets

Hi @DevJake
Thanks for reaching out to us.
While I try to understand this issue further and pass your feedback down to our Engineering team, I am just curious to learn if you have tried the Batch update device line key position endpoint?

Even if you just update one specific device?

Hi Elisa,

Thanks for the reply!

I have looked at that but it doesn’t seem to be able to update “handset” line keys. For base station type devices there are a number of handsets that all have their own line key configuration. Based on what I see in the docs I do not think this functionality is available through this endpoint.

In the Zoom Administrator interface the following object is returned from the handset endpoint which is not accessible from the public API:

[
  {
    "accountId": "[REDACTED]",
    "deviceId": "[REDACTED]",
    "index": 1,
    "alias": "Handset1",
    "handsetName": "Handset1",
    "registrationDtos": [
      {
        "accountId": "[REDACTED]",
        "deviceId": "[REDACTED]",
        "registrationId": "[REDACTED]",
        "lineKeyDTO": {
          "lineKeyId": "[REDACTED]",
          "accountId": "[REDACTED]",
          "extensionId": "[REDACTED]",
          "lineId": "[REDACTED]",
          "type": 3,
          "index": 1,
          "alias": "",
          "outboundNumberId": "",
          "outboundNumberType": 1,
          "lineKeyType": 1,
          "isPrimary": 1,
          "extensionNumber": 2001,
          "displayName": "Jake [REDACTED]",
          "ownerExtensionNumber": 2001,
          "ownerDisplayName": "Jake [REDACTED]",
          "bmwType": 0
        }
      }
    ],
    "handsetBindLineNum": 8
  },
  {
    "accountId": "[REDACTED]",
    "deviceId": "[REDACTED]",
    "index": 2,
    "alias": "Handset2",
    "handsetName": "Handset2",
    "registrationDtos": [
      {
        "accountId": "[REDACTED]",
        "deviceId": "[REDACTED]",
        "registrationId": "[REDACTED]",
        "lineKeyDTO": {
          "lineKeyId": "[REDACTED]",
          "accountId": "[REDACTED]",
          "extensionId": "[REDACTED]",
          "lineId": "[REDACTED]",
          "type": 5,
          "index": 4,
          "alias": "Group 5052",
          "outboundNumberId": "",
          "outboundNumberType": 1,
          "lineKeyType": 1,
          "isPrimary": 1,
          "phoneNumber": "[REDACTED]",
          "phoneNumberId": "[REDACTED]",
          "extensionNumber": 5052,
          "displayName": "Group 5052",
          "ownerExtensionNumber": 2001,
          "ownerDisplayName": "Jake [REDACTED]",
          "bmwType": 0
        }
      }
    ],
    "handsetBindLineNum": 8
  },
  {
    "accountId": "[REDACTED]",
    "deviceId": "[REDACTED]",
    "index": 3,
    "alias": "Handset3",
    "handsetName": "Handset3",
    "handsetBindLineNum": 8
  },
  {
    "accountId": "[REDACTED]",
    "deviceId": "[REDACTED]",
    "index": 4,
    "alias": "Handset4",
    "handsetName": "Handset4",
    "handsetBindLineNum": 8
  },
  {
    "accountId": "[REDACTED]",
    "deviceId": "[REDACTED]",
    "index": 5,
    "alias": "Handset5",
    "handsetName": "Handset5",
    "handsetBindLineNum": 8
  },
  {
    "accountId": "[REDACTED]",
    "deviceId": "[REDACTED]",
    "index": 6,
    "alias": "Handset6",
    "handsetName": "Handset6",
    "handsetBindLineNum": 8
  },
  {
    "accountId": "[REDACTED]",
    "deviceId": "[REDACTED]",
    "index": 7,
    "alias": "Handset7",
    "handsetName": "Handset7",
    "handsetBindLineNum": 8
  },
  {
    "accountId": "[REDACTED]",
    "deviceId": "[REDACTED]",
    "index": 8,
    "alias": "Handset8",
    "handsetName": "Handset8",
    "handsetBindLineNum": 8
  }
]

I do not see any way currently to update or read this information from the public API.