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

# startDialOut()

> Initiates an outbound SIP or PSTN call from a Daily room.

`startDialOut(options)`

<Badge color="green">{"✓"} Prebuilt</Badge> <Badge color="green">{"✓"} Custom</Badge>

The dialed participant joins the room as a regular participant. Requires the initiating participant to be [an owner or admin](/reference/rest-api/meeting-tokens/create-meeting-token#body-properties-permissions).

## Parameters

`options: DailyStartDialoutSipOptions | DailyStartDialoutPhoneOptions`

Provide either `sipUri` (SIP) or `phoneNumber` (PSTN) — not both. Fields marked as SIP-only or PSTN-only are ignored when used with the wrong option type.

### `DailyStartDialoutSipOptions`

<ParamField body="sipUri" type="string">
  The SIP URI to dial (e.g. `sip:bob@example.com`). Must conform to [RFC 3261](https://tools.ietf.org/html/rfc3261#section-25). Query parameters appended to the URI appear as `X-` SIP headers in the invite (e.g. `sip:bob@example.com?X-myHeader=value`).
</ParamField>

<ParamField body="displayName" type="string">
  Display name shown for the participant when they join. Defaults to the SIP username from the URI.
</ParamField>

<ParamField body="userId" type="string">
  Custom identifier for the participant (max 36 characters). See [userId guidance](/reference/rest-api/meeting-tokens/create-meeting-token#body-properties-user-id).
</ParamField>

<ParamField body="video" type="boolean">
  Enable/disable SIP video.
</ParamField>

<ParamField body="videoSettings" type="object">
  Video encoding settings. Only applicable when `video` is `true`.

  * `width`: video width in pixels. Default: `1280`. Maximum: `1280`.
  * `height`: video height in pixels. Default: `720`. Maximum: `720`.
  * `fps`: video frame rate. Default: `15`. Maximum: `30`.
  * `videoBitrate`: video bitrate in kbps. Default: `900`. Maximum: `1000`.
</ParamField>

<ParamField body="codecs" type="DailyDialOutCodecs">
  Preferred codecs. The first entry in each array is used; if the remote party doesn't support it, the stream is transcoded (transcoding charges may apply).

  * `codecs.audio`: `'PCMU' | 'OPUS' | 'G722' | 'PCMA'[]`. Default: `['OPUS']`.
  * `codecs.video`: `'H264' | 'VP8'[]`. Default: `['H264']`.
</ParamField>

<ParamField body="permissions" type="DailySipPstnParticipantPermissions">
  Controls which participants' media the dialed-in SIP participant can receive. Uses the same `canReceive` shape as [participant permissions](/reference/rest-api/meeting-tokens/create-meeting-token#body-properties-permissions).
</ParamField>

### `DailyStartDialoutPhoneOptions`

<ParamField body="phoneNumber" type="string">
  The E.164 phone number to call (e.g. `+12268077097`).
</ParamField>

<ParamField body="displayName" type="string">
  Display name shown for the participant when they join. Defaults to the phone number.
</ParamField>

<ParamField body="userId" type="string">
  Custom identifier for the participant (max 36 characters). See [userId guidance](/reference/rest-api/meeting-tokens/create-meeting-token#body-properties-user-id).
</ParamField>

<ParamField body="callerId" type="string">
  The outbound caller ID displayed on the called device. Defaults to the oldest [purchased number](/reference/rest-api/phone-numbers/list-purchased) on the domain.
</ParamField>

<ParamField body="extension" type="string">
  Extension to dial after the call connects. Max 20 characters.
</ParamField>

<ParamField body="waitBeforeExtensionDialSec" type="number">
  Seconds to wait after connecting before dialing the extension.
</ParamField>

<ParamField body="codecs" type="DailyDialOutCodecs">
  Preferred codecs. The first entry in each array is used; if the remote party doesn't support it, the stream is transcoded (transcoding charges may apply).

  * `codecs.audio`: `'PCMU' | 'OPUS' | 'G722' | 'PCMA'[]`. Default: `['PCMU', 'PCMA']`.
  * `codecs.video`: not applicable for PSTN.
</ParamField>

<ParamField body="permissions" type="DailySipPstnParticipantPermissions">
  Controls which participants' media the dialed-in PSTN participant can receive. Uses the same `canReceive` shape as [participant permissions](/reference/rest-api/meeting-tokens/create-meeting-token#body-properties-permissions).
</ParamField>

## Return value

Returns a `Promise` that resolves to `{ session?: DailyDialOutSession }`, where `session.sessionId` is the UUID identifying the initiated SIP/PSTN session.

## Errors

* `NOT_ALLOWED` — SIP/PSTN is not enabled for the room.
* `DIALOUT_IN_PROGRESS` — A dial-out is already in progress.
* `TEMPORARILY_NOT_AVAILABLE` — No workers available; try again shortly.

## Examples

```javascript theme={null}
// SIP call
const { session } = await call.startDialOut({ sipUri: 'sip:bob@example.com' });

// SIP video call with custom display name
const { session } = await call.startDialOut({
  sipUri: 'sip:boardroom@example.com',
  video: true,
  displayName: 'Board Room',
  codecs: { video: ['H264'], audio: ['OPUS'] },
  videoSettings: { width: 1280, height: 720, fps: 15, videoBitrate: 900 },
});

// PSTN call with extension
const { session } = await call.startDialOut({
  phoneNumber: '+12268077097',
  displayName: 'Support Line',
  extension: '1234',
  waitBeforeExtensionDialSec: 4,
});
```

## See also

<CardGroup>
  <Card title="Methods" icon="code" iconType="solid">
    * [stopDialOut()](/reference/daily-js/instance-methods/stop-dial-out)
    * [sipCallTransfer()](/reference/daily-js/instance-methods/sip-call-transfer)
    * [sipRefer()](/reference/daily-js/instance-methods/sip-refer)
  </Card>

  <Card title="Events" icon="bolt" iconType="solid">
    * [dialout-connected](/reference/daily-js/events/telephony-events#dialout-connected)
    * [dialout-stopped](/reference/daily-js/events/telephony-events#dialout-stopped)
    * [dialout-error](/reference/daily-js/events/telephony-events#dialout-error)
  </Card>

  <Card title="Guides" icon="book-open" iconType="solid">
    * [Dial-in / dial-out](/docs/guides/features/dial-in-dial-out)
  </Card>

  <Card title="REST API" icon="server" iconType="solid">
    * [Update room: enable\_dialout](/reference/rest-api/rooms/update-room#body-properties-enable-dialout)
    * [Start dial-out](/reference/rest-api/rooms/dial-out/start)
    * [dialout-answered webhook](/reference/rest-api/webhooks/events/dialout-answered)
  </Card>
</CardGroup>
