Bookings integration

Zoom

Zoom integration overview
  • CategoryBookings
  • AuthOAuth
  • Scopes2

Overview

Zoom connects on /integrations in the dashboard. Click the Zoom card and the 'Connect Zoom' modal lets you bring your own Zoom OAuth app: in the Zoom App Marketplace you create an OAuth app, add MessageMind's redirect URL to its allow-list, enable the user:read:user and meeting:write:meeting scopes, then paste the app's Client ID and Client Secret into the modal and click Connect. The modal copies the exact redirect URL to add to Zoom (shown as 'Redirect URL, add to your Zoom app's allow-list'). MessageMind POSTs the credentials to its generic integration setup endpoint and gets back an authUrl at the top level of the response; the browser is navigated to that URL, you approve Zoom's consent for the account that will host the meetings, and Zoom redirects back to /integrations with a success flag. Once connected, the calendar engine can mint a Zoom meeting on bookings whose online provider is Zoom, move the meeting on reschedule (same meeting id and join URL), and delete it on cancellation. Zoom here is a meeting-link provider; the calendar itself is still Google or Outlook, not Zoom.

What MessageMind can do with it

  • Mint a Zoom meeting on the host's Zoom account when a booking lands with Zoom as the online provider.
  • Move the Zoom meeting (keeping the same meeting id and join URL) when the booking is rescheduled.
  • Delete the Zoom meeting when the booking is cancelled.

Requirements

  • A Zoom account with permission to create meetings.
  • A Zoom OAuth app owned by the connecting account, with MessageMind's redirect URL on its allow-list and the user:read:user and meeting:write:meeting scopes enabled. Zoom credentials ride on the connected account, not on MessageMind's global environment.

How to connect

  1. In the Zoom App Marketplace, create an OAuth app and open its Basic Information to find the Client ID and Client Secret.
  2. On the MessageMind /integrations page, click the Zoom card to open the 'Connect Zoom' modal. Copy the exact 'Redirect URL, add to your Zoom app's allow-list' value shown in the modal and paste it into your Zoom OAuth app's redirect allow-list.
  3. In the same Zoom app, enable the user:read:user and meeting:write:meeting scopes.
  4. Back in the MessageMind modal, paste the Client ID (placeholder: e.g., "xxxxxxxxxxxxxxxxxxxx") and the Client Secret (placeholder: e.g., "xxxxxxxxxxxxxxxxxxxx") and click Connect. MessageMind POSTs the credentials to the integration setup endpoint and receives a top-level authUrl.
  5. The browser is navigated to that authUrl; approve Zoom's consent screen for the account that will host the Zoom meetings.
  6. Zoom redirects back to /integrations?zoomSuccess=... MessageMind stores the access token, refresh token, token expiry and the account's Zoom identity (id, email) alongside the OAuth app credentials, and shows a 'Zoom Connected!' toast (or 'Zoom is already connected' when the same account was linked before).

Authentication and permissions

Mechanism
Zoom OAuth 2.0 (authorization code) using the per-account Zoom OAuth app. The browser POSTs Client ID and Client Secret to MessageMind's generic integration setup endpoint, which returns a top-level authUrl; the browser follows it and Zoom redirects back to MessageMind's zoom OAuth callback. Tokens refresh automatically; Zoom rotates the refresh token on every refresh, and the new pair is persisted before any further Zoom call.
Credentials
Zoom OAuth app Client ID (tooltip: 'Zoom App Marketplace, your OAuth app, Basic Information, Client ID.') and Client Secret (tooltip: 'Zoom App Marketplace, your OAuth app, Basic Information, Client Secret. Keep this private, it is sent once and never shown again.'), plus access token, refresh token, token expiry and the connected Zoom user's identity (id, email), all stored on the account's Integration record.

Required scopes

  • user:read:user
  • meeting:write:meeting

Available data and actions

Reads

  • The connected Zoom user's identity (id, email) through /users/me on the Zoom API.

Writes

  • A new Zoom meeting on the host's account (POST /users/me/meetings) when a booking with Zoom as the online provider is created.
  • Updates to an existing Zoom meeting when the matching booking is rescheduled (keeping the meeting id and join URL).
  • Deletion of the Zoom meeting when the matching booking is cancelled.

AI agent use cases

  • Offer Zoom as the meeting provider on a calendar event type so every booking of that type automatically gets a Zoom join link.
  • Move a Zoom meeting without changing the join link when the customer reschedules from the chat.
  • Clean up the Zoom meeting automatically when a booking is cancelled, so stale meetings do not linger on the host's account.

Configuration

  • Zoom is a meeting-link provider for the MessageMind calendar engine; it is selected per event type as the 'online' provider. The host calendar itself remains Google or Outlook, or MessageMind's own calendar.
  • Each Zoom-enabled host must have their own connected Zoom account. A host with no usable Zoom account cannot be assigned to a Zoom-online event.
  • Each person is capped at a small number of connected Zoom accounts.
  • The Zoom OAuth app's redirect allow-list must contain the exact Redirect URL shown in the 'Connect Zoom' modal; the modal provides a copy-to-clipboard control for that value.

Example workflows

Bring-your-own Zoom OAuth app, connect

  1. Create an OAuth app in the Zoom App Marketplace and copy its Client ID and Client Secret from Basic Information.
  2. Open the MessageMind 'Connect Zoom' modal and copy the Redirect URL it displays into your Zoom app's redirect allow-list.
  3. Enable the user:read:user and meeting:write:meeting scopes on the Zoom app.
  4. Paste Client ID and Client Secret into the modal and click Connect. MessageMind POSTs the credentials and gets a top-level authUrl.
  5. Follow the authUrl, approve Zoom's consent screen, and get redirected back to /integrations with a 'Zoom Connected!' confirmation.

Chat-driven booking with an auto-minted Zoom link

  1. Customer picks a slot on a MessageMind event type whose online provider is Zoom.
  2. MessageMind confirms the booking and immediately mints a Zoom meeting on the host's Zoom account.
  3. The Zoom join URL, meeting id and start URL are attached to the booking row and sent back in the confirmation.
  4. On reschedule, the same Zoom meeting is updated so the join link stays stable.
  5. On cancel, the Zoom meeting is deleted on the host's account.

Limitations

  • Zoom does not read or write calendar availability by itself; it only creates and manages the meeting attached to a booking.
  • The connecting account must bring its own Zoom OAuth app and keep the exact MessageMind Redirect URL on that app's allow-list; a mismatch breaks the OAuth callback.
  • Zoom rotates the refresh token on every refresh. The last-rotated pair must be persisted; a crash between refresh and persist can strand the connection and require a reconnect.
  • A Zoom refresh token dies after around 90 days of inactivity. An account that has not been used in that time will need to be reconnected.
  • If the host's Zoom account is disconnected or unusable, bookings on event types that require a Zoom link cannot be minted.

Troubleshooting

Connect fails with a 'Zoom connection failed!' toast or a 'clientId and clientSecret are required' error.

The modal was submitted without both OAuth app credentials. Paste the Client ID and Client Secret from your Zoom app's Basic Information and retry.

Zoom's consent screen rejects the redirect or the callback never returns.

The Zoom OAuth app's redirect allow-list is missing the exact Redirect URL. Copy the value from the 'Redirect URL, add to your Zoom app's allow-list' field in the Connect Zoom modal (there is a copy button) and paste it into the Zoom app, then retry.

A later booking fails with an invalid_grant error from Zoom.

The stored Zoom refresh token was revoked, superseded by a newer refresh, or expired after around 90 days of inactivity. Reconnect the Zoom account in Integrations.

A booking lands but no Zoom link is attached.

The Zoom mint failed on the booking critical path. The booking is kept; MessageMind retries the meeting creation out-of-band. Confirm the host's Zoom account is still connected and healthy.

Disconnect and reconnect

  • In the MessageMind dashboard, open Integrations and disconnect the Zoom account. The access token, refresh token and the account's Zoom OAuth app credentials are cleared from the Integration record.
  • To reconnect, run the Zoom OAuth flow again with the Client ID and Client Secret of your Zoom app. Previously-created Zoom meetings remain on the host's Zoom account; disconnecting does not delete them.