Support 1,000 active participants and up to 100,000 person real-time interactive calls. We also give you more features for your use case.
100K
person calls, 25 publishers
1K
participants all with cams and mics on
Prototype in minutes, not days. Sample code and templates for spatial audio, breakout rooms, audio and more use cases. Visit our developer guides.
Add powerful video calls — in minutes — to any product with Daily Prebuilt. Get 15,000 person calls, chat, recording, and more in a robust UI embed.
We handle everything under the hood for video calls of all sizes to ensure high-quality delivery across networks, bandwidth constraints and devices.
Pay-as-you-go pricing made for developers and priced to scale. 10,000 free minutes, automatic volume discounts, and no credit card required to get started.
Features | ||
Max. participants per call | 50 | 100,000 |
Max. cameras and mics on per call | 50 | 1,000 |
Max. concurrent room participants | 10,000 | Unlimited |
Full HD recording | No | Yes |
RTMP output for livestreams | No | Yes |
HIPAA UI embed | No | $200 add-on |
Automatic p2p/SFU switching | No | Yes |
Fully supported prebuilt UI | No | Yes |
Pricing | ||
Group video call | $0.004 per participant minute | $0.0015–$0.004 + automatic volume discounts |
Peer-to-peer | $0.001 per participant minute | $0.0015 automatic volume discounts |
Recording | $0.0015 per participant minute | $0.01349 per recording minute |
Compositing | $0.004 per participant minute | Free Learn more |
Support | Only email support included | Free support Email and chat |
When we switched from Twilio to Daily, we saw the percentage of complaints about video quality and stability go down by at least 50%.
Nate Wildermuth, Software Engineer at Rally video
<script src="https://unpkg.com/@daily-co/daily-js"></script>
<script>
callFrame = window.DailyIframe.createFrame();
callFrame.join({ url: 'https://you.daily.co/hello' });
</script>
val call = CallClient(applicationContext)
call.addListener(object: CallClientListener {
override fun onParticipantJoined(participant: Participant) {
Log.d(TAG, "Participant ${participant.id} joined the call on Android!")
showParticipant(participant)
}
}
call.addListener(object: CallClientListener {
override fun onCallStateUpdated(state: CallState) {
showUIForCallState(state);
}
}
const call = DailyIframe.createCallObject();
await call.setNetworkTopology({ topology: 'sfu' });
await call.setNetworkTopology({ topology: 'peer' });
curl --request POST \
--url https://api.staging.daily.co/v1/rooms/ROOM-NAME\
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data '{"properties": {"enable_mesh_sfu":true,"enable_terse_logging":true,"enable_hidden_participants":true,"owner_only_broadcast":true,"experimental_optimize_large_calls":true}}'
const call = DailyIframe.createCallObject();
const roomURL = 'DAILY_ROOM_URL';
const token = 'DAILY_MEETING_TOKEN';
const rtmpURL = 'RTMP_URL';
await call.join({
url: roomURL,
token,
});
callFrame.startLiveStreaming({ rtmpUrl });