[Recall.ai has raised a $38M series B!](/content/blog/recall-ai-series-b-the-api-for-meeting-recording/index.html)

More resources

Filter by category

View all

Best Practices

Best Practices

Tutorials

Deep Dive

Zoom Developer Forum

.avif)
Google Meet Developer Forum

Microsoft Teams Developer Forum

Announcements

Thank you! Your submission has been received!

Oops! Something went wrong while submitting the form.

\\
A guide to programmatic screen capture on macOS\\
\\
Deep Dive](/content/blog/macos-screencapture-api/index.html)

\\
Joining multiple simultaneous meetings through the Zoom SDK\\
\\
Zoom Developer Forum](/content/blog/zoom-sdk-simultaneous-meeting-limitations/index.html)

\\
How to get transcripts from Microsoft Teams\\
\\
Tutorials](/content/blog/how-to-get-transcripts-from-microsoft-teams/index.html)

\\
How to Get Recordings and Transcripts from Slack Huddles\\
\\
Tutorials](/content/blog/get-recordings-and-transcripts-from-slack-huddles-api/index.html)

\\
Understanding the Zoom On Behalf Of (OBF) Token\\
\\
Deep Dive](/content/blog/zoom-obf/index.html)

\\
What is a meeting bot?\\
\\
Deep Dive](/content/blog/what-is-a-meeting-bot/index.html)

\\
Zoom SDK Credentials\\
\\
Deep Dive](/content/blog/zoom-sdk-credentials/index.html)

\\
What is a Zoom Access Key (ZAK) token?\\
\\
Deep Dive](/content/blog/what-is-a-zoom-access-key-zak-token/index.html)

\\
How WebSockets cost us $1M on our AWS bill\\
\\
Deep Dive](/content/blog/how-websockets-cost-us-1m-on-our-aws-bill/index.html)

\\
The fix for a segfault that never shipped\\
\\
Deep Dive](/content/blog/the-fix-for-a-segfault-that-never-shipped/index.html)

\\
Postgres Postmaster does not scale\\
\\
Deep Dive](/content/blog/postgres-postmaster-does-not-scale/index.html)

\\
How to access audio streams in the Zoom Web SDK?\\
\\
Zoom Developer Forum](/content/blog/how-to-access-audio-streams-in-the-zoom-web-sdk/index.html)

\\
How to determine if audio is connected on the Zoom Web SDK?\\
\\
Zoom Developer Forum](/content/blog/how-to-determine-if-audio-is-connected-on-the-zoom-web-sdk/index.html)

\\
Recall.ai Series B: The API for Meeting Recording\\
\\
Announcements](/content/blog/recall-ai-series-b-the-api-for-meeting-recording/index.html)

\\
How to build a Microsoft Teams Bot\\
\\
Tutorials](/content/blog/how-to-build-a-microsoft-teams-bot/index.html)

\\
What is the Google Meet Media API?\\
\\
Best Practices](/content/blog/what-is-the-google-meet-media-api/index.html)

\\
Postgres LISTEN/NOTIFY does not scale\\
\\
Deep Dive](/content/blog/postgres-listen-notify-does-not-scale/index.html)

\\
Code Walkthrough: Generating Meeting Action Items With Recall.ai\\
\\
Tutorials](/content/blog/generating-meeting-action-items-with-recall-ai/index.html)

\\
What are speaker labels and how to obtain them\\
\\
Tutorials](/content/blog/speaker-labels-and-names-explained/index.html)

\\
7 APIs to get Zoom transcripts: A comprehensive guide\\
\\
Best Practices](/content/blog/7-apis-to-get-zoom-transcripts-a-comprehensive-guide/index.html)

\\
How to get transcripts from Zoom\\
\\
Tutorials](/content/blog/how-to-get-transcripts-from-zoom/index.html)

\\
How to record Microsoft Teams\\
\\
Tutorials](/content/blog/how-to-get-recordings-from-microsoft-teams/index.html)

\\
New Recall.ai Pricing for 2026: $0.50 per Hour of Meeting Recording\\
\\
Announcements](/content/blog/new-recall-ai-pricing-for-2026/index.html)

\\
Open source Microsoft Teams recording software\\
\\
Microsoft Teams Developer Forum](/content/blog/microsoft-teams-recording-software-open-source/index.html)

\\
How to pick a meeting note taker\\
\\
Best Practices](/content/blog/how-to-pick-a-meeting-note-taker/index.html)

\\
How to Get a Recording from the Google Meet API\\
\\
Best Practices](/content/blog/how-to-get-a-recording-from-the-google-meet-api/index.html)

\\
How to get Google Meet transcripts programmatically\\
\\
Best Practices](/content/blog/how-to-get-transcripts-from-google-meet-developer-edition/index.html)

\\
What is Zoom RTMS?\\
\\
Best Practices](/content/blog/what-is-zoom-rtms/index.html)

\\
How to build a desktop recording app (Like Granola)\\
\\
Tutorials](/content/blog/how-to-build-a-desktop-recording-app/index.html)

