> ## Documentation Index
> Fetch the complete documentation index at: https://docs.daily.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Error events

> Events for fatal and non-fatal errors — connection failures, device errors, screen share issues, and processing warnings.

These events fire when fatal or non-fatal errors occur during a call.

***

## error

Fires when an unrecoverable error ends the call. A [`left-meeting`](/reference/react-native/events/lifecycle-events#left-meeting) event fires immediately after.

<ResponseField name="action" type="string">
  Always `"error"`.
</ResponseField>

<ResponseField name="callClientId" type="string">
  The ID of the call client instance that emitted this event.
</ResponseField>

<ResponseField name="errorMsg" type="string">
  A human-readable description of the error.
</ResponseField>

<ResponseField name="error" type="object">
  Present when the error type is known. Always contains `type` and `msg`. When `type` is `'connection-error'`, also includes a `details` object — see below.

  | `type`             | Description                                                                                                                        |
  | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
  | `ejected`          | The local participant was removed from the call by an owner.                                                                       |
  | `nbf-room`         | The room is not yet valid — current time is before the room's `nbf` (not-before) timestamp.                                        |
  | `nbf-token`        | The meeting token is not yet valid — current time is before the token's `nbf` timestamp.                                           |
  | `exp-room`         | The room has expired.                                                                                                              |
  | `exp-token`        | The meeting token has expired.                                                                                                     |
  | `no-room`          | The room does not exist.                                                                                                           |
  | `meeting-full`     | The room has reached its participant limit.                                                                                        |
  | `end-of-life`      | The daily-js version in use is no longer supported.                                                                                |
  | `not-allowed`      | The participant is not permitted to join this room (e.g. token or privacy settings).                                               |
  | `connection-error` | A network or infrastructure failure prevented or severed the connection. This is the only type with a structured `details` object. |
</ResponseField>

```json theme={null}
// Example event object
{
  "action": "error",
  "errorMsg": "network unreachable",
  "callClientId": "17225364729060.9442072768918943",
  "error": {
    "type": "ejected",
    "msg": "You were removed from the call"
  }
}
```

```javascript theme={null}
call.on('error', ({ error }) => {
  if (error?.type === 'ejected') {
    showEjectedMessage();
  } else {
    showGenericErrorMessage(error?.msg);
  }
});
```

### connection-error details

When `error.type` is `'connection-error'`, an additional `details` object identifies where in the lifecycle the failure occurred:

<ResponseField name="details.on" type="string">
  Lifecycle stage where the failure occurred: `'load'`, `'join'`, `'reconnect'`, `'move'`, `'rtc-connection'`, or `'room-lookup'`.
</ResponseField>

<ResponseField name="details.sourceError" type="object">
  The underlying error from the browser or network layer.
</ResponseField>

<ResponseField name="details.uri" type="string">
  Optional. The resource URL that failed to load.
</ResponseField>

<ResponseField name="details.workerGroup" type="string">
  Optional. Internal routing group.
</ResponseField>

<ResponseField name="details.geoGroup" type="string">
  Optional. Internal geo region.
</ResponseField>

<ResponseField name="details.bundleUrl" type="string">
  Optional. The call bundle URL if the failure was during bundle fetch.
</ResponseField>

```json theme={null}
// Example: connection-error
{
  "action": "error",
  "errorMsg": "Failed to connect",
  "callClientId": "17225364729060.9442072768918943",
  "error": {
    "type": "connection-error",
    "msg": "Failed to connect",
    "details": {
      "on": "join",
      "sourceError": {},
      "uri": "https://c.daily.co/static/call-machine-object-bundle.js"
    }
  }
}
```

***

## nonfatal-error

Non-fatal errors are recoverable — the call continues after they fire. They signal that something went wrong in a specific subsystem but did not bring down the call. Use these to surface targeted warnings in your UI.

<ResponseField name="action" type="string">
  Always `"nonfatal-error"`.
</ResponseField>

<ResponseField name="callClientId" type="string">
  The ID of the call client instance that emitted this event.
</ResponseField>

<ResponseField name="type" type="string">
  Identifies which subsystem the error came from. See the subtypes below.
</ResponseField>

<ResponseField name="errorMsg" type="string">
  A human-readable description of the error.
</ResponseField>

### input-settings-error

Fires when an error occurs while applying input settings changes.

<ResponseField name="details.category" type="string">
  Either `'settings'` (error while applying media settings) or `'processor'` (error while setting up the processor).
</ResponseField>

<ResponseField name="details.media" type="string[]">
  The affected media types — `'video'` and/or `'audio'`.
</ResponseField>

<ResponseField name="details.error" type="object">
  The underlying error. Contains a `camera-error`-shaped object if the failure was getting user media, or the processor error if the failure was in the processor.
</ResponseField>

```json theme={null}
{
  "action": "nonfatal-error",
  "type": "input-settings-error",
  "errorMsg": "...",
  "details": {
    "media": ["video"],
    "category": "settings",
    "error": {
      "failedMedia": ["video"],
      "msg": "Invalid constraints provided.",
      "reason": "invalid",
      "type": "constraints"
    }
  },
  "callClientId": "17225364729060.9442072768918943"
}
```

### live-streaming-warning

Fires when an error occurs during a live stream — for example, when attempting to remove all live streaming endpoints.

```json theme={null}
{
  "action": "nonfatal-error",
  "type": "live-streaming-warning",
  "errorMsg": "...",
  "callClientId": "17225364729060.9442072768918943"
}
```

### local-audio-level-observer-error

Fires if an error occurs while the local audio level observer is running.

```json theme={null}
{
  "action": "nonfatal-error",
  "type": "local-audio-level-observer-error",
  "errorMsg": "...",
  "callClientId": "17225364729060.9442072768918943"
}
```

### meeting-session-data-error

Fires when an error occurs updating meeting session data via [`setMeetingSessionData()`](/reference/react-native/instance-methods/set-meeting-session-data).

```json theme={null}
{
  "action": "nonfatal-error",
  "type": "meeting-session-data-error",
  "errorMsg": "Meeting session data is too large. Maximum size supported is 100KB.",
  "callClientId": "17225364729060.9442072768918943"
}
```

### screen-share-error

Fires when an error occurs while starting a screen share.

<ResponseField name="details.category" type="string">
  Either `'permissions'` (user or OS blocked screen sharing) or `'unknown'` (a `getDisplayMedia()` exception for another reason).
</ResponseField>

<ResponseField name="details.blockedBy" type="string">
  Present when `category` is `'permissions'`. Either `'browser'` (user denied access) or `'os'` (OS is configured to block screen sharing).
</ResponseField>

<ResponseField name="details.browserError" type="object">
  The underlying browser error, including `name` and `message`.
</ResponseField>

```json theme={null}
// Example: permissions error
{
  "action": "nonfatal-error",
  "callClientId": "17225364729060.9442072768918943",
  "type": "screen-share-error",
  "errorMsg": "Error starting ScreenShare: blocked-by-browser",
  "details": {
    "category": "permissions",
    "blockedBy": "browser",
    "browserError": {
      "name": "NotAllowedError",
      "message": "The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission."
    }
  }
}
```

```json theme={null}
// Example: unknown error
{
  "action": "nonfatal-error",
  "callClientId": "17225364729060.9442072768918943",
  "type": "screen-share-error",
  "errorMsg": "Error starting ScreenShare: unknown",
  "details": {
    "category": "unknown",
    "browserError": {
      "name": "AbortError",
      "message": "In shutdown",
      "code": 20
    }
  }
}
```

### video-processor-warning

Fires when the user enables background effects in a browser where performance will likely be degraded — for example, when hardware graphics acceleration is disabled. This often correlates with very low frame rates on the outgoing video stream.

This is powered by the [`failIfMajorPerformanceCaveat`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/getContext#failifmajorperformancecaveat) WebGL property.

```json theme={null}
{
  "action": "nonfatal-error",
  "type": "video-processor-warning",
  "errorMsg": "Background processing using software WebGL. Performance may be degraded.",
  "callClientId": "17225364729060.9442072768918943"
}
```

### video-processor-error

Fires when CPU usage becomes too high, causing the video processor to turn off and the camera to mute.

```json theme={null}
{
  "action": "nonfatal-error",
  "type": "video-processor-error",
  "errorMsg": "...",
  "callClientId": "17225364729060.9442072768918943"
}
```

### audio-processor-error

Fires when audio processing (noise cancellation) fails, causing the audio processor to turn off and the microphone to mute.

```json theme={null}
{
  "action": "nonfatal-error",
  "type": "audio-processor-error",
  "errorMsg": "...",
  "callClientId": "17225364729060.9442072768918943"
}
```

***

## See also

<CardGroup>
  <Card title="Methods" icon="code" iconType="solid">
    * [join()](/reference/react-native/instance-methods/join)
    * [startScreenShare()](/reference/react-native/instance-methods/start-screen-share)
    * [updateInputSettings()](/reference/react-native/instance-methods/update-input-settings)
    * [setMeetingSessionData()](/reference/react-native/instance-methods/set-meeting-session-data)
  </Card>

  <Card title="Events" icon="bolt" iconType="solid">
    * [Lifecycle events](/reference/react-native/events/lifecycle-events)
  </Card>

  <Card title="Guides" icon="book-open" iconType="solid">
    * [Events](/docs/daily-js/concepts/events)
    * [Device permissions](/docs/daily-js/guides/device-permissions)
  </Card>
</CardGroup>
