> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.meetstream.ai/llms.txt.
> For full documentation content, see https://docs.meetstream.ai/llms-full.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.meetstream.ai/_mcp/server.

# Zoom Bot Implementation Guide

> Step-by-step guide to set up your Zoom app integration with MeetStream

## Step 1: Set up your Zoom app in the Zoom App Marketplace

Follow the steps below to create and configure your Zoom app.

<Steps>
  <Step title="Login to the Zoom App Marketplace">
    Sign in or sign up to access the Zoom App Marketplace.

    <Card title="Open Zoom App Marketplace" href="https://marketplace.zoom.us/" icon="external-link">
      Go to the Zoom Marketplace
    </Card>

    <Note>
      **Recommendation**
      
      Use a dedicated/service account to avoid ownership issues later.
    </Note>
  </Step>

  <Step title="Create a new app">
    1. Go to the **Develop** tab on the top right of the page
    2. Click the dropdown and select **Build App**  
    3. Select **General App**

    <Frame>
      <img src="https://files.buildwithfern.com/meetstream-ai-573402.docs.buildwithfern.com/e6d935a0470fb58623d0a0e08f9f0cd8d06a3ed5227c79f795c4c88fa26c473c/docs/assets/images/guides/zoom-screenshots/step-1.png" alt="Zoom App Marketplace"/>
    </Frame>
    <Frame>
      <img src="https://files.buildwithfern.com/meetstream-ai-573402.docs.buildwithfern.com/934e84fc532c5bd971cf8c6ac09cbbc1835b10385269b275f4c29a27a4311f46/docs/assets/images/guides/zoom-screenshots/step-2.png" alt="Zoom App Marketplace"/>
    </Frame>
  </Step>

  <Step title="Choose app management type">
    Select how permissions will be granted:

    <CardGroup cols={2}>
      <Card title="User-managed" icon="user">
        Individual users authorize access to their Zoom account.
      </Card>
      
      <Card title="Admin-managed" icon="shield">
        Admins authorize access for the entire organization.
      </Card>
    </CardGroup>

    <Frame>
      <img src="https://files.buildwithfern.com/meetstream-ai-573402.docs.buildwithfern.com/4c6b219f1f41020f1a44769594008021b24a4867ffc89f1caed2d59e139b99be/docs/assets/images/guides/zoom-screenshots/step-3.png" alt="Choose app type" />
    </Frame>
  </Step>

  <Step title="Configure OAuth settings">
    1. Go to the **Basic Information** tab  
    2. Scroll to **OAuth Information**  
    3. Paste the below **Callback URL** into the OAuth Redirect URL field

    ```
    https://api.meetstream.ai/api/v1/admin/zoom/oauth/callback
    ```
    <Frame>
      <img src="https://files.buildwithfern.com/meetstream-ai-573402.docs.buildwithfern.com/b78b081683f0e8e28074ad443e5cc59d35906a2456f9e69ee961a25c3123a963/docs/assets/images/guides/zoom-screenshots/callback-url-add.png" alt="Callback url paste" />
    </Frame>

    4. Scroll further down in the same page and find **OAuth Allow Lists** and paste the below URL there

    ```
    https://meetstream.ai
    ```
    <Frame>
      <img src="https://files.buildwithfern.com/meetstream-ai-573402.docs.buildwithfern.com/0101bf7b60101b642ca926214f7069af277c2679a3f243fc882d57eaffe9660d/docs/assets/images/guides/zoom-screenshots/oauth-allow-lists.png" alt="allow lists url paste" />
    </Frame>
  </Step>

  <Step title="Enable Recording SDK">
    1. Under **Features** tab click on **Embed**, and enable **Meeting SDK**
    <Note>
    The rest can be ignored for now, just following what is mentioned is enough to connect our platform to zoom.
    </Note>
    <Frame>
      <img src="https://files.buildwithfern.com/meetstream-ai-573402.docs.buildwithfern.com/8aa79bb227756e6b0fd83f0eb41273f30a874a60ada74b927f8fae4d06d9b53a/docs/assets/images/guides/zoom-screenshots/step-4.png" alt="Enable Recording SDK" />
    </Frame>
  </Step>

  <Step title="Copy your credentials">
    1. Scroll to the top of the menu on the left or go to **Basic Information**  
    2. Find **App Credentials**  
    3. Copy your **Client ID** and **Client Secret**
    <Frame>
      <img src="https://files.buildwithfern.com/meetstream-ai-573402.docs.buildwithfern.com/ca0ecc54a0ce9246c7df4eb5e73461b417df06eebeba4dda2fbe1a543ef8621a/docs/assets/images/guides/zoom-screenshots/step-5.png" alt="copy credentials" />
    </Frame>
  </Step>
