If you encounter any of the errors listed below, refer to the Developer Experience Guide, which offers recommended solutions based on common error categories.
Each error is a VideoSDKError with a code, a name and a message. It reaches your app in one of three ways:
- Thrown by the method you called. Most methods are
async throws. Call them with try await and catch VideoSDKError.
- Sent to
onError(error:) of your RoomEventListener. Errors that the SDK raises on its own arrive here, for example when the camera or microphone fails to open, or when the server reports a failure.
- Passed to
onEnded of a track from createCameraVideoTrack() or createMicrophoneAudioTrack(), when its camera or microphone fails to open after the method returned. See CustomStreamTrack.
Some failures are thrown and also sent to onError(error:), so make sure you don't show them twice. Compare the code or the constant, not the message text. Keep a default branch, because an error can carry a code that is not listed below.
Task {
do {
try await room?.join()
} catch let error as VideoSDKError {
print("Join failed: \(error.name) (\(error.code)): \(error.message)")
} catch {
print("Join failed: \(error)")
}
}
extension RoomViewController: RoomEventListener {
func onError(error: VideoSDKError) {
switch error {
case .ERROR_CAMERA_ACCESS_DENIED_OR_DISMISSED, .ERROR_CAMERA_PERMISSION_DENIED_BY_OS:
print("Camera access is denied. Allow it in Settings.")
default:
print("\(error.name) (\(error.code)): \(error.message)")
}
}
}
This table lists errors that occur due to the configuration and limitations within your organization’s account. These include account status, participant limits, and add-on service availability.
| Name | Code | Message |
|---|
| ACCOUNT_DEACTIVATED | 4006 | Your account has been deactivated. Please contact VideoSDK support. |
| ACCOUNT_DISCONTINUED | 4007 | Your account has been discontinued. Please reach out to support for more details. |
| MAX_PARTICIPANT_REACHED | 4009 | You have reached the maximum participant limit for this meeting. |
| MAX_SPEAKER_REACHED | 4010 | The maximum number of speakers for this meeting has been reached. |
| MAX_SPEAKER_LIMIT_REACHED_ON_ORGANIZATION | 4026 | Your organization has reached the maximum number of speakers allowed. |
| MAX_VIEWER_LIMIT_REACHED_ON_ORGANIZATION | 4027 | Your organization has reached the maximum number of viewers allowed. |
| ADD_ON_SERVICES_DISABLED | 4021 | Add-On services have been disabled. Please contact support to enable them. |
| MAX_RECORDING_LIMIT_REACHED_ON_ORGANIZATION | 4028 | You have reached max limit of recording on organization. To increase contact at support@videosdk.live |
| MAX_HLS_LIMIT_REACHED_ON_ORGANIZATION | 4029 | You have reached max limit of hls on organization. To increase contact at support@videosdk.live |
| MAX_LIVESTREAM_LIMIT_REACHED_ON_ORGANIZATION | 4030 | You have reached max limit of livestream on organization. To increase contact at support@videosdk.live |
| MAX_RECV_ONLY_LIMIT_REACHED_ON_ORGANIZATION | 4041 | Your organization has reached the maximum recv-only limit. To increase contact at support@videosdk.live |
Errors listed here are related to issues with the API key, authentication tokens, or permissions assigned to users. These errors can occur when tokens are missing, expired, or improperly configured.
| Name | Code | Message |
|---|
| INVALID_API_KEY | 4001 | The provided API key is either missing or invalid. |
| INVALID_TOKEN | 4002 | The provided token is empty, invalid, or has expired. |
| INVALID_PERMISSIONS | 4008 | The permissions in the token are incorrect. Please verify them. |
| UNAUTHORIZED_MEETING_ID | 4022 | The provided token is not authorized for this meeting ID. |
| UNAUTHORIZED_PARTICIPANT_ID | 4023 | The provided token is not authorized for this participant ID. |
| UNAUTHORIZED_ROLE | 4024 | The role specified in the token is not valid for joining this meeting. |
| UNAUTHORIZED_REQUEST | 4025 | Your request does not match the security configuration. |
| APIKEY_DEACTIVATED | 4053 | The provided API key is deactivated. Please verify it on the dashboard. |
This table lists errors resulting from invalid or missing meeting or participant details, including cases where a participant attempts to join with a duplicate ID.
| Name | Code | Message |
|---|
| INVALID_MEETING_ID | 4003 | The meeting ID provided is either invalid or missing. |
| INVALID_PARTICIPANT_ID | 4004 | The participant ID is either invalid or missing. |
| DUPLICATE_PARTICIPANT | 4005 | This participant has joined from another device. |
| MEETING_ID_DISABLED | 4052 | The provided meeting ID is disabled. Please generate a new meetingId using the API. |
This section addresses errors that occur while using VideoSDK's add-on services such as recording, livestreaming, HLS streaming, and transcription.
| Name | Code | Message |
|---|
| START_RECORDING_FAILED | 4011 | Failed to start recording. Please try again. |
| STOP_RECORDING_FAILED | 4012 | Failed to stop recording. Please try again. |
| RECORDING_FAILED | 5001 | Recording was stopped due to an error. |
| START_PARTICIPANT_RECORDING_FAILED | 4035 | Failed to start participant recording. Please check the request. |
| STOP_PARTICIPANT_RECORDING_FAILED | 4036 | Failed to stop participant recording. |
| PARTICIPANT_RECORDING_FAILED | 5012 | Participant recording has stopped due to an error. |
| START_TRACK_RECORDING_FAILED | 4037 | Failed to start track recording. |
| STOP_TRACK_RECORDING_FAILED | 4038 | Failed to stop track recording. |
| TRACK_RECORDING_FAILED | 5013 | Track recording stopped due to an unknown error. |
| PREV_RECORDING_PROCESSING | 4018 | Previous recording session is being processed, please try again after few seconds. |
| RECORDING_DURATION_LIMIT_REACHED | 5004 | Recording stopped due to maximum duration being reached. |
| START_COMPOSITE_RECORDING_FAILED | 4039 | Failed to start composite recording. Please try again. |
| STOP_COMPPOSITE_RECORDING_FAILED | 4040 | Failed to stop composite recording. Please try again. |
| Name | Code | Message |
|---|
| INVALID_LIVESTREAM_CONFIG | 4015 | Livestream 'outputs' configuration provided was invalid |
| START_LIVESTREAM_FAILED | 4013 | Failed to start livestream. Please try again. |
| STOP_LIVESTREAM_FAILED | 4014 | Failed to stop livestream. Please try again. |
| LIVESTREAM_FAILED | 5002 | Livestream stopped due to an error. |
| PREV_RTMP_RECORDING_PROCESSING | 4019 | Previous RTMP recording session is being processed, please try again after few seconds! |
| LIVESTREAM_DURATION_LIMIT_REACHED | 5005 | Livestream stopped due to maximum duration being reached. |
| Name | Code | Message |
|---|
| START_HLS_FAILED | 4016 | Failed to start HLS stream. |
| STOP_HLS_FAILED | 4017 | Failed to stop HLS stream. |
| HLS_FAILED | 5003 | HLS streaming stopped due to an error. |
| PREV_HLS_STREAMING_PROCESSING | 4020 | Previous HLS streaming session is still being processed. |
| HLS_DURATION_LIMIT_REACHED | 5006 | HLS stream stopped due to maximum duration being reached. |
| Name | Code | Message |
|---|
| START_TRANSCRIPTION_FAILED | 4031 | Failed to start transcription. Please try again. |
| STOP_TRANSCRIPTION_FAILED | 4032 | Failed to stop transcription. |
| TRANSCRIPTION_FAILED | 5007 | Transcription stopped due to an error. |
These errors involve media access, device availability, or permission-related issues affecting camera, microphone, and screen sharing.
| Name | Code | Message |
|---|
| ERROR_CAMERA_ACCESS_DENIED_OR_DISMISSED | 3017 | Camera access was denied or dismissed. Grant the camera permission, then try again. |
| ERROR_MICROPHONE_ACCESS_DENIED_OR_DISMISSED | 3018 | Microphone access was denied or dismissed. Grant the microphone permission, then try again. |
| ERROR_CAMERA_PERMISSION_DENIED_BY_OS | 3019 | The camera is blocked on this device, by a device policy or in system settings. Check your device settings, then try again. |
| ERROR_MICROPHONE_PERMISSION_DENIED_BY_OS | 3020 | The microphone is blocked on this device, by a device policy or in system settings. Check your device settings, then try again. |
| Name | Code | Message |
|---|
| ERROR_GET_DISPLAY_MEDIA | 3013 | This device does not support screen sharing. |
| ERROR_CAMERA_NOT_FOUND | 3021 | Please ensure your camera is connected and turned on, and that the camera driver is installed and up-to-date. |
| ERROR_MICROPHONE_NOT_FOUND | 3022 | Please ensure your microphone is connected and turned on. |
| ERROR_CAMERA_IN_USE | 3023 | The camera is being used by another application. Close it, then try again. |
| ERROR_MICROPHONE_IN_USE | 3024 | The microphone is being used by another application. Close it, then try again. |
| ERROR_VIDEO_SOURCE_INITIATION_FAILED | 3026 | Unable to start the video source. Check the camera permission, then try again. |
| ERROR_CAMERA_ACCESS_UNAVAILABLE | 3033 | Camera access unavailable: the camera list could not be read, or this room cannot carry video. |
| ERROR_MICROPHONE_ACCESS_UNAVAILABLE | 3034 | Microphone access unavailable: the microphone list could not be read, or this room cannot carry audio. |
| ERROR_NO_WEBCAM_DEVICE_FOUND | 3051 | No camera found: check the camera id passed, and that this device has a camera. |
| ERROR_NO_MICROPHONE_DEVICE_FOUND | 3059 | No microphone found: check the audio device passed, and that it is still connected. |
These errors are triggered when there are issues with video, audio, or screen-share tracks, or when the requested codec is not supported.
| Name | Code | Message |
|---|
| ERROR_CUSTOM_VIDEO_TRACK_ENDED | 3031 | The provided custom video track is in an ended state. Please verify the video track's status, and try again. |
| ERROR_CUSTOM_AUDIO_TRACK_ENDED | 3032 | The provided custom audio track is in an ended state. Please verify the audio track's status, and try again. |
| ERROR_WEBCAM_PRODUCE_FAILED | 3049 | The camera track was created but could not be published to the room. |
| ERROR_VIDEO_TRACK_CREATION_FAILED | 3053 | Failed to create the video track. |
| ERROR_MICROPHONE_PRODUCE_FAILED | 3058 | The microphone track was created but could not be published to the room. |
| ERROR_AUDIO_TRACK_CREATION_FAILED | 3060 | Failed to create the audio track. |
| ERROR_SCREENSHARE_PRODUCE_FAILED | 3061 | Failed to start screen sharing. |
| ERROR_WEBCAM_NOT_ENABLED | 3062 | The webcam is not enabled. Enable it before setting quality. |
| ERROR_SET_WEBCAM_QUALITY_FAILED | 3063 | Failed to set the webcam quality. |
| ERROR_CAPTURE_IMAGE_FAILED | 3069 | Unable to capture the image. Please try again. |
| ERROR_INVALID_CUSTOM_TRACK_CONFIG | 3071 | Invalid custom track configuration. |
| ERROR_WEBCAM_CLOSE_PRODUCER_FAILED | 3076 | The camera could not be turned off. Please try again. |
| ERROR_MICROPHONE_CLOSE_PRODUCER_FAILED | 3077 | The microphone could not be turned off. Please try again. |
| ERROR_VIDEO_EFFECTS_GRAPH_UNAVAILABLE | 3080 | GPU video effects could not start on this device; video is sent without effects. |
For how VideoSDK handles these errors, refer to the Video Codecs guide.
| Name | Code | Message |
|---|
| ERROR_VIDEO_PRODUCE_CODEC_NOT_SUPPORTED | 3045 | The provided codec is not supported for producing video on this device. Falling back to VP8. |
| ERROR_MULTISTREAM_NOT_SUPPORTED | 3046 | Multistream is not supported for this codec. |
| ERROR_NO_SUPPORTED_VIDEO_CODEC | 3052 | No supported video codec is available on this device. |
| CREATE_CONSUMER_FAILED | 4050 | Failed to create consumer. |
| CODEC_NOT_SUPPORTED | 4051 | Your platform doesn't support the remote participant's video codec. |
These errors are triggered when an action cannot run in the current state — called before the room is joined, while it is reconnecting, while the same action is still running, or when the requested state is already active. They are also triggered by an invalid argument, or when the server does not answer in time.
| Name | Code | Message |
|---|
| ERROR_ACTION_PERFORMED_BEFORE_ROOM_JOINED | 3035 | Oops! Something went wrong. The room was in a connecting state, and during that time, an action encountered an issue. Please try again after joining a room. |
| ERROR_ACTION_NOT_SUPPORTED_IN_MODE | 3066 | This action is not supported in the current room mode. |
| ERROR_ACTION_NOT_SUPPORTED | 3068 | This action is not supported here. |
| ERROR_INVALID_PARAMETER | 3073 | The provided parameter is missing or invalid. Please verify the provided parameter and try again. |
| Name | Code | Message |
|---|
| ERROR_MEDIA_NOT_READY | 3048 | The room's media connection is not ready yet. Please try again in a moment. |
| ERROR_MEDIA_DEVICE_NOT_INITIALIZED | 3050 | The media device has not been initialized. |
| ERROR_MEDIA_DEVICE_NOT_LOADED | 3064 | The media device is not loaded yet. Please try again in a moment. |
| ERROR_OPERATION_TIMED_OUT | 3079 | The operation timed out. Please check your connection and try again. |
| Name | Code | Message |
|---|
| ERROR_ALREADY_IN_REQUESTED_STATE | 3054 | The requested state is already active. |
| ERROR_OPERATION_IN_PROGRESS | 3055 | The requested operation is already in progress. |
| ERROR_ROOM_RECONNECTING | 3065 | The room is reconnecting. Please try again once it reconnects. |
These errors are triggered when joining or ending the room fails, or when the server rejects a request that targets a remote participant or changes the room — including stream subscriptions, room mode, room switching, and media relay. When the server rejects a request, the state stays as it was.
| Name | Code | Message |
|---|
| REMOVE_PARTICIPANT_FAILED | 4066 | Remove participant request failed due to an unknown error. |
| ENABLE_PARTICIPANT_MIC_FAILED | 4067 | Enable participant mic request failed due to an unknown error. |
| DISABLE_PARTICIPANT_MIC_FAILED | 4068 | Disable participant mic request failed due to an unknown error. |
| ENABLE_PARTICIPANT_WEBCAM_FAILED | 4069 | Enable participant webcam request failed due to an unknown error. |
| DISABLE_PARTICIPANT_WEBCAM_FAILED | 4070 | Disable participant webcam request failed due to an unknown error. |
| PIN_FAILED | 4071 | Pin request failed due to an unknown error. |
| UNPIN_FAILED | 4072 | Unpin request failed due to an unknown error. |
| SET_QUALITY_FAILED | 4073 | Set quality request failed due to an unknown error. |
| Name | Code | Message |
|---|
| ERROR_UNABLE_TO_JOIN_ROOM | 3047 | Unable to join the room. Please try again. |
| ERROR_END_ROOM_FAILED | 3057 | Unable to end the room. Please try again. |
| ADAPTIVE_SUBSCRIPTION_NOT_ENABLED_BY_SDK | 4047 | Adaptive subscription is not enabled by the SDK. Please contact at support@videosdk.live |
| ADAPTIVE_SUBSCRIPTION_ENABLE_FAILED | 4048 | Adaptive subscription is already enabled. |
| ADAPTIVE_SUBSCRIPTION_DISABLE_FAILED | 4049 | Adaptive subscription is already disabled. |
| PAUSE_ALL_STREAMS_FAILED | 4057 | Pause all streams request failed due to an unknown error. |
| RESUME_ALL_STREAMS_FAILED | 4058 | Resume all streams request failed due to an unknown error. |
| RESPOND_ENTRY_FAILED | 4059 | Respond to entry request failed due to an unknown error. |
| CHANGE_MODE_FAILED | 4065 | Change mode request failed due to an unknown error. |
| PAUSE_STREAM_FAILED | 4074 | Pause stream request failed due to an unknown error. |
| RESUME_STREAM_FAILED | 4075 | Resume stream request failed due to an unknown error. |
| SWITCH_ROOM_FAILED | 4076 | Switch room request failed due to an unknown error. |
| REQUEST_MEDIA_RELAY_FAILED | 4078 | Request media relay failed due to an unknown error. |
| STOP_MEDIA_RELAY_FAILED | 4079 | Stop media relay request failed due to an unknown error. |
| CONSUME_MIC_STREAMS_FAILED | 4080 | Consume mic streams request failed due to an unknown error. |
| CONSUME_WEBCAM_STREAMS_FAILED | 4081 | Consume webcam streams request failed due to an unknown error. |
| STOP_CONSUMING_MIC_STREAMS_FAILED | 4082 | Stop consuming mic streams request failed due to an unknown error. |
| STOP_CONSUMING_WEBCAM_STREAMS_FAILED | 4083 | Stop consuming webcam streams request failed due to an unknown error. |
| RESPOND_MEDIA_RELAY_REQUEST_FAILED | 4084 | Respond to media relay request failed due to an unknown error. |
These errors are triggered while using in-room collaboration features such as PubSub messaging, data messages, file sharing, the realtime key-value store, the whiteboard, and translation.
| Name | Code | Message |
|---|
| PUBSUB_PUBLISH_FAILED | 4087 | Publishing a PubSub message failed. |
| PUBSUB_SUBSCRIBE_FAILED | 4088 | Subscribing to a PubSub topic failed. |
| PUBSUB_UNSUBSCRIBE_FAILED | 4089 | Unsubscribing from a PubSub topic failed. |
| Name | Code | Message |
|---|
| ERROR_SEND_FAILED | 3070 | Unable to send the message. Please try again. |
| ERROR_PAYLOAD_TOO_LARGE | 3072 | Payload exceeds the maximum allowed size. |
| Name | Code | Message |
|---|
| ERROR_FILE_UPLOAD_FAILED | 3074 | Unable to upload the file. Please try again. |
| ERROR_FILE_FETCH_FAILED | 3075 | Unable to fetch the file. Please try again. |
| Name | Code | Message |
|---|
| FAILED_TO_SET_VALUE | 4045 | Failed to set realtime store value. |
| FAILED_TO_GET_VALUE | 4046 | Failed to get realtime store value. |
| Name | Code | Message |
|---|
| START_WHITEBOARD_FAILED | 4054 | Whiteboard start request failed due to an unknown error. |
| STOP_WHITEBOARD_FAILED | 4055 | Whiteboard stop request failed due to an unknown error. |
| WHITEBOARD_OPERATION_IN_PROGRESS | 4056 | A whiteboard operation is already in progress. |
| Name | Code | Message |
|---|
| START_TRANSLATION_FAILED | 4042 | Translation start request failed due to an unknown error. |
| STOP_TRANSLATION_FAILED | 4043 | Translation stop request failed due to an unknown error. |
| CHANGE_TRANSLATION_LANGUAGE_FAILED | 4044 | Change translation language request failed due to an unknown error. |
| TRANSLATION_FAILED | 5015 | Translation failed due to an unknown error. |
These errors are reported when the cause of a failure is not known. An error code that the SDK does not know reaches onError(error:) as UNKNOWN_ERROR.
| Name | Code | Message |
|---|
| UNKNOWN_ERROR | 4000 | Server Error: UNKNOWN_ERROR | Code: 4000 |
| SOMETHING_WENT_WRONG | 5000 | Something went wrong. |
- The
message you receive can be more specific than the text in these tables, for example one that names the call that failed.
VideoSDKError also defines codes that the iOS SDK never reports: 3011, 3012, 3014 to 3016, 3025, 3027 to 3030, 3036 to 3044, 3056, 3067, 3078, 4077, 4085 and 4086. A pre-call test can still report ERROR_WEBCAM_TRACK_ENDED, ERROR_MICROPHONE_TRACK_ENDED, ERROR_INVALID_CUSTOM_VIDEO_TRACK or ERROR_INVALID_CUSTOM_AUDIO_TRACK as the string code of a PreCallTestError.
- In the iOS SDK, the constants for
4009 and 4023 are spelled MAX_PARTCIPANT_REACHED and UNAUTHORIZED_PARTCIPANT_ID.