# Zoom

> Pull Zoom meeting metadata, cloud recordings, participants, and WebVTT transcripts for call analysis and downstream processing.

Source: https://cotera.co/docs/reference/tools/individual-tools/zoom

---

**Authentication Type:** Server-to-Server OAuth (Account ID + Client ID + Client Secret)\
**Description:** Pull Zoom meeting metadata, cloud recordings, participants, and WebVTT transcripts for call analysis and downstream processing.

***

## Authentication

These tools authenticate to Zoom using a [Server-to-Server OAuth app](https://developers.zoom.us/docs/internal-apps/create/). You'll need:

* **Account ID** — found on the app's credentials page
* **Client ID** — found on the app's credentials page
* **Client Secret** — found on the app's credentials page

**Required Scopes:**

* `meeting:read:meeting:admin` (or `meeting:read`) — read meeting metadata
* `cloud_recording:read:list_user_recordings:admin` — list a user's cloud recordings
* `cloud_recording:read:recording:admin` — access individual meeting recordings and transcripts
* `report:read:list_meeting_participants:admin` (or `report:read:admin`) — list past meeting participants

Cloud recording and audio transcription must be enabled on the account for transcripts to be produced.

***

## Meetings

Fetch metadata, cloud recordings, and transcripts for individual Zoom meetings.

### Get Meeting

Fetch metadata for a Zoom meeting — topic, host, scheduled start time, duration, timezone, agenda, and join URL.

**Operation Type:** Query (Read)

**Parameters:**

* **meetingId** `string` (required): The meeting numeric ID or UUID. UUIDs containing `/` or starting with `/` are double URL-encoded automatically per Zoom's rules
* **occurrenceId** `string` (nullable): For recurring meetings, the specific occurrence ID

**Returns:**

* **id** `number`: Numeric meeting ID
* **uuid** `string`: Meeting UUID
* **hostId** `string` (nullable): Host's Zoom user ID
* **hostEmail** `string` (nullable): Host's email
* **topic** `string`: Meeting topic
* **type** `number` (nullable): Meeting type code (e.g. 2 = scheduled, 8 = recurring)
* **status** `string` (nullable): Meeting status
* **startTime** `string` (nullable): Scheduled start time (ISO 8601)
* **duration** `number` (nullable): Duration in minutes
* **timezone** `string` (nullable): IANA timezone
* **agenda** `string` (nullable): Meeting agenda
* **createdAt** `string` (nullable): Creation timestamp (ISO 8601)
* **joinUrl** `string` (nullable): URL attendees use to join

**Example Usage:**

```json
{
  "meetingId": "83925123456",
  "occurrenceId": null
}
```

### Get Meeting Recordings

List all cloud recording files (audio, video, chat, transcript) for a single Zoom meeting instance, including download URLs.

**Operation Type:** Query (Read)

**Parameters:**

* **meetingId** `string` (required): Meeting numeric ID or UUID. UUIDs are handled with Zoom's double-encoding rules

**Returns:**

* **uuid** `string`: Meeting UUID
* **id** `number` (nullable): Numeric meeting ID
* **topic** `string` (nullable): Meeting topic
* **startTime** `string` (nullable): Meeting start time (ISO 8601)
* **duration** `number` (nullable): Duration in minutes
* **totalSize** `number` (nullable): Combined size of all recording files in bytes
* **recordingCount** `number` (nullable): Number of recording files
* **recordingFiles** `array of objects`: All recording files attached to the meeting
  * **id** `string` (nullable): Recording file ID
  * **fileType** `string` (nullable): File type (e.g. `MP4`, `M4A`, `TRANSCRIPT`, `CHAT`)
  * **fileExtension** `string` (nullable): File extension
  * **recordingType** `string` (nullable): Recording type (e.g. `shared_screen_with_speaker_view`, `audio_transcript`)
  * **fileSize** `number` (nullable): File size in bytes
  * **playUrl** `string` (nullable): URL to play the recording in a browser
  * **downloadUrl** `string` (nullable): URL to download the raw file (requires the Zoom access token)
  * **status** `string` (nullable): Processing status
  * **recordingStart** `string` (nullable): Recording start time (ISO 8601)
  * **recordingEnd** `string` (nullable): Recording end time (ISO 8601)

**Example Usage:**

```json
{
  "meetingId": "83925123456"
}
```

### Get Meeting Transcript

Fetch the cloud recording transcript (WebVTT) for a Zoom meeting. Requires that cloud recording and audio transcription were enabled for the meeting.

**Operation Type:** Query (Read)

**Parameters:**

* **meetingId** `string` (required): The meeting numeric ID or UUID. UUIDs containing `/` or starting with `/` are double URL-encoded automatically

**Returns:**

* **meetingId** `string`: The meeting ID echoed from input
* **meetingUuid** `string`: The meeting UUID from Zoom
* **topic** `string` (nullable): The meeting topic
* **startTime** `string` (nullable): Meeting start time (ISO 8601)
* **transcriptVtt** `string` (nullable): The full transcript content in WebVTT format. `null` when no transcript is available for the meeting
* **downloadUrl** `string` (nullable): The Zoom download URL for the transcript file

**Example Usage:**

```json
{
  "meetingId": "abcDEFghiJKL1234567=="
}
```

***

## Past Meetings

Resolve per-occurrence UUIDs and look up who actually attended.

### List Past Meeting Instances

List the UUIDs of all past occurrences of a recurring Zoom meeting. Transcripts and recordings are keyed per-occurrence, so you typically need these UUIDs before fetching them.

**Operation Type:** Query (Read)

**Parameters:**

* **meetingId** `string` (required): Numeric meeting ID (not UUID). For a recurring meeting, returns one entry per occurrence

**Returns:**

* **meetings** `array of objects`: Past occurrences of the meeting
  * **uuid** `string`: Occurrence UUID — use this with the transcript/recording tools
  * **startTime** `string` (nullable): Occurrence start time (ISO 8601)

**Example Usage:**

```json
{
  "meetingId": "83925123456"
}
```

### List Past Meeting Participants

List the participants who attended a past Zoom meeting instance. Useful for attributing transcript content to specific attendees.

**Operation Type:** Query (Read)

**Parameters:**

* **meetingUuid** `string` (required): Meeting UUID (not the numeric ID). Double-encoding is handled automatically
* **pageSize** `number` (nullable): Max records per page, up to 300
* **nextPageToken** `string` (nullable): Token for paging through results

**Returns:**

* **totalRecords** `number` (nullable): Total number of participants across all pages
* **nextPageToken** `string` (nullable): Token to fetch the next page, when more results are available
* **participants** `array of objects`: Participants on this occurrence
  * **id** `string` (nullable): Zoom participant ID
  * **name** `string`: Display name in the meeting
  * **userEmail** `string` (nullable): Participant's email (when Zoom could resolve it)

**Example Usage:**

```json
{
  "meetingUuid": "abcDEFghiJKL1234567==",
  "pageSize": 100,
  "nextPageToken": null
}
```

***

## Users

Discover which of a user's meetings have recordings available.

### List User Recordings

List cloud recordings for a Zoom user within a date range. Use this to discover past meetings that have recordings or transcripts available before fetching them individually.

**Operation Type:** Query (Read)

**Parameters:**

* **userId** `string` (nullable): The Zoom user ID or email. Defaults to `"me"` (the token-owning user)
* **from** `string` (nullable): Start date (`yyyy-mm-dd`). Zoom defaults to 1 month ago
* **to** `string` (nullable): End date (`yyyy-mm-dd`). Zoom defaults to today
* **pageSize** `number` (nullable): Max records per page, up to 300. Zoom defaults to 30
* **nextPageToken** `string` (nullable): Token for paging through results

**Returns:**

* **from** `string` (nullable): Start of the returned window
* **to** `string` (nullable): End of the returned window
* **nextPageToken** `string` (nullable): Token to fetch the next page
* **meetings** `array of objects`: Meetings with cloud recordings in the window
  * **uuid** `string`: Meeting UUID
  * **id** `number`: Numeric meeting ID
  * **topic** `string`: Meeting topic
  * **startTime** `string` (nullable): Meeting start time (ISO 8601)
  * **duration** `number` (nullable): Duration in minutes
  * **totalSize** `number` (nullable): Combined size of all recording files in bytes
  * **recordingCount** `number` (nullable): Number of recording files
  * **hasTranscript** `boolean`: Whether a transcript file is attached to the meeting

**Example Usage:**

```json
{
  "userId": "me",
  "from": "2026-03-01",
  "to": "2026-04-15",
  "pageSize": 100,
  "nextPageToken": null
}
```

***

## Common Use Cases

**Call transcript ingestion:**

* Use **List User Recordings** to discover recent meetings that have transcripts (`hasTranscript: true`)
* For recurring meetings, use **List Past Meeting Instances** to enumerate per-occurrence UUIDs
* Pull the WebVTT with **Get Meeting Transcript**, then parse it into speaker-attributed segments for summarization or search

**Attribution and context:**

* Pair **Get Meeting** with **List Past Meeting Participants** to enrich transcripts with host, attendee names, and emails
* Use **Get Meeting Recordings** when you need the raw audio/video file URLs alongside the transcript (e.g. for re-transcription with a different engine)

