Skip to main content
Daily supports both SIP dial-in and SIP dial-out. See the overview for prerequisites and codec information.

SIP dial-in (audio only)

Single SIP endpoint

Set the sip room property to enable SIP dial-in:
The response includes a read-only sip_uri.endpoint — the SIP address your client dials:
Set sip to null to disable SIP on a room.

Multiple SIP endpoints

Use num_endpoints to provision multiple SIP dial-in addresses. Each SIP and PSTN connection counts toward the max_sip_pstn_sessions_per_room limit (default: 5).
The response includes sip_uri.extra_endpoints with additional SIP addresses:

SIP dial-in (audio and video)

Set video: true to enable video SIP dial-in. You can also specify codecs explicitly:
If the remote party doesn’t support the specified codec, Daily transcodes the stream (transcoding charges apply). See our pricing page for details.

Dynamic display names

display_name is set at room creation time. To pass a name at dial time instead, append it as a URL-encoded query parameter on the SIP URI:
Use encodeURIComponent to encode the name. If x-daily_display_name is not passed, the room-level display_name is used.

Testing SIP dial-in

Below describes the SIP dial-in flow for a room with one SIP endpoint. For multiple endpoints, the flow is the same but with additional dialin-ready events and SIP URIs.
  1. A session starts and the SIP worker registers with the SIP network.
  2. The dialin-ready event fires for each registered SIP URI.
  3. After dialin-ready, your SIP client dials the sip_uri.endpoint.
Notes:
  • Each sip_uri endpoint can only be used by one SIP client at a time.
  • After a disconnect, the same sip_uri can be redialed.
  • When the Daily session ends, all SIP connections are terminated.

SIP dial-out

A Daily room can dialout to a one or more "sipUri". You can initiate dial-out from the client SDK or REST API. See the overview for details on dial-out prerequisites and supported codecs. Dial out audio-only:
Dial out with video enabled:
SIP URIs must be prefixed with sip:. You can also use startDialOut() from the client SDK.

SIP video layout

By default a SIP video participant sees the current speaker, one camera at a time, and hears everyone. A layout changes what Daily composites for them. Set it as videoSettings.layout on dialOut/start or startDialOut(), and as video_settings.layout in the sip room property for dial-in (SIP trunk room templates included). Participant references. participants.video, participants.audio, videoParticipant, audioParticipant, mainParticipant and insetParticipant take a participant’s user_id (from their meeting token) or session id. The user_id is matched first, so a reference survives a rejoin and can name a participant who has not joined yet, which matters when the SIP call starts before the others arrive. participants.video and participants.audio also accept "*" (everyone) and "owners", and take up to 50 entries each. The SIP participant is named by the dial’s userId (user_id in the sip room property for dial-in). Their own camera is sent back only when a reference names it, never through "*", and their own audio is never sent back to them. Dial out to an interpreter who sees the patient full-frame and the doctor in a small tile:
Dial-in room whose callers see the room owners in a grid:
See SIP video layout in the startDialOut() reference for every option and its limits.

Call transfers

For transferring SIP calls to another room or external SIP/PSTN endpoint, see the transfers guide.

Echo cancellation and noise suppression

Echo cancellation and noise suppression are device settings applied on the send side, the same as in any WebRTC call. See echo cancellation and noise suppression on phone and SIP audio in the overview.