\\
Speaker Diarization: What it is and how to get diarized transcripts\\
\\
Best Practices](/content/blog/speaker-diarization/index.html)

\\
Understanding Zoom RTMS Behavior and Its Constraints\\
\\
Best Practices](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints/index.html)

\\
How to build a meeting notetaker\\
\\
Tutorials](/content/blog/how-to-build-a-meeting-notetaker/index.html)

\\
How to build a meeting bot \\
\\
Tutorials](/content/blog/how-to-build-a-meeting-bot/index.html)

\\
When to build a Microsoft Teams bot with Puppeteer\\
\\
Microsoft Teams Developer Forum](/content/blog/puppeteer-microsoft-teams-bot/index.html)

\\
How to join a Zoom meeting using the Zoom Meeting SDK\\
\\
Zoom Developer Forum](/content/blog/how-to-join-a-zoom-meeting-using-the-zoom-meeting-sdk/index.html)

\\
Microsoft Teams open source bot\\
\\
Microsoft Teams Developer Forum](/content/blog/microsoft-teams-open-source-bot/index.html)

\\
How to Build a Google Meet Bot from Scratch\\
\\
Tutorials](/content/blog/how-i-built-an-in-house-google-meet-bot/index.html)

.avif)\\
Is there open source Google Meet recording software?\\
\\
Google Meet Developer Forum](/content/blog/is-there-open-source-google-meet-recording-software/index.html)

.avif)\\
Puppeteer Google Meet Bot\\
\\
Google Meet Developer Forum](/content/blog/puppeteer-google-meet-bot/index.html)

\\
Zoom recording software open source\\
\\
Zoom Developer Forum](/content/blog/zoom-recording-software-open-source/index.html)

\\
How to build a Chrome recording extension using tabCapture API\\
\\
Tutorials](/content/blog/how-to-build-a-chrome-recording-extension/index.html)

\\
Zoom Signature Invalid\\
\\
Zoom Developer Forum](/content/blog/zoom-signature-invalid/index.html)

\\
How to get automatic recordings from a Zoom bot\\
\\
Zoom Developer Forum](/content/blog/zoom-bot-automatic-recording/index.html)

\\
Retrieving participant names through the Zoom SDK\\
\\
Zoom Developer Forum](/content/blog/zoom-sdk-retrieving-participant-names/index.html)

\\
How to Access Live Transcription Data from Zoom Web SDK (Component View)\\
\\
Zoom Developer Forum](/content/blog/how-to-access-live-transcription-data-from-zoom-web-sdk-component-view/index.html)

\\
How to build a Zoom bot from scratch\\
\\
Tutorials](/content/blog/how-to-build-a-zoom-bot/index.html)

\\
Create a Google Meet Programmatically\\
\\
Tutorials](/content/blog/create-a-google-meet-programmatically/index.html)

\\
How to join Zoom using Puppeteer\\
\\
Zoom Developer Forum](/content/blog/how-to-join-zoom-using-puppeteer/index.html)

\\
Handling Zoom SDK recording permissions\\
\\
Zoom Developer Forum](/content/blog/zoom-sdk-recording-permissions/index.html)

\\
How to Enable a Zoom Bot to Skip the Waiting Room\\
\\
Zoom Developer Forum](/content/blog/zoom-bot-skip-waiting-room/index.html)

\\
How do I sync audio and video when processing raw audio/video from the Zoom SDK?\\
\\
Zoom Developer Forum](/content/blog/how-do-i-sync-audio-and-video-when-processing-raw-audio-video-from-the-zoom-sdk/index.html)

\\
Fixing DLL warnings in the Zoom Windows Meeting SDK\\
\\
Zoom Developer Forum](/content/blog/fixing-dll-warnings-in-the-zoom-windows-meeting-sdk/index.html)

\\
Zoom join tokens for local recording\\
\\
Best Practices](/content/blog/zoom-join-tokens-for-local-recording/index.html)

\\
How to get recordings from Zoom using a Zoom recording bot API\\
\\
Tutorials](/content/blog/how-to-get-recordings-from-zoom/index.html)

\\
How to manage ZAK Tokens for Zoom bots\\
\\
Zoom Developer Forum](/content/blog/how-to-manage-zak-tokens-for-zoom-bots/index.html)

\\
How to build a Zoom notetaker\\
\\
Tutorials](/content/blog/how-to-build-a-zoom-notetaker/index.html)

\\
Recall.ai Announces Participant Emails\\
\\
Announcements](/content/blog/recall-ai-announces-participant-emails/index.html)

\\
How often should I expect to receive the Zoom recording completed webhook for a single meeting?\\
\\
Zoom Developer Forum](/content/blog/how-often-should-i-expect-to-receive-the-zoom-recording-completed-webhook-for-a-single-meeting/index.html)

\\
Why are waiting rooms causing issues with the Zoom Web Meeting SDK?\\
\\
Zoom Developer Forum](/content/blog/why-are-waiting-rooms-causing-issues-with-the-zoom-web-meeting-sdk/index.html)

