# How to Integrate Zoom Meetings in Bubble

- Tool: Bubble
- Difficulty: Beginner
- Time required: 20-25 min
- Compatibility: All Bubble plans (Zoom account required)
- Last updated: March 2026

## TL;DR

Zoom integration in Bubble uses the API Connector to call Zoom's REST API for creating and managing meetings. You set up a Zoom Server-to-Server OAuth app, configure the API Connector with authentication, create meetings programmatically, and provide join links to users. Optionally embed the Zoom Web SDK in an HTML element for in-app meeting participation without leaving your Bubble app.

## Overview: Zoom Meetings in Bubble

This tutorial shows how to integrate Zoom video meetings into your Bubble app for scheduling consultations, virtual classes, or team meetings.

## Before you start

- A Bubble app with user authentication
- A Zoom account (Pro or higher for API access)
- API Connector plugin installed
- Understanding of OAuth authentication basics

## Step-by-step guide

### 1. Create a Zoom Server-to-Server OAuth app

Log into marketplace.zoom.us. Click 'Develop' → 'Build App'. Select 'Server-to-Server OAuth' app type. Fill in the app name and information. Under Scopes, add: meeting:write:admin (to create meetings) and user:read:admin (to get user info). Copy the Account ID, Client ID, and Client Secret. These credentials let your Bubble app create meetings on behalf of your Zoom account.

**Expected result:** A Zoom OAuth app exists with credentials and meeting creation permissions.

### 2. Set up OAuth token generation in API Connector

In the API Connector, create an API called 'Zoom'. Add a call named 'Get Token' — POST to https://zoom.us/oauth/token?grant_type=account_credentials&account_id=YOUR_ACCOUNT_ID. Set authentication to HTTP Basic Auth with Client ID and Client Secret. This returns an access_token valid for 1 hour. Store the token in a custom state or database field. Set this call as an Action so you can trigger it from workflows.

**Expected result:** An API call generates Zoom access tokens for authenticating subsequent API requests.

### 3. Create meetings via the Zoom API

Add another API Connector call 'Create Meeting' — POST to https://api.zoom.us/v2/users/me/meetings. Add the Authorization header: 'Bearer [access_token]'. The request body includes topic, start_time, duration, and settings. Set this as an Action. The response includes the meeting join_url, start_url (for the host), meeting ID, and password.

```
{
  "topic": "Consultation with [Client Name]",
  "type": 2,
  "start_time": "2026-04-01T10:00:00Z",
  "duration": 30,
  "timezone": "America/New_York",
  "settings": {
    "join_before_host": false,
    "waiting_room": true,
    "auto_recording": "cloud"
  }
}
```

**Expected result:** Meetings are created programmatically with join and host URLs returned.

### 4. Store meeting details and share join links

Create a 'Meeting' Data Type with: topic, zoom_meeting_id, join_url, start_url, password, start_time, duration, host (User), attendees (list of Users), status. After creating a Zoom meeting, store all returned details in this record. Send the join_url to attendees via email or in-app notification. Show upcoming meetings in a Repeating Group on the user's dashboard.

**Expected result:** Meeting details are stored in Bubble's database and join links are shared with attendees.

### 5. Optionally embed the Zoom client in-app

For in-app meetings without redirecting to Zoom, embed the Zoom Web SDK in an HTML element. Load the SDK from CDN, initialize with your Zoom SDK credentials, and join the meeting using the meeting number and password. This requires a Zoom Meeting SDK app (separate from Server-to-Server). The embedded client provides video, audio, chat, and screen sharing within your Bubble page.

**Expected result:** Users can join Zoom meetings directly within the Bubble app without opening a separate Zoom window.

## Complete code example

File: `Workflow summary`

```text
ZOOM INTEGRATION — WORKFLOW SUMMARY
=====================================

ZOOM APP: Server-to-Server OAuth
  Account ID, Client ID, Client Secret
  Scopes: meeting:write:admin, user:read:admin

API CONNECTOR:
  Get Token: POST zoom.us/oauth/token
    Auth: HTTP Basic (Client ID + Secret)
    Returns: access_token (1-hour expiry)

  Create Meeting: POST api.zoom.us/v2/users/me/meetings
    Auth: Bearer [access_token]
    Body: topic, start_time, duration, settings
    Returns: join_url, start_url, meeting_id, password

DATA TYPE: Meeting
  topic, zoom_meeting_id, join_url, start_url,
  password, start_time, duration, host, attendees, status

WORKFLOW:
  Step 1: Get Token (if expired)
  Step 2: Create Meeting via API
  Step 3: Store meeting details in DB
  Step 4: Email join_url to attendees
  Step 5: Display on dashboard

OPTIONAL: Zoom Web SDK embed for in-app meetings
```

## Common mistakes

- **Using a JWT app type instead of Server-to-Server OAuth** — Zoom deprecated JWT apps in 2023 — they no longer work for new integrations Fix: Always use Server-to-Server OAuth for server-side API access from Bubble
- **Not refreshing the access token before it expires** — Tokens expire after 1 hour — expired tokens cause all API calls to fail with 401 errors Fix: Store the token with its expiry time and regenerate before each API call if expired
- **Exposing the start_url to non-host users** — The start_url gives host privileges — anyone with it can control the meeting as host Fix: Only share start_url with the meeting host. Share join_url with attendees.

## Best practices

- Use Server-to-Server OAuth for API authentication (not deprecated JWT)
- Regenerate access tokens before they expire (1-hour lifetime)
- Store meeting details in your database for user dashboards and history
- Share join_url with attendees and start_url only with the host
- Enable waiting room in meeting settings for security
- Set up email notifications with meeting links for all participants
- Consider the Zoom Web SDK for seamless in-app meeting experiences

## Frequently asked questions

### Does this work with free Zoom accounts?

Server-to-Server OAuth requires a paid Zoom account (Pro or higher). Free accounts have limited API access and meeting duration caps.

### Can I schedule recurring Zoom meetings?

Yes. Set type to 8 (recurring with fixed time) in the create meeting request and add a recurrence object specifying the pattern.

### How do I cancel or update a Zoom meeting from Bubble?

Use the API Connector to call Zoom's PATCH or DELETE endpoints for the meeting ID. Update your database record status accordingly.

### Can meeting recordings be accessed from Bubble?

Yes. Use the Zoom recordings API to fetch recording URLs for completed meetings. Store them in your database and display on a recordings page.

### Can RapidDev help integrate video conferencing in my Bubble app?

Yes. RapidDev can integrate Zoom, Google Meet, or other video platforms with scheduling, automated meeting creation, and in-app embedding.

---

Source: https://www.rapidevelopers.com/bubble-tutorial/integrate-zoom-meetings-in-bubble
© RapidDev — https://www.rapidevelopers.com/bubble-tutorial/integrate-zoom-meetings-in-bubble