</Steps>

## Step 2: Connect Zoom with MeetStream

<Note>
  **Prerequisite:** Make sure your Zoom app is created and configured by following the above steps.
</Note>

<Steps>
  <Step title="Add credentials to MeetStream">
    1. Open the [MeetStream Dashboard](https://app.meetstream.ai/integrations)
    2. Go to the **Integrations** tab  
    3. Navigate to the **Zoom** section  
    4. Paste your **Client ID** and **Client Secret**

    <Frame>
      <img src="https://files.buildwithfern.com/meetstream-ai-573402.docs.buildwithfern.com/7de495d5b66b9381baa097ea00790f94def2b358456dc3cd553f56512ec974f1/docs/assets/images/guides/zoom-screenshots/step-7.png" alt="MeetStream Zoom credentials" />
    </Frame>
  </Step>

  <Step title="Authorize the connection">
    Complete the OAuth authorization flow to connect your Zoom account.
    <Frame>
      <img src="https://files.buildwithfern.com/meetstream-ai-573402.docs.buildwithfern.com/d4d2366e55e76423c9e34790f92051b8835ab77ab8fc262e2cbaa5d08729772b/docs/assets/images/guides/zoom-screenshots/step-8.png" alt="authorise connection" />
    </Frame>
    Once authorized, your integration is ready.
    <Frame>
      <img src="https://files.buildwithfern.com/meetstream-ai-573402.docs.buildwithfern.com/79ac3985c6c912660cf35fd79715b46a84885c7882649c6eef5569938999dfcb/docs/assets/images/guides/zoom-screenshots/step-9.png" alt="MeetStream Zoom credentials" />
    </Frame>
  </Step>

  <Step title="Create your first bot">
    Use the Create Bot API to start a bot.

    <Card title="API Documentation" href="https://docs.meetstream.ai/api-reference/api-endpoints/bot-endpoints/create-bot" icon="book">
      View full API reference
    </Card>

    **Endpoint:** `POST /bots/create_bot`

    <CodeGroup>
      ```bash cURL
      curl -X POST "https://api.meestream.ai/api/v1/bots/create_bot" \
        -H "Authorization: Token YOUR_API_KEY" \
        -H "Content-Type: application/json" \
        -d '{
          "meeting_link": "",
          "bot_name": "",
          "bot_message": "",
          "live_audio_required": {
            "websocket_url": ""
          },
          "live_transcription_required": {
            "webhook_url": ""
          },
          "custom_attributes": {
            "tag": "",
            "sample": ""
          },
          "callback_url": ""
        }'
      ```

      ```json Request Body
      {
        "meeting_link": "",
        "bot_name": "",
        "bot_message": "",
        "live_audio_required": {
          "websocket_url": ""
        },
        "live_transcription_required": {
          "webhook_url": ""
        },
        "custom_attributes": {
          "tag": "",
          "sample": ""
        },
        "callback_url": ""
      }
      ```
    </CodeGroup>

    **Responses:**
    - **201:** Bot created successfully  
    - **400:** Invalid request  
    - **401:** Unauthorized  
    - **500:** Server error

    <Tip>
      If recording permission is denied, consider exiting early to avoid missing recordings.
    </Tip>
  </Step>

  <Step title="View your bot">
    1. Go to the **Bots** section in your dashboard  
    2. Find your bot  
    3. Click **View** to monitor and debug

    <Frame>
      <img src="https://files.buildwithfern.com/meetstream-ai-573402.docs.buildwithfern.com/93d52d160f749063112c76cacfa1162ba30bf20d995a1b749161931d557dd9aa/docs/assets/images/guides/zoom-screenshots/step-10.png" alt="Bot Explorer" />
    </Frame>
  </Step>
</Steps>

<Note>
The above steps enable working for meetings hosted by your account only, to join meetings hosted by any account follow our [Zoom App Production Submission Guide](https://docs.meetstream.ai/guides/zoom/zoom-app-production-submission)
</Note>

## Troubleshooting

<AccordionGroup>
  <Accordion title="Bot fails to join Zoom meeting">
    - Invalid or expired meeting link  
    - App is in development mode  
    - Waiting room not approved  
    - Password-protected meeting  
  </Accordion>

  <Accordion title="No audio or transcript">
    - Audio not enabled in request  
    - No active speakers  
    - Permissions not granted by host  
    - Processing delay after meeting  
  </Accordion>

  <Accordion title="Authentication errors">
    - Invalid API key  
    - Incorrect header format (`Token YOUR_API_KEY`)  
    - Missing permissions  
    - Rate limits exceeded  
  </Accordion>
</AccordionGroup>