Meet API 🟡 BETA

Video conferencing, webinars, voice channels, and collaborative whiteboard management


Base URL

/api/meet

Authentication

All endpoints require a valid session token via Authorization: Bearer <token> header.


Endpoints

Create Room

POST /api/meet/create

Creates a new video conference room.

ParameterTypeRequiredDescription
namestringNoRoom display name
max_participantsintegerNoMaximum allowed participants (default: 50)
recording_enabledbooleanNoEnable automatic recording
transcription_enabledbooleanNoEnable live transcription
scheduled_atstringISO 8601Schedule room for future time
metadataobjectNoCustom key-value pairs

Response:

{
  "id": "room_abc123",
  "name": "Weekly Standup",
  "url": "https://meet.example.com/room_abc123",
  "created_at": "2026-06-04T10:00:00Z",
  "participants": [],
  "status": "active",
  "recording_enabled": false,
  "transcription_enabled": false,
  "metadata": {}
}

List Rooms

GET /api/meet/rooms

Returns all rooms accessible to the authenticated user.

ParameterTypeRequiredDescription
statusstringNoFilter by status: active, scheduled, ended
pageintegerNoPage number (default: 1)
limitintegerNoResults per page (default: 20, max: 100)

Response:

{
  "rooms": [
    {
      "id": "room_abc123",
      "name": "Weekly Standup",
      "status": "active",
      "participants_count": 5,
      "created_at": "2026-06-04T10:00:00Z"
    }
  ],
  "total": 42,
  "page": 1,
  "limit": 20
}

Get Room Details

GET /api/meet/rooms/:id

Returns full details of a specific room.

ParameterTypeRequiredDescription
idstringYesRoom identifier

Response:

{
  "id": "room_abc123",
  "name": "Weekly Standup",
  "url": "https://meet.example.com/room_abc123",
  "status": "active",
  "created_at": "2026-06-04T10:00:00Z",
  "scheduled_at": null,
  "recording_enabled": true,
  "transcription_enabled": true,
  "participants": [
    {
      "id": "user_001",
      "name": "João Silva",
      "joined_at": "2026-06-04T10:01:00Z",
      "is_muted": false
    }
  ],
  "metadata": {
    "project": "GeneralBots"
  }
}

Join Room

POST /api/meet/rooms/:id/join

Joins an active room and returns connection credentials.

ParameterTypeRequiredDescription
idstringYesRoom identifier
display_namestringNoName shown to other participants

Response:

{
  "room_id": "room_abc123",
  "token": "livekit_token_xyz",
  "url": "wss://livekit.example.com",
  "participant_id": "part_005",
  "ice_servers": [
    {
      "urls": ["stun:stun.example.com:3478"],
      "username": "",
      "credential": ""
    }
  ]
}

Room Transcription

POST /api/meet/rooms/:id/transcription

Manages live transcription for a room.

ParameterTypeRequiredDescription
idstringYesRoom identifier
actionstringYesstart or stop
languagestringNoTranscription language code (default: pt-BR)

Response:

{
  "room_id": "room_abc123",
  "transcription_active": true,
  "language": "pt-BR",
  "stream_url": "wss://transcribe.example.com/room_abc123"
}

Generate Token

POST /api/meet/token

Generates an authentication token for room access.

ParameterTypeRequiredDescription
room_idstringYesRoom identifier
identitystringYesParticipant identity
ttlintegerNoToken TTL in seconds (default: 86400)
rolestringNohost or participant (default: participant)

Response:

{
  "token": "eyJhbGciOiJIUzI1NiIs...",
  "expires_at": "2026-06-05T10:00:00Z"
}

Send Invitation

POST /api/meet/invite

Sends an email or system invitation to join a room.

ParameterTypeRequiredDescription
room_idstringYesRoom identifier
recipientsstring[]YesList of email addresses or user IDs
messagestringNoCustom invitation message
scheduled_atstringISO 8601Schedule invitation delivery

Response:

{
  "invitations_sent": 3,
  "recipients": ["user1@example.com", "user2@example.com"],
  "room_url": "https://meet.example.com/room_abc123"
}

