If a user closes an RTMS app with the 3 dot menu and "Close current app" there is no callback it doesn't appear that the RTMS stream is cancelled

API Endpoint(s) and/or Zoom API Event(s)

zoomSdk.stopRTMS()

Description
In my app we start and stop RMTS as needed during the session. If the user leaves the meeting the code successfully calls zoomSdk.stopRTMS() so we are no longer consuming a stream. However, if the user clicks the 3 dot menu at the top of the running app and selects “Close current app” the app is closed so quickly that nothing fires and no cleanup happens. The RTMS stream is left running orphaned.
From what I’ve read my only solution is to have some backend S2S set up so I can call the rest service and stop the RTMS stream, but I don’t want to have to store the user’s access token.

Currently I’m trying stop the RTMS stream in the following ways:
Path 1 — Normal app flow the app gets enough voice data to run an assessment and closes the stream calling zoomSdk.stopRTMS(). This works!

Path 2 — Frontend SDK event: This works!
onMeeting { action: ‘ended’ }
→ stopRtms(true)
→ zoomSdk.stopRTMS() ← tells Zoom to stop the stream

Path 3 — Zoom media server disconnects the SDK client directly: This doesn’t work because I don’t store the user access token to call the rest API.

Path 4 — What I would like to happen — I want the frontend to close the RTMS stream and the user to see that the app is no longer accessing meeting content from the built-in zoom popup. I think this is a bug that zoom would allow RTMS to continue sending data after the app is closed.

Am I missing something? What are my options?

Error?
No event or callback seems to get fired to my application if someone closes the app from the 3 dot menu “Close current app”

How To Reproduce
Steps to reproduce the behavior:
1. Open an app that is RTMS enabled using
2. Take steps needed to trigger zoomSdk.startRTMS()
3. Close the app with the 3 dot menu “Close current app”
4. See that default notice pops up saying the app is no longer accessing meeting content and no event is fired.

I’d treat this as a lifecycle gap, not something the frontend can reliably clean up after the webview is gone. Zoom documents stopRTMS() as the in-meeting SDK call that stops a stream, while closeApp() says the webview is killed and the stopRTMS() is not guaranteed to run before that happens.

The safest workaround is the server-side cleanup you mentioned. Subscribe to RTMS started and stopped events, persist only meeting and RTMS session metadata, and use Update participant Real-Time Media Streams (RTMS) app status with action stop when your backend detects an orphaned stream.

We’re a Zoom RTMS Preferred Partner, so you can also get support through Recall.ai if helpful.