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

# DailyCallOptions

> Configuration options accepted by Daily factory methods and join().

`DailyCallOptions` is the configuration object accepted by Daily's factory method ([`createCallObject()`](/reference/react-native/daily-call-client/create-call-object)) and by [`join()`](/reference/react-native/instance-methods/join) and [`load()`](/reference/react-native/instance-methods/load). Properties marked as `dailyConfig` must be nested inside a `dailyConfig` key.

```javascript theme={null}
const call = Daily.createCallObject({
  subscribeToTracksAutomatically: false,
  dailyConfig: {
    micAudioMode: 'music',
  },
});

await call.join({
  url: 'https://your-domain.daily.co/room-name',
  token: 'YOUR_TOKEN',
  startVideoOff: true,
});
```

## Properties

<ParamField body="url" type="string">
  Optional as a DailyCall property if a url is passed to the `join()` method. Otherwise, required.
</ParamField>

<ParamField body="token" type="string">
  Optional [meeting token](/reference/rest-api/meeting-tokens)

  (Used with the `join()` method).
</ParamField>

<ParamField body="startVideoOff" type="boolean">
  Optional: set to `true` to disable the default behavior of automatically turning on your camera on the first call to either `join()` or `startCamera()`.

  Note: this means that if you turn on your camera as part of or after `startCamera()`, using `startVideoOff: true` in a subsequent `join()` will have no effect.

  You can also control what happens on a direct `join()` (i.e. without `startCamera()` first) using [token](/reference/rest-api/meeting-tokens/create-meeting-token#body-properties-start-video-off) or [room](/reference/rest-api/rooms/get-room#response-config-start-video-off) properties.
</ParamField>

<ParamField body="startAudioOff" type="boolean">
  Optional: set to `true` to disable the default behavior of automatically turning on your microphone on the first call to either `join()` or `startCamera()`.

  Note: this means that if you turn on your microphone as part of or after `startCamera()`, using `startAudioOff: true` in a subsequent `join()` will have no effect.

  You can also control what happens on a direct `join()` (i.e. without `startCamera()` first) using [token](/reference/rest-api/meeting-tokens/create-meeting-token#body-properties-start-video-off) or [room](/reference/rest-api/rooms/get-room#response-config-start-video-off) properties.
</ParamField>

<ParamField body="userName" type="string">
  Optional: Sets the participant's userName
</ParamField>

<ParamField body="userData" type="unknown">
  Optional: Sets custom `userData` on the participant. See [`setUserData()`](/reference/react-native/instance-methods/set-user-data) for more details and requirements.
</ParamField>

<ParamField body="subscribeToTracksAutomatically" type="boolean">
  Optional: Receive all audio, video, and screen tracks from all call participants

  Default: true

  Applies only when building with the [Daily call object](/docs/daily-js/concepts/call-modes#call-object-mode) and while connected in [SFU mode](/docs/guides/architecture-and-monitoring/intro-to-video-arch#the-architecture-of-a-room-p2p-vs-sfu-calls).

  A value of `false` means no tracks will be received until they are explicitly subscribed to. Read more about manual track subscriptions in our [docs](/reference/react-native/instance-methods/update-participant#param-set-subscribed-tracks).
</ParamField>

<ParamField body="reactNativeConfig" type="DailyReactNativeConfig">
  Optional: React Native-specific configuration options.

  <Expandable title="androidInCallNotification">
    <ResponseField name="title" type="string">
      Optional: title to display in the Android "ongoing call" notification.

      If you need a localized title, set this property to your localized string.

      Default: `"In a call"`
    </ResponseField>

    <ResponseField name="subtitle" type="string">
      Optional: subtitle to display in the Android "ongoing call" notification.

      If you need a localized subtitle, set this property to your localized string.

      Default: `"You're in a call. Tap to open it."`
    </ResponseField>

    <ResponseField name="iconName" type="string">
      Optional: name of Android drawable resource to display in the Android "ongoing call" notification.

      Default: `"ic_daily_videocam_24dp"` (a video camera icon)
    </ResponseField>

    <ResponseField name="disableForCustomOverride" type="boolean">
      Optional: whether to disable the Android "ongoing call" notification entirely.

      Default: `false`

      <Warning>Only set this property if you plan to provide your own Android foreground service, which is important to keeping the call alive and connected while your app is in the background. Changing this property is not recommended for most apps.</Warning>
    </ResponseField>
  </Expandable>

  <Expandable title="disableAutoDeviceManagement">
    <ResponseField name="audio" type="boolean">
      Optional: whether to disable automatic audio device management, which encompasses audio device selection and configuration (controlled by [`nativeInCallAudioMode()`](/reference/react-native/instance-methods/native-in-call-audio-mode)) as well as auto-muting the mic based on loss of audio focus.

      Default: `false`

      <Warning>Only set this property if you plan to manage native audio routing yourself. Changing this property is not recommended for most apps.</Warning>
    </ResponseField>

    <ResponseField name="video" type="boolean">
      Optional: whether to disable automatic video device management, which auto-mutes the camera when the app is backgrounded.

      Default: `false`

      <Warning>Auto-muting is especially important on iOS since your app can't capture video while in the background anyway, so it's better to let other participants know. Changing this property is not recommended for most apps.</Warning>
    </ResponseField>
  </Expandable>
</ParamField>

<ParamField body="audioSource" type="boolean or MediaStreamTrack object">
  Optional: set the audio track, device, or initial state for the call.

  Default: true

  ⚠️This configuration property is not supported when using [Daily Prebuilt](https://www.daily.co/prebuilt).

  Pass false only if the participant's audio should remain muted the entire call.

  Pass a device ID string (like you get back from `enumerateDevices()` to specify what audio input device to use.

  Or pass a [MediaStreamTrack object](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack) to use that audio/video track directly. If you pass a MediaStreamTrack, you're responsible for managing the lifecycle of that track. If you pass a Device ID string, the Daily API will manage the media track for that device.
</ParamField>

<ParamField body="videoSource" type="boolean or MediaStreamTrack object">
  Optional: set the video track, device, or initial state for the call.

  Default: true

  ⚠️This configuration property is not supported when using [Daily Prebuilt](https://www.daily.co/prebuilt).

  Pass false only if the participant's video should remain muted the entire call.

  Pass a device ID string (like you get back from [`enumerateDevices()`](/reference/react-native/instance-methods/enumerate-devices)) to specify what video input device to use.

  Or pass a [MediaStreamTrack object](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack) to use that audio/video track directly. If you pass a MediaStreamTrack, you're responsible for managing the lifecycle of that track. If you pass a Device ID string, the Daily API will manage the media track for that device.
</ParamField>

<ParamField body="receiveSettings" type="object">
  Optional: Takes a media receive settings object (see [`updateReceiveSettings()`](/reference/react-native/instance-methods/update-receive-settings) for details). Specifies the receive settings to use right away upon joining the call.
</ParamField>

<ParamField body="sendSettings" type="object">
  Optional: Takes a media send settings object (see [`updateSendSettings()`](/reference/react-native/instance-methods/update-send-settings) for details). Specifies the send settings to use right away upon joining the call.
</ParamField>

<ParamField body="camSimulcastEncodings" type="object">
  This property has been deprecated. Instead, use the [`sendSettings`](/reference/react-native/types/daily-call-options#param-send-settings) iframe property to specify custom simulcast encodings.

  Optional: Requests that a participant sends video spatial layers with specific simulcast encodings (`maxBitrate`, `maxFramerate`, and `scaleResolutionDownBy`) to the server. Must be passed as a property of a `dailyConfig` object.

  <Badge color="yellow">Deprecated</Badge>
</ParamField>

<ParamField body="micAudioMode" type="string or object">
  Optional (Advanced): Configures the sender's audio tracks (`audio` or `screenAudio`) to be either `music` or `speech`. When set to `music`, a 256kbps stereo audio track will be sent to other participants. When set to `speech`, browser defaults will be applied.

  Alternatively, an object can be provided in order to specify the audio bitrate and stereo mode. The bitrate is a number in bits per second and the stereo mode is a boolean, where `true` enables 2-channel stereo audio and `false` enables 1-channel mono audio.

  Must be passed as a property of a `dailyConfig` object.

  `micAudioMode` works in SFU mode only.

  Example object:

  ```javascript theme={null}
  \{
    micAudioMode: \{
      bitrate: 128000,
      stereo: false,
    \},
  \}
  ```

  Default: `null`
</ParamField>

<ParamField body="allowMultipleCallInstances" type="boolean">
  Must be passed as a property in a [`createCallObject()`](/reference/react-native/daily-call-client/create-call-object).

  Optional: Setting to true will override Daily's default behavior and allow multiple call instances to exist and work simultaneously. See [this guide](/docs/daily-js/guides/multi-instance) for more.

  Introduced in `daily-js 0.67.0`.

  Default: false
</ParamField>

<ParamField body="strictMode" type="boolean">
  Must be passed as a property in a [`createCallObject()`](/reference/react-native/daily-call-client/create-call-object).

  Optional: Setting to false will override override Daily's default behavior and allow a call instance to be used after it has been destroyed. Use of this flag is discouraged.

  Default: true
</ParamField>

<ParamField body="iceConfig" type="object">
  Optional (Advanced): Allows for specifying custom TURN servers rather than only using Daily's default TURN servers.

  ⚠️ This configuration property is part of the Advanced Firewall Control add-on. Please contact [Sales](https://live.daily.co/talk-to-us) to enable this functionality.

  Must be passed as a property of a `dailyConfig` object.

  #### Properties:

  `iceServers`:

  * type: [`RTCIceServer[]`](https://w3c.github.io/webrtc-pc/#dom-rtciceserver)
  * description: Each object in the array has properties `urls`, `username` and `credential`. See [`RTCIceServer[]`](https://w3c.github.io/webrtc-pc/#dom-rtciceserver) for full description.
  * default: `[]`

  `placement`:

  * type: `'front'` | `'back'` | `'replace'`
  * description: Controls how the provided `iceServers` are included relative to the Daily-provided servers. `'front'` means the provided `iceServers` are included in the array first. `'back'` means the Daily-provided servers are included first. `'replace'` means that only the provided `iceServers` are used. Since all known WebRTC implementations will try all included `iceServers` and pick one based on the lowest RTT, we recommend omitting this property unless using `'replace'`.
  * default: `'front'`

  `iceTransportPolicy`:

  * type: `'all'` | `'relay'`
  * description: `'all'` will use all of the candidates. `'relay'` will only use relay candidates, such as those passing through a TURN server. See [`RTCIceTransportPolicy` Enum](https://w3c.github.io/webrtc-pc/#rtcicetransportpolicy-enum) for more information. Note: Forcing the use of relay candidates is useful for testing, but for most production use cases, the default value of `'all'` should be used.
  * default: `'all'`

  Example object:

  ```javascript theme={null}
  \{
    iceConfig: \{
      iceServers: [
        \{
          "urls": [
            "stun:stunserver.example.org:3478",
            "turn:turnserver.example.org:3478?transport=udp",
            "turn:turnserver.example.org:3478?transport=tcp",
            "turn:turnserver.example.org:443?transport=tcp",
            "turns:turnserver.example.org:443?transport=tcp"
          ],
          "username": "[USER_NAME]",
          "credential": "[CREDENTIAL]"
        \}
      ],
    \},
  \}
  ```

  After setting `iceConfig` as a frame property, it will be necessary to call [`setIceConfig()`](/reference/react-native/instance-methods/set-ice-config) periodically so that the `iceServer` credentials remain valid, in case they are needed for reconnections, or to connect to new peers in peer mode.

  It is recommended to use TURN server credentials that are valid for more than one hour, and call [`setIceConfig()`](/reference/react-native/instance-methods/set-ice-config) every hour to refresh the credentials, if possible.
</ParamField>

<ParamField body="proxyUrl" type="string">
  Optional (Advanced): If defined, connections to Daily's HTTPS and WebSocket endpoints will be sent instead to the specified proxy server.

  ⚠️ This configuration property is part of the Advanced Firewall Control add-on. Please contact [Sales](https://live.daily.co/talk-to-us) to enable this functionality.

  Must be passed as a property of a `dailyConfig` object. Defaults to `null`.

  Example:

  ```javascript theme={null}
  // Pass configuration properties to createCallObject()
  call = Daily.createCallObject(\{
    dailyConfig: \{
      proxyUrl: 'https://my-proxy-server:8080',
    \},
  \});
  call.join(\{ url: 'DAILY_ROOM_URL' \});
  ```

  If needed, [`setProxyUrl()`](/reference/react-native/instance-methods/set-proxy-url) can be used to modify the property once set.

  #### Proxy requirements

  The proxy server must proxy HTTPS connections to:

  * [https://prod-ks.pluot.blue/](https://prod-ks.pluot.blue/)\*
  * [https://c.daily.co/](https://c.daily.co/)\*
  * [https://gs.daily.co/](https://gs.daily.co/)\*

  It must also proxy HTTPS connections converting to WebSockets on `*.wss.daily.co` and `*-wss.daily.co`. If possible, proxying on `*.daily.co` is best.

  Note: the URLs listed here are subject to change in subsequent releases of `daily-js`.
</ParamField>
