# Troubleshooting RTMS

<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->

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).
