LiquidCalling Embed SDK

The most private, embeddable voice calling modal in the world. Zero logs, true E2EE, HIPAA-compliant infrastructure.

Why LiquidCalling?

Basic Integration

Static Room (Same room always)

Perfect for: Office hours, team channels, community spaces

<div id="liquid-room"></div>
<script src="https://sdk.liquidcalling.com/sdk.js"></script>
<script>
  LiquidCalling.init({
    roomId: "support-office",  // Fixed ID - everyone joins same room
    apiKey: "your-api-key"
  });
</script>

Dynamic Room (Different room per session)

Perfect for: Games, support tickets, consultations, temporary meetings

<div id="liquid-room"></div>
<script src="https://sdk.liquidcalling.com/sdk.js"></script>
<script>
  // Get session ID from your app (URL param, database, state, etc.)
  const sessionId = new URLSearchParams(window.location.search).get('session');
  
  LiquidCalling.init({
    roomId: `session-${sessionId}`,  // Dynamic ID based on context
    apiKey: "your-api-key"
  });
</script>

Understanding roomId

The roomId determines which users can talk together. Think of it as a unique identifier for each conversation space.

Dynamic Rooms (Generated per session)

// Generate unique ID for each session
const sessionId = `room-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;

LiquidCalling.init({
  roomId: sessionId,  // e.g., "room-1732067890-k3j9x2"
  apiKey: "your-api-key"
});

Use cases: Multi-player games, temporary support sessions, one-time consultations

Static Rooms (Fixed identifier)

// Use a fixed room ID
LiquidCalling.init({
  roomId: "support-team-alpha",  // Same ID every time
  apiKey: "your-api-key"
});

Use cases: Persistent team channels, office hours, community spaces

Key principle: Same roomId = users join together. Different roomId = separate conversations.

SDK API Methods

// Control methods
LiquidCalling.joinCall()     // Programmatically join
LiquidCalling.leaveCall()    // Programmatically leave
LiquidCalling.mute()         // Mute microphone
LiquidCalling.unmute()       // Unmute microphone
LiquidCalling.endCall()      // End the call
LiquidCalling.setVolume(0.8) // Set volume (0-1)

// Event handlers
onReady: () => {},
onError: (error) => {},
onParticipantJoined: (data) => {},
onParticipantLeft: (data) => {},
onMuteChanged: (data) => {},
onCallEnded: () => {}

Live Demo

Try the demo here

Technical Details

Pricing

Simple per-minute billing to project owners only:

Get Started

Integration Support: We handle the first 30-50 customers personally

Ready to integrate? Contact us for your API key and we'll have you up and running in <10 minutes.

X: x.com/braunschweiler

Telegram: @braunschweiler

Design Resources

For additional modals, please see our Figma design file here: Figma Designs