WebSocket Connection

GET /api/meet/ws

Establishes a WebSocket connection for real-time room events and signaling.

ParameterTypeRequiredDescription
room_idqueryYesRoom to connect to
tokenqueryYesAuthentication token

WebSocket Messages (Server → Client):

{
  "event": "participant_joined",
  "data": {
    "participant_id": "part_005",
    "name": "João Silva"
  }
}
{
  "event": "room_ended",
  "data": {
    "room_id": "room_abc123",
    "reason": "host_ended"
  }
}

Turn Credentials

GET /api/meet/turn-credentials

Returns TURN/STUN server credentials for NAT traversal.

Response:

{
  "ice_servers": [
    {
      "urls": ["stun:stun.example.com:3478"]
    },
    {
      "urls": ["turn:turn.example.com:3478"],
      "username": "user_001",
      "credential": "temporary_secret",
      "ttl": 86400
    }
  ]
}

Schedule Meeting

POST /api/meet/schedule

Schedules a meeting for a future time.

ParameterTypeRequiredDescription
namestringYesMeeting title
scheduled_atstringYesISO 8601 datetime
duration_minutesintegerNoExpected duration
recurrencestringNodaily, weekly, monthly, none
recurrence_endstringISO 8601Recurrence end date
participantsstring[]NoList of user IDs to invite
agendastringNoMeeting agenda text

Response:

{
  "id": "room_sch_001",
  "name": "Project Review",
  "scheduled_at": "2026-06-10T14:00:00Z",
  "duration_minutes": 60,
  "recurrence": "weekly",
  "recurrence_end": "2026-07-10T14:00:00Z",
  "participants": ["user_001", "user_002"],
  "calendar_links": {
    "google": "https://calendar.google.com/calendar/event?...",
    "outlook": "https://outlook.live.com/calendar/0/deeplink/compose?..."
  }
}

Dashboard Statistics

GET /api/meet/dashboard/stats

Returns aggregated meeting analytics.

ParameterTypeRequiredDescription
periodstringNoday, week, month (default: week)
start_datestringISO 8601Custom period start
end_datestringISO 8601Custom period end

Response:

{
  "total_meetings": 142,
  "total_duration_minutes": 8520,
  "average_participants": 6.3,
  "total_participants": 895,
  "peak_hour": "14:00",
  "busiest_day": "Tuesday",
  "top_hosts": [
    {
      "user_id": "user_001",
      "name": "João Silva",
      "meetings_hosted": 28
    }
  ]
}

Leave Room

POST /api/meet/rooms/:id/leave

Removes a participant from a room or ends the room if host.

ParameterTypeRequiredDescription
idstringYesRoom identifier
participant_idstringNoSpecific participant to remove (host only)
end_roombooleanNoEnd room for all participants (host only)

Response:

{
  "room_id": "room_abc123",
  "action": "left",
  "remaining_participants": 4
}

Voice Channel API

Start Voice

POST /api/voice/start

Starts a voice-only channel for audio conferencing.

ParameterTypeRequiredDescription
namestringNoChannel name
max_callersintegerNoMaximum callers (default: 20)
recordingbooleanNoRecord the voice session

Response:

{
  "channel_id": "voice_001",
  "dial_in_number": "+5511999999999",
  "pin": "1234",
  "created_at": "2026-06-04T10:00:00Z"
}

Stop Voice

POST /api/voice/stop

Terminates an active voice channel.

ParameterTypeRequiredDescription
channel_idstringYesVoice channel identifier

Response:

{
  "channel_id": "voice_001",
  "status": "terminated",
  "duration_seconds": 3600,
  "recording_url": "https://storage.example.com/recordings/voice_001.wav"
}

Webinar API

Create Webinar

POST /api/webinar/

Creates a new webinar session.

ParameterTypeRequiredDescription
titlestringYesWebinar title
descriptionstringNoWebinar description
scheduled_atstringYesISO 8601 start time
duration_minutesintegerYesExpected duration
max_attendeesintegerNoMaximum attendees (default: 100)
registration_requiredbooleanNoRequire registration (default: true)
recording_enabledbooleanNoRecord webinar
panelistsstring[]NoList of panelist user IDs

