media server logo
Toggle documentation navigation
Callaba home

Video calls

Use Video calls to create browser-based WebRTC rooms for remote guests, panels, webinars, and audio calls. Control participant permissions and issue secure join tokens.

What it doesCreate a browser video room

Choose this whenRemote guests need a browser WebRTC room and secure participant join tokens.

Use another module whenUse RTMP or SRT Servers for encoder contribution; use another module for recording or NDI output.

1Create a room2Issue a join token3Join from the browser
POST /api/conferences/create
11 endpoints

Before you start

Use x-access-token for room configuration and lifecycle methods. Keep these calls in your backend. The browser join flow uses the room lookup and participant token returned by the documented join helpers.

What you can do

  • create, update, getAll, getCount, and getById manage rooms.
  • start and stop control room availability.
  • findLKRoomNameById resolves the active room name and supported room flags.
  • createToken issues a participant join token.
  • updateGlobalConfiguration changes instance-wide WebSocket and TURN connectivity.
  • remove deletes a room.

Example workflow

  1. Create a room with media type, participant limit, webinar, chat, screen-share, and recording settings.
  2. Start the room before contributors arrive.
  3. Resolve the active room name with findLKRoomNameById.
  4. Issue a participant token close to join time.
  5. Join from the browser with the resolved room name and token.

Common use cases

  • Bring a remote interview guest into a live production.
  • Run a webinar with restricted audience behavior.
  • Create a low-bandwidth audio briefing room for field teams.

Limits and troubleshooting

Do not expose room-control tokens in browser code. Issue participant tokens only to authorized users and near the intended join time. TURN, secure WebSocket, firewall, browser permissions, and participant capacity can all affect joining.

Next steps

Use the room or an individual participant as input to an NDI adapter, Recording, or another supported output workflow.

REST solution recipe

Provision a browser video room and participant token

Create and start the managed room, then issue a participant token for the public join flow without exposing the management API token.

  1. Create the roomSet the room identity, participant policy, media options, and initial state.POST /api/conferences/create
  2. Start the roomStart the managed room before sending join credentials to a participant.POST /api/conferences/start
  3. Issue a participant tokenCreate the browser join token from a trusted application service.POST /api/conferences-public/createToken

Keep the management token on a trusted backend. Issue participant tokens with the minimum room identity and permissions required by the viewer or guest.

See the video conferencing product
POST
/api/conferences/create
API token required

Create a new managed video call room in Callaba Engine.

This method provisions the room object that the browser join flow depends on. The payload focuses on room policy rather than transport details: media mode, participant capacity, webinar restrictions, chat, screen sharing, recording behavior, and whether the room should be active right after creation.

Examples by preset are especially useful here because most real rooms fall into a few recognizable patterns: standard team rooms, webinar-style rooms, audio-only rooms, and recorded rooms for speaker-focused output.

Common use cases

  • Create a stable browser room for speakers and guests.
  • Prepare a webinar room before the event starts.
  • Define a recorded room with the required composite layout.
Standard team room

Use this when a small or medium team should join with full audio and video, chat, and screen sharing enabled.

Standard team room
Copy code
curl --request POST \
--url http://localhost/api/conferences/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"name": "Team standup room",
"mediaType": "MEDIA_TYPE_VIDEO_AUDIO",
"max_participants": 20,
"allow_webinar_mode": false,
"allow_chat": true,
"allow_share_screen": true,
"record": false,
"record_mode": "ROOM_COMPOSITE_GRID",
"active": true
}'
Webinar-ready room

Use this when the room should support guest or view-only behavior and keep speaker privileges more controlled.

Webinar-ready room
Copy code
curl --request POST \
--url http://localhost/api/conferences/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"name": "Guest webinar room",
"mediaType": "MEDIA_TYPE_VIDEO_AUDIO",
"max_participants": 200,
"allow_webinar_mode": true,
"allow_chat": true,
"allow_share_screen": false,
"record": false,
"record_mode": "ROOM_COMPOSITE_GRID",
"active": true
}'
Audio-only room

Use this when the meeting should behave more like an audio briefing or lightweight discussion space.

Audio-only room
Copy code
curl --request POST \
--url http://localhost/api/conferences/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"name": "Audio briefing room",
"mediaType": "MEDIA_TYPE_AUDIO_ONLY",
"max_participants": 50,
"allow_webinar_mode": false,
"allow_chat": true,
"allow_share_screen": false,
"record": false,
"record_mode": "ROOM_COMPOSITE_GRID",
"active": true
}'
Recorded speaker room

