Zoom Phone External Contacts API

The External Contacts API from Zoom Phone — 2 operation(s) for external contacts.

Operations 5

GET /phone/external_contacts List external contacts #
POST /phone/external_contacts Add an external contact #
GET /phone/external_contacts/{externalContactId} Get external contact details #
DELETE /phone/external_contacts/{externalContactId} Delete an external contact #
PATCH /phone/external_contacts/{externalContactId} Update external contact #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/zoom-phone-external-contacts-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

zoom-phone-external-contacts-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Phone External Contacts API
  description: "You can access information from Zoom with Zoom Phone APIs to build private services or public applications on the [Zoom App Marketplace](https://marketplace.zoom.us/).\n\n  To learn how to get your credentials and create private or public applications, see Zoom APIs use [OAuth 2.0 authorization](https://developers.zoom.us/docs/integrations/oauth/). \n\n  All endpoints are available through `https` at `api.zoom.us/v2/`. For instance, `https://api.zoom.us/v2/users/` returns all users on an account. You'll receive a `403` error message if you have not set up Zoom Phone."
  termsOfService: https://zoom.us/docs/en-us/zoom_api_license_and_tou.html
  contact:
    name: Zoom Developers
    url: https://developer.zoom.us/
  version: '2'
servers:
- url: https://api.zoom.us/v2
tags:
- name: External Contacts
paths:
  /phone/external_contacts:
    get:
      tags:
      - External Contacts
      summary: List external contacts
      description: "Lists the external contacts.\n\n**Prerequisites** \n* Pro or a higher account with Zoom Phone license \n* Account owner or admin permissions\n\n**[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `phone:read:admin`\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `phone:read:list_external_contacts:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`"
      operationId: listExternalContacts
      parameters:
      - name: next_page_token
        in: query
        description: The next page token paginates through a large set of results. A next page token is returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.
        required: false
        schema:
          type: string
          example: BJLYC6PABbAHdjwSkGVQeeR6B1juwHqj3G2
      - name: page_size
        in: query
        description: The number of records returned within a single API call.
        required: false
        schema:
          maximum: 300
          type: integer
          example: 30
          default: 30
      responses:
        '200':
          description: "**HTTP Status Code:** `200`  \n \nExternal contacts listed successfully."
          content:
            application/json:
              schema:
                type: object
                properties:
                  external_contacts:
                    type: array
                    description: External contacts information.
                    items:
                      type: object
                      properties:
                        description:
                          type: string
                          description: The external contact's description.
                          example: External contact Johnson
                        email:
                          type: string
                          description: The external contact's email address.
                          example: example@example.com
                        extension_number:
                          type: string
                          description: The external contact's extension number.
                          example: '101014'
                        external_contact_id:
                          type: string
                          description: Zoom-generated external contact ID.
                          example: OJGi5xOFQPmrJbKg68-iWg
                        id:
                          type: string
                          description: Customer-configured external contact ID.
                          example: external_contact_01
                        name:
                          type: string
                          description: The external contact's username or extension display name.
                          example: Johnson
                        phone_numbers:
                          type: array
                          description: The external contact's phone numbers.
                          items:
                            type: string
                            example: '+12058945656'
                        auto_call_recorded:
                          type: boolean
                          description: Whether to allow the automatic call recording.
                          example: true
                        profile_picture_download_url:
                          type: string
                          description: 'The profile picture''s download URL. '
                          example: https://file.zoom.us/public/file/NgY6XhB0Q1KUOIpbnjQrTA/MS41Lm3jVUCBCmBzQxZEXUvHcJ_YRtZ-CVuQ68tE7kKC60t_/twP0LQrnQfS7bQ6utANohw.png
                        enable_internal_extension:
                          type: boolean
                          description: Whether to treat this contact as an internal extension
                          example: true
                  next_page_token:
                    type: string
                    description: The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.
                    example: BJLYC6PABbAHdjwSkGVQeeR6B1juwHqj3G2
                  page_size:
                    type: integer
                    description: The number of records returned with a single API call.
                    example: 30
        '429':
          description: "**HTTP Status Code:** `429` <br>\n Too Many Requests  For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/). \n\n "
      security:
      - openapi_oauth:
        - phone:read:admin
        - phone:read:list_external_contacts:admin
        openapi_authorization: []
      x-extensions:
        x-permissions: []
        x-macro-scopes:
        - phone:read:admin
        x-granular-scopes:
        - phone:read:list_external_contacts:admin
    post:
      tags:
      - External Contacts
      summary: Add an external contact
      description: "Adds an external contact.\n\n**Prerequisites** \n* Pro or a higher account with Zoom Phone license \n* Account owner or admin permissions\n\n**[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `phone:write:admin`\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `phone:write:external_contact:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`"
      operationId: addExternalContact
      requestBody:
        content:
          application/json:
            schema:
              required:
              - name
              type: object
              properties:
                description:
                  type: string
                  description: The external contact's description.
                  example: External contact Johnson
                email:
                  maxLength: 255
                  type: string
                  description: The external contact's email address.
                  example: example@example.com
                extension_number:
                  type: string
                  description: The external contact's extension number in the original phone system. Make certain that this extension number is **not** duplicated with an existing extension number in the account.
                  example: '101014'
                id:
                  type: string
                  description: 'The customer-configured external contact ID. It is recommended that you use a primary key from the original phone system.


                    If you do **not** use this parameter, the API automatically generates an `externalContactId`.'
                  example: external_contact_01
                name:
                  maxLength: 255
                  type: string
                  description: The external contact's username or extension display name.
                  example: Johnson
                phone_numbers:
                  maxItems: 200
                  type: array
                  description: A comma-separated list of the external contact's phone numbers. This value **must** be in [E.164](https://en.wikipedia.org/wiki/E.164) format. If you do not provide an extension number, you **must** provide this value.
                  items:
                    type: string
                    example: '+12058945656'
                routing_path:
                  type: string
                  description: The external contact's SIP group, to define the call routing path. This is for customers that use SIP trunking.
                  example: PSTN
                auto_call_recorded:
                  type: boolean
                  description: Whether to allow the automatic call recording.
                  example: true
                profile_picture:
                  type: object
                  properties:
                    type:
                      type: string
                      description: 'The format of attachments. Supported formats: JPG, PNG, JPEG, GIF.'
                      example: PNG
                      enum:
                      - JPG
                      - JPEG
                      - PNG
                      - GIF
                    base64_encoding:
                      type: string
                      description: The ASCII string to send [Base64](https://en.wikipedia.org/wiki/Base64) encoded picture as text. The size limit is 2MB.
                      example: iVBORw0KGgo...
                  description: 'This field is optional. If provided, the image will be used as the profile picture. Supported file formats : JPG, PNG, JPEG, GIF, the size limit is 2MB. If you need to use this field, contact Zoom Support.'
                enable_internal_extension:
                  type: boolean
                  description: This field is set to true when the contact should be treated as an internal extension for users outside their permitted calling locations or during restricted calling hours. Leave blank or set to false if the contact is not intended to be treated as an internal extension.
                  example: true
      responses:
        '201':
          description: "**HTTP Status Code:** `201` **Created**  \n \nExternal contact added successfully."
          content:
            application/json:
              schema:
                type: object
                properties:
                  name:
                    type: string
                    description: The external contact's username or extension display name.
                    example: Johnson
                  external_contact_id:
                    type: string
                    description: The Zoom-generated external contact ID.
                    example: nqerMCD0Tu6RPGoCpVbPtA
        '400':
          description: "**HTTP Status Code:** `400` <br>\n Bad Request  \n\n **Error Code:** `300` <br>\n  Validation failed.\n - If you need to use profile_picture field, please contact Zoom Support.\n - Profile picture size must be less than 2 MB.\n - Profile picture file type error.\n - Profile picture file data error. <br>\n**Error Code:** `405` <br>\n The number of items for phone_numbers must not exceed 200. <br>\n"
        '429':
          description: "**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/). \n\n "
      security:
      - openapi_oauth:
        - phone:write:admin
        - phone:write:external_contact:admin
        openapi_authorization: []
      x-extensions:
        x-permissions: []
        x-macro-scopes:
        - phone:write:admin
        x-granular-scopes:
        - phone:write:external_contact:admin
  /phone/external_contacts/{externalContactId}:
    get:
      tags:
      - External Contacts
      summary: Get external contact details
      description: "Returns an external contact's information.\n\n**Prerequisites** \n* Pro or a higher account with Zoom Phone license \n* Account owner or admin permissions  \n \n\n**[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `phone:read:admin`\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `phone:read:external_contact:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`"
      operationId: getAExternalContact
      parameters:
      - name: externalContactId
        in: path
        description: The external contact's ID.
        required: true
        schema:
          type: string
          example: OJGi5xOFQPmrJbKg68-iWg
      responses:
        '200':
          description: "**HTTP Status Code:** `200` **OK**  \n \nExternal contact information retrieved successfully."
          content:
            application/json:
              schema:
                type: object
                properties:
                  description:
                    type: string
                    description: The external contact's description.
                    example: External contact Johnson
                  email:
                    type: string
                    description: The external contact's email address.
                    example: example@example.com
                  extension_number:
                    type: string
                    description: The external contact's extension number.
                    example: '101014'
                  external_contact_id:
                    type: string
                    description: The Zoom-generated external contact ID.
                    example: OJGi5xOFQPmrJbKg68-iWg
                  id:
                    type: string
                    description: The customer-configured external contact ID.
                    example: external_contact_01
                  name:
                    type: string
                    description: The external contact's username or extension display name.
                    example: Johnson
                  phone_numbers:
                    type: array
                    description: The external contact's phone numbers.
                    items:
                      type: string
                      example: '+12058945657'
                  auto_call_recorded:
                    type: boolean
                    description: Whether to allow the automatic call recording.
                    example: true
                  profile_picture_download_url:
                    type: string
                    description: 'profile picture download url '
                    example: https://file.zoom.us/public/file/NgY6XhB0Q1KUOIpbnjQrTA/MS41Lm3jVUCBCmBzQxZEXUvHcJ_YRtZ-CVuQ68tE7kKC60t_/twP0LQrnQfS7bQ6utANohw.png
                  enable_internal_extension:
                    type: boolean
                    description: Whether to treat this contact as an internal extension
                    example: true
        '400':
          description: "**HTTP Status Code:** `400` <br>\n Bad Request  \n\n **Error Code:** `400` <br>\n External contact does not exist: {externalContactId}. <br>\n"
        '429':
          description: "**HTTP Status Code:** `429` <br>\n Too Many Requests  For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/). \n\n "
      security:
      - openapi_oauth:
        - phone:read:admin
        - phone:read:external_contact:admin
        openapi_authorization: []
      x-extensions:
        x-permissions: []
        x-macro-scopes:
        - phone:read:admin
        x-granular-scopes:
        - phone:read:external_contact:admin
    delete:
      tags:
      - External Contacts
      summary: Delete an external contact
      description: "Removes an external contact.\n\n**Prerequisites:** \n* Pro or a higher account with Zoom Phone license \n* Account owner or admin permissions\n\n**[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `phone:write:admin`\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `phone:delete:external_contact:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Light`"
      operationId: deleteAExternalContact
      parameters:
      - name: externalContactId
        in: path
        description: The external contact's ID.
        required: true
        schema:
          type: string
          example: OJGi5xOFQPmrJbKg68-iWg
      responses:
        '204':
          description: "**HTTP Status Code:** `204` **No Content**  \n \nExternal contact deleted successfully."
        '400':
          description: "**HTTP Status Code:** `400` <br>\n Bad Request\n\n**Error Code:** `300` <br>\n\n\n"
        '429':
          description: "**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/). \n\n "
      security:
      - openapi_oauth:
        - phone:write:admin
        - phone:delete:external_contact:admin
        openapi_authorization: []
      x-extensions:
        x-macro-scopes:
        - phone:write:admin
        x-granular-scopes:
        - phone:delete:external_contact:admin
    patch:
      tags:
      - External Contacts
      summary: Update external contact
      description: "Updates an external contact's information.\n\n**Prerequisites** \n* Pro or a higher account with Zoom Phone license \n* Account owner or admin permissions\n\n**[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `phone:write:admin`\n\n**[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `phone:update:external_contact:admin`\n\n**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT`"
      operationId: updateExternalContact
      parameters:
      - name: externalContactId
        in: path
        description: The external contact ID.
        required: true
        schema:
          type: string
          example: OJGi5xOFQPmrJbKg68-iWg
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                description:
                  type: string
                  description: The external contact's description.
                  example: External contact Johnson
                email:
                  maxLength: 255
                  type: string
                  description: The external contact's email address.
                  example: example@example.com
                extension_number:
                  type: string
                  description: The external contact's extension number in the original phone system. Make certain that this extension number is **not** duplicated with an existing extension number in the account.
                  example: '101014'
                id:
                  type: string
                  description: 'The customer-configured external contact ID. We recommend that you use a primary key from the original phone system.


                    If you do **not** use this parameter, the API automatically generates an `externalContactId`.'
                  example: external_contact_01
                name:
                  maxLength: 255
                  type: string
                  description: The external contact's username or extension display name.
                  example: Johnson
                phone_numbers:
                  maxItems: 200
                  type: array
                  description: A comma-separated list of the external contact's phone numbers. This value **must** be in [E.164](https://en.wikipedia.org/wiki/E.164) format. If you do not provide an extension number, you **must** provide this value.
                  items:
                    type: string
                    example: '+12058945657'
                routing_path:
                  type: string
                  description: The external contact's SIP group, to define the call routing path. This is for customers that use SIP trunking.
                  example: PSTN
                auto_call_recorded:
                  type: boolean
                  description: Whether to allow the automatic call recording.
                  example: true
                profile_picture:
                  type: object
                  properties:
                    type:
                      type: string
                      description: 'The format of attachments. Supported formats: JPG, PNG, JPEG, GIF.'
                      example: PNG
                      enum:
                      - JPG
                      - JPEG
                      - PNG
                      - GIF
                    base64_encoding:
                      type: string
                      description: The ASCII string to send [Base64](https://en.wikipedia.org/wiki/Base64) encoded picture as text. The size limit is 2MB.
                      example: iVBORw0KGgo...
                  description: "The `profile_picture` field is optional. If you need to use this field, please contact Zoom Support. If provided, it determines how the user's profile picture should be handled:  \n- Omit profile_picture field: The profile picture will remain unchanged.  \n- Set type or base64_encoding to empty strings (\"\"): The profile picture will be reset to the system default.  \n- Provide a valid image (such as  type is \"png\" and a valid Base64 string in base64_encoding): The profile picture will be updated accordingly.  \n\nThe following file formats are supported : \nJPG, PNG, JPEG, GIF, the size limit is 2MB.  \n\nExample (reset to default): \n```json\n{\n    ...\n    \"profile_picture\": {\n        \"type\": \"\",\n        \"base64_encoding\": \"\"\n    }\n    ...\n}\n```\nExample (update with a new picture):    \n\n```json\n{\n    \"profile_picture\": {\n        \"type\": \"png\",\n        \"base64_encoding\": \"iVBORw0KGgoAAAANSUhEUgAABVY...\"\n    }\n}\n```"
                enable_internal_extension:
                  type: boolean
                  description: This field is set to true when the contact should be treated as an internal extension for users outside their permitted calling locations or during restricted calling hours. Leave blank to retain the existing status of external contact or set to false if the contact is not intended to be treated as an internal extension.
                  example: true
      responses:
        '204':
          description: "**HTTP Status Code:** `204` **No Content**  \n \nExternal contact updated successfully."
        '400':
          description: "**HTTP Status Code:** `400` <br>\n Bad Request  \n\n **Error Code:** `400` <br>\n  Validation failed.  \n - External contact does not exist: {0}.\n - If you need to use profile_picture field, please contact Zoom Support.  \n - Profile picture size must less than 2 MB.  \n - Profile picture file type error.  \n - Profile picture file data error. <br>\n"
        '429':
          description: "**HTTP Status Code:** `429` <br>\n Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/). \n\n "
      security:
      - openapi_oauth:
        - phone:write:admin
        - phone:update:external_contact:admin
        openapi_authorization: []
      x-extensions:
        x-permissions: []
        x-macro-scopes:
        - phone:write:admin
        x-granular-scopes:
        - phone:update:external_contact:admin
components:
  securitySchemes:
    openapi_authorization:
      type: apiKey
      name: Authorization
      in: header
    openapi_oauth:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: /
          tokenUrl: ''
          refreshUrl: ''
          scopes:
            phone:read:admin: phone:read:admin
            phone:read:list_account_settings:admin: phone:read:list_account_settings:admin
            phone:write:admin: phone:write:admin
            phone:write:customized_number:admin: phone:write:customized_number:admin
            phone:read:list_customized_number:admin: phone:read:list_customized_number:admin
            phone:delete:customized_number:admin: phone:delete:customized_number:admin
            phone:write:alert_setting:admin: phone:write:alert_setting:admin
            phone:read:list_alert_settings:admin: phone:read:list_alert_settings:admin
            phone:read:alert_setting:admin: phone:read:alert_setting:admin
            phone:patch:alert_setting:admin: phone:patch:alert_setting:admin
            phone:delete:alert_setting:admin: phone:delete:alert_setting:admin
            phone:read: phone:read
            phone:read:audio: phone:read:audio
            phone:read:audio:admin: phone:read:audio:admin
            phone:write: phone:write
            phone:delete:audio: phone:delete:audio
            phone:delete:audio:admin: phone:delete:audio:admin
            phone:update:audio: phone:update:audio
            phone:update:audio:admin: phone:update:audio:admin
            phone:read:list_audios: phone:read:list_audios
            phone:read:list_audios:admin: phone:read:list_audios:admin
            phone:write:audio: phone:write:audio
            phone:write:audio:admin: phone:write:audio:admin
            phone:write:batch_audios: phone:write:batch_audios
            phone:write:batch_audios:admin: phone:write:batch_audios:admin
            phone:read:list_auto_receptionists:admin: phone:read:list_auto_receptionists:admin
            phone:write:auto_receptionist:admin: phone:write:auto_receptionist:admin
            phone:delete:auto_receptionist:admin: phone:delete:auto_receptionist:admin
            phone:update:auto_receptionist:admin: phone:update:auto_receptionist:admin
            phone:read:auto_receptionist:admin: phone:read:auto_receptionist:admin
            phone:read:auto_receptionist_call_handling_setting:admin: phone:read:auto_receptionist_call_handling_setting:admin
            phone:update:auto_receptionist_call_handling_setting:admin: phone:update:auto_receptionist_call_handling_setting:admin
            phone:delete:auto_receptionist_number:admin: phone:delete:auto_receptionist_number:admin
            phone:write:auto_receptionist_number:admin: phone:write:auto_receptionist_number:admin
            phone:update:auto_receptionist_policy:admin: phone:update:auto_receptionist_policy:admin
            phone:read:auto_receptionist_policy:admin: phone:read:auto_receptionist_policy:admin
            phone:delete:auto_receptionist_policy:admin: phone:delete:auto_receptionist_policy:admin
            phone:write:auto_receptionist_policy:admin: phone:write:auto_receptionist_policy:admin
            phone:read:auto_receptionist_setting:admin: phone:read:auto_receptionist_setting:admin
            phone:write:auto_receptionist_setting:admin: phone:write:auto_receptionist_setting:admin
            phone:update:auto_receptionist_setting:admin: phone:update:auto_receptionist_setting:admin
            phone:delete:auto_receptionist_setting:admin: phone:delete:auto_receptionist_setting:admin
            phone:read:list_billing_accounts:admin: phone:read:list_billing_accounts:admin
            phone:read:billing_account:admin: phone:read:billing_account:admin
            phone:write:blocked_list:admin: phone:write:blocked_list:admin
            phone:read:list_blocked_lists:admin: phone:read:list_blocked_lists:admin
            phone:delete:blocked_list:admin: phone:delete:blocked_list:admin
            phone:read:blocked_list:admin: phone:read:blocked_list:admin
            phone:update:blocked_list:admin: phone:update:blocked_list:admin
            phone:read:list_call_handling_settings:admin: phone:read:list_call_handling_settings:admin
            phone:update:call_handling_setting:admin: phone:update:call_handling_setting:admin
            phone:delete:call_handling_setting:admin: phone:delete:call_handling_setting:admin
            phone:write:call_handling_setting:admin: phone:write:call_handling_setting:admin
            phone_call_log:read: phone_call_log:read
            phone_call_log:read:admin: phone_call_log:read:admin
            phone:read:call_log:admin: phone:read:call_log:admin
            phone:read:list_call_logs:admin: phone:read:list_call_logs:admin
            phone:update:call_log:admin: phone:update:call_log:admin
            phone:read:ai_call_summary: phone:read:ai_call_summary
            phone:read:ai_call_summary:admin: phone:read:ai_call_summary:admin
            phone:read:list_call_logs: phone:read:list_call_logs
            phone_call_log:write: phone_call_log:write
            phone_call_log:write:admin: phone_call_log:write:admin
            phone:delete:call_log: phone:delete:call_log
            phone:delete:call_log:admin: phone:delete:call_log:admin
            phone:read:list_call_queues:admin: phone:read:list_call_queues:admin
            phone:write:call_queue:admin: phone:write:call_queue:admin
            phone:delete:call_queue:admin: phone:delete:call_queue:admin
            phone:update:call_queue:admin: phone:update:call_queue:admin
            phone:read:call_queue:admin: phone:read:call_queue:admin
            phone:read:call_queue_call_handling_setting:admin: phone:read:call_queue_call_handling_setting:admin
            phone:update:call_queue_call_handling_setting:admin: phone:update:call_queue_call_handling_setting:admin
            phone:read:call_queue_custom_group:admin: phone:read:call_queue_custom_group:admin
            phone:write:call_queue_custom_group:admin: phone:write:call_queue_custom_group:admin
            phone:update:call_queue_custom_group:admin: phone:update:call_queue_custom_group:admin
            phone:delete:call_queue_custom_group:admin: phone:delete:call_queue_custom_group:admin
            phone:delete:call_queue_custom_group:master: phone:delete:call_queue_custom_group:master
            phone:master: phone:master
            phone:read:call_queue_custom_group:master: phone:read:call_queue_custom_group:master
            phone:write:call_queue_custom_group_member:admin: phone:write:call_queue_custom_group_member:admin
            phone:delete:call_queue_custom_group_member:admin: phone:delete:call_queue_custom_group_member:admin
            phone:write:call_queue_member:admin: phone:write:call_queue_member:admin
            phone:delete:call_queue_member:admin: phone:delete:call_queue_member:admin
            phone:read:list_call_queue_members:admin: phone:read:list_call_queue_members:admin
            phone:write:call_queue_number:admin: phone:write:call_queue_number:admin
            phone:delete:call_queue_number:admin: phone:delete:call_queue_number:admin
            phone:read:call_queue_policy:admin: phone:read:call_queue_policy:admin
            phone:update:call_queue_policy:admin: phone:update:call_queue_policy:admin
            phone:write:call_queue_policy:admin: phone:write:call_queue_policy:admin
            phone:delete:call_queue_policy:admin: phone:delete:call_queue_policy:admin
            phone:read:list_call_queue_recordings:admin: phone:read:list_call_queue_recordings:admin
            phone:read:call_queue_setting:admin: phone:read:call_queue_setting:admin
            phone:write:call_queue_setting:admin: phone:write:call_queue_setting:admin
            phone:delete:call_queue_setting:admin: phone:delete:call_queue_setting:admin
            phone:update:call_queue_setting:admin: phone:update:call_queue_setting:admin
            phone:update:carrier_number:admin: phone:update:carrier_number:admin
            phone:write:carrier_number:admin: phone:write:carrier_number:admin
            phone:read:list_carrier_numbers:admin: phone:read:list_carrier_numbers:admin
            phone:delete:carrier_number:admin: phone:delete:carrier_number:admin
            phone:write:common_area:admin: phone:write:common_area:admin
            phone:read:common_area:admin: phone:read:common_area:admin
            phone:read:list_common_area_activation_codes:admin: phone:read:list_common_area_activation_codes:admin
            phone:write:apply_template_to_common_areas:admin: phone:write:apply_template_to_common_areas:admin
            phone:delete:common_area:admin: phone:delete:common_area:admin
            phone:update:com

# --- truncated at 32 KB (56 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/zoom-phone/refs/heads/main/openapi/zoom-phone-external-contacts-api-openapi.yml