Skip to main content
Daily supports connecting standard phone and SIP participants to video calls, enabling telephony integration for contact centers, conferencing, and voice bot applications.

Prerequisites

  • Paid Daily account — add a credit card in the dashboard.
  • Dial-out approval — fill out the dial-out request form to avoid fraud and misuse. Once approved, set enable_dialout on your rooms.
  • Default limit: max_sip_pstn_sessions_per_room = 5. Contact support to increase this.
We’ve removed the requirement for a paid-support plan for SIP and PSTN dial-in, it is now available for all pay-as-you-go accounts. You just need to have a credit card associated to your domain.

SIP providers

Daily connects SIP calls through one of two providers:
  • The Daily SIP provider (daily) is Daily’s own SIP infrastructure, and the recommended choice for SIP dial-in and SIP dial-out. Set provider to "daily" to use it.
  • SignalWire (signalwire) is the default, used whenever you don’t set provider. Use it for phone (PSTN) calls, which the Daily SIP provider does not handle.
With the Daily SIP provider:
  • SIP calls go directly between Daily and your SIP endpoint, with no third-party provider in between.
  • Daily receives DTMF sent as RTP telephone events as well as SIP INFO.
  • Dial-in endpoints are on your own domain’s host, <your-domain>.sip-us.daily.co.
  • It is the provider SIP trunks use.
The provider also sets the host of a room’s SIP dial-in endpoint:
  • daily: my-room.0@<your-domain>.sip-us.daily.co
  • signalwire: my-room.0@daily-<id>-app.dapp.signalwire.com
When to use SignalWire
  • PSTN dial-out. Leave provider out when you dial a phoneNumber, or pass "signalwire". daily-js and the REST API both reject "daily" with a phoneNumber.
  • PSTN PIN dial-in. The dialin room property does not take a provider. It always uses SignalWire.
  • sipCallTransfer. It returns an error on a Daily-provider session. On the Daily SIP provider, use sipRefer instead.

Where to set the provider

The provider is chosen for each SIP leg, not for the whole room. SignalWire is the default, so set provider to "daily" on each SIP leg you want on the Daily SIP provider:
  • SIP dial-in to a room’s endpoint: set provider in the room’s sip property.
  • Dial-out: pass provider to startDialOut() or dialOut/start. The room’s sip.provider does not apply to dial-out.
Create a SIP dial-in room on the Daily SIP provider:
Dial out to a SIP URI on the Daily SIP provider with the REST API:
Or from daily-js:

SIP

Daily supports SIP dial-in and SIP dial-out with the following codecs:
  • Audio: PCMU, PCMA, G722, Opus (default: PCMU/PCMA)
  • Video: H264, VP8 (default: VP8)
If a codec is not supported by the remote party, Daily transcodes the stream (transcoding charges apply — see pricing). Tested with CPaaS vendors (Twilio, Telnyx, SignalWire) and SIP hardware phones (Poly, Cisco). For full SIP setup details, see the SIP guide.

PSTN phone numbers

Global dial-in numbers

You can receive PSTN calls without purchasing a phone number. Daily provides global dial-in numbers in 27 countries. Each room gets a unique 11-digit PIN code, generated at room creation and deleted when the room expires. All accounts get US and Canada at no extra charge:
  • US: +1 (209) 503-8039
  • CA: +1 (226) 807-8039
Access to the other 25 countries (including all major European countries, Japan, Singapore, Malaysia, India, China, Hong Kong, Brazil, Mexico) requires a paid support plan. See this page for the full list of countries and numbers.

Purchasing phone numbers

Daily’s REST API supports purchasing phone numbers in the US and Canada (+1). A single number can handle hundreds of simultaneous calls. A purchased number can can be used for PSTN dialout. However, a number can only be assigned to either PIN dial-in or pinless dial-in, but not both.

PSTN dial-in methods

Daily supports two PSTN dial-in flows:
  • PIN dial-in — callers dial a phone number and enter a room-specific PIN code.
  • SIP Interconnect and Pinless dial-in — incoming calls trigger a webhook where you can define logic to route the call to a Daily room without requiring a PIN.

PSTN dial-out

Dial-out checklist (once your account is approved):
  1. Purchase a phone number (skip if dialing a SIP URI)
  2. Enable dial-out on the room
  3. Join the room with an owner token
  4. Dial US/Canada (+1) numbers in E.164 format (e.g., +16505551212). For international dial-out, contact help@daily.co.
Dial out to a mobile or PSTN phone number from within a Daily room: PSTN dial-out uses SignalWire. The Daily SIP provider does not dial phone numbers, so leave provider out of a phoneNumber dial-out. See SIP providers. When the callee is busy, declines, or cannot be reached, the SIP status code is reported on dialout-stopped with the default "signalwire" provider and on dialout-error with provider: "daily". See unanswered dial-outs by provider.

Call rate limits

