Skip to main content
Zoom REST API access for scheduling and managing meetings, webinars, and cloud recordings on behalf of a connected user. Use when an agent needs to create or reschedule Zoom meetings, fetch join links, list a user’s upcoming meetings, or pull recording and transcript links. Routes through Pipedream Connect — the user sees one Zoom consent screen on connect that says “Pipedream wants access” (Pipedream owns the verified Zoom Marketplace app), so Lava needs no Zoom Marketplace app review of its own. 8 example endpoints available through Lava’s AI Gateway. See the Zoom API docs for full documentation.
This provider requires your own credentials — connect your API key or OAuth account before use.
This is a catch-all provider — any valid URL under https://api.zoom.us is supported. Zoom REST API v2 endpoints. Construct URLs as https://api.zoom.us/v2/{path}. Use the literal me in place of {userId} to act as the connected user (e.g. users/me, users/me/meetings, users/me/recordings). Authentication is brokered through Pipedream Connect — the end-user sees a single “Pipedream wants to access your Zoom account” consent screen on connect. Common roots: users/me (profile), users/me/meetings (list/create), meetings/{meetingId} (get/update/delete), users/me/recordings (cloud recordings), meetings/{meetingId}/recordings. Updating a meeting uses PATCH (only the fields you send change) and returns 204 No Content; DELETE also returns 204. The Lava gateway requires a JSON body on every non-GET call — for DELETE, send an empty object as body_json. Paginate list endpoints with page_size (default 30, max 300) and the next_page_token from the previous response. Meeting times use start_time as an ISO-8601 string with timezone (e.g. 2026-06-23T15:00:00Z) plus a timezone field; duration is in minutes. See https://developers.zoom.us/docs/api/ for the full reference. The endpoints below are curated examples.

Endpoints

Get the connected Zoom account’s profile (email, account id, plan type, personal meeting id). Use this as a cheap auth probe after connect — confirms the OAuth grant is healthy without listing meetings.

GET https://api.zoom.us/v2/users/me — Free
const data = await lava.gateway('https://api.zoom.us/v2/users/me', { method: 'GET' });

List the connected user’s meetings. Filter with the type query param: scheduled (default), live, upcoming, upcoming_meetings, or previous_meetings. Paginate with page_size (max 300) and next_page_token. Returns lightweight meeting summaries (id, topic, start_time, join_url) — use meetings/{meetingId} for full detail.

GET https://api.zoom.us/v2/users/me/meetings?type=upcoming&page_size=30 — Free
const data = await lava.gateway('https://api.zoom.us/v2/users/me/meetings?type=upcoming&page_size=30', { method: 'GET' });

Schedule a meeting for the connected user. Required: topic and type (2 = scheduled). Set start_time as ISO-8601 with timezone and duration in minutes; pass a timezone field for recurring meetings. Returns 201 with the meeting id, join_url, and the host start_url. Add a settings object to control waiting_room, join_before_host, mute_upon_entry, etc.

POST https://api.zoom.us/v2/users/me/meetings — Free
const data = await lava.gateway('https://api.zoom.us/v2/users/me/meetings', {
  body: {
"topic": "Project sync",
"type": 2,
"start_time": "2026-06-25T15:00:00Z",
"duration": 30,
"timezone": "America/New_York",
"settings": {
  "join_before_host": false,
  "waiting_room": true
}
},
});

Get a single meeting by numeric meeting id (from the list or create response). Returns full detail including join_url, settings, agenda, and recurrence. Use the meeting id, not the meeting UUID.

GET https://api.zoom.us/v2/meetings/89012345678 — Free
const data = await lava.gateway('https://api.zoom.us/v2/meetings/89012345678', { method: 'GET' });

Update a scheduled meeting. Send only the fields you are changing — omitted fields are left untouched. Returns 204 No Content on success. Use to reschedule (start_time/duration), rename (topic), or change settings.

PATCH https://api.zoom.us/v2/meetings/89012345678 — Free
const data = await lava.gateway('https://api.zoom.us/v2/meetings/89012345678', { method: 'PATCH', body: {"start_time":"2026-06-25T16:00:00Z","duration":45} });

Delete a scheduled meeting. Returns 204 No Content on success. The gateway requires a JSON body on every non-GET call, so send an empty object as body_json. Pass ?schedule_for_reminder=true in the URL to email the host a cancellation notice.

DELETE https://api.zoom.us/v2/meetings/89012345678 — Free
const data = await lava.gateway('https://api.zoom.us/v2/meetings/89012345678', { method: 'DELETE', body: {} });

List the connected user’s cloud recordings within a date window. Pass from and to as YYYY-MM-DD (max 30-day span); paginate with page_size and next_page_token. Each meeting entry carries a recording_files array with download_url and play_url per file.

GET https://api.zoom.us/v2/users/me/recordings?from=2026-06-01&to=2026-06-23&page_size=30 — Free
const data = await lava.gateway('https://api.zoom.us/v2/users/me/recordings?from=2026-06-01&to=2026-06-23&page_size=30', { method: 'GET' });

Get all cloud recording files for a single meeting (recording_files with download_url/play_url, plus any audio transcript). Pass the meeting id for the latest instance, or a URL-encoded meeting UUID for a specific past occurrence.

GET https://api.zoom.us/v2/meetings/89012345678/recordings — Free
const data = await lava.gateway('https://api.zoom.us/v2/meetings/89012345678/recordings', { method: 'GET' });

Next Steps

All Providers

Browse all supported AI providers

Forward Proxy

Learn how to construct proxy URLs and authenticate requests