Use this when the room should later feed a composite output workflow and recording is part of the room policy.

Recorded speaker room
Copy code
curl --request POST \
--url http://localhost/api/conferences/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"name": "Recorded speaker room",
"mediaType": "MEDIA_TYPE_VIDEO_AUDIO",
"max_participants": 50,
"allow_webinar_mode": true,
"allow_chat": true,
"allow_share_screen": true,
"record": true,
"record_mode": "ROOM_COMPOSITE_SPEAKER",
"active": true
}'
Request body parameters
Identity
name
string
Copy direct link

Dashboard label: Room Name.

Human-readable room name. The dashboard validates this field and shows the same character guidance used elsewhere in the product: A-Z, a-z, 0-9, and -.

Media and access
mediaType
string
Copy direct link

Dashboard label: Media type.

Supported room modes are MEDIA_TYPE_VIDEO_AUDIO, MEDIA_TYPE_VIDEO_ONLY, and MEDIA_TYPE_AUDIO_ONLY.

max_participants
integer
Copy direct link

Dashboard label: Max participants.

Maximum number of participants allowed to join the meeting simultaneously.

allow_webinar_mode
boolean
Copy direct link

Controls whether the room should support webinar-style guest behavior in addition to the speaker path.

allow_chat
boolean
Copy direct link

Controls whether chat should remain available in the browser room experience.

allow_share_screen
boolean
Copy direct link

Controls whether speakers should be allowed to share their screen inside the room.

Recording
record
boolean
Copy direct link

Controls whether the room should be treated as record-enabled.

record_mode
string
Copy direct link

Composite recording mode for the room. Real product values include ROOM_COMPOSITE_GRID, ROOM_COMPOSITE_AND_CHAT, and ROOM_COMPOSITE_SPEAKER.

Runtime
active
boolean
Copy direct link

Dashboard label: Enabled.

Controls whether the room should be active right after provisioning.

Create video call
Copy code
curl --request POST \
--url http://localhost/api/conferences/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"name": "Main stage room",
"mediaType": "MEDIA_TYPE_VIDEO_AUDIO",
"max_participants": 50,
"allow_webinar_mode": true,
"allow_chat": true,
"allow_share_screen": true,
"record": false,
"record_mode": "ROOM_COMPOSITE_GRID",
"active": true
}'
Response
Identity
_id
string
Copy direct link

Resource id returned when you create or list the video-call room.

id
string
Copy direct link

Convenience alias for _id.

name / user_id
mixed
Copy direct link

Stored room name and owning user id.

Media and access
mediaType / max_participants
mixed
Copy direct link

Media mode and participant limit stored on the room object.

allow_webinar_mode / allow_chat / allow_share_screen
mixed
Copy direct link

Room-level participant experience flags returned with the room object.

Recording
record / record_mode
mixed
Copy direct link

Recording intent and composite mode stored for the room.

Runtime
sid / active / created / modified
mixed
Copy direct link

Room state and timestamps included in the response.

Operation result
success
boolean
Copy direct link

Successful responses include success: true.

Response: Create video call
JSON
Copy code
{
"_id": "69f013c1aa11bb22cc33dd44",
"id": "69f013c1aa11bb22cc33dd44",
"name": "Main stage room",
"user_id": "69360341db559495f643de6a",
"mediaType": "MEDIA_TYPE_VIDEO_AUDIO",
"allow_webinar_mode": true,
"allow_chat": true,
"allow_share_screen": true,
"record": false,
"record_mode": "ROOM_COMPOSITE_GRID",
"max_participants": 50,
"sid": "RM_x7h6k4example",
"active": true,
"created": "2026-03-24T16:00:00.000Z",
"modified": "2026-03-24T16:00:00.000Z",
"success": true
}
POST
/api/conferences/getCount
API token required
POST
/api/conferences/getAll
API token required
POST
/api/conferences/getById
API token required
POST
/api/conferences/update
API token required
POST
/api/conferences/updateGlobalConfiguration
API token required
POST
/api/conferences/start
API token required
POST
/api/conferences/stop
API token required
DELETE
/api/conferences/remove
API token required
POST
/api/conferences-public/findLKRoomNameById
Public endpoint
POST
/api/conferences-public/createToken
Public endpoint