Starting a call is rate limited to just under 1 request per second: 4 start requests succeed per rolling 5-second window. The 5th request inside that window gets a 429 response with error: "rate-limit-error". Retry with exponential back-off. In addition, PSTN dial-out calls have rate-limits to safeguard against abuse. Please contact support to increase your domain’s outbound calls-per-second (CPS) limit. A few things to know about how it is counted:
  • The limit is counted per domain. Splitting calls across many rooms or numbers does not raise it.
  • Dial-out, dial-in, and live streaming share one budget. POST /rooms/:name/dialOut/start, POST /rooms/:name/dialIn/start, and POST /rooms/:name/live-streaming/start all draw from the same 4-per-5-seconds window. Note that recordings have a separate rate-limit and do not contribute to the dial-out and streaming rate-limit counter reported here.
  • Incoming calls are not affected. When someone dials one of your purchased numbers, or dials a global number and enters a PIN, that call is not a REST request and never hits this limit. Only the API call that starts a session is limited.
  • This is a start-rate limit, not a concurrency limit. There is no cap on how many SIP/PSTN calls can run at the same time on one phone number or across your domain. However, in addition to the recording and streaming rate-limit, PSTN dial-out has a default CPS allocation of 1 PSTN dial-out per second. To invoke multiple outbound dial-out sessions on your domain, please email the support team. Both the REST API limits and PSTN CPS need to be aligned. Increasing the PSTN CPS has additional charges, please check our pricing page for exact details.
  • Each room has a default number of SIP and PSTN sessions that it can receive or make, please email the support team with details about your use-case to increase the max_sip_pstn_sessions_per_room (default: 5).
Handle 429 responses by retrying with an exponential backoff, and pace your own dialer so it does not burst past the window. If you need a higher call rate, email help@daily.co before you scale up. We can raise the limit, but we set it with you based on the call volume you expect, so plan for a short conversation rather than an instant change. Ask early if you have a launch date. For the limits on other REST endpoints, see Rate limits.

DTMF tones

Sending DTMF

Send DTMF (touch-tone) signals during a call — commonly used for IVR interactions: On a dial-out call, Daily can signal DTMF two ways:
  • RTP telephone events per RFC 2833/RFC 4733. This method works with almost every endpoint.
  • SIP INFO requests that carry an application/dtmf-relay body with Signal and Duration fields.
With the default method: 'auto', Daily uses SIP INFO when the remote SIP peer lists INFO in the Allow header of its answer. If it does not, Daily uses RTP telephone events. Nothing else changes that choice. If you ask for method: 'sip-info' and the far end does not allow INFO, the request returns an error.
Sending more than one toneWhen you send several tones in a single request over SIP INFO, Daily waits a fixed 100ms between tones. You cannot change that gap. digitDurationMs sets the digit duration that Daily signals to the far end. It does not set the gap between tones.There is no queueing or ordering guarantee across separate requests, so two that overlap can interleave their tones.Pass the whole sequence in one request when you can, for example tones: '1234#'. If you have to send digits one at a time, wait for each request to finish before starting the next one and add your own pacing between them.

Receiving DTMF

Daily can receive DTMF from a SIP or PSTN caller and deliver it to the room. A caller who dialed in can press keys, and so can the far end of a dial-out, including dial-out to a SIP endpoint. Each key press fires a dtmf-event for every participant in the room, with the caller’s sessionId, the tone, and the method it arrived by. There is no webhook for received tones. Daily receives DTMF two ways:
  • RTP telephone events per RFC 2833/RFC 4733. Supported on SIP legs that use the Daily SIP provider.
  • SIP INFO requests that carry an application/dtmf-relay body. Supported with either provider.
To receive telephone events, set provider to "daily" on the SIP leg. Where you set it depends on the direction. For SIP dial-in to a room, set it in the room’s sip property:
For dial-out, pass it with the dial-out request, either to startDialOut() or to dialOut/start. The room’s sip.provider does not apply to dial-out.
Two things to know about the setting:
  • The default provider is "signalwire", so you have to ask for "daily".
  • Set it before the SIP leg is established. Changing a room’s sip.provider does not affect a call that is already in progress.
If key presses don’t reach the roomCheck how the far end sends DTMF. If it uses RTP telephone events, use the Daily SIP provider on that SIP leg: for dial-in, set "provider": "daily" in the room’s sip property; for dial-out, pass "provider": "daily" with the dial-out request.
Daily does not detect DTMF from the audio itself (in-band tones). Only out-of-band DTMF is supported: RTP telephone events and SIP INFO.

Call transfers

Daily provides two transfer methods. Both methods maintain the original SIP/PSTN connection, meaning the initial caller’s connection does not disconnect during the transfer:
  • SIP Call Transfer — keeps the original SIP leg anchored to Daily and redirects the far end to a new SIP or PSTN destination. Both connections remain active and billable.
  • SIP REFER — hands the call off to the originating SIP system. Daily exits the call entirely. A one-time SIP REFER fee may apply.

Echo cancellation and noise suppression on phone and SIP audio

Echo cancellation, noise suppression and automatic gain control are device settings, not transport settings. They are applied where the audio is captured, on the send side. This is no different from a plain WebRTC call: they are never applied to audio you receive. For a browser or app participant, the Daily SDK applies them to the microphone it captures (see noise cancellation). A phone (PSTN) or SIP caller is not running a Daily SDK, so the handset, the PBX or the carrier has to apply them on its own capture. Daily does not apply echo cancellation or background noise removal to received audio. The usual symptom is a voice bot hearing its own speech come back as user input from a caller on speakerphone. That echo is already in the audio Daily receives, so nothing further down the path can take it out. Ask the caller to use a headset or hold the phone to their ear, and handle the rest in your bot’s interruption logic.