Skip to content

HTTP API Overview

Monibuca V6 provides APIs through a built-in shared HTTP server. All plugin HTTP endpoints are registered on the same server and differentiated by route prefixes.

The default listening address is :8080, which can be changed via configuration:

http:
listen: ":8080"
cors: true

All APIs are organized by functional modules with different route prefixes:

PrefixModuleDescription
/api/Engine CoreStream management, system info, plugin management
/config/ConfigurationConfig read/write, schema query, hot reload
PrefixPluginDescription
/rtmp/RTMPRTMP connection management
/rtsp/RTSPRTSP session management
/flv/HTTP-FLVFLV streaming endpoint
/hls/HLSHLS playlist and segments
/webrtc/WebRTCWHIP/WHEP signaling endpoint
/srt/SRTSRT connection management
/webtransport/WebTransportWebTransport sessions
/gb28181/GB28181Device management and control
PrefixPluginDescription
/mp4/MP4 RecordingRecording control and VOD
/snap/Snapshot ServiceSnapshots and MJPEG
/transcode/api/Audio TranscodingTranscoding task management
/cluster/ClusterCluster status and node management
PrefixService/PluginDescription
/room/Room ServiceRoom management
/room_report/Room ReportingRoom statistics data
/live/Live PluginLive room management
/meeting/api/Meeting PluginMeeting room REST (rooms, reservations, templates, …)

This section documents the Meeting plugin HTTP API and is kept in sync with section 14.2 Meeting in the repository root docs/http-api.md. When routes change, update both places so this page and the repo-side doc stay aligned.

Like other plugins, Meeting REST is mounted under {plugin}/api, i.e. /meeting/api. After the engine registers the meeting/api prefix, the handler sees sub-paths such as /rooms, /reservations, etc. (same pattern as gb28181/api, /users/api, …).

PrefixPurposeHandler
/meeting/apiMeeting room RESTMeetingApiHandler
MethodPathDescription
GET/meeting/api/roomsList meeting rooms
POST/meeting/api/roomsCreate room (JSON body: room_id)
GET/meeting/api/rooms/{room_id}Room summary; legacy alias GET /meeting/api/room/{room_id}
DELETE/meeting/api/rooms/{room_id}Delete room
GET/meeting/api/rooms/{room_id}/usersUsers in room
POST/meeting/api/rooms/{room_id}/lockLock room
POST/meeting/api/rooms/{room_id}/unlockUnlock room
POST/meeting/api/control/muteChat mute (JSON: room_id, user_id)
POST/meeting/api/control/unmuteRemove chat mute
POST/meeting/api/control/kickRemove user from room
GET/meeting/api/statsMeeting statistics
GET/meeting/api/featuresRegistered feature metadata
GET/meeting/api/reservationsList reservations
POST/meeting/api/reservationsCreate reservation
GET/meeting/api/templatesList templates
POST/meeting/api/templatesCreate template
PUT/meeting/api/templates/{id}Update template
DELETE/meeting/api/templates/{id}Delete template
GET/meeting/api/recordingsRecording catalog (may be empty until persistence is wired)
GET/meeting/api/recordings/{id}/playPlay URL (404 if not found)
GET/meeting/api/recordings/{id}/downloadDownload
DELETE/meeting/api/recordings/{id}Delete recording

Note: Agenda, transcription, and in-session control are primarily WebSocket (/room/{room_id}?type=meeting). Do not use the legacy /room/meeting/... prefix for Meeting REST. For concepts and signaling, see the Meeting Room plugin page.

  • Content-Type: application/json (for POST/PUT requests)
  • Character encoding: UTF-8
  • URL encoding: Special characters in paths use standard URL encoding

Most APIs return a unified JSON structure:

{
"code": 0,
"message": "success",
"data": { ... }
}
FieldTypeDescription
codeintStatus code, 0 indicates success
messagestringStatus description
dataobjectResponse data (optional)
Status CodeDescription
200Request successful
400Invalid request parameters
401Unauthorized (authentication required)
403Forbidden
404Resource not found
500Internal server error
501Not implemented
503Service unavailable

Monibuca V6 supports API authentication via JWT (JSON Web Token).

auth:
enabled: true
secret: "your-jwt-secret-key"
expire: 86400 # Token validity period (seconds)
exclude: # Paths exempt from authentication
- "/api/login"
- "/flv/"
- "/hls/"
POST /api/login
Content-Type: application/json
{
"username": "admin",
"password": "password"
}

Response:

{
"code": 0,
"token": "eyJhbGciOiJIUzI1NiIs..."
}

Include the token in subsequent request headers:

GET /api/streams
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...

Generates v5-compatible stream auth signatures (secret + expire):

GET /api/secret/{publish|subscribe}/{streamPath...}?expire=<hex>&plugin=<pluginName>
  • type: publish or subscribe
  • streamPath: stream path (URL-encoded supported)
  • expire: optional hex Unix timestamp; defaults to now + 30 minutes
  • plugin: optional plugin name; default global

Response example:

{
"code": 0,
"message": "success",
"data": {
"type": "publish",
"plugin": "rtmp",
"streamPath": "live/test",
"expire": "6610f4a0",
"secret": "0123456789abcdef0123456789abcdef"
}
}

CORS is enabled by default, allowing cross-origin access. It can be configured:

http:
cors: true
cors_origins:
- "http://localhost:3000"
- "https://your-domain.com"