Skip to main content

Best Video Calling APIs 2026: Daily vs Agora vs Whereby vs Twilio Video

·APIScout Team
video calling apiwebrtcdailyagorawherebytwilio videoreal-time videovideo sdk

Embedded Video Is Now Mainstream

Telehealth appointments, virtual classrooms, real-time collaboration, customer video support, live streaming — the use cases for embedded video calling have expanded dramatically. In 2026, adding video to your application doesn't require building WebRTC infrastructure from scratch or managing media servers. Purpose-built video APIs handle the hard parts: TURN/STUN servers, codec negotiation, bandwidth adaptation, recording, and global distribution.

Three platforms lead the developer video API market: Daily (the WebRTC infrastructure specialist with per-minute transparency), Agora (the global real-time communications network optimized for low latency in Asia-Pacific), and Whereby (the easiest to embed for telehealth and non-technical integrations). Twilio Video is notably absent — Twilio deprecated it in 2024, redirecting customers to alternatives.

TL;DR

Daily is the best default for most applications — the most transparent per-minute pricing, 10K free minutes/month, and the strongest developer documentation in the video API market. Agora is the right choice for applications needing ultra-low latency in Asia-Pacific, where Agora's network infrastructure has the highest density of edge nodes. Whereby is the easiest to embed for non-technical use cases — a single <iframe> or npm package deployment for telehealth and meeting rooms.

Key Takeaways

  • Twilio Video was deprecated in 2024 — teams on Twilio Video must migrate; Daily and Agora are the most common migration targets.
  • Daily offers 10,000 free participant minutes/month — after which video costs $0.004/participant-minute.
  • Agora offers 10,000 free minutes/month with video at $0.009/minute and voice at $0.004/minute in North America — pricing varies by region.
  • Whereby Embedded starts at $6.99/month — includes 2,000 participant minutes, then $0.004/minute — better for low-volume, simple deployments.
  • Participant minutes scale fast — a 60-minute call with 4 participants = 240 participant minutes, burning through free tiers in days for active applications.
  • Recording adds cost — Daily charges $0.003/recorded-minute for cloud recording storage.
  • HIPAA compliance is available on Daily and Whereby — critical for telehealth applications.

Pricing Comparison

At 1,000 hours of video per month (with average 2 participants):

PlatformFree MinutesAfter FreeMonthly Cost (1K hours)
Daily10K$0.004/participant-minute~$372
Agora10K$0.009/participant-minute (video)~$836
Whereby2K (plan)$0.004/participant-minute~$382
Vonage VideoLimitedCustomCustom

Participant minutes explained: A 30-minute call with 3 participants = 90 participant minutes. At $0.004/minute, that call costs $0.36.

Daily

Best for: Most applications, transparent pricing, HIPAA-compliant telehealth, WebRTC infrastructure

Daily is a WebRTC infrastructure platform — it provides the underlying media servers, TURN servers, and SDKs, letting you build video experiences with full UI control. Daily's approach is to be as close to raw WebRTC as possible while abstracting away the infrastructure complexity.

Pricing

FeatureFreePaid
Participant minutes10K/month$0.004/minute
Recording$0.003/recorded-minute + storage
HIPAA BAABusiness plan
SLACustom
Phone PSTN$0.025/minute

API Integration

// Daily.js — React video call
import DailyIframe from "@daily-co/daily-js";
import { useEffect, useRef } from "react";

function VideoCall({ roomUrl }) {
  const wrapperRef = useRef(null);

  useEffect(() => {
    const callFrame = DailyIframe.createFrame(wrapperRef.current, {
      showLeaveButton: true,
      iframeStyle: { width: "100%", height: "100%", border: "none" },
    });

    callFrame
      .on("joined-meeting", (event) => console.log("Joined!", event))
      .on("left-meeting", () => callFrame.destroy())
      .on("error", (e) => console.error("Call error:", e));

    callFrame.join({ url: roomUrl });

    return () => callFrame.destroy();
  }, [roomUrl]);

  return <div ref={wrapperRef} style={{ width: "800px", height: "600px" }} />;
}

Creating Rooms via API

import requests

