Kardolive Integration Guide
Everything you need to wire chat, live streaming, conferencing, and 1:1 voice/video calls from your backend (or any other app) into the Kardolive platform.
30-second mental model: your server signs a short-lived JWT for each end-user using a
kl_live_* API key. your client opens a WebSocket to Kardolive
(chat or SFU) with that JWT. Real-time traffic flows directly between the
end-user and Kardolive — your backend stays out of the hot path.
Pick your starting point
1 · Auth & tokens
Sign up, mint an API key, exchange it for end-user JWTs. Start here every time.
2a · React quickstart
Drop-in hooks + components for chat, video, and rooms.
2b · Web / vanilla JS
For the web SDK or any framework. Includes 6 KB drop-in widget.
Chat
DMs, group chat, polls, reactions, typing, mentions, file uploads.
Live stream
Broadcast from browser/OBS, watch via HLS/WHEP, embed.
Conference
Multi-party meetings with hand-raise, breakouts, recording.
Calls (1:1)
Voice + video calls with ringing, push notifications.
Webhooks
Get server-side events to mirror state, trigger pushes, audit.
API reference
Every endpoint, WS command, and webhook event.
What you'll integrate
| Surface | SDK call | Underlying transport | Typical latency |
|---|---|---|---|
| Chat (DMs, groups, public) | kl.channels.* | WebSocket wss://chat.kardocloud.com | <100 ms |
| Live stream (broadcast) | kl.streams.* | RTMP in, HLS+WHEP out | 2 s (WHEP) · 5–12 s (HLS) |
| Live stream (interactive) | kl.sessions.create({type:'livestream'}) | WebRTC SFU | <300 ms |
| Conference | kl.sessions.create({type:'conference'}) | WebRTC SFU | <300 ms |
| 1:1 calls | kl.calls.invite(...) | WebRTC SFU + APNs/FCM push | <300 ms |
Three integration levels — pick one or mix
| Level | Effort | Customization | Best for |
|---|---|---|---|
| Drop-in widget | 1 line of HTML | CSS theming only | Quick demos, marketing pages, "we need chat tomorrow" |
| React/JS SDK | ~50 lines | Full UI control, drop-in components or headless | Most your app's screens — recommended path |
| Raw API + WS protocol | Days | Total — write your own client | Native iOS/Android, exotic stacks, embedded devices |
Key conventions you'll see throughout
- tenantId — your tenant on Kardolive. One per company.
- projectId — feature-toggled scope. your app likely uses one project per environment (dev / staging / prod).
- apiKey (
kl_live_*) — server-only secret. Never ship to the client. - userId — opaque end-user identifier. Use your user ID. Kardolive doesn't know who that user is — just that they're "user_42" in your system.
- channelId / sessionId / streamId — opaque IDs Kardolive mints when you create the resource. Pass them to the client to scope JWTs.
- JWT — short-lived user token (1h). Browser/mobile clients connect with these, never with the API key.
Where to next
If you're new: Auth & tokens →
If you know the auth model: React quickstart → or
Chat → for the most common path.