<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Harinimaruthasalam on Medium]]></title>
        <description><![CDATA[Stories by Harinimaruthasalam on Medium]]></description>
        <link>https://medium.com/@harinimaruthasalam?source=rss-5d3141004ec5------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*MSrgD6Fm2FcqcgKS</url>
            <title>Stories by Harinimaruthasalam on Medium</title>
            <link>https://medium.com/@harinimaruthasalam?source=rss-5d3141004ec5------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 19 May 2026 19:11:22 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@harinimaruthasalam/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Blog 3: Implementing Webhooks for Real-Time Event Notifications in Zoom]]></title>
            <link>https://medium.com/@harinimaruthasalam/blog-3-implementing-webhooks-for-real-time-event-notifications-in-zoom-2a79391f1faf?source=rss-5d3141004ec5------2</link>
            <guid isPermaLink="false">https://medium.com/p/2a79391f1faf</guid>
            <category><![CDATA[zoom-app]]></category>
            <category><![CDATA[webhooks]]></category>
            <category><![CDATA[zoom]]></category>
            <category><![CDATA[zoom-webhooks]]></category>
            <dc:creator><![CDATA[Harinimaruthasalam]]></dc:creator>
            <pubDate>Sun, 17 Aug 2025 15:11:20 GMT</pubDate>
            <atom:updated>2025-08-17T15:11:20.161Z</atom:updated>
            <content:encoded><![CDATA[<p>In the first two blogs of this series, we learned how to use the Zoom App SDK and explored core APIs to build highly interactive in-client experiences. Now, it’s time to dive into another essential building block of modern Zoom app development: Webhooks.</p><p>Webhooks enable your application to receive event notifications from Zoom in real time. Instead of continuously polling the API to check if a meeting has started, if a user has joined, or if a recording has finished processing, you can simply configure a webhook, and Zoom will push structured event data to your server as soon as those events occur.</p><p>Put simply, think of webhooks as a notification system for your app. Instead of constantly asking Zoom, <em>“Has anything happened yet?”</em>, you let Zoom notify you the moment something important takes place. This not only improves performance and efficiency but also allows your app to respond to events instantly — creating a more seamless and automated user experience.</p><p>With webhooks, you can track everything from meeting lifecycle events (created, started, ended) to participant actions (joined, left, raised hand), as well as recording updates, chat messages, webinar events, and much more. Combined with OAuth and server-side logic, webhooks become a powerful tool to extend your app’s functionality, automate workflows, and integrate Zoom events into your wider systems.</p><p>In this blog, we’ll break down how webhooks work, the types of events you can subscribe to, and the steps to securely configure them for your Zoom app.</p><h3>What are Webhooks in Zoom?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/330/1*-azGDaNU6k8bTjv3GmnPbA.png" /></figure><p>Webhooks in Zoom are event-driven HTTP callbacks that notify your application whenever something important happens in your Zoom account or within a meeting. Think of them as Zoom’s way of proactively telling your system, <em>“Hey, an event just occurred!”</em>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/590/1*SVAFTMIOL_KU3eagLrtrzw.png" /></figure><p>When a webhook-enabled event happens — such as a meeting starting, a participant joining or leaving, or a cloud recording being completed — Zoom automatically sends an HTTP POST request to an endpoint (URL) that you define.</p><ul><li>The POST request contains a JSON payload with detailed information about the event.</li><li>Your app can then parse this data and respond accordingly — for example, updating your database, sending a notification, starting a workflow, or syncing with another system.</li></ul><h3>Example Workflow</h3><ol><li>You configure Zoom to listen for the meeting.started event.</li><li>A host begins a scheduled meeting.</li><li>Zoom generates a webhook event and sends an HTTP POST request to your app’s endpoint (e.g., <a href="https://yourapp.com/webhooks).">https://yourapp.com/webhooks).</a></li><li>Your server receives the JSON event data, which might include the meeting’s ID, host details, and timestamp.</li><li>Your application executes custom logic — such as auto-logging the event, notifying a CRM, or triggering analytics.</li></ol><h3>Why Webhooks Matter</h3><ul><li>Efficiency: Instead of polling the Zoom API in loops to check for updates, you get notified instantly.</li><li>Real-Time Automation: Enables you to react to events as they happen — such as granting user permissions when they join, or sending follow-up emails after a webinar ends.</li><li>Scalability: Works seamlessly for multiple Zoom accounts and apps, without overloading Zoom or your server with unnecessary requests.</li></ul><h3>Supported Event Categories</h3><p>Zoom provides webhooks for a wide range of event categories, including:</p><ul><li>Meetings: started, ended, participant joined/left, meeting recordings completed</li><li>Webinars: registration created, attendee joined/left, webinar ended</li><li>Users: created, deactivated, updated, role assignments</li><li>Recordings: recording started, completed, deleted</li><li>Chat &amp; Team messaging: new messages, reactions</li><li>Apps &amp; Integrations: authorization updates, token events</li></ul><p>By subscribing to the relevant events, you can tailor webhooks to only send the data that matters most to your application.</p><h3>Zoom Webhook Event Flow Explained</h3><p>To better understand how Zoom Webhooks work, let’s break down the event-to-notification flow step by step:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sf_6KrpAgq_Wpc9vVm2zGg.png" /></figure><p>The diagram illustrates how a <strong>Zoom event notification</strong> (such as a meeting starting) is handled end-to-end using webhooks, application logic, and integrations with external services.</p><ol><li><strong>Event Trigger (Zoom App → Webhook Endpoint)</strong></li></ol><ul><li>When a specific event occurs in Zoom (e.g., a meeting starts), Zoom sends a notification in the form of a <strong>JSON payload</strong> to the configured <strong>Webhook Endpoint</strong>.</li></ul><p><strong>2. Validation (Webhook Endpoint)</strong></p><ul><li>The webhook endpoint first checks whether the incoming <strong>JSON payload</strong> is valid.</li><li>If the payload is invalid, it returns a <strong>400 Bad Request</strong> error.</li><li>If valid, it proceeds with further processing.</li></ul><p><strong>3. Forwarding Event Details (Webhook Endpoint → App Logic)</strong></p><ul><li>Once validated, the webhook endpoint forwards the event details to the <strong>App Logic</strong> component.</li></ul><p><strong>4. Processing Event (App Logic)</strong></p><ul><li>The application logic performs multiple tasks in parallel:</li><li><strong>Update Meeting Status (App Logic → Database)</strong>: Updates the meeting’s current state (e.g., started, ended) in the database.</li><li><strong>Send Notification Email (App Logic → Email Service)</strong>: Triggers an email notification to relevant participants or stakeholders.</li><li><strong>Sync Event Data (App Logic → External System)</strong>: Pushes the event data to any integrated external systems for synchronization.</li></ul><p><strong>5. Completion Acknowledgement</strong></p><ul><li>After processing is complete, the webhook endpoint responds back to Zoom with a <strong>200 OK</strong> acknowledgment, confirming receipt of the event.</li></ul><h3>How to Set Up Webhooks in Zoom</h3><p>Configuring webhooks in Zoom allows your app to receive instant notifications about important events. Here’s a detailed guide based on the Zoom App Marketplace interface:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/612/1*i4FI_RyvmmW8O_82kr01xA.png" /></figure><ol><li>Access Zoom App Marketplace and Open Your App<br>Log in to the <a href="https://marketplace.zoom.us/">Zoom Marketplace</a> and either create a new app or edit an existing one where you want to enable webhooks.</li><li>Enable Event Subscriptions<br>Inside your app settings, locate the Event Subscription feature and toggle it ON. This activates the ability for your app to subscribe to Zoom events and receive webhook notifications.</li><li>Create a New Event Subscription</li></ol><ul><li>Click Add New Event Subscription to start configuring a webhook subscription.</li><li>Choose the subscription method — usually, Webhook is selected (there’s also WebSocket if your app requires it).</li><li>Provide a clear Subscription Name to identify this webhook subscription.</li></ul><p>4. Enter Your Event Notification Endpoint URL</p><ul><li>Specify the publicly accessible, HTTPS-secured URL where Zoom will send event notifications via HTTP POST (for example, <a href="https://yourapp.com/webhooks/zoom).">https://yourapp.com/webhooks/zoom).</a></li><li>This URL acts as the listener for incoming event payloads.</li></ul><p>5. Select Events to Subscribe To</p><ul><li>Click Add Events and choose the specific Zoom events your app should listen for, such as meeting.started, participant.joined, or recording.completed.</li><li>When you add events, Zoom will automatically select the necessary permission scopes for your app.</li></ul><p>6. Configure Authentication Headers (Optional)</p><ul><li>You can optionally set a custom authentication header to help validate incoming webhook requests from Zoom, enhancing security.</li></ul><p>7. Save Your Configuration</p><ul><li>After filling out all fields and selecting events, click Save to activate the webhook subscription. Zoom will now POST event data to your endpoint as those events occur in real time.</li></ul><p>This interface makes webhook setup intuitive, allowing you to precisely control which events your application responds to and how secure the data delivery is.</p><h3>Sample Webhook Payload</h3><p>Here’s an example JSON payload for a meeting.started event:</p><pre>{<br>  &quot;event&quot;: &quot;meeting.started&quot;,<br>  &quot;payload&quot;: {<br>    &quot;account_id&quot;: &quot;ABCD1234&quot;,<br>    &quot;object&quot;: {<br>      &quot;id&quot;: &quot;987654321&quot;,<br>      &quot;host_id&quot;: &quot;abcdXYZ&quot;,<br>      &quot;topic&quot;: &quot;Team Sync Meeting&quot;,<br>      &quot;start_time&quot;: &quot;2025-08-17T10:00:00Z&quot;<br>    }<br>  }<br>}</pre><p>Your backend can parse this payload to trigger custom workflows.</p><h3>Example Implementation (Node.js + Express)</h3><p>Here’s a simple server that listens for Zoom webhooks:</p><blockquote>from fastapi import FastAPI, Request<br>from fastapi.responses import JSONResponse</blockquote><blockquote>app = FastAPI()</blockquote><blockquote># Endpoint for Zoom webhooks<br><a href="http://twitter.com/app">@app</a>.post(“/webhooks/zoom”)<br>async def zoom_webhook(request: Request):<br> body = await request.json()<br> event = body.get(“event”)</blockquote><blockquote>print(“Received event:”, event)</blockquote><blockquote>if event == “meeting.started”:<br> topic = body.get(“payload”, {}).get(“object”, {}).get(“topic”)<br> print(“Meeting started:”, topic)</blockquote><blockquote>return JSONResponse(content={“message”: “Event received”}, status_code=200)</blockquote><blockquote># Run the app with: uvicorn filename:app — reload — port 3000</blockquote><h3>Detailed Overview of Supported Webhook Events</h3><p>Zoom provides a rich set of webhook events to help your application stay in sync with real-time happenings inside Zoom meetings, webinars, user accounts, and more. Understanding these event types lets you choose exactly what your app needs to respond to — ensuring efficiency and relevance.</p><h3>Categories of Webhook Events:</h3><ul><li>Meetings: Notifications for lifecycle events such as meeting.created, meeting.started, meeting.ended, participant.joined, and participant.left.</li><li>Webinars: Events like webinar.started, webinar.ended, panelist.joined, and attendee.registered.</li><li>Recordings: Including recording.started, recording.completed, and recording.deleted.</li><li>Users: Changes to user status like user.created, user.updated, and user.deleted.</li><li>Chat and Messaging: New chat messages, reactions, and changes within team chat.</li><li>Account-level events: Role assignments, app authorization changes, and account settings updates.</li></ul><p>By subscribing to specific events, your app receives notifications tailored to its functionality, without unnecessary noise. For example, a meeting management tool might subscribe to meeting and participant events, while a recording management system would focus on recording events.</p><h3>Webhook Security: How to Verify Requests from Zoom</h3><p>Security is paramount when handling webhooks because your endpoint is exposed to external HTTP requests. To protect your application and sensitive user data, Zoom provides mechanisms to validate that incoming webhook requests genuinely originate from Zoom.</p><h3>Verification Mechanisms:</h3><ol><li>Verification Token</li></ol><ul><li>When you create or configure your webhook subscription, Zoom provides a Verification Token.</li><li>Zoom includes this token in the header of each webhook HTTP POST request or within the payload.</li><li>Your server should verify this token matches the expected value for every incoming request. Reject any requests with invalid or missing tokens.</li></ul><p>2. Signature Verification (Recommended)</p><ul><li>Zoom supports an HMAC-SHA256 signature sent in the x-zm-signature header.</li><li>Using your app’s secret, you compute a signature for the request payload and compare it with x-zm-signature.</li><li>If they match, the request is verified as authentic; otherwise, discard the request.</li></ul><p>3. Enforce HTTPS</p><ul><li>Your webhook endpoint must use HTTPS to encrypt communications and protect data integrity.</li></ul><p>4. Additional Security Best Practices</p><ul><li>Validate timestamps or nonces if provided to prevent replay attacks.</li><li>Limit accepted IP ranges if possible.</li><li>Log webhook activity to audit and monitor suspicious behavior.</li></ul><h4>Example: Token Verification in python</h4><blockquote>from fastapi import FastAPI, Request, Header, HTTPException<br>from fastapi.responses import PlainTextResponse</blockquote><blockquote>app = FastAPI()</blockquote><blockquote>VERIFY_TOKEN = “your_verification_token”</blockquote><blockquote><a href="http://twitter.com/app">@app</a>.post(“/webhook”)<br>async def webhook(request: Request, authorization: str = Header(None)):<br> # Check authorization header<br> if authorization != VERIFY_TOKEN:<br> raise HTTPException(status_code=401, detail=”Unauthorized”)</blockquote><blockquote># Get JSON payload if needed<br> body = await request.json()<br> print(“Received payload:”, body)</blockquote><blockquote># Process event payload here<br> return PlainTextResponse(“OK”, status_code=200)</blockquote><blockquote># Run with: uvicorn main:app — reload — port 3000</blockquote><p>Implementing Zoom webhooks is a powerful way to build responsive, automated applications that react instantly to Zoom events, from meeting starts to participant actions and recording completions. By carefully selecting the relevant events, securing your webhook endpoints through token or signature verification, and reliably processing incoming data, you lay the foundation for robust integrations that elevate user experiences.</p><p>As you continue your Zoom development journey, consider how webhooks complement other Zoom developer tools like the App SDK and REST APIs, providing a complete ecosystem for building dynamic, efficient, and real-time interactions.</p><p>In our next blog, we will explore Integrating the Zoom SDK into web and mobile applications, diving into how you can embed Zoom’s powerful meeting and communication capabilities directly within your apps to create seamless user experiences across platforms.</p><p>Start experimenting today by configuring your webhook subscriptions, verifying your endpoints, and unlocking the true potential of Zoom’s event-driven architecture.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2a79391f1faf" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Blog Series 2: Using Zoom APIs to Interact with Meetings, Users, and Recordings]]></title>
            <link>https://medium.com/@harinimaruthasalam/blog-series-2-using-zoom-apis-to-interact-with-meetings-users-and-recordings-1113c9eae186?source=rss-5d3141004ec5------2</link>
            <guid isPermaLink="false">https://medium.com/p/1113c9eae186</guid>
            <category><![CDATA[zoom-application]]></category>
            <category><![CDATA[zoom-api]]></category>
            <category><![CDATA[zoom-meetings]]></category>
            <dc:creator><![CDATA[Harinimaruthasalam]]></dc:creator>
            <pubDate>Sun, 20 Jul 2025 15:24:22 GMT</pubDate>
            <atom:updated>2025-07-20T15:24:22.428Z</atom:updated>
            <content:encoded><![CDATA[<p>In the first installment of this blog series, we explored the robust development ecosystem that Zoom offers, highlighting the capabilities of its App SDK, APIs, and Webhooks. With that foundation in place, it is now time to move from concepts to practical implementation. In this post, we will delve into how you can leverage Zoom APIs to interact with meetings, manage users, and access recordings. Additionally, we will cover best practices for configuring your application to communicate securely and efficiently within Zoom’s in-client environment. This guide is designed to help you unlock the full potential of Zoom’s API integrations, enabling you to build more dynamic and responsive applications.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vsJ7m1SNneVMUTEnEKiw_Q.png" /></figure><h4>Setting the Foundation: Essential App Configuration</h4><p>Before you begin working directly with Zoom APIs, it is crucial to understand and properly set up two key configuration elements that ensure your app integrates smoothly and securely within the Zoom environment.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0Cfg79lmThaLT4BS2cySsA.png" /></figure><ol><li>Home URL: The Core Entry Point of Your Zoom App<br>The Home URL serves as the main gateway to your application inside the Zoom client. When users launch your app, this is the first page they will see.</li></ol><p>Why it matters:</p><ul><li>It defines the initial user experience and is the starting point for all app navigation and interaction.</li><li>The Home URL is rendered within an iframe by Zoom, so your page must be HTTPS-secured and responsive to different screen sizes.</li><li>For example, if your app’s dashboard is located at https://yourapp.com/dashboard, you should set this as your Home URL.</li></ul><p>2. Domain Allow List: Defining Trusted Communication Boundaries<br>The Domain Allow List specifies which domains your app is permitted to interact with, both for API calls and embedded resources.</p><p>Why it’s important:</p><ul><li>It strengthens security by limiting your app’s communication to approved domains, reducing the risk of unauthorized data access or redirection.</li><li>You should always include your API base URL, authentication endpoints, CDN addresses, and any third-party services your app depends on.</li></ul><p>By carefully configuring the Home URL and Domain Allow List, you establish a secure and reliable foundation for your Zoom app, ensuring it functions as intended within the Zoom client and adheres to best security practices.</p><h4>Enabling API Features: Configuring In-Client App Capabilities</h4><p>To fully leverage Zoom APIs and in-client features, it’s essential to enable the correct capabilities within your Zoom App SDK settings. These configurations determine what your app can do inside the Zoom client and how it interacts with meeting participants and Zoom’s platform.</p><p>Key Features in “In-Client App Features”:</p><ul><li>Zoom App SDK</li><li>Guest Mode</li><li>In-Client OAuth</li><li>Collaborate Mode</li><li>Team Chat Subscription</li><li>Add Shortcuts</li></ul><p>For this guide, we’ll focus on the Zoom App SDK and its API capabilities.</p><blockquote>Zoom App SDK and API Features: What They Enable</blockquote><p>The Zoom App SDK is a JavaScript library that allows your app to communicate directly with the Zoom client, offering seamless integration with the meeting interface and its participants. By enabling this feature, your app gains access to a variety of built-in APIs and real-time events, including:</p><ul><li>Fetching meeting and user context: Retrieve real-time information about the current meeting, user roles, and session details.</li><li>Sharing app content: Display custom content within the Zoom meeting, enhancing collaboration and engagement.</li><li>Customizing meeting experiences: Modify elements of the meeting interface, such as virtual backgrounds or participant views, to create tailored experiences.</li><li>Sending invitations and notifications: Programmatically invite users or send in-meeting notifications.</li><li>Controlling backgrounds and recordings: Change virtual backgrounds or manage recording settings directly from your app.</li><li>Accessing and modifying camera/mic settings: Retrieve and update audio/video settings, such as muting participants or switching cameras.</li></ul><blockquote>Supported Events and Contexts</blockquote><p>The SDK supports a wide range of events, such as when a participant shares their screen, changes their audio/video settings, or when the meeting context changes. These events are available to hosts, co-hosts, panelists, and participants, and can be triggered in various contexts like meetings, webinars, and collaborative sessions.</p><blockquote>Security and Authentication</blockquote><p>Zoom Apps use industry-standard OAuth for user-level authentication and authorization, ensuring secure access to APIs and user data. You can further enhance security by restricting your app’s communication to trusted domains via the Domain Allow List.</p><p>By enabling and configuring these features, your app can interact deeply with the Zoom environment, providing users with dynamic, interactive, and secure experiences directly within the Zoom client.</p><blockquote><strong>Core Zoom APIs and Their Use Cases</strong></blockquote><p>Zoom provides a comprehensive set of APIs and SDK methods that allow your app to interact with meetings, users, and recordings within the Zoom client. Below is a breakdown of essential APIs, their primary purposes, and practical examples of how they can be used in real-world scenarios</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TB9_mF3jwHgRYMDIuKxdtA.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cGlmoT1r7B093v1UbKylUg.jpeg" /></figure><p>Note: Some APIs, such as allowParticipantToRecord, may appear in different contexts (e.g., meeting vs. client, host vs. guest). Always ensure you are using the correct method for your specific use case.</p><blockquote><strong>Zoom Events: Building Responsive, Interactive Apps</strong></blockquote><p>Zoom’s SDK also provides event listeners, allowing your app to respond to real-time actions within a meeting. These events are crucial for creating interactive and dynamic experiences.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DqUCNy15Bw4BCXcuawjxBg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HbzfkBIFDoNmfn-vrADasg.jpeg" /></figure><blockquote>Implementation Notes:</blockquote><ul><li>To use these APIs and event listeners, you must first configure your app using zoomSdk.config, specifying the APIs and events your app will use. This step is crucial for enabling secure and authorized communication between your app and the Zoom client.</li><li>The Zoom Apps SDK provides a JavaScript interface for these features, and all API requests must be made over HTTPS for security.</li></ul><p>By leveraging these core APIs and event listeners, you can build rich, interactive Zoom apps that respond to user actions and meeting events in real time, enhancing both functionality and user experience.</p><h3>Real-Time Example: Building a Zoom-Based Polling App</h3><p>Integrating interactive elements like polls directly into Zoom meetings elevates engagement and captures valuable feedback right within the Zoom client. Here’s how you can build a seamless polling experience using the Zoom Apps SDK:</p><h3>Scenario: In-Meeting Polling for Feedback</h3><p>Suppose you need a tool for quick audience polling during meetings without requiring participants to leave the Zoom application.</p><h3>Implementation Workflow</h3><ol><li>Fetch Participants<br>Use the getMeetingParticipants() API to retrieve an up-to-date list of all attendees in the session. This allows your polling UI to dynamically address the active audience.</li><li>Display Polling UI<br>Host your polling user interface at your app’s Home URL, ensuring it is responsive and secured with HTTPS. This UI is rendered as the entry point inside Zoom, presented in an embedded iframe.</li><li>Collect and Sync Votes: (i) When participants cast their votes, use the postMessage() method to exchange data between the UI and the core app logic. (ii) To distribute poll results in real time or sync vote tallies across components, leverage the same messaging mechanism for fast, in-app updates.</li><li>Notify Users of Success<br>Upon a successful vote submission, employ showNotification() to display a toast or banner within the Zoom client, confirming to the user that their vote was registered.</li><li>Invite Others to Vote<br>Encourage greater participation by triggering a sendAppInvitation() event, which sends a personalized invite prompting more users to join the poll from within the meeting.</li><li>Synchronize State on Join<br>Listen for the onMessage or onConnect events. When new attendees join, these listeners help update or sync the current poll state, so all users have the same, real-time view.</li></ol><p><strong>The result:</strong><br>This approach makes your polling app blend naturally into the Zoom meeting experience — participants never have to switch tabs or use external tools. It’s responsive, collaborative, and feels native to the Zoom environment.</p><blockquote>Tip: Zoom APIs enforce safeguards such as HTTPS and domain allow-lists for all app-server and client-server communications. Make sure your endpoints and authentication flow meet these security standards for a smooth user experience.</blockquote><h3>What’s Next?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/262/1*HMv3INtFn9K6U9Muid4NrA.jpeg" /></figure><p>The next part of this series will dive into setting up Webhooks. With Webhooks, your app can receive real-time notifications for critical events, such as attendees joining or leaving, or when a recording starts. This unlocks more automation and integration possibilities for your Zoom applications.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1113c9eae186" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Developing a Zoom-Based Application]]></title>
            <link>https://medium.com/@harinimaruthasalam/developing-a-zoom-based-application-cfb25387262b?source=rss-5d3141004ec5------2</link>
            <guid isPermaLink="false">https://medium.com/p/cfb25387262b</guid>
            <category><![CDATA[zoom-based-application]]></category>
            <category><![CDATA[zoom-application]]></category>
            <category><![CDATA[sdk]]></category>
            <dc:creator><![CDATA[Harinimaruthasalam]]></dc:creator>
            <pubDate>Sun, 22 Jun 2025 17:56:00 GMT</pubDate>
            <atom:updated>2025-06-22T17:56:00.506Z</atom:updated>
            <content:encoded><![CDATA[<p><strong>Developing a Zoom-Based Application</strong></p><p>When you hear the word <strong>Zoom</strong>, you likely think of virtual meetings, webinars, or online classes. But did you know that Zoom also allows developers to build fully integrated applications inside its platform?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/740/1*TZ4IkJQ5GfN52tQoHUtLgw.avif" /></figure><p>That’s right — Zoom is no longer just a video conferencing tool. With powerful features like <strong>APIs</strong>, <strong>Webhooks</strong>, and <strong>SDKs</strong>, it opens up an entire development ecosystem. You can build applications that enhance meeting experiences, automate workflows, and embed rich interactions directly into the Zoom interface.</p><p><strong>About This Blog Series</strong></p><p>This blog series will walk you through every essential step of Zoom app development. Here’s what we’ll cover across the upcoming posts:</p><ul><li><strong>Setting up the environment</strong> for Zoom application development</li><li><strong>Using Zoom APIs</strong> to interact with meetings, users, and recordings</li><li><strong>Implementing Webhooks</strong> for real-time event notifications</li><li><strong>Integrating the Zoom SDK</strong> into web and mobile applications</li><li><strong>Designing a Zoom-native user interface</strong> to create a seamless experience</li><li><strong>Building a complete Zoom-based web application</strong> using all of the above tools</li></ul><p><strong>What This First Post Covers</strong></p><p>In this introductory post, we will explore:</p><ul><li>What a Zoom application is</li><li>Why developers are building apps on Zoom</li><li>The advantages and limitations</li><li>The different types of applications supported by Zoom</li></ul><p>By the end, you’ll have a clear understanding of Zoom as a development platform and what you can expect from the rest of the series.</p><p><strong>What is a Zoom Application?</strong></p><p>A Zoom application is a software solution that integrates with Zoom’s ecosystem to extend or enhance its capabilities. These applications can help automate processes, improve workflows, and provide additional functionalities such as scheduling, recording management, analytics, and more.</p><p><strong>Benefits of Building a Zoom Application</strong></p><ul><li><strong>Seamless Integration</strong>: Connect Zoom with other applications and services.</li><li><strong>Automation</strong>: Reduce manual work by automating meeting scheduling, user management, and more.</li><li><strong>Customization</strong>: Tailor Zoom features to suit specific business needs.</li><li><strong>Enhanced User Experience</strong>: Provide additional functionalities within the Zoom interface.</li></ul><p><strong>Pros and Cons of Zoom Applications</strong></p><p><strong>Pros:</strong></p><p>✅ Easy integration with existing workflows. ✅ Scalable and flexible API. ✅ Wide range of use cases (education, business, healthcare, etc.).</p><p><strong>Cons:</strong></p><p>❌ Some API features require paid Zoom plans. ❌ Rate limits on API calls. ❌ Requires proper authentication and security considerations.</p><p><strong>Types of Zoom Applications</strong></p><p>Zoom provides developers with a versatile platform to create applications that integrate seamlessly with its services. Understanding the different types of Zoom applications is crucial for selecting the appropriate integration method for your specific use case. Here’s an in-depth look at each application type:</p><p><strong>1. OAuth Apps (General Apps)</strong></p><p>OAuth Apps utilize the OAuth 2.0 protocol to securely interact with Zoom’s APIs. This authentication method ensures that applications can perform actions on behalf of users with their consent, maintaining security and user trust.</p><p><em>Key Features:</em></p><ul><li><strong>User Authorization:</strong> These apps require users to grant permission before the application can access their Zoom resources. This is typically done through an authorization flow where users log in and approve the app’s access.</li><li><strong>Access to Various Resources:</strong> Once authorized, OAuth Apps can manage users, schedule or modify meetings, access recordings, and perform other tasks permitted by the granted scopes.</li></ul><p><em>Use Cases:</em></p><ul><li><strong>Third-Party Integrations:</strong> Connecting Zoom with external services like CRM systems, learning management platforms, or marketing tools.</li><li><strong>Custom Dashboards:</strong> Developing personalized dashboards that display user-specific Zoom data, such as upcoming meetings or usage statistics.</li></ul><p><em>Example:</em></p><p>A project management tool integrating with Zoom to allow users to schedule meetings directly from the project’s interface. The integration uses OAuth to request permissions from users to manage their meetings.</p><p><strong>2. Webhook-Only Apps</strong></p><p>Webhook-Only Apps are designed to receive real-time notifications from Zoom about specific events, enabling applications to respond promptly to changes or actions within Zoom.</p><p><em>Key Features:</em></p><ul><li><strong>Event Subscriptions:</strong> Developers can subscribe to specific events, such as when a meeting starts, ends, or when a participant joins or leaves.</li><li><strong>Real-Time Data:</strong> Upon the occurrence of a subscribed event, Zoom sends an HTTP POST request to a predefined endpoint with details about the event.</li></ul><p><em>Use Cases:</em></p><ul><li><strong>Automated Workflows:</strong> Triggering processes in other systems when certain Zoom events occur, like updating attendance records when participants join a meeting.</li><li><strong>Notifications:</strong> Sending alerts or notifications to users or administrators based on specific events, such as when a meeting is about to start.</li></ul><p><em>Example:</em></p><p>An educational platform that updates student attendance records automatically when they join or leave a Zoom class session, using webhooks to monitor participant activity.</p><p><strong>3. Server-to-Server OAuth Apps</strong></p><p>Server-to-Server OAuth Apps provide a secure method for server-side applications to authenticate and interact with Zoom APIs without direct user involvement. This approach is beneficial for internal applications that require administrative access to Zoom resources.</p><p><em>Key Features:</em></p><ul><li><strong>Two-Legged OAuth:</strong> Unlike standard OAuth (three-legged), this method involves direct authentication between the application server and Zoom, eliminating the need for user authorization.</li><li><strong>Administrative Access:</strong> These apps can perform administrative tasks across the Zoom account, such as managing users, meetings, and other resources.</li></ul><p><em>Use Cases:</em></p><ul><li><strong>Internal Tools:</strong> Developing internal dashboards or tools for IT administrators to manage Zoom resources within an organization.</li><li><strong>Data Synchronization:</strong> Syncing Zoom data with internal databases or systems for reporting and analytics purposes.</li></ul><p><em>Example:</em></p><p>An organization’s internal application that automatically provisions Zoom accounts for new employees and schedules onboarding meetings, utilizing Server-to-Server OAuth for authentication.</p><p><strong>4. Zoom Apps</strong></p><p>Zoom Apps are embedded applications that operate within the Zoom client, offering interactive and collaborative experiences directly inside Zoom meetings. These apps enhance the functionality of Zoom by providing additional tools and features accessible during meetings.</p><p><em>Key Features:</em></p><ul><li><strong>In-Meeting Integration:</strong> Users can access these apps directly within the Zoom interface during meetings, allowing for seamless interaction without switching contexts.</li><li><strong>Interactive Features:</strong> Zoom Apps can provide real-time collaboration tools, such as whiteboards, polls, or document editing, enhancing participant engagement.</li></ul><p><em>Use Cases:</em></p><ul><li><strong>Enhanced Collaboration:</strong> Providing tools like shared notes, brainstorming boards, or project management features within meetings.</li><li><strong>Entertainment and Engagement:</strong> Offering games, icebreakers, or wellness activities to make meetings more engaging.</li></ul><p><em>Example:</em></p><p>A brainstorming app that allows meeting participants to collaboratively create and organize ideas on a virtual whiteboard during a Zoom meeting.</p><p>By understanding these application types, developers can choose the most suitable method to integrate with Zoom, aligning with their project’s requirements and goals.</p><p><strong>Steps to Create a Zoom Application</strong></p><p><strong>1. Setting Up a Zoom Developer Account</strong></p><p>Before developing your application, you need to set up a Zoom Developer account:</p><ol><li>Go to the <a href="https://marketplace.zoom.us/">Zoom App Marketplace</a>.</li><li>Sign in with your Zoom account.</li><li>Click on <strong>Develop</strong> → <strong>Build App</strong>.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QTDIj2xDOUlWU3_TS1W4NQ.png" /><figcaption>Zoom App Marketplace Page</figcaption></figure><p>4. Choose the type of app based on your requirements.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/732/1*eO_xFTmEiLtODjHWlEtRIQ.png" /></figure><p><strong>2. Creating an General (OAuth-Based) Zoom Application</strong></p><p>OAuth is the preferred method for building secure and scalable applications that interact with Zoom APIs. Follow these steps to create an OAuth application:</p><ol><li>Select <strong>OAuth</strong> as the app type.</li><li>Enter the <strong>App Name</strong> and choose whether it is an account-level or user-level app.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*V5iNo5rDpjsUv0ivPEy65w.png" /><figcaption>Your Application and Credentials will be available in this page</figcaption></figure><p>3. Provide the <strong>Redirect URL</strong> (used for authentication callbacks).</p><p><strong>What is a Redirect URL?</strong></p><p>A <strong>redirect URL</strong> is a crucial component in OAuth authentication. It is the <strong>callback URL</strong> where Zoom sends the user after they have granted or denied authorization. This URL is used by your application to <strong>capture the authorization code</strong> and exchange it for an access token.</p><p>When a user clicks the <strong>Authorize</strong> button on Zoom’s OAuth consent page, Zoom sends an HTTP request to the <strong>redirect URL</strong> with a query parameter containing an authorization code. Your backend then processes this code and requests an <strong>access token</strong> to interact with Zoom’s APIs.</p><p><strong>Why is the Redirect URL Important?</strong></p><ul><li>It is required for <strong>OAuth authentication</strong> flow.</li><li>It ensures that only trusted applications handle authentication responses.</li><li>It prevents unauthorized redirections and token leaks.</li></ul><p><strong>Usage of ngrok in Redirect URLs</strong></p><p>In local development, your application typically runs on <a href="http://localhost:8000,">http://localhost:8000,</a> which is <strong>not accessible</strong> from the public internet. Since Zoom requires a <strong>publicly accessible redirect URL</strong>, this poses a challenge.</p><p><strong>ngrok</strong> is a tool that creates a <strong>temporary public URL</strong> for your local server, allowing external services (like Zoom) to communicate with it.</p><p><strong>Steps to Use ngrok:</strong></p><ol><li><strong>Install ngrok</strong> (if not installed): download it from ngrok’s official website <a href="https://ngrok.com/docs">https://ngrok.com/docs</a></li><li><strong>Start your FastAPI server</strong> (assuming it runs on port 8000): uvicorn (Filename):app — reload</li><li><strong>Run ngrok to expose the local server: </strong>ngrok http 8000, This generates a public URL, e.g., https://abc123.ngrok.io.</li><li><strong>Set the Redirect URL in Zoom:</strong></li></ol><ul><li>Go to your Zoom App settings.</li><li>Set the <strong>OAuth Redirect URL</strong> as <a href="https://abc123.ngrok.io/zoom/oauth_redirect.">https://abc123.ngrok.io/zoom/oauth_redirect.</a></li></ul><p><strong>Python Example: Handling Zoom OAuth Redirect</strong></p><p>Here’s a FastAPI endpoint that captures the authorization code, exchanges it for an access token, and logs the response.</p><p><strong>FastAPI OAuth Redirect Implementation</strong></p><blockquote>from fastapi import FastAPI, Request, HTTPException</blockquote><blockquote>import requests</blockquote><blockquote>from starlette.responses import RedirectResponse</blockquote><blockquote>import logging</blockquote><blockquote>app = FastAPI()</blockquote><blockquote>logger = logging.getLogger(__name__)</blockquote><blockquote># Replace with actual credentials</blockquote><blockquote>ZOOM_CLIENT_ID = “your_zoom_client_id”</blockquote><blockquote>ZOOM_CLIENT_SECRET = “your_zoom_client_secret”</blockquote><blockquote>REDIRECT_URI = “https://abc123.ngrok.io/zoom/oauth_redirect&quot; # Use ngrok URL during development</blockquote><blockquote>@app.get(“/zoom/oauth_redirect”)</blockquote><blockquote>async def oauth_redirect(request: Request):</blockquote><blockquote>“””Handles the OAuth callback from Zoom”””</blockquote><blockquote>logger.info(“Received request to /zoom/oauth_redirect”)</blockquote><blockquote>try:</blockquote><blockquote># Extract ‘code’ parameter from query params</blockquote><blockquote>code = request.query_params.get(“code”)</blockquote><blockquote>logger.info(f”Received code: {code}”)</blockquote><blockquote>if not code:</blockquote><blockquote>logger.error(“Missing ‘code’ parameter”)</blockquote><blockquote>raise HTTPException(status_code=400, detail=”Error: Missing ‘code’ parameter”)</blockquote><blockquote># Exchange code for an access token</blockquote><blockquote>response = requests.post(“https://zoom.us/oauth/token&quot;, data={</blockquote><blockquote>“grant_type”: “authorization_code”,</blockquote><blockquote>“client_id”: ZOOM_CLIENT_ID,</blockquote><blockquote>“client_secret”: ZOOM_CLIENT_SECRET,</blockquote><blockquote>“code”: code,</blockquote><blockquote>“redirect_uri”: REDIRECT_URI</blockquote><blockquote>})</blockquote><blockquote>zoom_data = response.json()</blockquote><blockquote>logger.info(f”Zoom API response: {zoom_data}”)</blockquote><blockquote>if “access_token” in zoom_data:</blockquote><blockquote>access_token = zoom_data[“access_token”]</blockquote><blockquote>user_id = zoom_data.get(“user_id”)</blockquote><blockquote>logger.info(“Access token obtained successfully”)</blockquote><blockquote>return RedirectResponse(url=”/success”)</blockquote><blockquote>else:</blockquote><blockquote>logger.error(“Failed to obtain access token”)</blockquote><blockquote>return {“error”: “Failed to obtain access token”, “details”: zoom_data}</blockquote><blockquote>except Exception as e:</blockquote><blockquote>logger.error(f”Error in oauth_redirect: {str(e)}”, exc_info=True)</blockquote><blockquote>raise HTTPException(status_code=500, detail=f”Error: {str(e)}”)</blockquote><p><strong>How This Works:</strong></p><ol><li><strong>User Authorization:</strong></li></ol><ul><li>The user clicks an <strong>authorize</strong> link: <br>https://zoom.us/oauth/authorize?response_type=code&amp;client_id=your_zoom_client_id&amp;redirect_uri=https://abc123.ngrok.io/zoom/oauth_redirect</li><li>Zoom asks the user to approve access.</li></ul><p><strong>2. Zoom Redirects the User:</strong></p><ul><li>After approval, Zoom redirects the user to your specified redirect URL: <a href="https://abc123.ngrok.io/zoom/oauth_redirect?code=abcd1234">https://abc123.ngrok.io/zoom/oauth_redirect?code=abcd1234</a></li></ul><p><strong>3. Authorization Code Exchange:</strong></p><ul><li>Your FastAPI app extracts the code parameter.</li><li>It sends a POST request to <a href="https://zoom.us/oauth/token">https://zoom.us/oauth/token</a> to get an access token.</li></ul><p><strong>4. Handling the Response:</strong></p><ul><li>If the response contains access_token, the user is authenticated.</li><li>Otherwise, an error is returned.</li></ul><p><strong>5. Define API scopes based on the required functionalities, such as:</strong></p><ul><li><strong>Meeting Management</strong>: Create, update, or delete meetings.</li><li><strong>User Management</strong>: Retrieve and manage user information.</li><li><strong>Recording Access</strong>: Access cloud recordings.</li></ul><p><strong>6. Save and activate the application.</strong></p><p><em>In the next blog, we will dive deeper into using Zoom APIs to interact with meetings, users, and recordings. Stay tuned for more insights on developing a Zoom-based application!</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cfb25387262b" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>