# Create a room
response = requests.post(
    "https://api.daily.co/v1/rooms",
    headers={
        "Authorization": f"Bearer {DAILY_API_KEY}",
        "Content-Type": "application/json",
    },
    json={
        "name": "patient-consult-12345",
        "properties": {
            "exp": int(time.time()) + 3600,  # Expires in 1 hour
            "enable_recording": "cloud",
            "max_participants": 3,
            "enable_screenshare": True,
        },
    },
)

room = response.json()
print(f"Room URL: {room['url']}")

Meeting Tokens for Authentication

# Create a meeting token for secure room access
token_response = requests.post(
    "https://api.daily.co/v1/meeting-tokens",
    headers={"Authorization": f"Bearer {DAILY_API_KEY}"},
    json={
        "properties": {
            "room_name": "patient-consult-12345",
            "user_name": "Dr. Smith",
            "is_owner": True,  # Host privileges
            "exp": int(time.time()) + 3600,
        }
    },
)

token = token_response.json()["token"]
# Join URL with token: https://your-domain.daily.co/room-name?t={token}

React SDK with Hooks

import { DailyProvider, useLocalSessionId, useParticipantIds, DailyVideo } from "@daily-co/daily-react";

function VideoTile({ sessionId }) {
  return <DailyVideo sessionId={sessionId} mirror={false} />;
}

function Call() {
  const localSessionId = useLocalSessionId();
  const participantIds = useParticipantIds({ filter: "remote" });

  return (
    <div>
      {localSessionId && <VideoTile sessionId={localSessionId} />}
      {participantIds.map((id) => <VideoTile key={id} sessionId={id} />)}
    </div>
  );
}

function App({ roomUrl }) {
  return (
    <DailyProvider url={roomUrl}>
      <Call />
    </DailyProvider>
  );
}

When to Choose Daily

General-purpose video applications, telehealth platforms requiring HIPAA compliance, applications needing full UI control with React hooks, or teams migrating from Twilio Video (Daily is the most common migration target).

Agora

Best for: Asia-Pacific applications, ultra-low latency, interactive live streaming, large-scale events

Agora operates one of the largest real-time communication networks in the world — optimized specifically for low-latency media delivery with particular strength in Asia-Pacific, where Agora has the densest infrastructure. For applications serving users in China, Southeast Asia, or India, Agora's regional network advantage is significant.

Pricing

FeatureFreePaid (North America)
Minutes10K/month
VideoFree (within 10K)$0.009/minute
VoiceFree (within 10K)$0.004/minute
Interactive liveCustomCustom

Regional pricing varies — Agora charges differently by region. Asia-Pacific rates may differ from North America. For applications primarily serving Asian markets, get a custom quote.

SDK Integration

import AgoraRTC from "agora-rtc-sdk-ng";

const client = AgoraRTC.createClient({ mode: "rtc", codec: "vp8" });

let localAudioTrack;
let localVideoTrack;

async function startCall(appId, channel, token, uid) {
  await client.join(appId, channel, token, uid);

  // Create local audio and video tracks
  [localAudioTrack, localVideoTrack] = await AgoraRTC.createMicrophoneAndCameraTracks();

  const localContainer = document.getElementById("local-video");
  localVideoTrack.play(localContainer);

  await client.publish([localAudioTrack, localVideoTrack]);
}

// Handle remote users joining
client.on("user-published", async (user, mediaType) => {
  await client.subscribe(user, mediaType);

  if (mediaType === "video") {
    const remoteVideoTrack = user.videoTrack;
    const remoteContainer = document.getElementById(`remote-${user.uid}`);
    remoteVideoTrack.play(remoteContainer);
  }
});

// Leave call
async function leaveCall() {
  localAudioTrack.close();
  localVideoTrack.close();
  await client.leave();
}

Interactive Live Streaming

Agora's strength beyond video calls is interactive live streaming — supporting thousands of audience members with specific hosts:

// Host setup for live streaming
const hostClient = AgoraRTC.createClient({ mode: "live", codec: "h264" });
await hostClient.setClientRole("host");
await hostClient.join(appId, channel, token, uid);

// Audience member
const audienceClient = AgoraRTC.createClient({ mode: "live", codec: "h264" });
await audienceClient.setClientRole("audience");

When to Choose Agora