Response:

{
  "id": "webinar_001",
  "title": "Product Launch 2026",
  "description": "New features overview",
  "scheduled_at": "2026-06-15T10:00:00Z",
  "duration_minutes": 90,
  "max_attendees": 100,
  "status": "scheduled",
  "registration_url": "https://meet.example.com/webinar/001/register",
  "share_url": "https://meet.example.com/webinar/001/live"
}

Get Webinar

GET /api/webinar/:id

Returns webinar details.

ParameterTypeRequiredDescription
idstringYesWebinar identifier

Response:

{
  "id": "webinar_001",
  "title": "Product Launch 2026",
  "status": "scheduled",
  "registered_count": 67,
  "panelists": ["user_001", "user_002"],
  "stream_url": null,
  "recording_url": null
}

Start Webinar

POST /api/webinar/:id/start

Starts the live broadcast for a webinar.

ParameterTypeRequiredDescription
idstringYesWebinar identifier

Response:

{
  "id": "webinar_001",
  "status": "live",
  "stream_started_at": "2026-06-15T10:00:05Z",
  "stream_url": "https://live.example.com/webinar_001",
  "panelist_room_url": "https://meet.example.com/room_webinar_panel"
}

End Webinar

POST /api/webinar/:id/end

Ends the live broadcast and optionally processes recording.

ParameterTypeRequiredDescription
idstringYesWebinar identifier

Response:

{
  "id": "webinar_001",
  "status": "ended",
  "duration_seconds": 5400,
  "recording_url": "https://storage.example.com/recordings/webinar_001.mp4",
  "attendees_total": 89,
  "peak_concurrent": 72
}

Register for Webinar

POST /api/webinar/:id/register

Registers an attendee for a webinar.

ParameterTypeRequiredDescription
idstringYesWebinar identifier
emailstringYesAttendee email
namestringYesAttendee name
companystringNoCompany name

Response:

{
  "registration_id": "reg_001",
  "webinar_id": "webinar_001",
  "email": "joao@example.com",
  "status": "confirmed",
  "join_url": "https://meet.example.com/webinar/001/join?token=abc"
}

Join Webinar

POST /api/webinar/:id/join

Joins a live webinar as attendee or panelist.

ParameterTypeRequiredDescription
idstringYesWebinar identifier
rolestringNoattendee or panelist (default: attendee)

Response:

{
  "webinar_id": "webinar_001",
  "token": "livekit_token_xyz",
  "url": "wss://livekit.example.com",
  "role": "attendee",
  "features": {
    "can_speak": false,
    "can_share_screen": false,
    "can_chat": true
  }
}

Whiteboard API

Whiteboard WebSocket

GET /whiteboard/:id/ws

Establishes a WebSocket connection for collaborative whiteboard real-time synchronization.

ParameterTypeRequiredDescription
idpathYesWhiteboard identifier
tokenqueryYesAuthentication token

WebSocket Messages:

{
  "event": "draw",
  "data": {
    "user_id": "user_001",
    "shape": {
      "type": "rectangle",
      "x": 100,
      "y": 200,
      "width": 150,
      "height": 80,
      "color": "#3B82F6"
    }
  }
}
{
  "event": "cursor",
  "data": {
    "user_id": "user_001",
    "x": 300,
    "y": 450
  }
}

Create Whiteboard

GET /whiteboard/create/:conversation_id

Creates a new whiteboard session linked to a conversation.

ParameterTypeRequiredDescription
conversation_idpathYesConversation identifier to link

Response:

{
  "whiteboard_id": "wb_001",
  "conversation_id": "conv_abc123",
  "created_at": "2026-06-04T10:00:00Z",
  "url": "https://meet.example.com/whiteboard/wb_001",
  "share_url": "https://meet.example.com/whiteboard/wb_001?share=true"
}

Room Join & Controls (HTMX)

POST /api/meet/join        # form { user_name, meeting_code, join_video, join_audio } -> room fragment
POST /api/meet/mute-all    # form { room_id }
POST /api/voice/toggle     # toggle local microphone state

See Also