API Reference¶
The Meet backend exposes a REST API at /api/v1.0/. All endpoints use JSON.
Interactive API Explorer¶
When USE_SWAGGER=True is set on the backend, an interactive Swagger UI is available at /api/v1.0/swagger/. You can explore endpoints, send test requests, and view schemas directly from your browser.
Meet also exposes an External API at /external-api/v1.0/ for server-to-server room management, with two authentication modes:
- Application-Delegated (
EXTERNAL_API_ENABLED=True): your backend exchanges credentials for a JWT and acts on behalf of a user. - Resource Server (
OIDC_RS_*vars): the user authenticates with the OIDC provider and presents their token directly.
Authentication¶
Session authentication (browser)¶
Standard Django session authentication. Used by the frontend after OIDC login.
Bearer token (server-to-server)¶
Users¶
Get current user¶
Response:{
"id": "550e8400-...",
"email": "user@example.com",
"full_name": "Alice Martin",
"short_name": "Alice",
"timezone": "Europe/Paris",
"language": "en-us"
}
Update current user¶
Rooms¶
List rooms¶
Returns rooms the authenticated user is a member of.Create a room¶
access_level values: public, trusted, restricted.
Get a room¶
When the user has access, the response includes alivekit object with the JWT token and server URL the browser uses to connect to the media server:
{
"id": "...",
"name": "...",
"slug": "...",
"access_level": "public",
"configuration": {},
"livekit": {
"url": "https://livekit.example.com",
"room": "my-meeting-room",
"token": "<livekit-jwt>"
}
}
Update a room¶
Delete a room¶
Room Access & Roles¶
Room roles (owner, administrator, member) are stored as ResourceAccess records. All write operations require the caller to be an owner or administrator of the room.
Permission rules:
- Owners can assign any role, including owner.
- Administrators can assign member or administrator, but not owner.
- Only one owner may remain - the last owner record cannot be deleted or downgraded.
Note: Email invitations (
POST /api/v1.0/rooms/{id}/invite/) send a join link but do not create an access record. The recipient joins as a plain participant with no persistent role.
List room accesses¶
Returns accesses for rooms where the authenticated user is an owner or administrator.
Response:
[
{
"id": "a1b2c3...",
"resource": "550e8400-...",
"user": {"id": "...", "email": "alice@example.com", "full_name": "Alice"},
"role": "administrator"
}
]
Grant a role¶
role values: owner, administrator, member.
Response: HTTP 201 with the created access object.
Change a role¶
Revoke access¶
Returns HTTP 204. Fails with 403 if the record is the last owner.
Recording¶
Start recording¶
mode values: screen_recording, transcript. options is optional.
Response: HTTP 201 on success.
Stop recording¶
List recordings (for current user)¶
Delete a recording¶
Lobby / Waiting room¶
Request entry (attendee side)¶
List waiting participants (administrator side)¶
Admit or deny a participant¶
Participant management¶
Mute a participant¶
Remove a participant¶
Update participant metadata / permissions¶
Raise or lower hand¶
Rename (current participant)¶
Files (in-meeting file sharing)¶
Requires FILE_UPLOAD_ENABLED=True.
List files¶
Upload a file¶
Delete a file¶
Mark upload as complete¶
Internal webhooks¶
These endpoints are called by other services, not by the browser or external integrations.
LiveKit webhook receiver¶
Called by LiveKit when room/egress events occur (recording started/stopped, etc.).Storage event webhook¶
Called by ObjectStore when a recording file is uploaded.Frontend configuration¶
Returns feature flags and configuration for the frontend.
Health check¶
Returns HTTP 200 if the application is running.Pagination¶
List endpoints use page-number pagination:
Default page_size is 20, maximum is 100.
Error responses¶
All errors return a JSON body:
| Code | Meaning |
|---|---|
| 400 | Bad request: invalid input |
| 401 | Unauthorized: missing or invalid auth |
| 403 | Forbidden: lacking permission |
| 404 | Not found |
| 429 | Rate limited |
| 500 | Internal server error |
Rate limiting¶
The API applies per-user rate limiting on specific endpoints (room entry requests, etc.). Rate limit errors return HTTP 429 with a Retry-After header.