Skip to main content

Zoom API Helper

https://img.shields.io/pypi/v/zoom-api-helper.svg https://img.shields.io/pypi/pyversions/zoom-api-helper.svg https://github.com/rnag/zoom-api-helper/actions/workflows/dev.yml/badge.svg Documentation Status Updates

Utilities to interact with the Zoom API v2

Installation

The Zoom API Helper library is available on PyPI, and can be installed with pip:

$ pip install zoom-api-helper

You’ll also need to create a Server-to-Server OAuth app as outlined in the docs.

Features

  • Zoom API v2: List users, create meetings, and bulk create meetings.

  • Support for a Server-to-Server OAuth flow.

  • Local caching of access token retrieved from OAuth process.

Quickstart

Start by creating a helper client (ZoomAPI) to interact with the Zoom API:

>>> from zoom_api_helper import ZoomAPI
>>> zoom = ZoomAPI('<CLIENT ID>', '<CLIENT SECRET>',
...                # can also be specified via `ZOOM_ACCOUNT_ID` env variable
...                account_id='<ACCOUNT ID>')

Retrieve a list of users via ZoomAPI.list_users():

>>> zoom.list_users()
{'page_count': 3, 'page_number': 1, 'page_size': 300, 'total_records': 700, 'users': [{'id': '-abc123', 'first_name': 'Jon', 'last_name': 'Doe', 'email': 'jdoe@email.org', 'timezone': 'America/New_York', ...}, ...]}

Or, a mapping of each Zoom user’s Email to User ID:

>>> zoom.user_email_to_id(use_cache=True)
{'jdoe@email.org': '-abc123', 'dsimms@email2.org': '-xyz321', ...}

Create an individual meeting via ZoomAPI.create_meeting():

>>> zoom.create_meeting(topic='My Awesome Meeting')
{'uuid': 'T9SwnVWzQB2dD1zFQ7PxFA==', 'id': 91894643201, 'host_id': '...', 'host_email': 'me@email.org', 'topic': 'My Awesome Meeting', 'type': 2, ...}

To bulk create a list of meetings in a concurrent fashion, please see the section on Bulk Create Meetings below.

Local Storage

This library uses a local storage for cache purposes, located under the user home directory at ~/.zoom/cache by default – though this location can be customized, via the CACHE_DIR environment variable.

The format of the filenames containing cached data will look something similar to this:

{{ Purpose }}_{{ Zoom Account ID }}_{{ Zoom Client ID }}.json

Currently, the helper library utilizes a local file cache for two purposes:

  • Storing the access token retrieved from the OAuth step, so that the token only needs to be refreshed after ~1 hour.

  • Storing a cached mapping of Zoom User emails to User IDs, as generally the Zoom APIs only require the User ID’s.

    • As otherwise, retrieving this mapping from the API can sometimes be expensive, especially for Zoom accounts that have a lot of Users (1000+).

Bulk Create Meetings

In order to bulk create meetings – for example, if you need to create 100+ meetings in a short span of time – use the ZoomAPI’s bulk_create_meetings() method.

This allows you to pass in an Excel (.xlsx) file containing the meetings to create, or else pass in the rows with the meeting info directly.

Example

Suppose you have an Excel file (meeting-info.xlsx) with the following data:

Group Name

Zoom Username

Topic

Meeting Date

Meeting Time

Duration Hr

Duration Min

Meeting URL

Meeting ID

Passcode

A-BC:TEST:Sample Group 1

host1@email.com

TEST Meeting #1: Just an example

10/26/25

3:30 PM

1

30

A-BC:TEST:Sample Group 2

host1@email.com

TEST Meeting #2: Here’s another one

11/27/25

7:00 PM

1

0

A-BC:TEST:Sample Group 3

host2@email.com

TEST Meeting #3: This is the last for now

9/29/25

9:00 PM

1

15

Then, here is a sample code that would allow you to bulk create the specified meetings in the Zoom Account.

Note: replace the credentials such as <CLIENT ID> below as needed.

from datetime import datetime

from zoom_api_helper import ZoomAPI
from zoom_api_helper.models import *


def main():
    zoom = ZoomAPI('<CLIENT ID>', '<CLIENT SECRET>', '<ACCOUNT ID>')

    # (optional) column header to keyword argument
    col_name_to_kwarg = {'Group Name': 'agenda',
                         'Zoom Username': 'host_email'}

    # (optional) predicate function to initially process the row data
    def process_row(row: 'RowType', dt_format='%Y-%m-%d %I:%M %p'):
        start_time = f"{row['Meeting Date'][:10]} {row['Meeting Time']}"

        row.update(
            start_time=datetime.strptime(start_time, dt_format),
            # Zoom expects the `duration` value in minutes.
            duration=int(row['Duration Hr']) * 60 + int(row['Duration Min']),
        )

        return True

    # (optional) function to update row(s) with the API response
    def update_row(row: 'RowType', resp: dict):
        row['Meeting URL'] = resp['join_url']
        row['Meeting ID'] = resp['id']
        row['Passcode'] = resp['password']

    # create meetings with dry run enabled.
    zoom.bulk_create_meetings(
        col_name_to_kwarg,
        excel_file='./meeting-info.xlsx',
        default_timezone='America/New_York',
        process_row=process_row,
        update_row=update_row,
        # comment out below line to actually create the meetings.
        dry_run=True,
    )


if __name__ == '__main__':
    main()

Credits

This package was created with Cookiecutter and the rnag/cookiecutter-pypackage project template.

History

0.1.1 (2022-09-07)

  • Update docs.

0.1.0 (2022-09-06)

  • First release on PyPI.

Metadata

Release files for zoom-api-helper 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for zoom-api-helper 0.1.1
File Size Uploaded Provenance
zoom-api-helper-0.1.1.tar.gz 21.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for zoom-api-helper 0.1.1
File Interpreter ABI Platform
zoom_api_helper-0.1.1-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 35.9 kB

Release files / zoom-api-helper-0.1.1.tar.gz

Download URL zoom-api-helper-0.1.1.tar.gz
Size 21.8 kB
Tags Source
SHA-256 checksum
How to use checksums
530ef46473957f878d9332a337eef5aafecf09f6f479cba51533b7c1374a878b
BLAKE2b-256 checksum
How to use checksums
e0b54ac2aadc3372a0eb7181f0dd2ba64f9cba66a103c65b3171fd1bf32b3651
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.13

Release files / zoom_api_helper-0.1.1-py2.py3-none-any.whl

Download URL zoom_api_helper-0.1.1-py2.py3-none-any.whl
Size 14.1 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
98699a9e9a5b594e23bf06ecccab495903e62bd297416e7b19f2e9f8891a2d47
BLAKE2b-256 checksum
How to use checksums
008425b4a730b60e8d67a686258885495b6212dcfdf8a6d904c83a1d2b7999cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.13

Security for zoom-api-helper 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page