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
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
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 PSTN or SIP caller and deliver it to the room. This is an opt-in feature. To turn it on, set the room’sproperties.sip.provider to "daily".
This works in both directions. 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. The setting is on the room, not on the leg, so the same provider value covers both.
For a dial-in room:
provider and enable dial-out:
sip_mode reads oddly in that second example, but it is not a mistake. Whenever you send a sip block, sip_mode is required and "dial-in" is its only accepted value, whichever direction the call goes. Leave it out and room creation fails.
Two things to know about the setting:
- The default provider is not
"daily", so you have to ask for it. - Set it before the SIP leg is established. Changing it on a room that already has a call in progress does not affect that call.
- RTP telephone events per RFC 2833/RFC 4733. This path needs
providerset to"daily", on dial-in and dial-out alike. Without it, Daily does not offer telephone events when the SIP call is set up, so the far end never sends them. - SIP INFO requests that carry an
application/dtmf-relaybody. This path works no matter which provider the room uses.
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.