Applications with significant Asia-Pacific user base, interactive live streaming at scale (thousands of viewers), gaming and social apps needing ultra-low latency (sub-400ms), or applications in China where Agora has CDN infrastructure competitors lack.

Whereby

Best for: Telehealth, simple embedding, no-code deployment, branded video rooms

Whereby Embedded is the easiest video API to integrate — a single <iframe> pointing to a Whereby room URL gives you a fully functional, branded video call. No media server management, no WebRTC configuration. Whereby handles everything in their infrastructure, you embed the result.

Pricing

PlanCostMinutesMax Participants
Free$02,000/month4
Starter$6.99/month2,000/month4
Business$59.99/monthCustom50
EnterpriseCustomCustomCustom

After included minutes: $0.004/participant-minute.

Simplest Possible Integration

<!-- The simplest video embed imaginable -->
<iframe
  src="https://whereby.com/my-room?embed&floatSelf"
  allow="camera; microphone; fullscreen; speaker; display-capture"
  style="height: 100vh; width: 100%;"
></iframe>

Whereby React Component

import { useRef, useEffect } from "react";

function VideoRoom({ roomUrl }) {
  const wherebyRef = useRef(null);

  useEffect(() => {
    if (!wherebyRef.current) return;

    const elm = wherebyRef.current;
    elm.setAttribute("room", roomUrl);
    elm.setAttribute("display-name", "Patient");
    elm.setAttribute("floating-self-view", "on");
  }, [roomUrl]);

  return (
    <whereby-embed
      ref={wherebyRef}
      style={{ width: "100%", height: "600px" }}
    />
  );
}

Create Rooms via API

import requests

response = requests.post(
    "https://api.whereby.dev/v1/meetings",
    headers={
        "Authorization": f"Bearer {WHEREBY_API_KEY}",
        "Content-Type": "application/json",
    },
    json={
        "endDate": "2026-03-08T23:59:59Z",
        "fields": ["hostRoomUrl"],
        "roomNamePrefix": "dr-smith-clinic",
        "roomMode": "normal",  # or "group"
    },
)

meeting = response.json()
print(f"Room URL: {meeting['roomUrl']}")
print(f"Host URL: {meeting['hostRoomUrl']}")  # Host gets special controls

HIPAA Compliance

Whereby is HIPAA-eligible on Business and Enterprise plans, making it a natural fit for telehealth applications that need video without managing WebRTC infrastructure.

When to Choose Whereby

Telehealth platforms, educational applications, teams that want video without WebRTC complexity, non-technical teams deploying video into HTML pages, or any use case where <iframe> embedding is sufficient.

Platform Comparison

FeatureDailyAgoraWhereby
Free minutes10K/month10K/month2K/month
Video pricing$0.004/min$0.009/min (N. America)$0.004/min
HIPAA compliantYesWith BAAYes (Business+)
Embedding simplicityMedium (SDK)Medium (SDK)Very easy (iframe)
UI controlFullFullLimited
RecordingYesYesYes
Interactive streamingLimitedYes (core feature)No
Asia-Pacific optimizationGoodBestGood
Screen sharingYesYesYes
Twilio Video migrationBest documentedGoodLimited

Decision Framework

ScenarioRecommended
Telehealth (HIPAA)Daily or Whereby
Asia-Pacific primary marketAgora
Simplest possible embedWhereby
Full UI control via SDKDaily or Agora
Interactive live streamingAgora
Migrating from Twilio VideoDaily
< 2K minutes/monthWhereby (free)
Social/gaming low-latencyAgora

Verdict

Daily is the right default for most video calling applications in 2026. The transparent $0.004/participant-minute pricing, 10K free minutes, comprehensive React SDK, and HIPAA compliance make it the best starting point for both telehealth and general video applications. The migration documentation from Twilio Video is also the most complete in the market.

Agora wins when Asia-Pacific latency is the primary constraint or when you need interactive live streaming at scale. The regional network advantage in Asia is measurable and significant for user experience.

Whereby is right when simplicity trumps flexibility. An <iframe> integration that works in 15 minutes with no media server knowledge required is genuinely valuable for teams that want video calling without becoming WebRTC experts.


Compare video calling API pricing, documentation, and integration guides at APIScout — find the right video platform for your application.

Comments