Skip to main content

Quickstart

This guide walks you through registering a tenant, minting a token, creating a room, and joining it — from zero to a working audio call.

Prerequisites

  • The platform running locally (make up) or a hosted deployment
  • Node.js 18+ (for the SDK)
  • An API key (obtained via tenant registration)

1. Register and Obtain an API Key

# Register a new tenant
curl -s -X POST http://localhost:8080/v1/auth/register \
-H 'Content-Type: application/json' \
-d '{
"email": "admin@example.com",
"password": "securepassword",
"tenant_name": "My App"
}'

The response includes your api_key. Save it — this authenticates your server-side SDK.

2. Install the Server SDK

npm install @comm-baas/server-sdk

3. Mint a Token for an End User

import { CommBaasServer } from '@comm-baas/server-sdk';

const server = new CommBaasServer({
apiKey: process.env.COMM_BAAS_API_KEY!,
baseUrl: 'http://localhost:8080',
});

// Mint a short-lived JWT for an end user
const { access_token } = await server.auth.mintToken({
user_id: 'usr_001',
display_name: 'Alice',
});

console.log('Token:', access_token);

4. Create a Room

const room = await server.rooms.create({
display_name: 'Team Standup',
max_participants: 10,
});

console.log('Room ID:', room.id);

5. Join the Room from the Browser

Install the client SDK:

npm install @comm-baas/client-sdk livekit-client

Connect and join:

import { CommBaasClient, SignalingConnection } from '@comm-baas/client-sdk';

const client = new CommBaasClient({
baseUrl: 'http://localhost:8080/v1',
token: accessToken, // JWT from step 3
});

// Join via REST
const http = client.getHttpClient();
const join = await http.post(`/rooms/${roomId}/join`);

// Connect signaling WebSocket
const signaling = new SignalingConnection(
join.signal_url,
join.signal_ticket,
);

signaling.on('hello', (msg) => {
console.log('Connected! Session:', msg.session_id);
});

signaling.on('roster_snapshot', (msg) => {
console.log('Participants:', msg.participants);
});

signaling.connect();

6. Use React Hooks (Optional)

For React applications, use the @comm-baas/react package:

npm install @comm-baas/react @comm-baas/client-sdk livekit-client
import {
CommBaasProvider,
RoomProvider,
useParticipants,
useLocalMic,
AudioRenderer,
} from '@comm-baas/react';

function App() {
return (
<CommBaasProvider
baseUrl="http://localhost:8080/v1"
token={async () => { /* fetch token from your backend */ }}
>
<RoomProvider roomId="room_abc">
<Room />
</RoomProvider>
</CommBaasProvider>
);
}

function Room() {
const participants = useParticipants();
const { isMuted, toggle } = useLocalMic();

return (
<div>
<h2>Participants ({participants.length})</h2>
<ul>
{participants.map((p) => (
<li key={p.user_id}>{p.display_name}</li>
))}
</ul>
<button onClick={toggle}>
{isMuted ? 'Unmute' : 'Mute'}
</button>
<AudioRenderer />
</div>
);
}

Next Steps