> ## Documentation Index
> Fetch the complete documentation index at: https://docs.parable.work/llms.txt
> Use this file to discover all available pages before exploring further.

# Zoom

> Sync users, meeting reports, meeting participants, and Zoom Phone call history

Sync users, meeting reports, meeting participants, and Zoom Phone call history.

<Tabs>
  <Tab title="Overview">
    Connect Parable to Zoom for account users, meeting reports, and past meeting participants using Server-to-Server OAuth. Parable obtains access tokens with only **Account ID**, **Client ID**, and **Client Secret** — no end-user sign-in during sync.

    #### Users

    List and profile data for users in your Zoom account

    #### Meetings & reports

    Per-user meeting history reports where scopes allow

    #### Meeting participants

    Per-meeting participant identities for past meetings

    ## Data streams

    This Provider Plugin defines 4 data streams.

    | Stream         | Description                                                                                                                            | Sync        |
    | -------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
    | `users`        | All users in the Zoom account                                                                                                          | full        |
    | `meetings`     | Past meeting reports per user. Zoom restricts report queries to 1-month windows, so maxWindowDays is set to 30.                        | incremental |
    | `participants` | Past meeting participant rosters per meeting instance. Fans out from meetings via meeting UUID to /past\_meetings/{uuid}/participants. | full        |
    | `user_calls`   | Zoom Phone call history per user. Fetches call logs via /v2/phone/users/{userId}/call\_history with monthly windowing.                 | incremental |
  </Tab>

  <Tab title="Setup Guide">
    ### Server-to-server OAuth

    #### What You'll Need

    | Credential        | What it is              |
    | ----------------- | ----------------------- |
    | **Account ID**    | Zoom account identifier |
    | **Client ID**     | OAuth client ID         |
    | **Client Secret** | OAuth client secret     |

    > **Info:** **Setup access in Zoom.** These steps require **Account Owner or Admin (must be allowed to create Server-to-Server OAuth apps)**, or a colleague with equivalent permissions who can create credentials for you.
    >
    > If that is not you, ask your Zoom administrator.

    #### Step 1: Access Zoom App Marketplace

    1. Go to <a href="https://marketplace.zoom.us/" target="_blank" rel="noopener noreferrer">Zoom App Marketplace</a>
    2. Click **Develop** → **Build App**
    3. Sign in with your Zoom admin account

    #### Step 2: Create Server-to-Server OAuth App

    1. Find **Server-to-Server OAuth** in the app types
    2. Click **Create**
    3. Enter app name: `Parable Integration`
    4. Click **Create**

    #### Step 3: Copy Credentials

    On the **App Credentials** page, copy:

    * **Account ID**
    * **Client ID**
    * **Client Secret**

    > **Warning:** Store these credentials securely — the Client Secret cannot be retrieved later.

    #### Step 4: Add Scopes

    Go to **Scopes** and add the following:

    | Scope                                       | Purpose                          |
    | ------------------------------------------- | -------------------------------- |
    | `user:read:list_users:admin`                | List account users               |
    | `report:read:user:admin`                    | Per-user meeting history reports |
    | `meeting:read:list_past_participants:admin` | Past meeting participant lists   |

    > **Info:** These are the current granular scope names required by the Zoom API. Older apps may show `user:read:admin` and `report:read:admin` — both still work but new apps should use the granular names above.

    #### Step 5: Activate the App

    1. Complete all required fields (Information, Feature)
    2. Go to **Activation**
    3. Click **Activate your app**

    > **Info:** The app will be activated immediately for your account.

    #### Step 6: Enter values in the form

    Enter **Account ID**, **Client ID**, and **Client Secret** into the Provider form, then click **Save & test connection**.

    ```bash Get Access Token theme={null}
    curl -X POST "https://zoom.us/oauth/token" \
      -H "Content-Type: application/x-www-form-urlencoded" \
      -u "CLIENT_ID:CLIENT_SECRET" \
      -d "grant_type=account_credentials" \
      -d "account_id=ACCOUNT_ID"
    ```

    ```bash Test API Access theme={null}
    curl -H "Authorization: Bearer ACCESS_TOKEN" \
      "https://api.zoom.us/v2/users?page_size=5"
    ```

    > **Success:** **Success!** If you received a `200 OK` response with valid data, your credentials are configured correctly. You can now configure this Provider in Parable.

    > **Tip:** Enter **Account ID**, **Client ID**, and **Client Secret** in the Provider form, then click **Save & test connection**.

    > **Tip:** **Rate Limits:** Zoom enforces rate limits of **varies by endpoint; typically 30-100 requests/second with daily quotas**.
    >
    > Parable handles rate limiting automatically with exponential backoff, but initial syncs of large datasets may take longer due to these limits.
  </Tab>

  <Tab title="Permissions">
    <AccordionGroup>
      <Accordion id="provider-permission-tap-zoom-meetings-bfb22cb8b071" title="Meetings" icon="diagram-project" iconType="sharp-duotone-solid">
        Developer identifier: `meetings`

        **Meetings.** Past meeting reports per user. Zoom restricts report queries to 1-month windows, so maxWindowDays is set to 30.

        * **Enables:** Reconcile reported meeting instances to hosts, topics, start times, durations, and participant traversal.
        * **Scope:** Reads the records selected by Zoom's `/report/users/{id}/meetings` operation as a changelog stream using incremental synchronization. Visibility follows the Zoom account scopes and administrator access granted to the server-to-server app. The report contains meeting metadata within provider-supported one-month windows, not transcript, chat, recording, or file content. This stream supplies no reliable deletion signal.

        <AccordionGroup>
          <Accordion id="provider-permission-field-zoom-meetings-custom-keys-21665373889d" title="Custom Keys" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.custom_keys`

            **Custom Keys.** Custom key/value pairs associated with the meeting report row. It preserves the nested context needed to interpret the parent meeting.

            * **Enables:** Connect the parent meeting to every referenced custom key in `meetings.custom_keys`; identify provider IDs that do not resolve to the expected related object.
            * **Interpretation:** Zoom returns custom keys as an array of custom key entries on each meeting; missing, empty, and permission-redacted arrays are not equivalent.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-custom-keys-key-d6674e40ffdc" title="Key" icon="diagram-project" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.custom_keys.key`

            **Key.** Custom key name. It provides the reference needed to connect the meeting to the corresponding provider object.

            * **Enables:** Match repeated custom key entries on key in `meetings.CustomKey.key`; collapse only entries that share this declared transform key.
            * **Interpretation:** Zoom reports key as an identifier in its custom key namespace; it is not a universal identity outside Zoom. The connector explicitly marks this field as a transform deduplication key.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-custom-keys-value-598d6ff362e4" title="Value" icon="circle-check" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.custom_keys.value`

            **Value.** Custom key value. It must be interpreted with the enclosing provider field name, type, or custom schema for the custom key.

            * **Enables:** Interpret `meetings.CustomKey.value` with the enclosing custom field name, declared type, and provider schema; compare only records that share that contract.
            * **Interpretation:** Zoom reports value under the enclosing custom or typed field contract on each custom key; compare it only with values from the same provider key and type.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-dept-e48c9865f3a1" title="Dept" icon="file-code" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.dept`

            **Dept.** Department of the meeting host. It supplies the dept profile facet used to reconcile or attribute the meeting.

            * **Enables:** Reconcile the meeting's dept in `meetings.dept` with its provider profile or directory identity; confirm ambiguous matches with the stable provider ID.
            * **Interpretation:** Zoom reports dept as a mutable profile or directory attribute on each meeting; it may be absent, shared, or non-unique.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-duration-9cdfdbc7ae18" title="Duration" icon="calendar-clock" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.duration`

            **Duration.** Meeting duration in minutes. It supplies the duration measure for the meeting at the provider's declared unit and grain.

            * **Enables:** Measure duration through `meetings.duration` for each meeting and compare only values with the same unit and record grain.
            * **Interpretation:** Zoom reports duration as a measure on each meeting; compare only records with the same unit and aggregation grain.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-end-time-9cdf1681410e" title="End Time" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.end_time`

            **End Time.** Actual end time of the meeting in ISO 8601 format. It anchors the meeting on the provider's reported timeline.

            * **Enables:** Filter Meetings by end time in `meetings.end_time`; pair that boundary with the corresponding start before measuring elapsed time.
            * **Interpretation:** Zoom reports end time as a timestamp on each meeting; timezone and precision follow this API field, and absence is not an inferred event time.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-has-chat-f6b93d845858" title="Has Chat" icon="comment-dots" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.has_chat`

            **Has Chat.** Whether in-meeting chat was used. It distinguishes the provider-defined has chat state or classification for the meeting.

            * **Enables:** Filter Meetings by whether in-meeting chat was used in `meetings.has_chat`; count true, false, and missing results separately.
            * **Interpretation:** Zoom reports in-meeting chat was used as a boolean on each meeting; a missing field is unknown, not false.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-has-recording-23a818baed75" title="Has Recording" icon="circle-check" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.has_recording`

            **Has Recording.** Whether recording was used in the meeting. It distinguishes the provider-defined has recording state or classification for the meeting.

            * **Enables:** Filter Meetings by whether recording was used in the meeting in `meetings.has_recording`; count true, false, and missing results separately.
            * **Interpretation:** Zoom reports recording was used in the meeting as a boolean on each meeting; a missing field is unknown, not false.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-has-screen-share-e5b8545eb84d" title="Has Screen Share" icon="circle-check" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.has_screen_share`

            **Has Screen Share.** Whether screen share was used in the meeting. It distinguishes the provider-defined has screen share state or classification for the meeting.

            * **Enables:** Filter Meetings by whether screen share was used in the meeting in `meetings.has_screen_share`; count true, false, and missing results separately.
            * **Interpretation:** Zoom reports screen share was used in the meeting as a boolean on each meeting; a missing field is unknown, not false.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-host-id-7c6f02cb8a34" title="Host ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.host_id`

            **Host ID.** User ID of the meeting host when returned by the report API. It provides the reference needed to connect the meeting to the corresponding provider object.

            * **Enables:** Connect each meeting in Meetings to the referenced host through `meetings.host_id`; flag host ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports host ID as an identifier in its host namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-id-afd1b44292d9" title="ID" icon="diagram-project" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.id`

            **ID.** Meeting ID (numeric, reused for recurring meetings). It provides the reference needed to connect the meeting to the corresponding provider object.

            * **Enables:** Connect each meeting in Meetings to the referenced meeting through `meetings.id`; flag ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports ID as an identifier in its meeting namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-participants-count-3c8f5125b91a" title="Participants Count" icon="map-location-dot" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.participants_count`

            **Participants Count.** Number of participants who joined the meeting. It supplies the participants count measure for the meeting at the provider's declared unit and grain.

            * **Enables:** Measure participants count through `meetings.participants_count` for each meeting and compare only values with the same unit and record grain.
            * **Interpretation:** Zoom reports participants count as a measure on each meeting; compare only records with the same unit and aggregation grain.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-source-206d8c60ca27" title="Source" icon="circle-check" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.source`

            **Source.** Source of the meeting record when returned by the report API. It distinguishes the provider-defined source state or classification for the meeting.

            * **Enables:** Filter Meetings by the exact Zoom-defined source in `meetings.source` and preserve unknown values as distinct categories.
            * **Interpretation:** Zoom supplies source from its own taxonomy on each meeting; preserve unknown and newly introduced labels.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-source-user-id-c4297d075d86" title="Source User ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.source_user_id`

            **Source User ID.** Parent user ID from traversal when the report row is attributed to a user. It provides the reference needed to connect the meeting to the corresponding provider object.

            * **Enables:** Connect each meeting in Meetings to the referenced source user through `meetings.source_user_id`; flag source user ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports source user ID as an identifier in its source user namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-start-time-e879b63f5b16" title="Start Time" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.start_time`

            **Start Time.** Actual start time of the meeting in ISO 8601 format. It anchors the meeting on the provider's reported timeline.

            * **Enables:** Filter Meetings by start time in `meetings.start_time`; pair that boundary with the corresponding end before measuring elapsed time.
            * **Interpretation:** Zoom reports start time as a timestamp on each meeting; timezone and precision follow this API field, and absence is not an inferred event time. A connector directive uses this field to order records for latest-state or incremental processing. The schema designates this field as the event timestamp.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-topic-8e3a757adac0" title="Topic" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.topic`

            **Topic.** Meeting topic/title set by the host. It supplies the returned topic text needed to understand the meeting in context.

            * **Enables:** Search the returned topic text in `meetings.topic` and attribute each match to its parent meeting and reported author when available.
            * **Interpretation:** Zoom supplies topic as returned text on each meeting; truncation, formatting, and access boundaries can limit completeness.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-total-minutes-1dcbceb4f523" title="Total Minutes" icon="map-location-dot" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.total_minutes`

            **Total Minutes.** Total billed participant minutes for the meeting. It supplies the total minutes measure for the meeting at the provider's declared unit and grain.

            * **Enables:** Measure total minutes through `meetings.total_minutes` for each meeting and compare only values with the same unit and record grain.
            * **Interpretation:** Zoom reports total minutes as a measure on each meeting; compare only records with the same unit and aggregation grain.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-tracking-fields-df27e5f8c069" title="Tracking Fields" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.tracking_fields`

            **Tracking Fields.** Tracking fields configured for the meeting. It preserves the nested context needed to interpret the parent meeting.

            * **Enables:** Compare the exact Zoom-configured tracking fields set in `meetings.tracking_fields` for each meeting; preserve provider labels and unknown entries.
            * **Interpretation:** Zoom returns tracking fields as an array of tracking field entries on each meeting; missing, empty, and permission-redacted arrays are not equivalent.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-tracking-fields-field-c579ba883ee0" title="Field" icon="code-branch" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.tracking_fields.field`

            **Field.** Label/name of the tracking field. It gives the tracking field a human-readable provider label while its identifier remains the stable reference.

            * **Enables:** Match repeated tracking field entries on field in `meetings.TrackingField.field`; collapse only entries that share this declared transform key.
            * **Interpretation:** Zoom reports field on each tracking field; missing and empty values can have different meanings. The connector explicitly marks this field as a transform deduplication key.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-tracking-fields-value-e63d6e12f138" title="Value" icon="circle-check" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.tracking_fields.value`

            **Value.** Value of the tracking field. It must be interpreted with the enclosing provider field name, type, or custom schema for the tracking field.

            * **Enables:** Interpret `meetings.TrackingField.value` with the enclosing custom field name, declared type, and provider schema; compare only records that share that contract.
            * **Interpretation:** Zoom reports value under the enclosing custom or typed field contract on each tracking field; compare it only with values from the same provider key and type.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-tracking-fields-visible-1b6e6719cd1f" title="Visible" icon="circle-check" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.tracking_fields.visible`

            **Visible.** Whether the tracking field is visible to participants. It distinguishes the provider-defined visible state or classification for the tracking field.

            * **Enables:** Filter Meetings by whether the tracking field is visible to participants in `meetings.TrackingField.visible`; count true, false, and missing results separately.
            * **Interpretation:** Zoom reports the tracking field is visible to participants as a boolean on each tracking field; a missing field is unknown, not false.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-type-4db8e0e919f0" title="Type" icon="code-branch" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.type`

            **Type.** Meeting type code indicating instant, scheduled, or recurring. It distinguishes the provider-defined type state or classification for the meeting.

            * **Enables:** Segment meeting entries in Meetings by type in `meetings.type`; compare counts only within the same Zoom taxonomy.
            * **Interpretation:** Zoom reports type as a label from its own taxonomy on each meeting; preserve unknown labels rather than mapping them by assumption.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-user-email-362d0bec5494" title="User Email" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.user_email`

            **User Email.** Email address of the meeting host user. It supplies the provider-reported address or location facet for the meeting, not a residency determination.

            * **Enables:** Attribute each meeting to a person or account by the exact user email in `meetings.user_email`; identify addresses that do not match the Zoom directory.
            * **Interpretation:** Zoom reports user email as an address on each meeting; aliases, casing, and unverified addresses can prevent a one-to-one person match.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-user-name-8864a5d768ee" title="User Name" icon="code-branch" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.user_name`

            **User Name.** Display name of the meeting host user. It gives the meeting a human-readable provider label while its identifier remains the stable reference.

            * **Enables:** Label each meeting with user name from `meetings.user_name`; distinguish records that share that display name but have different Zoom identifiers.
            * **Interpretation:** Zoom reports user name as display text for each meeting; names are mutable and are not stable identities.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-meetings-uuid-fb7ccd789880" title="UUID" icon="code-branch" iconType="sharp-duotone-solid">
            Developer identifier: `meetings.uuid`

            **UUID.** Unique meeting instance identifier. Double-encoded for API calls when it contains '/' or '//' characters. It provides the reference needed to connect the meeting to the corresponding provider object.

            * **Enables:** Match repeated meeting entries on UUID in `meetings.uuid`; collapse only entries that share this declared transform key.
            * **Interpretation:** Zoom reports UUID as an identifier in its meeting namespace; it is not a universal identity outside Zoom. The connector explicitly marks this field as a transform deduplication key.
          </Accordion>
        </AccordionGroup>
      </Accordion>

      <Accordion id="provider-permission-tap-zoom-participants-edc4e2ec8d1b" title="Participants" icon="map-location-dot" iconType="sharp-duotone-solid">
        Developer identifier: `participants`

        **Participants.** Past meeting participant rosters per meeting instance. Fans out from meetings via meeting UUID to /past\_meetings/UUID/participants.

        * **Enables:** Match participant attendance intervals to the exact Zoom meeting instance and reported participant identity.
        * **Scope:** Reads the records selected by Zoom's `/past_meetings/{uuid}/participants` operation as a snapshot stream using full synchronization. This stream is opt-in. Visibility follows the Zoom account scopes and administrator access granted to the server-to-server app. Attendance records do not include meeting transcript, chat, recording, or file content. A later complete read can treat a previously seen record that is absent as removed.

        <AccordionGroup>
          <Accordion id="provider-permission-field-zoom-participants-duration-1cf36e1f07c7" title="Duration" icon="calendar-clock" iconType="sharp-duotone-solid">
            Developer identifier: `participants.duration`

            **Duration.** Participant session duration in seconds. It supplies the duration measure for the participant at the provider's declared unit and grain.

            * **Enables:** Measure duration through `participants.duration` for each participant and compare only values with the same unit and record grain.
            * **Interpretation:** Zoom reports duration as a measure on each participant; compare only records with the same unit and aggregation grain.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-participants-failover-ce03cc0097cd" title="Failover" icon="circle-check" iconType="sharp-duotone-solid">
            Developer identifier: `participants.failover`

            **Failover.** Whether a failover occurred during the meeting. It distinguishes the provider-defined failover state or classification for the participant.

            * **Enables:** Filter Participants by whether a failover occurred during the meeting in `participants.failover`; count true, false, and missing results separately.
            * **Interpretation:** Zoom reports a failover occurred during the meeting as a boolean on each participant; a missing field is unknown, not false.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-participants-host-id-6aab899ca6b8" title="Host ID" icon="map-location-dot" iconType="sharp-duotone-solid">
            Developer identifier: `participants.host_id`

            **Host ID.** Parent host reference copied into each participant because the child operation does not return that relationship. It provides the reference needed to connect the participant to the corresponding provider object.

            * **Enables:** Connect each participant in Participants to the referenced host through `participants.host_id`; flag host ID values that do not resolve in that provider namespace.
            * **Interpretation:** Parable copies host ID from the parent traversal record into each participant; the child Zoom operation does not return it.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-participants-id-0de405dd466a" title="ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `participants.id`

            **ID.** Participant UUID; equals Zoom account user ID when signed in. It provides the reference needed to connect the participant to the corresponding provider object.

            * **Enables:** Connect each participant in Participants to the referenced participant through `participants.id`; flag ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports ID as an identifier in its participant namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-participants-internal-user-39a387455304" title="Internal User" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `participants.internal_user`

            **Internal User.** Whether the participant is an internal account user. It distinguishes the provider-defined internal user state or classification for the participant.

            * **Enables:** Filter Participants by whether the participant is an internal account user in `participants.internal_user`; count true, false, and missing results separately.
            * **Interpretation:** Zoom reports the participant is an internal account user as a boolean on each participant; a missing field is unknown, not false.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-participants-join-time-04a73a5fae36" title="Join Time" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `participants.join_time`

            **Join Time.** When the participant joined the meeting. It anchors the participant on the provider's reported timeline.

            * **Enables:** Order Participants by join time in `participants.join_time` and isolate records inside an exact provider reporting window.
            * **Interpretation:** Zoom reports join time as a timestamp on each participant; timezone and precision follow this API field, and absence is not an inferred event time.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-participants-leave-time-e2310515d51a" title="Leave Time" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `participants.leave_time`

            **Leave Time.** When the participant left the meeting. It anchors the participant on the provider's reported timeline.

            * **Enables:** Order Participants by leave time in `participants.leave_time` and isolate records inside an exact provider reporting window.
            * **Interpretation:** Zoom reports leave time as a timestamp on each participant; timezone and precision follow this API field, and absence is not an inferred event time.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-participants-meeting-id-5bad33069129" title="Meeting ID" icon="map-location-dot" iconType="sharp-duotone-solid">
            Developer identifier: `participants.meeting_id`

            **Meeting ID.** Parent meeting reference copied into each participant because the child operation does not return that relationship. It provides the reference needed to connect the participant to the corresponding provider object.

            * **Enables:** Connect each participant in Participants to the referenced meeting through `participants.meeting_id`; flag meeting ID values that do not resolve in that provider namespace.
            * **Interpretation:** Parable copies meeting ID from the parent traversal record into each participant; the child Zoom operation does not return it.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-participants-meeting-start-time-b6f7754c484a" title="Meeting Start Time" icon="calendar-clock" iconType="sharp-duotone-solid">
            Developer identifier: `participants.meeting_start_time`

            **Meeting Start Time.** Parent meeting start time reference copied into each participant because the child operation does not return that relationship. It anchors the participant on the provider's reported timeline.

            * **Enables:** Filter Participants by meeting start time in `participants.meeting_start_time`; pair that boundary with the corresponding end before measuring elapsed time.
            * **Interpretation:** Parable copies meeting start time from the parent traversal record into each participant; the child Zoom operation does not return it.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-participants-meeting-uuid-69093ecb784d" title="Meeting UUID" icon="map-location-dot" iconType="sharp-duotone-solid">
            Developer identifier: `participants.meeting_uuid`

            **Meeting UUID.** Parent meeting reference copied into each participant because the child operation does not return that relationship. It provides the reference needed to connect the participant to the corresponding provider object.

            * **Enables:** Connect each participant in Participants to the referenced meeting through `participants.meeting_uuid`; flag meeting UUID values that do not resolve in that provider namespace.
            * **Interpretation:** Parable copies meeting UUID from the parent traversal record into each participant; the child Zoom operation does not return it.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-participants-name-d0dcbd1b9575" title="Name" icon="code-branch" iconType="sharp-duotone-solid">
            Developer identifier: `participants.name`

            **Name.** Participant display name. It gives the participant a human-readable provider label while its identifier remains the stable reference.

            * **Enables:** Label each participant with name from `participants.name`; distinguish records that share that display name but have different Zoom identifiers.
            * **Interpretation:** Zoom reports name as display text for each participant; names are mutable and are not stable identities.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-participants-participant-key-d63b5d478c7f" title="Participant Key" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `participants.participant_key`

            **Participant Key.** Synthetic primary key (meeting\_uuid, user\_id, join\_time). It provides the reference needed to connect the participant to the corresponding provider object.

            * **Enables:** Match repeated participant entries on participant key in `participants.participant_key`; collapse only entries that share this declared transform key.
            * **Interpretation:** Zoom reports participant key as an identifier in its participant namespace; it is not a universal identity outside Zoom. The connector explicitly marks this field as a transform deduplication key.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-participants-registrant-id-1e9511281e44" title="Registrant ID" icon="map-location-dot" iconType="sharp-duotone-solid">
            Developer identifier: `participants.registrant_id`

            **Registrant ID.** Participant registrant ID when available. It provides the reference needed to connect the participant to the corresponding provider object.

            * **Enables:** Connect each participant in Participants to the referenced registrant through `participants.registrant_id`; flag registrant ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports registrant ID as an identifier in its registrant namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-participants-status-0d3360073246" title="Status" icon="circle-check" iconType="sharp-duotone-solid">
            Developer identifier: `participants.status`

            **Status.** Participant status during the meeting. It distinguishes the provider-defined status state or classification for the participant.

            * **Enables:** Segment participant entries in Participants by status in `participants.status`; compare counts only within the same Zoom taxonomy.
            * **Interpretation:** Zoom reports status as a label from its own taxonomy on each participant; preserve unknown labels rather than mapping them by assumption.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-participants-user-email-0739af8d281a" title="User Email" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `participants.user_email`

            **User Email.** Participant email when Zoom exposes it. It supplies the user email profile facet used to reconcile or attribute the participant.

            * **Enables:** Attribute each participant to a person or account by the exact user email in `participants.user_email`; identify addresses that do not match the Zoom directory.
            * **Interpretation:** Zoom reports user email as an address on each participant; aliases, casing, and unverified addresses can prevent a one-to-one person match.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-participants-user-id-548771f425b0" title="User ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `participants.user_id`

            **User ID.** Meeting-scoped participant session ID from Zoom (not account users.ID). It provides the reference needed to connect the participant to the corresponding provider object.

            * **Enables:** Connect each participant in Participants to the referenced user through `participants.user_id`; flag user ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports user ID as an identifier in its user namespace; it is not a universal identity outside Zoom.
          </Accordion>
        </AccordionGroup>
      </Accordion>

      <Accordion id="provider-permission-tap-zoom-user-calls-ba8ef5d7148c" title="User Calls" icon="people-group" iconType="sharp-duotone-solid">
        Developer identifier: `user_calls`

        **User Calls.** Zoom Phone call history per user. Fetches call logs via /v2/phone/users/userId/call\_history with monthly windowing.

        * **Enables:** Attribute Zoom Phone call-history records to the owning user, counterpart, direction, outcome, and time interval.
        * **Scope:** Reads the records selected by Zoom's `/phone/users/{id}/call_history` operation as an event stream using incremental synchronization. This stream is opt-in. Visibility follows the Zoom account scopes and administrator access granted to the server-to-server app. Call-history records do not include call audio, voicemail media, or transcript content. This stream supplies no reliable deletion signal.

        <AccordionGroup>
          <Accordion id="provider-permission-field-zoom-user-calls-answer-time-5fb0d2257716" title="Answer Time" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.answer_time`

            **Answer Time.** Time when the call was answered. It anchors the user call on the provider's reported timeline.

            * **Enables:** Order User Calls by answer time in `user_calls.answer_time` and isolate records inside an exact provider reporting window.
            * **Interpretation:** Zoom reports answer time as a timestamp on each user call; timezone and precision follow this API field, and absence is not an inferred event time.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-call-id-314edbb6c6ab" title="Call ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.call_id`

            **Call ID.** Call ID shared across related segments. It provides the reference needed to connect the user call to the corresponding provider object.

            * **Enables:** Connect each user call in User Calls to the referenced call through `user_calls.call_id`; flag call ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports call ID as an identifier in its call namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-call-path-id-cf2d8ce92cb4" title="Call Path ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.call_path_id`

            **Call Path ID.** Call path identifier for multi-segment calls. It provides the reference needed to connect the user call to the corresponding provider object.

            * **Enables:** Connect each user call in User Calls to the referenced call path through `user_calls.call_path_id`; flag call path ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports call path ID as an identifier in its call path namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-call-type-befef82dfde8" title="Call Type" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.call_type`

            **Call Type.** Call type classification. It distinguishes the provider-defined call type state or classification for the user call.

            * **Enables:** Segment user call entries in User Calls by call type in `user_calls.call_type`; compare counts only within the same Zoom taxonomy.
            * **Interpretation:** Zoom reports call type as a label from its own taxonomy on each user call; preserve unknown labels rather than mapping them by assumption.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-callee-account-code-3b883fa05aa3" title="Callee Account Code" icon="code-branch" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.callee_account_code`

            **Callee Account Code.** Callee account code. It supplies the callee account code profile facet used to reconcile or attribute the user call.

            * **Enables:** Reconcile the user call's callee account code in `user_calls.callee_account_code` with its provider profile or directory identity; confirm ambiguous matches with the stable provider ID.
            * **Interpretation:** Zoom reports callee account code as a mutable profile or directory attribute on each user call; it may be absent, shared, or non-unique.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-callee-cost-center-2d1fe4a0d0a8" title="Callee Cost Center" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.callee_cost_center`

            **Callee Cost Center.** Callee cost center. It supplies the callee cost center measure for the user call at the provider's declared unit and grain.

            * **Enables:** Measure callee cost center through `user_calls.callee_cost_center` for each user call and compare only values with the same unit and record grain.
            * **Interpretation:** Zoom reports callee cost center as a measure on each user call; compare only records with the same unit and aggregation grain.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-callee-country-code-c02d729a0d2a" title="Callee Country Code" icon="code-branch" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.callee_country_code`

            **Callee Country Code.** Callee country dialing code. It supplies the provider-reported address or location facet for the user call, not a residency determination.

            * **Enables:** Group User Calls by callee country code in `user_calls.callee_country_code` without treating that user, device, or request attribute as a data-residency signal.
            * **Interpretation:** Zoom reports callee country code as a user, device, request, or resource location attribute on each user call; it does not establish where data is stored or processed.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-callee-country-iso-code-8268c6d8e86e" title="Callee Country Iso Code" icon="code-branch" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.callee_country_iso_code`

            **Callee Country Iso Code.** Callee country ISO code. It supplies the provider-reported address or location facet for the user call, not a residency determination.

            * **Enables:** Group User Calls by callee country iso code in `user_calls.callee_country_iso_code` without treating that user, device, or request attribute as a data-residency signal.
            * **Interpretation:** Zoom reports callee country iso code as a user, device, request, or resource location attribute on each user call; it does not establish where data is stored or processed.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-callee-department-95812206afad" title="Callee Department" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.callee_department`

            **Callee Department.** Callee department. It supplies the callee department profile facet used to reconcile or attribute the user call.

            * **Enables:** Reconcile the user call's callee department in `user_calls.callee_department` with its provider profile or directory identity; confirm ambiguous matches with the stable provider ID.
            * **Interpretation:** Zoom reports callee department as a mutable profile or directory attribute on each user call; it may be absent, shared, or non-unique.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-callee-device-private-ip-a6fb05f509aa" title="Callee Device Private IP" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.callee_device_private_ip`

            **Callee Device Private IP.** Callee device private IP. It supplies the provider-reported address or location facet for the user call, not a residency determination.

            * **Enables:** Correlate user call records that report the same network address in `user_calls.callee_device_private_ip` during an authorized investigation; account for shared, proxied, or translated addresses.
            * **Interpretation:** Zoom reports this as an IP network address on each user call. It is not verified geolocation, does not identify a person by itself, and does not establish data residency.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-callee-device-public-ip-630f346f2006" title="Callee Device Public IP" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.callee_device_public_ip`

            **Callee Device Public IP.** Callee device public IP. It supplies the provider-reported address or location facet for the user call, not a residency determination.

            * **Enables:** Correlate user call records that report the same network address in `user_calls.callee_device_public_ip` during an authorized investigation; account for shared, proxied, or translated addresses.
            * **Interpretation:** Zoom reports this as an IP network address on each user call. It is not verified geolocation, does not identify a person by itself, and does not establish data residency.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-callee-device-type-f2a9140547b3" title="Callee Device Type" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.callee_device_type`

            **Callee Device Type.** Callee device type string. It distinguishes the provider-defined callee device type state or classification for the user call.

            * **Enables:** Segment user call entries in User Calls by callee device type in `user_calls.callee_device_type`; compare counts only within the same Zoom taxonomy.
            * **Interpretation:** Zoom reports callee device type as a label from its own taxonomy on each user call; preserve unknown labels rather than mapping them by assumption.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-callee-did-number-2b88898fe021" title="Callee Did Number" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.callee_did_number`

            **Callee Did Number.** Callee DID number. It supplies the callee did number measure for the user call at the provider's declared unit and grain.

            * **Enables:** Measure callee did number through `user_calls.callee_did_number` for each user call and compare only values with the same unit and record grain.
            * **Interpretation:** Zoom reports callee did number as a measure on each user call; compare only records with the same unit and aggregation grain.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-callee-email-03eb05e34aec" title="Callee Email" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.callee_email`

            **Callee Email.** Callee email address. It supplies the provider-reported address or location facet for the user call, not a residency determination.

            * **Enables:** Attribute each user call to a person or account by the exact callee email in `user_calls.callee_email`; identify addresses that do not match the Zoom directory.
            * **Interpretation:** Zoom reports callee email as an address on each user call; aliases, casing, and unverified addresses can prevent a one-to-one person match.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-callee-employee-id-ebfe2fe3578a" title="Callee Employee ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.callee_employee_id`

            **Callee Employee ID.** Callee employee ID when synced from directory. It provides the reference needed to connect the user call to the corresponding provider object.

            * **Enables:** Connect each user call in User Calls to the referenced callee employee through `user_calls.callee_employee_id`; flag callee employee ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports callee employee ID as an identifier in its callee employee namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-callee-ext-id-6417196a81df" title="Callee Ext ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.callee_ext_id`

            **Callee Ext ID.** Callee extension ID join key. It provides the reference needed to connect the user call to the corresponding provider object.

            * **Enables:** Connect each user call in User Calls to the referenced callee ext through `user_calls.callee_ext_id`; flag callee ext ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports callee ext ID as an identifier in its callee ext namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-callee-ext-number-dcaf68f43005" title="Callee Ext Number" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.callee_ext_number`

            **Callee Ext Number.** Callee extension number. It supplies the callee ext number measure for the user call at the provider's declared unit and grain.

            * **Enables:** Measure callee ext number through `user_calls.callee_ext_number` for each user call and compare only values with the same unit and record grain.
            * **Interpretation:** Zoom reports callee ext number as a measure on each user call; compare only records with the same unit and aggregation grain.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-callee-ext-type-5588862784b5" title="Callee Ext Type" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.callee_ext_type`

            **Callee Ext Type.** Callee extension type. It distinguishes the provider-defined callee ext type state or classification for the user call.

            * **Enables:** Segment user call entries in User Calls by callee ext type in `user_calls.callee_ext_type`; compare counts only within the same Zoom taxonomy.
            * **Interpretation:** Zoom reports callee ext type as a label from its own taxonomy on each user call; preserve unknown labels rather than mapping them by assumption.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-callee-name-e88b8b755662" title="Callee Name" icon="code-branch" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.callee_name`

            **Callee Name.** Callee display name. It gives the user call a human-readable provider label while its identifier remains the stable reference.

            * **Enables:** Label each user call with callee name from `user_calls.callee_name`; distinguish records that share that display name but have different Zoom identifiers.
            * **Interpretation:** Zoom reports callee name as display text for each user call; names are mutable and are not stable identities.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-callee-number-type-de55048f718a" title="Callee Number Type" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.callee_number_type`

            **Callee Number Type.** Callee number type. It distinguishes the provider-defined callee number type state or classification for the user call.

            * **Enables:** Segment user call entries in User Calls by callee number type in `user_calls.callee_number_type`; compare counts only within the same Zoom taxonomy.
            * **Interpretation:** Zoom reports callee number type as a label from its own taxonomy on each user call; preserve unknown labels rather than mapping them by assumption.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-callee-site-id-d3dc148c0bf7" title="Callee Site ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.callee_site_id`

            **Callee Site ID.** Callee Zoom Phone site ID. It provides the reference needed to connect the user call to the corresponding provider object.

            * **Enables:** Connect each user call in User Calls to the referenced callee site through `user_calls.callee_site_id`; flag callee site ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports callee site ID as an identifier in its callee site namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-caller-account-code-eba11a0e9416" title="Caller Account Code" icon="code-branch" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.caller_account_code`

            **Caller Account Code.** Caller account code. It supplies the caller account code profile facet used to reconcile or attribute the user call.

            * **Enables:** Reconcile the user call's caller account code in `user_calls.caller_account_code` with its provider profile or directory identity; confirm ambiguous matches with the stable provider ID.
            * **Interpretation:** Zoom reports caller account code as a mutable profile or directory attribute on each user call; it may be absent, shared, or non-unique.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-caller-cost-center-cd6b50041a7e" title="Caller Cost Center" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.caller_cost_center`

            **Caller Cost Center.** Caller cost center. It supplies the caller cost center measure for the user call at the provider's declared unit and grain.

            * **Enables:** Measure caller cost center through `user_calls.caller_cost_center` for each user call and compare only values with the same unit and record grain.
            * **Interpretation:** Zoom reports caller cost center as a measure on each user call; compare only records with the same unit and aggregation grain.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-caller-country-code-4875d9102f53" title="Caller Country Code" icon="code-branch" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.caller_country_code`

            **Caller Country Code.** Caller country dialing code. It supplies the provider-reported address or location facet for the user call, not a residency determination.

            * **Enables:** Group User Calls by caller country code in `user_calls.caller_country_code` without treating that user, device, or request attribute as a data-residency signal.
            * **Interpretation:** Zoom reports caller country code as a user, device, request, or resource location attribute on each user call; it does not establish where data is stored or processed.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-caller-country-iso-code-5defcb2c4546" title="Caller Country Iso Code" icon="code-branch" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.caller_country_iso_code`

            **Caller Country Iso Code.** Caller country ISO code. It supplies the provider-reported address or location facet for the user call, not a residency determination.

            * **Enables:** Group User Calls by caller country iso code in `user_calls.caller_country_iso_code` without treating that user, device, or request attribute as a data-residency signal.
            * **Interpretation:** Zoom reports caller country iso code as a user, device, request, or resource location attribute on each user call; it does not establish where data is stored or processed.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-caller-department-e61f83669702" title="Caller Department" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.caller_department`

            **Caller Department.** Caller department. It supplies the caller department profile facet used to reconcile or attribute the user call.

            * **Enables:** Reconcile the user call's caller department in `user_calls.caller_department` with its provider profile or directory identity; confirm ambiguous matches with the stable provider ID.
            * **Interpretation:** Zoom reports caller department as a mutable profile or directory attribute on each user call; it may be absent, shared, or non-unique.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-caller-device-private-ip-c72b928b6454" title="Caller Device Private IP" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.caller_device_private_ip`

            **Caller Device Private IP.** Caller device private IP. It supplies the provider-reported address or location facet for the user call, not a residency determination.

            * **Enables:** Correlate user call records that report the same network address in `user_calls.caller_device_private_ip` during an authorized investigation; account for shared, proxied, or translated addresses.
            * **Interpretation:** Zoom reports this as an IP network address on each user call. It is not verified geolocation, does not identify a person by itself, and does not establish data residency.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-caller-device-public-ip-693a15276ef0" title="Caller Device Public IP" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.caller_device_public_ip`

            **Caller Device Public IP.** Caller device public IP. It supplies the provider-reported address or location facet for the user call, not a residency determination.

            * **Enables:** Correlate user call records that report the same network address in `user_calls.caller_device_public_ip` during an authorized investigation; account for shared, proxied, or translated addresses.
            * **Interpretation:** Zoom reports this as an IP network address on each user call. It is not verified geolocation, does not identify a person by itself, and does not establish data residency.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-caller-device-type-9de8cb3cfca5" title="Caller Device Type" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.caller_device_type`

            **Caller Device Type.** Caller device type string. It distinguishes the provider-defined caller device type state or classification for the user call.

            * **Enables:** Segment user call entries in User Calls by caller device type in `user_calls.caller_device_type`; compare counts only within the same Zoom taxonomy.
            * **Interpretation:** Zoom reports caller device type as a label from its own taxonomy on each user call; preserve unknown labels rather than mapping them by assumption.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-caller-did-number-d3cf2eaa9f8f" title="Caller Did Number" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.caller_did_number`

            **Caller Did Number.** Caller DID number. It supplies the caller did number measure for the user call at the provider's declared unit and grain.

            * **Enables:** Measure caller did number through `user_calls.caller_did_number` for each user call and compare only values with the same unit and record grain.
            * **Interpretation:** Zoom reports caller did number as a measure on each user call; compare only records with the same unit and aggregation grain.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-caller-email-f5caa4d59101" title="Caller Email" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.caller_email`

            **Caller Email.** Caller email address. It supplies the provider-reported address or location facet for the user call, not a residency determination.

            * **Enables:** Attribute each user call to a person or account by the exact caller email in `user_calls.caller_email`; identify addresses that do not match the Zoom directory.
            * **Interpretation:** Zoom reports caller email as an address on each user call; aliases, casing, and unverified addresses can prevent a one-to-one person match.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-caller-employee-id-680cac910052" title="Caller Employee ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.caller_employee_id`

            **Caller Employee ID.** Caller employee ID when synced from directory. It provides the reference needed to connect the user call to the corresponding provider object.

            * **Enables:** Connect each user call in User Calls to the referenced caller employee through `user_calls.caller_employee_id`; flag caller employee ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports caller employee ID as an identifier in its caller employee namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-caller-ext-id-9781d63e6fcc" title="Caller Ext ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.caller_ext_id`

            **Caller Ext ID.** Caller extension ID join key. It provides the reference needed to connect the user call to the corresponding provider object.

            * **Enables:** Connect each user call in User Calls to the referenced caller ext through `user_calls.caller_ext_id`; flag caller ext ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports caller ext ID as an identifier in its caller ext namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-caller-ext-number-881426be5999" title="Caller Ext Number" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.caller_ext_number`

            **Caller Ext Number.** Caller extension number. It supplies the caller ext number measure for the user call at the provider's declared unit and grain.

            * **Enables:** Measure caller ext number through `user_calls.caller_ext_number` for each user call and compare only values with the same unit and record grain.
            * **Interpretation:** Zoom reports caller ext number as a measure on each user call; compare only records with the same unit and aggregation grain.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-caller-ext-type-2c0e1662da78" title="Caller Ext Type" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.caller_ext_type`

            **Caller Ext Type.** Caller extension type (user, callQueue, auto\_receptionist, etc.). It distinguishes the provider-defined caller ext type state or classification for the user call.

            * **Enables:** Segment user call entries in User Calls by caller ext type in `user_calls.caller_ext_type`; compare counts only within the same Zoom taxonomy.
            * **Interpretation:** Zoom reports caller ext type as a label from its own taxonomy on each user call; preserve unknown labels rather than mapping them by assumption.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-caller-name-f3634598c00f" title="Caller Name" icon="code-branch" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.caller_name`

            **Caller Name.** Caller display name. It gives the user call a human-readable provider label while its identifier remains the stable reference.

            * **Enables:** Label each user call with caller name from `user_calls.caller_name`; distinguish records that share that display name but have different Zoom identifiers.
            * **Interpretation:** Zoom reports caller name as display text for each user call; names are mutable and are not stable identities.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-caller-number-type-f798a2afcebc" title="Caller Number Type" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.caller_number_type`

            **Caller Number Type.** Caller number type (e.g. external\_pstn). It distinguishes the provider-defined caller number type state or classification for the user call.

            * **Enables:** Segment user call entries in User Calls by caller number type in `user_calls.caller_number_type`; compare counts only within the same Zoom taxonomy.
            * **Interpretation:** Zoom reports caller number type as a label from its own taxonomy on each user call; preserve unknown labels rather than mapping them by assumption.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-caller-site-id-c8586ab6f48a" title="Caller Site ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.caller_site_id`

            **Caller Site ID.** Caller Zoom Phone site ID. It provides the reference needed to connect the user call to the corresponding provider object.

            * **Enables:** Connect each user call in User Calls to the referenced caller site through `user_calls.caller_site_id`; flag caller site ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports caller site ID as an identifier in its caller site namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-client-code-b22c20b93ecd" title="Client Code" icon="code-branch" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.client_code`

            **Client Code.** Client code associated with the call. It identifies the related provider object that gives the user call its parent, owner, or container context.

            * **Enables:** Connect each user call to the related client code in `user_calls.client_code` and verify that the referenced provider object resolves in the expected parent or container.
            * **Interpretation:** Zoom reports client code as relationship context on each user call; resolve it in the named provider namespace rather than by display text alone.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-connect-type-eaf3eeb3142c" title="Connect Type" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.connect_type`

            **Connect Type.** Connection type (internal/external). It distinguishes the provider-defined connect type state or classification for the user call.

            * **Enables:** Segment user call entries in User Calls by connect type in `user_calls.connect_type`; compare counts only within the same Zoom taxonomy.
            * **Interpretation:** Zoom reports connect type as a label from its own taxonomy on each user call; preserve unknown labels rather than mapping them by assumption.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-cost-center-619490763c37" title="Cost Center" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.cost_center`

            **Cost Center.** Cost center associated with the call. It supplies the cost center measure for the user call at the provider's declared unit and grain.

            * **Enables:** Measure cost center through `user_calls.cost_center` for each user call and compare only values with the same unit and record grain.
            * **Interpretation:** Zoom reports cost center as a measure on each user call; compare only records with the same unit and aggregation grain.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-department-b3092c19279f" title="Department" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.department`

            **Department.** Department associated with the call. It supplies the department profile facet used to reconcile or attribute the user call.

            * **Enables:** Reconcile the user call's department in `user_calls.department` with its provider profile or directory identity; confirm ambiguous matches with the stable provider ID.
            * **Interpretation:** Zoom reports department as a mutable profile or directory attribute on each user call; it may be absent, shared, or non-unique.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-direction-34e20c041784" title="Direction" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.direction`

            **Direction.** Call direction (inbound/outbound). It distinguishes the provider-defined direction state or classification for the user call.

            * **Enables:** Filter User Calls by the exact Zoom-defined direction in `user_calls.direction` and preserve unknown values as distinct categories.
            * **Interpretation:** Zoom supplies direction from its own taxonomy on each user call; preserve unknown and newly introduced labels.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-duration-a7e8818a7718" title="Duration" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.duration`

            **Duration.** Call duration in seconds. It supplies the duration measure for the user call at the provider's declared unit and grain.

            * **Enables:** Measure duration through `user_calls.duration` for each user call and compare only values with the same unit and record grain.
            * **Interpretation:** Zoom reports duration as a measure on each user call; compare only records with the same unit and aggregation grain.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-end-time-6d0a2a099535" title="End Time" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.end_time`

            **End Time.** Call end time. It anchors the user call on the provider's reported timeline.

            * **Enables:** Filter User Calls by end time in `user_calls.end_time`; pair that boundary with the corresponding start before measuring elapsed time.
            * **Interpretation:** Zoom reports end time as a timestamp on each user call; timezone and precision follow this API field, and absence is not an inferred event time.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-end-to-end-77aaef8b249a" title="End To End" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.end_to_end`

            **End To End.** Whether the call was end-to-end. It distinguishes the provider-defined end to end state or classification for the user call.

            * **Enables:** Filter User Calls by whether the call was end-to-end in `user_calls.end_to_end`; count true, false, and missing results separately.
            * **Interpretation:** Zoom reports the call was end-to-end as a boolean on each user call; a missing field is unknown, not false.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-event-124927d9930e" title="Event" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.event`

            **Event.** Call event classification (e.g. incoming, outgoing). It distinguishes the provider-defined event state or classification for the user call.

            * **Enables:** Filter User Calls by the exact Zoom-defined event in `user_calls.event` and preserve unknown values as distinct categories.
            * **Interpretation:** Zoom supplies event from its own taxonomy on each user call; preserve unknown and newly introduced labels.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-group-id-11322a9c33c6" title="Group ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.group_id`

            **Group ID.** Call queue / group routing identifier. It provides the reference needed to connect the user call to the corresponding provider object.

            * **Enables:** Connect each user call in User Calls to the referenced group through `user_calls.group_id`; flag group ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports group ID as an identifier in its group namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-hide-caller-id-94a1ae62c98d" title="Hide Caller ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.hide_caller_id`

            **Hide Caller ID.** Whether caller ID was hidden. It distinguishes the provider-defined hide caller ID state or classification for the user call.

            * **Enables:** Filter User Calls by whether caller ID was hidden in `user_calls.hide_caller_id`; count true, false, and missing results separately.
            * **Interpretation:** Zoom reports caller ID was hidden as a boolean on each user call; a missing field is unknown, not false.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-hold-time-60ac668ba8e8" title="Hold Time" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.hold_time`

            **Hold Time.** Hold duration in seconds. It supplies the hold time measure for the user call at the provider's declared unit and grain.

            * **Enables:** Measure hold time through `user_calls.hold_time` for each user call and compare only values with the same unit and record grain.
            * **Interpretation:** Zoom reports hold time as a measure on each user call; compare only records with the same unit and aggregation grain.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-id-b2bec20eeabe" title="ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.id`

            **ID.** Call history entry ID. It provides the reference needed to connect the user call to the corresponding provider object.

            * **Enables:** Match repeated user call entries on ID in `user_calls.id`; collapse only entries that share this declared transform key.
            * **Interpretation:** Zoom reports ID as an identifier in its user call namespace; it is not a universal identity outside Zoom. The connector explicitly marks this field as a transform deduplication key.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-international-f3a49c119d1c" title="International" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.international`

            **International.** Whether the call was international. It distinguishes the provider-defined international state or classification for the user call.

            * **Enables:** Filter User Calls by whether the call was international in `user_calls.international`; count true, false, and missing results separately.
            * **Interpretation:** Zoom reports the call was international as a boolean on each user call; a missing field is unknown, not false.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-operator-ext-id-6371d6e24035" title="Operator Ext ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.operator_ext_id`

            **Operator Ext ID.** Operator extension ID when an operator handled the call. It provides the reference needed to connect the user call to the corresponding provider object.

            * **Enables:** Connect each user call in User Calls to the referenced operator ext through `user_calls.operator_ext_id`; flag operator ext ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports operator ext ID as an identifier in its operator ext namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-operator-ext-number-cf24c7542d81" title="Operator Ext Number" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.operator_ext_number`

            **Operator Ext Number.** Operator extension number. It supplies the operator ext number measure for the user call at the provider's declared unit and grain.

            * **Enables:** Measure operator ext number through `user_calls.operator_ext_number` for each user call and compare only values with the same unit and record grain.
            * **Interpretation:** Zoom reports operator ext number as a measure on each user call; compare only records with the same unit and aggregation grain.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-operator-ext-type-b04ed35c228f" title="Operator Ext Type" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.operator_ext_type`

            **Operator Ext Type.** Operator extension type. It distinguishes the provider-defined operator ext type state or classification for the user call.

            * **Enables:** Segment user call entries in User Calls by operator ext type in `user_calls.operator_ext_type`; compare counts only within the same Zoom taxonomy.
            * **Interpretation:** Zoom reports operator ext type as a label from its own taxonomy on each user call; preserve unknown labels rather than mapping them by assumption.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-operator-name-bea63e3ded79" title="Operator Name" icon="code-branch" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.operator_name`

            **Operator Name.** Operator display name. It gives the user call a human-readable provider label while its identifier remains the stable reference.

            * **Enables:** Label each user call with operator name from `user_calls.operator_name`; distinguish records that share that display name but have different Zoom identifiers.
            * **Interpretation:** Zoom reports operator name as display text for each user call; names are mutable and are not stable identities.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-press-key-a3a1dfecbaee" title="Press Key" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.press_key`

            **Press Key.** DTMF key pressed during IVR routing. It provides the reference needed to connect the user call to the corresponding provider object.

            * **Enables:** Connect each user call in User Calls to the referenced press through `user_calls.press_key`; flag press key values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports press key as an identifier in its press namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-recording-id-a4cb0dfb3825" title="Recording ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.recording_id`

            **Recording ID.** Recording identifier when the call was recorded. It provides the reference needed to connect the user call to the corresponding provider object.

            * **Enables:** Connect each user call in User Calls to the referenced recording through `user_calls.recording_id`; flag recording ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports recording ID as an identifier in its recording namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-recording-type-5eadbb8a73cb" title="Recording Type" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.recording_type`

            **Recording Type.** Recording type (e.g. automatic). It distinguishes the provider-defined recording type state or classification for the user call.

            * **Enables:** Segment user call entries in User Calls by recording type in `user_calls.recording_type`; compare counts only within the same Zoom taxonomy.
            * **Interpretation:** Zoom reports recording type as a label from its own taxonomy on each user call; preserve unknown labels rather than mapping them by assumption.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-result-e8c058696eef" title="Result" icon="comment-dots" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.result`

            **Result.** Call result (answered, voicemail, etc.). It distinguishes the provider-defined result state or classification for the user call.

            * **Enables:** Filter User Calls by the exact Zoom-defined result in `user_calls.result` and preserve unknown values as distinct categories.
            * **Interpretation:** Zoom supplies result from its own taxonomy on each user call; preserve unknown and newly introduced labels.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-result-reason-c3fae464cbe4" title="Result Reason" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.result_reason`

            **Result Reason.** Additional context for the call result. It distinguishes the provider-defined result reason state or classification for the user call.

            * **Enables:** Filter User Calls by the exact Zoom-defined result reason in `user_calls.result_reason` and preserve unknown values as distinct categories.
            * **Interpretation:** Zoom supplies result reason from its own taxonomy on each user call; preserve unknown and newly introduced labels.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-site-id-711734ea0f84" title="Site ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.site_id`

            **Site ID.** Zoom Phone site ID. It provides the reference needed to connect the user call to the corresponding provider object.

            * **Enables:** Connect each user call in User Calls to the referenced site through `user_calls.site_id`; flag site ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports site ID as an identifier in its site namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-site-name-cb7ea580f2f7" title="Site Name" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.site_name`

            **Site Name.** Zoom Phone site name. It gives the user call a human-readable provider label while its identifier remains the stable reference.

            * **Enables:** Group User Calls by site name in `user_calls.site_name` without treating that user, device, or request attribute as a data-residency signal.
            * **Interpretation:** Zoom reports site name as a user, device, request, or resource location attribute on each user call; it does not establish where data is stored or processed.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-source-user-id-b04899255329" title="Source User ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.source_user_id`

            **Source User ID.** Parent user ID from traversal for this call history row. It provides the reference needed to connect the user call to the corresponding provider object.

            * **Enables:** Connect each user call in User Calls to the referenced source user through `user_calls.source_user_id`; flag source user ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports source user ID as an identifier in its source user namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-start-time-eff717f7b3e0" title="Start Time" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.start_time`

            **Start Time.** Call start time. It anchors the user call on the provider's reported timeline.

            * **Enables:** Filter User Calls by start time in `user_calls.start_time`; pair that boundary with the corresponding end before measuring elapsed time.
            * **Interpretation:** Zoom reports start time as a timestamp on each user call; timezone and precision follow this API field, and absence is not an inferred event time. A connector directive uses this field to order records for latest-state or incremental processing. The schema designates this field as the event timestamp.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-talk-time-179bec618334" title="Talk Time" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.talk_time`

            **Talk Time.** Talk duration in seconds. It supplies the talk time measure for the user call at the provider's declared unit and grain.

            * **Enables:** Measure talk time through `user_calls.talk_time` for each user call and compare only values with the same unit and record grain.
            * **Interpretation:** Zoom reports talk time as a measure on each user call; compare only records with the same unit and aggregation grain.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-voicemail-id-44968a18acd9" title="Voicemail ID" icon="comment-dots" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.voicemail_id`

            **Voicemail ID.** Voicemail recording identifier when present. It provides the reference needed to connect the user call to the corresponding provider object.

            * **Enables:** Connect each user call in User Calls to the referenced voicemail through `user_calls.voicemail_id`; flag voicemail ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports voicemail ID as an identifier in its voicemail namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-user-calls-wait-time-8c3179f3ee76" title="Wait Time" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `user_calls.wait_time`

            **Wait Time.** Wait duration in seconds. It supplies the wait time measure for the user call at the provider's declared unit and grain.

            * **Enables:** Measure wait time through `user_calls.wait_time` for each user call and compare only values with the same unit and record grain.
            * **Interpretation:** Zoom reports wait time as a measure on each user call; compare only records with the same unit and aggregation grain.
          </Accordion>
        </AccordionGroup>
      </Accordion>

      <Accordion id="provider-permission-tap-zoom-users-e0ff1c32dc8e" title="Users" icon="people-group" iconType="sharp-duotone-solid">
        Developer identifier: `users`

        **Users.** All users in the Zoom account.

        * **Enables:** Reconcile Zoom account users to email, display name, license type, status, department, group membership, and creation time.
        * **Scope:** Reads the records selected by Zoom's `/users` operation as a snapshot stream using full synchronization. Visibility follows the Zoom account scopes and administrator access granted to the server-to-server app. The stream does not include records the credential, parent traversal, configured filters, or provider API omits. A later complete read can treat a previously seen record that is absent as removed.

        <AccordionGroup>
          <Accordion id="provider-permission-field-zoom-users-account-id-636bf7438d17" title="Account ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `users.account_id`

            **Account ID.** The Zoom account ID the user belongs to. It provides the reference needed to connect the user to the corresponding provider object.

            * **Enables:** Connect each user in Users to the referenced account through `users.account_id`; flag account ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports account ID as an identifier in its account namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-account-number-53736f6b0123" title="Account Number" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `users.account_number`

            **Account Number.** The Zoom account number. It supplies the account number measure for the user at the provider's declared unit and grain.

            * **Enables:** Measure account number through `users.account_number` for each user and compare only values with the same unit and record grain.
            * **Interpretation:** Zoom reports account number as a measure on each user; compare only records with the same unit and aggregation grain.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-company-99f4e1fda84f" title="Company" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `users.company`

            **Company.** User's company name. It supplies the company profile facet used to reconcile or attribute the user.

            * **Enables:** Reconcile the user's company in `users.company` with its provider profile or directory identity; confirm ambiguous matches with the stable provider ID.
            * **Interpretation:** Zoom reports company as a mutable profile or directory attribute on each user; it may be absent, shared, or non-unique.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-created-at-6a84636f4dc7" title="Created At" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `users.created_at`

            **Created At.** Timestamp when the user account was created. It anchors the user on the provider's reported timeline.

            * **Enables:** Order Users by created at in `users.created_at` and isolate records inside an exact provider reporting window.
            * **Interpretation:** Zoom reports created at as a timestamp on each user; timezone and precision follow this API field, and absence is not an inferred event time.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-custom-attributes-ae2d531595ff" title="Custom Attributes" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `users.custom_attributes`

            **Custom Attributes.** Custom attributes assigned to the user. It preserves the nested context needed to interpret the parent user.

            * **Enables:** Compare the exact Zoom-configured custom attributes set in `users.custom_attributes` for each user; preserve provider labels and unknown entries.
            * **Interpretation:** Zoom returns custom attributes as an array of Zoom user custom attribute entries on each user; missing, empty, and permission-redacted arrays are not equivalent.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-custom-attributes-key-668d89ccc288" title="Key" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `users.custom_attributes.key`

            **Key.** The custom attribute key. It provides the reference needed to connect the user to the corresponding provider object.

            * **Enables:** Match repeated Zoom user custom attribute entries on key in `users.ZoomUserCustomAttribute.key`; collapse only entries that share this declared transform key.
            * **Interpretation:** Zoom reports key as an identifier in its Zoom user custom attribute namespace; it is not a universal identity outside Zoom. The connector explicitly marks this field as a transform deduplication key.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-custom-attributes-name-bfd2881f93ce" title="Name" icon="code-branch" iconType="sharp-duotone-solid">
            Developer identifier: `users.custom_attributes.name`

            **Name.** The custom attribute display name. It gives the Zoom user custom attribute a human-readable provider label while its identifier remains the stable reference.

            * **Enables:** Label each Zoom user custom attribute with name from `users.ZoomUserCustomAttribute.name`; distinguish records that share that display name but have different Zoom identifiers.
            * **Interpretation:** Zoom reports name as display text for each Zoom user custom attribute; names are mutable and are not stable identities.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-custom-attributes-value-524ad30d1e06" title="Value" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `users.custom_attributes.value`

            **Value.** The custom attribute value. It must be interpreted with the enclosing provider field name, type, or custom schema for the Zoom user custom attribute.

            * **Enables:** Interpret `users.ZoomUserCustomAttribute.value` with the enclosing custom field name, declared type, and provider schema; compare only records that share that contract.
            * **Interpretation:** Zoom reports value under the enclosing custom or typed field contract on each Zoom user custom attribute; compare it only with values from the same provider key and type.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-dept-a65cea43cb7d" title="Dept" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `users.dept`

            **Dept.** Department the user belongs to. It identifies the related provider object that gives the user its parent, owner, or container context.

            * **Enables:** Connect each user to the related dept in `users.dept` and verify that the referenced provider object resolves in the expected parent or container.
            * **Interpretation:** Zoom reports dept as relationship context on each user; resolve it in the named provider namespace rather than by display text alone.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-display-name-a8f5fd4fc1a1" title="Display Name" icon="code-branch" iconType="sharp-duotone-solid">
            Developer identifier: `users.display_name`

            **Display Name.** User's display name. It distinguishes the provider-defined display name state or classification for the user.

            * **Enables:** Label each user with display name from `users.display_name`; distinguish records that share that display name but have different Zoom identifiers.
            * **Interpretation:** Zoom reports display name as display text for each user; names are mutable and are not stable identities. A connector directive maps this field to a person's display name.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-email-33407cad0d65" title="Email" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `users.email`

            **Email.** User's email address. Primary cross-connector identity join key. It supplies the provider-reported address or location facet for the user, not a residency determination.

            * **Enables:** Attribute each user to a person or account by the exact email in `users.email`; identify addresses that do not match the Zoom directory.
            * **Interpretation:** Zoom reports email as an address on each user; aliases, casing, and unverified addresses can prevent a one-to-one person match. A connector directive maps this field to a person's email identity.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-employee-unique-id-31a6d20a425a" title="Employee Unique ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `users.employee_unique_id`

            **Employee Unique ID.** Employee unique ID, often mapped from an SSO or HR system. It provides the reference needed to connect the user to the corresponding provider object.

            * **Enables:** Connect each user in Users to the referenced employee unique through `users.employee_unique_id`; flag employee unique ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports employee unique ID as an identifier in its employee unique namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-first-name-7e22d9475f6e" title="First Name" icon="code-branch" iconType="sharp-duotone-solid">
            Developer identifier: `users.first_name`

            **First Name.** User's first name. It gives the user a human-readable provider label while its identifier remains the stable reference.

            * **Enables:** Label each user with first name from `users.first_name`; distinguish records that share that display name but have different Zoom identifiers.
            * **Interpretation:** Zoom reports first name as display text for each user; names are mutable and are not stable identities.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-group-ids-8394e7b0adcf" title="Group IDs" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `users.group_ids`

            **Group IDs.** List of group IDs the user belongs to. It preserves the nested context needed to interpret the parent user.

            * **Enables:** Connect the parent user to every referenced group ID value in `users.group_ids`; identify provider IDs that do not resolve to the expected related object.
            * **Interpretation:** Zoom returns group IDs as an array of group ID value entries on each user; missing, empty, and permission-redacted arrays are not equivalent.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-id-68164598206d" title="ID" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `users.id`

            **ID.** Unique identifier for the user. It provides the reference needed to connect the user to the corresponding provider object.

            * **Enables:** Match repeated user entries on ID in `users.id`; collapse only entries that share this declared transform key.
            * **Interpretation:** Zoom reports ID as an identifier in its user namespace; it is not a universal identity outside Zoom. The connector explicitly marks this field as a transform deduplication key. A connector directive maps this field to account identity.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-im-group-ids-8b9b11f4f8e1" title="Im Group IDs" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `users.im_group_ids`

            **Im Group IDs.** List of IM (instant messaging) group IDs the user belongs to. It preserves the nested context needed to interpret the parent user.

            * **Enables:** Connect the parent user to every referenced im group ID value in `users.im_group_ids`; identify provider IDs that do not resolve to the expected related object.
            * **Interpretation:** Zoom returns im group IDs as an array of im group ID value entries on each user; missing, empty, and permission-redacted arrays are not equivalent.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-jid-88a5a6457af1" title="Jid" icon="comment-dots" iconType="sharp-duotone-solid">
            Developer identifier: `users.jid`

            **Jid.** User's XMPP JID for Zoom chat. It identifies the related provider object that gives the user its parent, owner, or container context.

            * **Enables:** Connect each user to the related jid in `users.jid` and verify that the referenced provider object resolves in the expected parent or container.
            * **Interpretation:** Zoom reports jid as relationship context on each user; resolve it in the named provider namespace rather than by display text alone.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-job-title-0afd1a0d6914" title="Job Title" icon="code-branch" iconType="sharp-duotone-solid">
            Developer identifier: `users.job_title`

            **Job Title.** User's job title. It supplies the job title profile facet used to reconcile or attribute the user.

            * **Enables:** Label each user with job title from `users.job_title`; distinguish records that share that display name but have different Zoom identifiers.
            * **Interpretation:** Zoom reports job title as display text for each user; names are mutable and are not stable identities.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-language-9e2a1c88e931" title="Language" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `users.language`

            **Language.** Language setting of the user. It supplies the language profile facet used to reconcile or attribute the user.

            * **Enables:** Reconcile the user's language in `users.language` with its provider profile or directory identity; confirm ambiguous matches with the stable provider ID.
            * **Interpretation:** Zoom reports language as a mutable profile or directory attribute on each user; it may be absent, shared, or non-unique.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-last-client-version-e218e11b31e2" title="Last Client Version" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `users.last_client_version`

            **Last Client Version.** Version of the Zoom client last used by the user. It distinguishes the provider-defined last client version state or classification for the user.

            * **Enables:** Filter Users by the exact Zoom-defined last client version in `users.last_client_version` and preserve unknown values as distinct categories.
            * **Interpretation:** Zoom supplies last client version from its own taxonomy on each user; preserve unknown and newly introduced labels.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-last-login-time-4796a33a1461" title="Last Login Time" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `users.last_login_time`

            **Last Login Time.** Timestamp of the user's last login. Key signal for tool adoption analysis. It anchors the user on the provider's reported timeline.

            * **Enables:** Order Users by last login time in `users.last_login_time` and isolate records inside an exact provider reporting window.
            * **Interpretation:** Zoom reports last login time as a timestamp on each user; timezone and precision follow this API field, and absence is not an inferred event time.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-last-name-086fe7863eb3" title="Last Name" icon="code-branch" iconType="sharp-duotone-solid">
            Developer identifier: `users.last_name`

            **Last Name.** User's last name. It gives the user a human-readable provider label while its identifier remains the stable reference.

            * **Enables:** Label each user with last name from `users.last_name`; distinguish records that share that display name but have different Zoom identifiers.
            * **Interpretation:** Zoom reports last name as display text for each user; names are mutable and are not stable identities.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-location-5ec63c30536f" title="Location" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `users.location`

            **Location.** User's location or office. It supplies the provider-reported address or location facet for the user, not a residency determination.

            * **Enables:** Group Users by location in `users.location` without treating that user, device, or request attribute as a data-residency signal.
            * **Interpretation:** Zoom reports location as a user, device, request, or resource location attribute on each user; it does not establish where data is stored or processed.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-personal-meeting-url-f28e38cb7f4b" title="Personal Meeting URL" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `users.personal_meeting_url`

            **Personal Meeting URL.** URL for the user's personal meeting room. It locates the provider resource or path associated with the user.

            * **Enables:** Associate each user with the resource identified by personal meeting URL in `users.personal_meeting_url`; verify the link resolves to the expected Zoom object.
            * **Interpretation:** Zoom reports personal meeting URL as a resource locator for each user; access still depends on viewer permissions and the URL may expire or change.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-phone-number-bd3c8ff14186" title="Phone Number" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `users.phone_number`

            **Phone Number.** User's phone number. It supplies the phone number profile facet used to reconcile or attribute the user.

            * **Enables:** Reconcile the user's phone number in `users.phone_number` with its provider profile or directory identity; confirm ambiguous matches with the stable provider ID.
            * **Interpretation:** Zoom reports phone number as a mutable profile or directory attribute on each user; it may be absent, shared, or non-unique.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-pic-url-9aa3706c80c8" title="Pic URL" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `users.pic_url`

            **Pic URL.** URL of the user's profile picture. It locates the provider resource or path associated with the user.

            * **Enables:** Associate each user with the resource identified by pic URL in `users.pic_url`; verify the link resolves to the expected Zoom object.
            * **Interpretation:** Zoom reports pic URL as a resource locator for each user; access still depends on viewer permissions and the URL may expire or change.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-plan-united-type-9e4de79db450" title="Plan United Type" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `users.plan_united_type`

            **Plan United Type.** United plan type assigned to the user. It distinguishes the provider-defined plan united type state or classification for the user.

            * **Enables:** Segment user entries in Users by plan united type in `users.plan_united_type`; compare counts only within the same Zoom taxonomy.
            * **Interpretation:** Zoom reports plan united type as a label from its own taxonomy on each user; preserve unknown labels rather than mapping them by assumption.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-pmi-b1defaba85b3" title="Pmi" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `users.pmi`

            **Pmi.** Personal Meeting ID of the user. It identifies the related provider object that gives the user its parent, owner, or container context.

            * **Enables:** Connect each user to the related pmi in `users.pmi` and verify that the referenced provider object resolves in the expected parent or container.
            * **Interpretation:** Zoom reports pmi as relationship context on each user; resolve it in the named provider namespace rather than by display text alone.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-role-id-0dc072e5dc3d" title="Role ID" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `users.role_id`

            **Role ID.** Role ID assigned to the user. Maps users to roles for permission analysis. It provides the reference needed to connect the user to the corresponding provider object.

            * **Enables:** Connect each user in Users to the referenced role through `users.role_id`; flag role ID values that do not resolve in that provider namespace.
            * **Interpretation:** Zoom reports role ID as an identifier in its role namespace; it is not a universal identity outside Zoom.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-role-name-6ce62ca8fa8f" title="Role Name" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `users.role_name`

            **Role Name.** Name of the role assigned to the user. It gives the user a human-readable provider label while its identifier remains the stable reference.

            * **Enables:** Segment user entries in Users by role name in `users.role_name`; compare counts only within the same Zoom taxonomy.
            * **Interpretation:** Zoom reports role name as a label from its own taxonomy on each user; preserve unknown labels rather than mapping them by assumption.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-status-ef493cfbd23a" title="Status" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `users.status`

            **Status.** User account status (active, inactive, pending). It distinguishes the provider-defined status state or classification for the user.

            * **Enables:** Segment user entries in Users by status in `users.status`; compare counts only within the same Zoom taxonomy.
            * **Interpretation:** Zoom reports status as a label from its own taxonomy on each user; preserve unknown labels rather than mapping them by assumption.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-timezone-b98e290eecb1" title="Timezone" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `users.timezone`

            **Timezone.** User's timezone setting (IANA timezone identifier). It is needed to interpret companion dates and times for the user in the provider's intended zone.

            * **Enables:** Apply the zone in `users.timezone` when converting the user's companion start, end, or scheduled timestamps; do not infer it from locale.
            * **Interpretation:** Zoom reports timezone as a timezone identifier for each user; supported IANA or provider-specific names and daylight-saving behavior must be preserved.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-type-a0a13088e7b6" title="Type" icon="people-group" iconType="sharp-duotone-solid">
            Developer identifier: `users.type`

            **Type.** User license type (1=Basic, 2=Licensed, 3=On-Prem). It distinguishes the provider-defined type state or classification for the user.

            * **Enables:** Segment user entries in Users by type in `users.type`; compare counts only within the same Zoom taxonomy.
            * **Interpretation:** Zoom reports type as a label from its own taxonomy on each user; preserve unknown labels rather than mapping them by assumption.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-user-created-at-8f4823bcad6a" title="User Created At" icon="shield-check" iconType="sharp-duotone-solid">
            Developer identifier: `users.user_created_at`

            **User Created At.** Timestamp when the user was created in the system (may differ from created\_at for migrated accounts). It anchors the user on the provider's reported timeline.

            * **Enables:** Order Users by user created at in `users.user_created_at` and isolate records inside an exact provider reporting window.
            * **Interpretation:** Zoom reports user created at as a timestamp on each user; timezone and precision follow this API field, and absence is not an inferred event time.
          </Accordion>

          <Accordion id="provider-permission-field-zoom-users-verified-6bffa56e41bb" title="Verified" icon="comment-dots" iconType="sharp-duotone-solid">
            Developer identifier: `users.verified`

            **Verified.** Whether the user's email is verified. 1 = verified, 0 = not verified. It distinguishes the provider-defined verified state or classification for the user.

            * **Enables:** Filter Users by the exact Zoom-defined verified in `users.verified` and preserve unknown values as distinct categories.
            * **Interpretation:** Zoom supplies verified from its own taxonomy on each user; preserve unknown and newly introduced labels.
          </Accordion>
        </AccordionGroup>
      </Accordion>
    </AccordionGroup>
  </Tab>

  <Tab title="Troubleshooting">
    | Error                      | Meaning               | Solution                          |
    | -------------------------- | --------------------- | --------------------------------- |
    | `124 Invalid access token` | Token expired/invalid | Regenerate access token           |
    | `200 Permission denied`    | Missing scope         | Add required scope and reactivate |
    | `1001 User not found`      | User doesn't exist    | Verify user email/ID              |
    | `429 Rate limit exceeded`  | Too many requests     | Implement backoff                 |

    #### Common Issues

    #### App not returning data

    Ensure the app is **activated** and all required scopes are added. Changes to scopes require reactivation.

    #### Can't see certain users

    Server-to-Server OAuth apps have access to all users in the account. If users are missing, they may be in a different Zoom account.

    **[Zoom REST API](https://developers.zoom.us/docs/api/)** — Official API documentation

    **[S2S OAuth Guide](https://developers.zoom.us/docs/internal-apps/s2s-oauth/)** — Server-to-Server OAuth guide
  </Tab>
</Tabs>