\\
Why is my Zoom recording completed webhook so delayed?\\
\\
Zoom Developer Forum](/content/blog/why-is-my-zoom-recording-completed-webhook-so-delayed/index.html)

\\
Why aren't transcription webhooks firing for my Zoom meetings?\\
\\
Zoom Developer Forum](/content/blog/why-arent-transcription-webhooks-firing-for-my-zoom-meetings/index.html)

\\
How do I track participants across Zoom breakout rooms?\\
\\
Zoom Developer Forum](/content/blog/how-do-i-track-participants-across-zoom-breakout-rooms/index.html)

\\
Can I identify meeting participants by email on Zoom?\\
\\
Zoom Developer Forum](/content/blog/can-i-identify-meeting-participants-by-email-on-zoom/index.html)

\\
How do I capture participant data in real time on Zoom?\\
\\
Zoom Developer Forum](/content/blog/how-do-i-capture-participant-data-in-real-time-on-zoom/index.html)

\\
Tracking persistent Zoom meeting ID's for participants who leave and rejoin\\
\\
Zoom Developer Forum](/content/blog/tracking-persistent-zoom-meeting-ids-for-participants-who-leave-and-rejoin/index.html)

\\
Debugging issues with automatic cloud recording\\
\\
Zoom Developer Forum](/content/blog/debugging-issues-with-automatic-cloud-recording/index.html)

\\
Tracking Zoom meetings when using Zoom PMI\\
\\
Zoom Developer Forum](/content/blog/tracking-zoom-meetings-when-using-zoom-pmi/index.html)

\\
Encoding raw video from the Zoom SDK to MP4\\
\\
Zoom Developer Forum](/content/blog/encoding-raw-video-from-the-zoom-sdk/index.html)

\\
Handling crashes in the Zoom Windows Meeting SDK\\
\\
Zoom Developer Forum](/content/blog/handling-crashes-in-the-zoom-windows-meeting-sdk/index.html)

\\
Encoding raw video frames from the Zoom SDK to JPEG\\
\\
Zoom Developer Forum](/content/blog/decoding-raw-video-frames-from-the-zoom-sdk/index.html)

\\
Recording meetings without a local recording token\\
\\
Zoom Developer Forum](/content/blog/recording-meetings-without-a-local-recording-token/index.html)

\\
Resolving intermittent errors while downloading Zoom transcripts\\
\\
Zoom Developer Forum](/content/blog/resolving-intermittent-errors-while-downloading-zoom-transcripts/index.html)

\\
Applying account-level settings to meetings created via the Zoom API\\
\\
Zoom Developer Forum](/content/blog/applying-account-level-settings-to-meetings-created-via-the-zoom-api/index.html)

\\
Why can't my bot join meetings hosted by people outside of my Zoom organization?\\
\\
Zoom Developer Forum](/content/blog/why-cant-my-bot-join-meetings-hosted-by-people-outside-of-my-zoom-organization/index.html)

\\
Zoom Cloud Recording API: Transcript Tutorial, Common Pitfalls, and Workarounds\\
\\
Tutorials](/content/blog/zoom-transcript-api/index.html)

\\
Zoom Meeting Bots: What They Are and Solutions\\
\\
Deep Dive](/content/blog/zoom-bots/index.html)

\\
Can I access gallery view video on the Linux SDK?\\
\\
Zoom Developer Forum](/content/blog/can-i-access-gallery-view-video-on-the-linux-sdk/index.html)

\\
How to access the Zoom Archive Files API\\
\\
Zoom Developer Forum](/content/blog/how-to-access-the-zoom-archive-files-api/index.html)

\\
Resolving Web SDK local recording errors\\
\\
Zoom Developer Forum](/content/blog/resolving-web-sdk-local-recording-errors/index.html)

\\
How to resolve permissions errors with the Zoom Users API\\
\\
Zoom Developer Forum](/content/blog/how-to-resolve-permissions-errors-with-the-zoom-users-api/index.html)

\\
How to track participant name changes in breakout rooms\\
\\
Zoom Developer Forum](/content/blog/how-to-track-participant-name-changes-in-breakout-rooms/index.html)

\\
Why is the transcript.completed webhook not firing?\\
\\
Zoom Developer Forum](/content/blog/zoom-sdk-webhook-not-firing/index.html)

\\
Debugging Zoom SDK failed video capture\\
\\
Zoom Developer Forum](/content/blog/zoom-sdk-debugging-video-capture/index.html)

\\
Capturing video and audio streams through the Zoom SDK\\
\\
Zoom Developer Forum](/content/blog/zoom-sdk-receiving-video-streams/index.html)

\\
Can you suppress the Zoom recording consent prompt through the SDK?\\
\\
Zoom Developer Forum](/content/blog/zoom-sdk-suppressing-consent-prompt/index.html)

\\
How to stream video to a meeting through the Zoom SDK\\
\\
Zoom Developer Forum](/content/blog/zoom-sdk-streaming-video-to-meeting/index.html)

