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_dialouton 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. Setproviderto"daily"to use it. - SignalWire (
signalwire) is the default, used whenever you don’t setprovider. Use it for phone (PSTN) calls, which the Daily SIP provider does not handle.
- 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.cosignalwire:my-room.0@daily-<id>-app.dapp.signalwire.com
When to use SignalWire
- PSTN dial-out. Leave
providerout when you dial aphoneNumber, or pass"signalwire". daily-js and the REST API both reject"daily"with aphoneNumber. - PSTN PIN dial-in. The
dialinroom property does not take aprovider. It always uses SignalWire. sipCallTransfer. It returns an error on a Daily-provider session. On the Daily SIP provider, usesipReferinstead.
Where to set the provider
The provider is chosen for each SIP leg, not for the whole room. SignalWire is the default, so setprovider to "daily" on each SIP leg you want on the Daily SIP provider:
- SIP dial-in to a room’s endpoint: set
providerin the room’ssipproperty. - Dial-out: pass
providertostartDialOut()ordialOut/start. The room’ssip.providerdoes not apply to dial-out.
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)
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
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):
- Purchase a phone number (skip if dialing a SIP URI)
- Enable dial-out on the room
- Join the room with an owner token
- Dial US/Canada (+1) numbers in E.164 format (e.g., +16505551212). For international dial-out, contact help@daily.co.
startDialOut()in daily-js/rooms/:name/dialOut/startvia REST API
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 a429 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, andPOST /rooms/:name/live-streaming/startall 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).
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:sendDTMF()in daily-js/rooms/:name/dialOut/sendDTMFvia REST API
- RTP telephone events per RFC 2833/RFC 4733. This method works with almost every endpoint.
- SIP INFO requests that carry an
application/dtmf-relaybody withSignalandDurationfields.
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 adtmf-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-relaybody. Supported with either provider.
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:
startDialOut() or to dialOut/start. The room’s sip.provider does not apply to dial-out.
- 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.providerdoes not affect a call that is already in progress.
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.