Every call to zoomSdk.startRTMS() from an in-meeting context immediately fails with the in-client toast “Your app failed to access meeting content.” The SDK promise itself resolves without throwing, but no meeting.rtms_started webhook is ever delivered to our subscribed endpoint, and no transcript/audio frames ever arrive.
What Zoom Support has already verified for us:
Zoom Developer Support confirmed verbatim: “backend feature flags for RTMS are properly enabled, the application is on the correct account, the application has everything enabled from the Zoom side to function.” They referred us here for deeper troubleshooting.
Marketplace configuration (all confirmed correct by Zoom Support and by us):
- Scopes: meeting:read:meeting, meeting:read:meeting_audio, meeting:read:meeting_transcript, meeting:write:invite_links, meeting:read:search, meeting:read:assets, rtms:read:rtms_started, rtms:read:rtms_stopped, rtms:read:rtms_interrupted, user:read:user
- Event Subscription: Webhook method, 3 events subscribed (meeting.rtms_started, meeting.rtms_stopped, meeting.rtms_interrupted),
- Features → Zoom App SDK → APIs: All 9 of our declared capabilities are checked: getRunningContext, getMeetingContext, getUserContext, getSupportedJsApis, authorize, onAuthorized, startRTMS, stopRTMS, onRTMSStatusChange.
- Features → In-client App Features: “Allow auto-start for RTMS apps” enabled, “Zoom App SDK” enabled, “In-Client OAuth” enabled.
Symptoms in detail
-
Browser console of the sidebar shows:
[app] calling zoomSdk.startRTMS()
[app] startRTMS resolved
-
Immediately followed by the toast.
-
We registered zoomSdk.onRTMSStatusChange(handler) at app mount. No status events ever fire during the failure. (Our handler logs to [rtms-status] for visibility — completely silent.)
-
The expected first-run “Allow this app to access meeting content?” permission dialog never appears, including after a clean uninstall and reinstall (after the RTMS backend flag was confirmed enabled).
-
Our webhook endpoint correctly handles endpoint.url_validation (verified by curl — returns the right encryptedToken). But when we edit and re-save the Event Subscription URL in Marketplace, no validation POST is ever delivered to the endpoint — only manual curls land there.
What I’m asking:
Why does startRTMS() resolve successfully but produce no permission dialog, no status event, no webhook delivery, and the “failed to access meeting content” toast? Is there a backend provisioning step on the Zoom side beyond what Support has already verified? Is there a known issue with PMR-hosted meetings versus scheduled meetings? Any guidance appreciated.