\\
Sending chat messages through the Zoom SDK\\
\\
Zoom Developer Forum](/content/blog/zoom-sdk-sending-chat-messages/index.html)

\\
Handling Zoom app OAuth redirect URL requirements\\
\\
Zoom Developer Forum](/content/blog/zoom-app-oauth-redirect-url-requirement/index.html)

\\
Debugging missing Zoom transcription webhooks\\
\\
Zoom Developer Forum](/content/blog/zoom-sdk-missing-transcription-webhooks/index.html)

\\
Handling Zoom SDK recording compliance requirements\\
\\
Zoom Developer Forum](/content/blog/zoom-sdk-compliance-requirements/index.html)

\\
Handling Zoom app verification\\
\\
Zoom Developer Forum](/content/blog/zoom-app-domain-verification/index.html)

\\
How to join registration-required meetings with a Zoom bot\\
\\
Zoom Developer Forum](/content/blog/zoom-sdk-joining-registration-required-meetings/index.html)

\\
How to use a Zoom bot to join meetings without passcodes\\
\\
Zoom Developer Forum](/content/blog/zoom-sdk-joining-meetings-without-passcodes/index.html)

\\
Debugging stuck Zoom SDK bots\\
\\
Zoom Developer Forum](/content/blog/zoom-sdk-docker-issues/index.html)

\\
How to create a voice agent to send to Zoom meetings\\
\\
Zoom Developer Forum](/content/blog/zoom-sdk-ai-voice-agent/index.html)

\\
How to capture Zoom audio and video with a meeting bot\\
\\
Zoom Developer Forum](/content/blog/create-audio-video-capture-bots/index.html)

\\
How to transcribe a Zoom meeting in real time\\
\\
Zoom Developer Forum](/content/blog/accessing-real-time-transcription-api/index.html)

\\
How to receive raw video from the Zoom SDK\\
\\
Zoom Developer Forum](/content/blog/accessing-host-video-stream/index.html)

\\
Announcing the Recall.ai and Speechmatics Integration\\
\\
Announcements](/content/blog/announcing-the-recall-ai-and-speechmatics-integration/index.html)

\\
Can I access raw audio data using the Zoom Web SDK?\\
\\
Zoom Developer Forum](/content/blog/can-i-access-raw-audio-data-using-the-zoom-web-sdk/index.html)

[Go To Blog](/content/blog/index.html)

Best Practices

# Understanding Zoom RTMS Behavior and Its Constraints

Updated at:

March 22, 2026

.avif)

Written By:

Maggie Veltri

Table of Contents

