Secure HD video meetings with screen sharing, host controls, guest links, and scheduling — all on Troobo's own LiveKit infrastructure. Plus a clean developer API to build meetings into your own product.
From a quick 1-tap call to a scheduled team standup, Troobo Meet handles the media so you can focus on the conversation.
Adaptive, low-latency streams powered by a self-hosted LiveKit SFU — smooth even on shaky networks.
Present a tab, window, or full screen in a click. Host controls keep the room focused.
Mute or remove participants, lock the room, and promote co-hosts — enforced server-side, not client-trusted.
Share a clean /meet/abc-defg-hij link. Guests join in the browser — no account, no install.
Create instant or scheduled meetings, invite teammates, and see what's coming up next.
Tenants, scheduling, join tokens, participants, and stats — build Troobo Meet into your own apps.
A REST API to create workspaces, schedule and run meetings, mint join tokens, and pull stats. JSON in, JSON out.
Base URL https://troobo.com/api
Auth Bearer JWT in the Authorization header — Authorization: Bearer <access_token>. Obtain tokens via POST /api/auth/login. All errors return { "detail": "...", "code": "..." }.
A tenant is a Meet workspace — it owns meetings, carries plan limits, and holds a server-to-server API key.
{ "name": "Acme Inc", "plan": "PRO" } // plan: FREE | PRO | ENTERPRISE
{
"id": "4f1c…", "name": "Acme Inc", "slug": "t_9a3f1c",
"plan": "PRO", "api_key": "tk_…",
"max_participants": 300, "max_duration_minutes": 1440,
"created_at": "2026-06-19T…",
"meetings": { "total": 0, "live": 0, "scheduled": 0, "ended": 0 }
}
[ { "id": "4f1c…", "name": "Acme Inc", "plan": "PRO", … } ]{ "id": "4f1c…", "name": "Acme Inc", "plan": "PRO",
"max_participants": 300, "max_duration_minutes": 1440,
"meetings": { "total": 12, "live": 1, "scheduled": 3, "ended": 8 } }Create instant or scheduled meetings, list them, and fetch public join-screen info.
| Field | Type | Notes |
|---|---|---|
title | string | Optional meeting title. |
type | string | INSTANT (default) or SCHEDULED. |
scheduled_start | ISO 8601 | Required for SCHEDULED. |
scheduled_end | ISO 8601 | Optional. |
passcode | string | Optional room passcode. |
guests_allowed | bool | Allow guest (no-account) joins. Default true. |
invitee_ids | uuid[] | Users to invite. |
tenant_id | uuid | Attach to one of your tenants. |
{ "id": "…", "meeting_code": "abc-defg-hij", "title": "Standup",
"type": "SCHEDULED", "status": "CREATED", "scheduled_start": "…",
"join_url": "/meet/abc-defg-hij", "tenant": "4f1c…" }
[ { "id": "…", "meeting_code": "abc-defg-hij", "status": "LIVE",
"join_url": "/meet/abc-defg-hij", … } ]{ "meeting_code": "abc-defg-hij", "title": "Standup", "status": "LIVE",
"is_locked": false, "guests_allowed": true, "passcode_required": false,
"host_name": "Aisha" }Get a LiveKit token to connect, then drive host actions over the same API.
{ "meeting_code": "abc-defg-hij", "passcode": "1234", "display_name": "Guest" }
{ "livekit_url": "wss://troobo.com/livekit", "token": "<jwt>",
"room": "troobo_…", "role": "HOST", "is_guest": false,
"meeting": { "code": "abc-defg-hij", "title": "Standup", "is_host": true } }
Connect a LiveKit client to livekit_url with token + room.
{ "meeting_code": "abc-defg-hij" }[ { "id": "…", "name": "Aisha", "role": "HOST", "is_active": true, "is_guest": false } ]{ "muted": true }// no content{ "is_locked": true, "title": "Standup (locked)" }{ "left": true }{ "status": "ENDED" }Aggregate meeting activity for dashboards — overall or scoped to one tenant.
{ "total_meetings": 12, "live": 1, "scheduled": 3, "ended": 8,
"hosted": 9, "attended": 14,
"upcoming": [ { "code": "abc-defg-hij", "title": "Standup",
"scheduled_start": "…", "join_url": "/meet/abc-defg-hij" } ] }