For reference implementations, see the example programs for building a notetaker and sales coach with Attendee and RTMS. Watch a quick demo video.
RTMS vs Bots
There are two key differences between RTMS and bots:No bot participant in the meeting
RTMS does not add a participant to the call. The meeting data is streamed to your app through Zoom’s infrastructure, so there is no “bot has joined” notification and no extra attendee in the participant list. See this video showing how RTMS apps appear within the Zoom client.User controls when your app connects
With a bot, you control when the bot joins the meeting via an API call. With RTMS, the user controls when your app connects by opening the RTMS app within Zoom. Zoom sends your app a webhook that you must respond to. The user can also pause the RTMS app’s recording at any time.Advantages of RTMS
- No OBF token required - RTMS is not affected by Zoom’s March 2, 2026 deadline requiring OBF tokens for Meeting SDK bots joining external meetings
- No OAuth flow needed - You don’t need to implement join tokens or OAuth logic
- Less CPU usage - RTMS sends encoded video frames, which are less CPU-intensive to process than raw video frames
Limitations of RTMS
Implementation Guide
Create RTMS app in Zoom
- Go to Zoom Developer Portal and create a new General app
- Navigate to Basic Information and set OAuth redirect URL (can be https://zoom.us if not using OAuth)
- Go to Access → Add new Event Subscription
- Subscribe to
meeting.rtms_startedandmeeting.rtms_stoppedevents - Set Event notification endpoint URL to your webhook handler
- Navigate to Scopes and add:
- meeting:read:meeting_audio
- meeting:read:meeting_transcript
- meeting:read:meeting_chat
- meeting:read:meeting_video
- meeting:read:meeting_screenshare
- Go to Local test → Add app now and authorize
- Visit Zoom App Settings
- Enable “Share realtime meeting content with apps”
- Under “Auto-start apps”, select your app
Register RTMS app with Attendee
- Go to Attendee dashboard and create a new project
- Navigate to Settings → Credentials
- Under Zoom OAuth App Credentials, click Add OAuth App
- Enter your Zoom Client ID and Client Secret from your RTMS App
- Click Save
Configure Attendee webhooks
- Go to Settings → Webhooks
- Click Create Webhook
- Select the
bot.state_changetrigger (fires when RTMS session changes state) - Enter your webhook destination URL
- Click Create
Handle Zoom webhook
Add code to handle the View complete example
meeting.rtms_started webhook from Zoom and forward the payload to Attendee:Handle Attendee webhook
Listen for the View complete example
bot.state_change webhook from Attendee to know when the session ends:App Session API Endpoints
Get App Session Media
GET /api/v1/app_sessions//media Returns the recording and media files for a completed app session. Only available after the session has moved to theended state.
Get App Session Transcript
GET /api/v1/app_sessions//transcript Returns the full transcript for a completed app session.Get App Session Participant Events
GET /api/v1/app_sessions//participant_events Returns participant join/leave events for the app session.FAQ
Does RTMS require the On Behalf Of (OBF) token?
Does RTMS require the On Behalf Of (OBF) token?
No. RTMS is a separate integration path from the Meeting SDK and is not affected by Zoom’s March 2, 2026 OBF token deadline. If you switch from bots to RTMS, you don’t need to implement the OBF token.
What happens if the host doesn't have RTMS enabled?
What happens if the host doesn't have RTMS enabled?
Your app will not receive the
meeting.rtms_started webhook and no data will be captured. RTMS requires the meeting host’s Zoom account to have the feature enabled and your app authorized. This is a key consideration if your users join meetings hosted by people outside your organization.Can I use both RTMS and bots?
Can I use both RTMS and bots?
Yes. You can use RTMS for receiving meeting data and bots when you need to send data into the meeting (chat messages, audio, video).