- [A quick way to tell if RTMS will work for a meeting](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#a-quick-way-to-tell-if-rtms-will-work-for-a-meeting/index.html)
- [How the host organization impacts RTMS](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#how-the-host-organization-impacts-rtms/index.html)
  - [What this means for your users](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#what-this-means-for-your-users/index.html)
- [Zoom client version requirements](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#zoom-client-version-requirements/index.html)
- [Host presence and meeting start authority](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#host-presence-and-meeting-start-authority/index.html)
- [RTMS app auto-start behavior](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#rtms-app-auto-start-behavior/index.html)
- [Host approval and data requests](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#host-approval-and-data-requests/index.html)
- [RTMS app owner presence](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#rtms-app-owner-presence/index.html)
- [Breakout rooms](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#breakout-rooms/index.html)
- [Participant organization settings](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#participant-organization-settings/index.html)
- [How RTMS can pause, stop, and resume during a meeting](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#how-rtms-can-pause-stop-and-resume-during-a-meeting/index.html)
  - [What can stop RTMS during a meeting](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#what-can-stop-rtms-during-a-meeting/index.html)
- [A planning framework for PMs and CTOs](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#a-planning-framework-for-pms-and-ctos/index.html)
- [Conclusion](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#conclusion/index.html)
- [Appendix](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#appendix/index.html)

If you implement RTMS correctly, you will get real-time audio, video, transcripts, and event metadata with very low latency. That’s the upside, and it’s substantial.

The part that surprises teams is that starting RTMS depends on a number of user-related reasons – how the Zoom meeting was set up, host permissions, RTMS app settings, and more.

This article is meant to help PMs, CTOs, and engineers forecast the real user experience of your RTMS app. If you are looking for a primer on RTMS, check out [What is Zoom RTMS?](/content/blog/what-is-zoom-rtms/index.html) Throughout this article, we’ll refer to end users simply as users.

Zoom RTMS Explained: How Real-Time Media Streams Behave in Zoom Meetings - YouTube

Tap to unmute

[Zoom RTMS Explained: How Real-Time Media Streams Behave in Zoom Meetings](https://www.youtube.com/watch?v=2xUYTC5KPTk) [RecallAI](https://www.youtube.com/channel/UCQXsakK2EQOF4qrTsEbyZHg)

RecallAI288 subscribers

Before diving into the conditions surrounding RTMS, let’s define some common terms.

- **Participant** \- An individual who is present in the Zoom meeting.
- **Host** \- The manager of the meeting. Hosts do not need to be present in the meeting. When in the meeting, the host can take various actions that others can not such as mute participants, admit participants from the waiting room, and allow in-meeting apps to run.
- **App Owner** \- The participant who brings and starts the Zoom app.
- **Zoom Admin** \- The individual responsible for organization-wide settings. This person is typically a member of the IT team at the organization that they are the admin for.

## A quick way to tell if RTMS will work for a meeting

The table below shows the primary conditions that determine whether RTMS will start, pause, stop, or fail in a given meeting. Each column represents a specific requirement or constraint. Each row represents a real-world meeting scenario.

This table is intended to give you a brief overview of when RTMS will get meeting data and when it will not. If a particular scenario matters to your use case, you can jump to the linked section below for a deeper explanation or check out the [appendix](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#appendix/index.html) to see how each scenario is created.

| Scenario | Result |
| --- | --- |
| **Scenario 1**: [Host’s organization](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#how-the-host-organization-impacts-rtms/index.html) disables RTMS | **No RTMS data** Host’s organization must allow for RTMS |
| **Scenario 2**: Host’s [client version](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#zoom-client-version-requirements/index.html) is not up-to-date | **No RTMS data** Meeting host’s client version must be 6.5.5+ |
| **Scenario 3**: App owner’s [client version](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#zoom-client-version-requirements/index.html) is not up-to-date | **No RTMS data** App owner’s client version must be 6.5.5+ |
| **Scenario 4**: Meeting starts, [host is not present](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#host-presence-and-meeting-start-authority/index.html) and host approval to start RTMS is required | **No RTMS data** May need to resend request in order to get data once the host joins |
| **Scenario 5**: [Host is not present](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#host-presence-and-meeting-start-authority/index.html) and the meeting is not allowed to start without host presence | **No RTMS data** Auto-start can’t run if the host doesn’t start the meeting |
| **Scenario 6**: Host has set RTMS app to [auto-start](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#rtms-app-auto-start-behavior/index.html) and allowed meeting to start without host presence | **Meeting data available through RTMS** |
| **Scenario 7**: [Host denies](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#host-approval-and-data-requests/index.html) RTMS app | **No RTMS data** If host approval is required, apps cannot get data via RTMS until the host approves |
| **Scenario 8**: Host and app owner are present, host must approve the request for RTMS, [host approves](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#host-approval-and-data-requests/index.html) the request for RTMS | **Meeting data available through RTMS** |
| **Scenario 9**: Host and app owner are present, host’s organization has RTMS enabled, all Zoom clients support RTMS, host [doesn’t require approval](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#rtms-app-auto-start-behavior/index.html) of RTMS app | **Meeting data available through RTMS** |
| **Scenario 10**: [App owner never joins](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#rtms-app-owner-presence/index.html) and does not have their RTMS app set to [auto-start](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#rtms-app-auto-start-behavior/index.html) | **No RTMS data** RTMS cannot start without auto-start or someone manually enabling it |
| **Scenario 11**: [App owner leaves](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#rtms-app-owner-presence/index.html) the meeting | **No RTMS data** With app owner no longer present, app stops collecting data |
| **Scenario 12**: App owner moves to [breakout room](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#breakout-rooms/index.html) | **No RTMS data** RTMS stops when app owner moves to breakout room |
| **Scenario 13**: [Meeting is handed off](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#how-rtms-can-pause-stop-and-resume-during-a-meeting/index.html) from host with RTMS enabled to a host with RTMS disabled | **Meeting data available through RTMS** The meeting owner's rules govern. A new host's organization rules do not supercede the original host |
| **Scenario 14**: [Meeting is handed off](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#how-rtms-can-pause-stop-and-resume-during-a-meeting/index.html) from host with RTMS disabled to a host with RTMS enabled | **No RTMS data** The meeting owner's rules govern. A new host's organization rules do not supercede the original host/owner |

RTMS has a few prerequisites that must be satisfied before the meeting begins, like the host’s organization settings and supported Zoom client versions for both meeting host and app owner. If those prerequisites aren’t met other conditions become irrelevant and RTMS can’t start. Once those pre-meeting conditions are met, RTMS behavior is controlled by in-meeting factors such as host approval and host presence, which determine whether RTMS starts, pauses, resumes, or stops.

## How the host organization impacts RTMS

RTMS behavior is governed primarily by the meeting’s host organization. The host organization is the Zoom workplace that is hosting the meeting. While the host role may be transfered throughout the course of a meeting, when we refer to host organization, we refer to the original meeting host.

If the host’s Zoom organization admin keeps RTMS enabled, RTMS can work regardless of participant settings. If the host organization disables RTMS, no participant setting, OAuth scope, or API call can enable it. This host-centric model is intentional and shapes when RTMS works reliably in real-world meetings.

How to Enable Zoom RTMS as an Admin - YouTube

Tap to unmute

[How to Enable Zoom RTMS as an Admin](https://www.youtube.com/watch?v=XEN7AjA8hrU) [RecallAI](https://www.youtube.com/channel/UCQXsakK2EQOF4qrTsEbyZHg)

RecallAI288 subscribers

Throughout the rest of this article, nearly every instance of RTMS starting or not starting maps back to this host-governed model.

### What this means for your users

Your users may find that RTMS is allowed to capture meeting data in some environments, and isn’t allowed to receive meeting data in other environments, even when the app relying on RTMS is built correctly. That inconsistency usually maps to one thing: Are users joining meetings hosted by their own organization, or by external organizations?

- Internal-first meetings (sales enablement, support, recruiting inside one organization) tend to be a good fit, because the host of the meeting tends to be someone within your Zoom organization.
- External meetings (users joining customer meetings, partner meetings, community calls) will have more variability when using RTMS alone, because the host of the meeting could be someone outside your Zoom organization, and Zoom RTMS may not be set up in someone else’s Zoom organization.

> Note: If the hosting Zoom organization is a free Zoom account, RTMS should work, as it’s enabled by default and cannot be turned off.

## Zoom client version requirements

The host and the user of the app that relies on RTMS must both have a Zoom client version that is at least version 6.5.5+. If the host is on an unsupported or outdated client, RTMS will not start even if admin settings are correct.

Some client-related failures are effectively silent from the end-user point of view. There is no messaging when RTMS is unavailable for a particular meeting. This is why, if you decide to use RTMS, you should consider how the handle your app not receiving data after the request to start the app has been sent.

## Host presence and meeting start authority

Whether the host is present affects RTMS in two related but distinct ways: whether the meeting itself can start, and whether RTMS is allowed to begin streaming.

> In Zoom, users can set meetings to start with or without the host. In the event that the meeting is only allowed to start with the host and the host never joins, there is no meeting to pull data from.

Host presence is required for RTMS only when [host approval](/content/blog/understanding-zoom-rtms-behavior-and-its-constraints#host-approval-and-data-requests/index.html) is required. In meetings where host approval is required, the host must be present in the meeting to grant RTMS access. If the meeting has started without the host and host approval is required, RTMS cannot begin streaming. In this case, the app owner must wait for the host to join and then resend the RTMS request. When host approval is not required, the host does not need to be present for RTMS to start so long as the meeting has started.

## RTMS app auto-start behavior

Auto-start allows RTMS to begin without the app owner manually triggering the app, but it only helps in specific scenarios.

If host approval **is required**, auto-start does not bypass it. RTMS will wait for approval even if the meeting is already running.

Auto-start can enable RTMS to start regardless of if the host joins when:

- the meeting is allowed to start without the host, and
- host approval is **not** required to start RTMS.

Auto-start can be particularly useful if the host wants to record the meeting using an app that relies on RTMS, they cannot attend the meeting, and they have auto-start on for their RTMS app and the meeting is set to start regardless of whether the host joins.

## Host approval and data requests

Some meetings require the host to approve apps that request real-time meeting content.

When enabled:

- RTMS remains paused until approval is granted
- if approval never comes, RTMS may never start

Approval applies to the **entire request**. There is no way for the host to approve sharing specific pieces of data requested such as transcript or audio.

If your app requests audio, video, and transcript, and the host is uncomfortable sharing any part of that request, the host denies the request and RTMS produces no data.

Requesting more media types increases the likelihood of denial simply because there are more pieces of data that the host may object to sharing.

## RTMS app owner presence

In some cases, RTMS can start and continue without the app owner actively participating.

The app owner’s presence matters in cases where the app owner joins the meeting and then leaves the meeting. In that case RTMS stops when the app owner leaves the meeting.

If the app owner never joins the meeting and the app starts using auto-start then the app will run without the app owner’s presence.

## Breakout rooms

As of January 2026, RTMS does not capture breakout room content.

When a meeting enters breakout rooms, RTMS stops streaming for the duration of those sessions. RTMS may resume once the meeting returns to the main room, but any content that occurred inside breakout rooms is unavailable.

If your product depends on capturing breakout sessions, such as workshops, training sessions, or interview loops, RTMS will not work.

## Participant organization settings

Participant organization settings do not affect RTMS behavior. If a participant does not want to be recorded they should leave the meeting when RTMS is enabled to avoid having their data captured. This design ensures that real-time access policies are applied consistently across the meeting rather than negotiated participant by participant.

## How RTMS can pause, stop, and resume during a meeting

RTMS access is not decided only at the start of a meeting. Even after streaming begins, the host and host organization can still change or revoke access. As a result, based on host actions, host transitions, or changes in sharing permissions, RTMS can pause, stop, or resume during a meeting.

For product design, host approval should be treated as a condition that can change over time. Therefore, products using RTMS should consider how to capture data or alert users that the meeting data is no longer being captured when host approval changes.

In addition to approval at startup, both the host and the RTMS app owner can stop sharing real-time meeting content at any point during the meeting. When this happens, RTMS may pause or stop mid-meeting, and may resume later if sharing is re-enabled.

### What can stop RTMS during a meeting

| Trigger | What users see | RTMS behavior | Product implication |
| --- | --- | --- | --- |
| Host disables sharing | RTMS stops | Stream ends | Handle interruption |
| Host re-enables sharing | RTMS resumes | New session | Support restart |
| Host handoff within same organization, sharing allowed | Nothing | Continues to stream | Normal lifecycle |
| RTMS app owner leaves meeting | RTMS stops | App session ends | App owner presence required |

To users, the changes listed above can result in RTMS suddenly stopping or restarting. This behavior is expected and reflects the host’s ongoing control over real-time access.

RTMS sessions cannot be resumed after a disconnect. Any data not captured during interruptions is permanently lost. Your app must wait for a new `meeting.rtms_started` event before reconnecting.

The scenarios above are not edge cases. They are the result of the host-governed permission model that RTMS operates under.

## A planning framework for PMs and CTOs

Before committing to RTMS as your only real-time path, decide which world you live in:

**World A: Mostly internal or controlled meetings**

You can standardize admin settings, client versions, and approval policy. RTMS can deliver a consistently strong user experience.

**World B: Many external meetings with unknown hosts**

Expect variability. RTMS can still be valuable, but your product experience needs:

- Clear messaging (e.g. “This meeting doesn’t allow RTMS”)
- Other capture methods to fall back to. Recall.ai supports [RTMS](/content/product/rtms/index.html) as well as other capture methods so that you can access meeting data regardless of video conferencing platform or edge case.

In many cases, layering approaches can ensure that you get data no matter the use case.

## Conclusion

If you’re interested in learning more about [Zoom RTMS](/content/blog/what-is-zoom-rtms/index.html), you can check out our article on Zoom RTMS or chat with a member of our team. If you want to learn more about all of the options available for capturing meeting data, you may be interested in Recall.ai’s [Meeting Bot API](/content/product/meeting-bot-api/index.html) or [Desktop Recording SDK.](/content/product/desktop-recording-sdk/index.html)

## Appendix

The following table expands on the table at the beginning of the blog. Here we explore each individual flag that creates the scenario on the left and leads to the result featured on the right.

**Yes** = the condition is true, **No** = the condition is false, **Any** = condition has no impact on results.

| Scenario | Host Organization has RTMS Enabled | Host has Supported Zoom Client | App Owner has Supported Zoom Client | Host Present | RTMS Auto-Start Enabled | Meeting Allowed w/o Host | Host Approval Required for RTMS | Host Approves RTMS | RTMS App Owner Present | In Breakout Room | Participant Organization has RTMS Enabled | Result |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| **Scenario 1**: Host’s organization does not allow RTMS | No | Any | Any | Any | Any | Any | Any | Any | Any | Any | Any | **No RTMS data** Host’s organization must allow for RTMS |
| **Scenario 2**: Host’s client version is not up-to-date | Yes | No | Any | Any | Any | Any | Any | Any | Any | Any | Any | **No RTMS data** Meeting host’s client version must be 6.5.5+ |
| **Scenario 3**: App owner’s client version is not up-to-date | Yes | Yes | No | Any | Any | Any | Any | Any | Any | Any | Any | **No RTMS data** App owner’s client version must be 6.5.5+ |
| **Scenario 4**: Meeting starts, host is not present and their approval is required. | Yes | Yes | Yes | No | Any | Yes | Yes | Any | Any | Any | Any | **No RTMS data** May need to resend request in order to get data once the host joins |
| **Scenario 5**: Host is not present and the meeting is not allowed to start without them | Yes | Yes | Yes | No | Any | No | Any | Any | Any | Any | Any | **No RTMS data** Auto-start can’t run if the host doesn’t start the meeting |
| **Scenario 6**: Host has pre-authorized sharing and allowed meeting to start without them | Yes | Yes | Yes | No | Yes | Yes | No | Any | Yes | No | Any | **Meeting data available through RTMS** |
| **Scenario 7**: Host does not approve RTMS | Yes | Yes | Yes | Yes | Any | Any | Yes | No | Yes | Any | Any | **No RTMS data** If host approval is required, apps cannot get data via RTMS until the host approves. |
| **Scenario 8**: Host and app owner are present, must approve the request for RTMS, approves the request for RTMS | Yes | Yes | Yes | Yes | Any | Any | Yes | Yes | Yes | No | Any | **Meeting data available through RTMS** |
| **Scenario 9**: Host and app owner are present, host’s organization has RTMS enabled, Zoom clients support RTMS, host doesn’t require approval of app | Yes | Yes | Yes | Yes | Any | Any | No | Any | Yes | No | Any | **Meeting data available through RTMS** |
| **Scenario 10**: App owner never joins and does not have their app set to auto-start | Yes | Yes | Yes | Yes | No | Any | Any | Any | No | Any | Any | **No RTMS data** RTMS cannot start without auto-start or someone manually enabling it |
| **Scenario 11**: App owner leaves the meeting | Yes | Yes | Yes | Yes | Any | Any | Yes | Yes | Yes -> No | Any | Any | **No RTMS data** With app owner no longer present, app stops collecting data |
| **Scenario 12**: App owner moves to breakout room | Yes | Yes | Yes | Yes | Any | Any | Any | Yes | Yes | Yes | Any | **No RTMS data** RTMS stops when app owner moves to breakout room |
| **Scenario 13**: Meeting is handed off from host with RTMS enabled to a host with RTMS disabled | Yes -> Yes | Yes | Yes | Yes | Any | Any | Any | Any | Yes | Any | Any | **Meeting data available through RTMS** Meeting owner governs and allows RTMS |
| **Scenario 13**: Meeting is handed off from host with RTMS disabled to a host with RTMS enabled | No -> No | Any | Any | Any | Any | Any | Any | Any | Any | Any | Any | **No RTMS data** Meeting owner’s organization governs and does not allow RTMS |

.avif)

Written By:

Maggie Veltri

Table of Contents

## The API to get transcripts, recordings, and metadata from meetings.

[Start for free](/content/signup/index.html) [Get a demo](/content/book-a-demo/index.html)

Need help? Email us at [support@recall.ai](mailto:support@recall.ai)

Get transcripts, recordings and metadata from meetings

[Start for free](/content/signup/index.html)

**Product**

[Meeting Bot API\\
\\
\\
example](/content/product/meeting-bot-api/index.html) [Desktop Recording SDK\\
\\
\\
example](/content/product/desktop-recording-sdk/index.html) [Mobile Recording SDK\\
\\
\\
example](/content/product/mobile-recording-sdk/index.html) [Calendar Integration\\
\\
\\
example](/content/product/calendar-integration-api/index.html) [Storage and Playback\\
\\
\\
example](https://docs.recall.ai/docs/storage-and-playback)

**Company**

[Careers\\
\\
\\
We're hiring!](/content/careers/index.html) [Blog\\
\\
\\
example](/content/blog/index.html) [Case Studies\\
\\
\\
example](/content/customersold/index.html)

**Security**

[Security Portal\\
\\
\\
example](https://security.recall.ai/) [SOC 2\\
\\
\\
example](https://security.recall.ai/resources?s=6yae1gt76airvvh39f2vbh&name=soc-2-type-2-report) [ISO 27001\\
\\
\\
example](https://security.recall.ai/resources?s=e9egniy1sgrydeihajcmv&name=isms-certificate) [HIPAA\\
\\
\\
example](https://security.recall.ai/) [GDPR\\
\\
\\
example](https://security.recall.ai/) [CCPA\\
\\
\\
example](https://security.recall.ai/)

**Legal**

[Privacy\\
\\
\\
We're hiring!](/content/privacy/index.html) [Terms of Use\\
\\
\\
We're hiring!](/content/terms-of-use/index.html)

**Resources**

[API Docs\\
\\
\\
example](https://docs.recall.ai/) [Pricing\\
\\
\\
example](/content/pricing/index.html) [Notetaker API\\
\\
\\
example](/content/product/notetaker-api/index.html) [Meeting Recording API\\
\\
\\
example](/content/product/meeting-recording-api/index.html) [Transcription API\\
\\
\\
example](/content/product/transcription-api/index.html) [Meeting Transcription API\\
\\
\\
example](/content/product/meeting-transcription-api/index.html) [Compliance Recording API\\
\\
\\
example](/content/product/compliance-recording-api/index.html) [Speaker Diarization API\\
\\
\\
example](/content/product/speaker-diarization-api/index.html) [Slack Huddles API\\
\\
\\
example](/content/product/slack-huddles-api/index.html)

**Compare**

[Recall.ai vs Attendee\\
\\
\\
example](/content/recall-ai-vs-attendee/index.html) [Recall.ai vs Meeting BaaS\\
\\
\\
example](/content/recall-ai-vs-meetingbaas/index.html) [Recall.ai vs Nylas Notetaker\\
\\
\\
example](/content/recall-ai-vs-nylas-notetaker/index.html) [Recall.ai vs Skribby\\
\\
\\
example](/content/recall-ai-vs-skribby/index.html)

More

**Meeting Bots**

[Google Meet Bot API\\
\\
\\
example](/content/product/meeting-bot-api/google-meet/index.html) [Microsoft Teams Bot API\\
\\
\\
example](/content/product/meeting-bot-api/microsoft-teams/index.html) [Zoom Meeting Bot API\\
\\
\\
example](/content/product/meeting-bot-api/zoom/index.html)

**Recording**

[Google Meet Recording API\\
\\
\\
example](/content/product/google-meet-recording-api/index.html) [Microsoft Teams Recording API\\
\\
\\
example](/content/product/microsoft-teams-recording-api/index.html) [Zoom Meeting Recording API\\
\\
\\
example](/content/product/zoom-recording-api/index.html)

**Transcription**

[Google Meet Transcription API\\
\\
\\
example](/content/product/google-meet-transcription-api/index.html) [Microsoft Teams Transcription API\\
\\
\\
example](/content/product/microsoft-teams-transcription-api/index.html) [Zoom Meeting Transcription API\\
\\
\\
example](/content/product/zoom-transcription-api/index.html)
