★ Featured

Troobo Meet
Meetings that just work.

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.

Why Troobo Meet

Everything you need to meet

From a quick 1-tap call to a scheduled team standup, Troobo Meet handles the media so you can focus on the conversation.

HD video & audio

Adaptive, low-latency streams powered by a self-hosted LiveKit SFU — smooth even on shaky networks.

Screen sharing

Present a tab, window, or full screen in a click. Host controls keep the room focused.

Host controls

Mute or remove participants, lock the room, and promote co-hosts — enforced server-side, not client-trusted.

Guest join links

Share a clean /meet/abc-defg-hij link. Guests join in the browser — no account, no install.

Scheduling

Create instant or scheduled meetings, invite teammates, and see what's coming up next.

Developer API

Tenants, scheduling, join tokens, participants, and stats — build Troobo Meet into your own apps.

⬡ Troobo Meet API — v1

Developer documentation

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": "..." }.

Tenants

A tenant is a Meet workspace — it owns meetings, carries plan limits, and holds a server-to-server API key.

POST/meet/tenantsCreate a tenant
Request
{ "name": "Acme Inc", "plan": "PRO" }   // plan: FREE | PRO | ENTERPRISE
Response 201
{
  "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 }
}
GET/meet/tenantsList my tenants
Response 200
[ { "id": "4f1c…", "name": "Acme Inc", "plan": "PRO", … } ]
GET/meet/tenants/{id}Get tenant details + meeting counts (owner only)
Response 200
{ "id": "4f1c…", "name": "Acme Inc", "plan": "PRO",
  "max_participants": 300, "max_duration_minutes": 1440,
  "meetings": { "total": 12, "live": 1, "scheduled": 3, "ended": 8 } }

Meetings

Create instant or scheduled meetings, list them, and fetch public join-screen info.

POST/meetingsCreate a meeting (instant or scheduled)
Request
FieldTypeNotes
titlestringOptional meeting title.
typestringINSTANT (default) or SCHEDULED.
scheduled_startISO 8601Required for SCHEDULED.
scheduled_endISO 8601Optional.
passcodestringOptional room passcode.
guests_allowedboolAllow guest (no-account) joins. Default true.
invitee_idsuuid[]Users to invite.
tenant_iduuidAttach to one of your tenants.
Response 201
{ "id": "…", "meeting_code": "abc-defg-hij", "title": "Standup",
  "type": "SCHEDULED", "status": "CREATED", "scheduled_start": "…",
  "join_url": "/meet/abc-defg-hij", "tenant": "4f1c…" }
GET/meetingsList my meetings (live & upcoming first)
Response 200
[ { "id": "…", "meeting_code": "abc-defg-hij", "status": "LIVE",
    "join_url": "/meet/abc-defg-hij", … } ]
GET/meetings/{code}Public join-screen info (no auth, no PII)
Response 200
{ "meeting_code": "abc-defg-hij", "title": "Standup", "status": "LIVE",
  "is_locked": false, "guests_allowed": true, "passcode_required": false,
  "host_name": "Aisha" }

Join & in-meeting

Get a LiveKit token to connect, then drive host actions over the same API.

POST/meetings/joinJoin — returns a LiveKit token (members & guests)
Request
{ "meeting_code": "abc-defg-hij", "passcode": "1234", "display_name": "Guest" }
Response 200
{ "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.

POST/meetings/token/refreshRefresh a member's LiveKit token
Request
{ "meeting_code": "abc-defg-hij" }
GET/meetings/{id}/participantsLive participants
Response 200
[ { "id": "…", "name": "Aisha", "role": "HOST", "is_active": true, "is_guest": false } ]
POST/meetings/{id}/participants/{pid}Mute a participant (host)
{ "muted": true }
DELETE/meetings/{id}/participants/{pid}Remove a participant (host)
Response 204
// no content
PATCH/meetings/{id}Lock / rename (host)
{ "is_locked": true, "title": "Standup (locked)" }
POST/meetings/{id}/leaveLeave my seat
{ "left": true }
POST/meetings/{id}/endEnd the meeting for everyone (host)
{ "status": "ENDED" }

Statistics

Aggregate meeting activity for dashboards — overall or scoped to one tenant.

GET/meet/stats?tenant={id}Meeting stats (tenant optional)
Response 200
{ "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" } ] }
Troobo Meet API v1 · Back to Troobo · Need a key? Sign in