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.
Prerequisites
- 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
Create a Zoom Server-to-Server OAuth app
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.
Set up OAuth token generation in API Connector
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.
Create meetings via the Zoom API
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.
1{2 "topic": "Consultation with [Client Name]",3 "type": 2,4 "start_time": "2026-04-01T10:00:00Z",5 "duration": 30,6 "timezone": "America/New_York",7 "settings": {8 "join_before_host": false,9 "waiting_room": true,10 "auto_recording": "cloud"11 }12}Expected result: Meetings are created programmatically with join and host URLs returned.
Store meeting details and share join links
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.
Optionally embed the Zoom client in-app
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 working example
1ZOOM INTEGRATION — WORKFLOW SUMMARY2=====================================34ZOOM APP: Server-to-Server OAuth5 Account ID, Client ID, Client Secret6 Scopes: meeting:write:admin, user:read:admin78API CONNECTOR:9 Get Token: POST zoom.us/oauth/token10 Auth: HTTP Basic (Client ID + Secret)11 Returns: access_token (1-hour expiry)1213 Create Meeting: POST api.zoom.us/v2/users/me/meetings14 Auth: Bearer [access_token]15 Body: topic, start_time, duration, settings16 Returns: join_url, start_url, meeting_id, password1718DATA TYPE: Meeting19 topic, zoom_meeting_id, join_url, start_url,20 password, start_time, duration, host, attendees, status2122WORKFLOW:23 Step 1: Get Token (if expired)24 Step 2: Create Meeting via API25 Step 3: Store meeting details in DB26 Step 4: Email join_url to attendees27 Step 5: Display on dashboard2829OPTIONAL: Zoom Web SDK embed for in-app meetingsCommon mistakes when integrating Zoom Meetings in Bubble
Why it's a problem: Using a JWT app type instead of Server-to-Server OAuth
How to avoid: Always use Server-to-Server OAuth for server-side API access from Bubble
Why it's a problem: Not refreshing the access token before it expires
How to avoid: Store the token with its expiry time and regenerate before each API call if expired
Why it's a problem: Exposing the start_url to non-host users
How to avoid: 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
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
I want to integrate Zoom meetings into my Bubble.io consulting app so users can schedule and join video calls. How do I set up the Zoom API, create meetings, and share join links?
Add Zoom meeting integration to my booking app. When a consultation is booked, automatically create a Zoom meeting via API. Store the meeting details and send the join link to both the consultant and client. Show upcoming meetings on the dashboard.
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.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation