# Troubleshooting RTMS This topic covers common errors and issues you may encounter when using Realtime Media Streams (RTMS) across all products. ## Error codes These are common errors when starting or using RTMS. ### Error 2308 - Not allowed to start RTMS app **What it means:** The user attempting to start RTMS does not have the required permissions. **Common causes:** - User is not the meeting host or alternative host - User joined anonymously using a meeting link instead of being on the invitation list **How to resolve:** - Ensure the user starting RTMS is the meeting host or an alternative host. - For external meetings, add the user to the meeting invitation list rather than having them join anonymously. ### Error 2310 - Failed to perform RTMS app operation **What it means:** The RTMS start operation was rejected. This may appear as HTTP 400 with error code 2310. **Common causes:** - No active Zoom Developer Pack subscription on your account - Expired Developer Pack trial - Account type does not support RTMS (Basic accounts) **How to resolve:** - Verify you have an active Zoom Developer Pack subscription. For plan options, see [Developer pricing](https://zoom.us/pricing/developer). - If using a Basic account, upgrade to a paid plan and purchase Developer Pack credits. - If you recently purchased Developer Pack, wait 1-2 minutes for provisioning to complete. ## Concurrent stream limits RTMS enforces a maximum number of concurrent unique session IDs based on your Developer Pack subscription: - **Free trial**: 5 concurrent streams - **Developer Pack**: 2,000 concurrent streams Each unique RTMS session ID counts as one concurrent stream. A new session ID is created when your application requests a media server from Zoom, which happens when: - Starting RTMS in a new meeting, webinar, Contact Center engagement, or Video SDK session - Opening a new WebSocket connection for a different media type from the same meeting For example, if you subscribe to audio and video over separate WebSocket connections for the same meeting, that counts as **two concurrent streams**. ### Monitoring your usage Contact your account executive to discuss your concurrent stream usage and limits. For current pricing and concurrent stream limits, see [Developer pricing](https://zoom.us/pricing/developer). ## Stream termination (stop_reason values) When an RTMS stream stops, the stopped webhook event includes a `stop_reason` field indicating why the stream terminated. For the complete list of `stop_reason` values and their meanings, see [RTMS_STOP_REASON](/docs/rtms/data-types/#rtms_stop_reason). For connection interruption and reconnection procedures (`stop_reason` 10-19 and 24), see Failover and reconnection: - [Meetings and webinars](/docs/rtms/meetings/failover-reconnection/) - [Contact Center](/docs/rtms/contact-center/failover-reconnection/) - [Video SDK](/docs/rtms/video-sdk/failover-reconnection/) ## Webhook issues RTMS uses webhooks to notify your app when streams start, stop, or encounter issues. ### Webhook never fires after starting RTMS **Symptoms:** - `startRTMS()` returns success, but the started webhook never arrives - Meeting RTMS: `meeting.rtms_started` or `webinar.rtms_started` never fires - Contact Center: `contact_center.voice_rtms_started` never fires - Video SDK: `session.rtms_started` never fires **Common causes:** - Event subscriptions not properly configured in your app - Webhook endpoint URL incorrect or unreachable - Event subscription changes not yet propagated (takes 1-2 minutes) - Account does not support RTMS (Basic accounts) **How to resolve:** - Verify you have subscribed to the appropriate RTMS events in your app configuration: - For meetings/webinars: `meeting.rtms_started` and `meeting.rtms_stopped` - For Contact Center: `contact_center.voice_rtms_started` and `contact_center.voice_rtms_stopped` - For Video SDK: `session.rtms_started` and `session.rtms_stopped` - Confirm your webhook endpoint URL is correct and publicly accessible. - After enabling event subscriptions, wait 1-2 minutes for the changes to propagate before testing. - Check your webhook endpoint logs to confirm Zoom is reaching your server. - Verify your account type supports RTMS (see [Plan compatibility](#plan-compatibility)). ### Webhooks work for other events but not RTMS **What it means:** Other webhook events (like `meeting.started`, `meeting.ended`) arrive successfully, but RTMS-specific webhooks never fire. **Common causes:** - RTMS events not selected in your event subscription configuration - Account type does not support RTMS (Basic accounts) **How to resolve:** 1. Sign into the [Zoom App Marketplace](https://marketplace.zoom.us/). 2. In the upper-right of the screen, choose **Manage**. 3. Select your app from the list. 4. In the navigation pane, choose **Access**. 5. Choose **Event Subscriptions**. 6. Choose **Add Events** and verify you have selected the RTMS events for your product. 7. Choose **Save**. After enabling event subscriptions, wait 1-2 minutes for the changes to propagate before testing. Also verify your account has an active Zoom Developer Pack subscription. ## App behavior issues These issues affect app lifecycle and media behavior. ### Transcript stops after switching to phone audio **Issue:** When a user switches to phone audio while keeping computer audio connected, transcript data stops flowing. **Affected products:** Meetings, Webinars **Workaround:** - Have the user hang up the phone and unmute computer audio to resume transcripts. - Alternatively, restart the Zoom app (host only) to restore transcript generation. **Permanent solution:** If the user selects "Leave computer audio" before dialing in, transcripts will continue after switching to phone. ### No callback when app closed using menu **Issue:** When a user closes an RTMS app by selecting **Close current app** from the app menu, no callback fires and the RTMS stream may not be cancelled. **Affected products:** Meetings (Zoom Apps with RTMS) **Impact:** This can result in orphaned streams and resource leaks. **Workaround:** Implement monitoring on your backend to detect stale RTMS connections and close them after a timeout period. ## Plan compatibility All RTMS products (meetings, webinars, Contact Center, Video SDK) require a Zoom Developer Pack subscription. RTMS is not available on Basic accounts. | Plan Type | RTMS Support | Notes | | ------------ | ------------- | ---------------------------------------------------------------- | | Basic (Free) | Not supported | RTMS webhooks will not fire; API calls will fail with error 2310 | | Pro | Supported | Requires Zoom Developer Pack subscription | | Business | Supported | Requires Zoom Developer Pack subscription | | Enterprise | Supported | Requires Zoom Developer Pack subscription | > **Important** > > All paid plans require an active Zoom Developer Pack subscription to use RTMS. For pricing options, see [Developer pricing](https://zoom.us/pricing/developer).