Create a room, then mint one short-lived token per participant. A client presents that token to the signaling endpoint; it never calls these routes itself.
See Rooms & Participants for the SDK side.
Endpoints
| Method | Path | Credential |
|---|---|---|
| GET | /v1/projects/{projectId}/rooms | Dashboard session (JWT) |
| POST | /v1/projects/{projectId}/rooms | Dashboard session (JWT) |
| GET | /v1/projects/{projectId}/rooms/{roomId} | Dashboard session (JWT) |
| POST | /v1/projects/{projectId}/rooms/{roomId}/test-token | Dashboard session (JWT) |
| GET | /v1/rooms | Project API key |
| POST | /v1/rooms | Project API key |
| DELETE | /v1/rooms/{id} | Project API key |
| GET | /v1/rooms/{id} | Project API key |
| GET | /v1/rooms/{id}/participants | Project API key |
| POST | /v1/rooms/{roomId}/rtc-tokens | Project API key |
| DELETE | /v1/rooms/{roomId}/rtc-tokens/{tokenId} | Project API key |
| GET | /v1/rtc/servers | Dashboard session (JWT) |
| GET | /v1/rtc/servers/{name} | Dashboard session (JWT) |
| POST | /v1/rtc/servers/{name}/drain | Dashboard session (JWT) |
| PUT | /v1/rtc/servers/{name}/heartbeat | SFU registration secret |
| POST | /v1/rtc/servers/{name}/undrain | Dashboard session (JWT) |
| GET | /v1/rtc/servers/metrics | Dashboard session (JWT) |
| POST | /v1/rtc/servers/register | SFU registration secret |
GET /v1/projects/{projectId}/rooms
List a project's rooms with live participant counts
Credential Dashboard session (JWT)
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
projectId | path | string | Yes |
POST /v1/projects/{projectId}/rooms
Create a room in this project
Credential Dashboard session (JWT)
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
projectId | path | string | Yes | |
name | body | string | Yes | 1–128 chars, pattern-checked — Unique within the project (not globally). Letters, numbers, "-", "_", "." only. |
GET /v1/projects/{projectId}/rooms/{roomId}
Get one room with its live participants and published tracks
Credential Dashboard session (JWT)
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
roomId | path | string | Yes | |
projectId | path | string | Yes |
POST /v1/projects/{projectId}/rooms/{roomId}/test-token
Mint a short-lived (10 min) test RTC token for this room, for use from the dashboard only
Credential Dashboard session (JWT) · Rate limit 30 per window (details)
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
projectId | path | string | Yes | |
roomId | path | string | Yes | |
participantIdentity | body | string | No | 1–128 chars, pattern-checked |
GET /v1/rooms
List the API key's project's active rooms
Credential Project API key
No parameters.
POST /v1/rooms
Create a room in the API key's project
Credential Project API key · Idempotent send Idempotency-Key to replay safely
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
name | body | string | Yes | 1–128 chars, pattern-checked — Unique within the project (not globally). Letters, numbers, "-", "_", "." only. |
DELETE /v1/rooms/{id}
Close a room
Credential Project API key
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
id | path | string | Yes |
GET /v1/rooms/{id}
Get a single room
Credential Project API key
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
id | path | string | Yes |
GET /v1/rooms/{id}/participants
List live participants in a room, from the SFU (Phase 10 server SDK)
Credential Project API key
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
id | path | string | Yes |
POST /v1/rooms/{roomId}/rtc-tokens
Mint a short-lived RTC access token for a participant to join this room
Credential Project API key · Rate limit 60 per window (details) · Idempotent send Idempotency-Key to replay safely
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
roomId | path | string | Yes | |
participantIdentity | body | string | Yes | 1–128 chars, pattern-checked — Unique within the room. Letters, numbers, "-", "_", "." only. |
permissions | body | RtcTokenPermissionsDto | No | |
ttlSeconds | body | number | No | 30–21600 — Token lifetime in seconds. Defaults to RTC_TOKEN_DEFAULT_TTL_SECONDS. There is no way to request a non-expiring token — every RTC token is short-lived by design. |
metadata | body | string | No | 0–1024 chars |
DELETE /v1/rooms/{roomId}/rtc-tokens/{tokenId}
Revoke a minted RTC token before it expires
Credential Project API key · Rate limit 60 per window (details)
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
tokenId | path | string | Yes | |
roomId | path | string | Yes |
GET /v1/rtc/servers
List the RTC server fleet
Credential Dashboard session (JWT)
No parameters.
GET /v1/rtc/servers/{name}
One RTC server
Credential Dashboard session (JWT)
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
name | path | string | Yes |
POST /v1/rtc/servers/{name}/drain
Stop sending new rooms to this node
Credential Dashboard session (JWT)
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
name | path | string | Yes |
PUT /v1/rtc/servers/{name}/heartbeat
Report this node as alive, with its current load
Credential SFU registration secret
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
name | path | string | Yes | |
activeRooms | body | number | Yes | 0–∞ — Rooms this node is currently serving. |
activeParticipants | body | number | Yes | 0–∞ — Participants currently connected across all of this node's rooms. |
cpuPercent | body | number | No | 0–100 — CPU utilisation, 0-100. |
memoryPercent | body | number | No | 0–100 — Memory utilisation, 0-100. |
networkInBps | body | number | No | 0–∞ — Inbound media throughput, bits per second. |
networkOutBps | body | number | No | 0–∞ — Outbound media throughput, bits per second. Expected to exceed inbound in an SFU — one publisher feeds many subscribers. |
POST /v1/rtc/servers/{name}/undrain
Put a drained node back into the allocation pool
Credential Dashboard session (JWT)
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
name | path | string | Yes |
GET /v1/rtc/servers/metrics
Fleet-wide RTC totals for the dashboard overview
Credential Dashboard session (JWT)
No parameters.
POST /v1/rtc/servers/register
Register this SFU node with the control plane
Credential SFU registration secret
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
name | body | string | Yes | 1–128 chars, pattern-checked — Stable name for this node, unique across the fleet. Supplied by the node (SFU_NODE_ID) so a restart reclaims the same registry row instead of orphaning it. |
region | body | string | Yes | 1–64 chars — Region this node serves. Free-form; the allocator treats it as a preference. |
publicHost | body | string | Yes | 1–255 chars — Host clients reach for media. Not the same as internalUrl inside a container network. |
internalUrl | body | string | Yes | 1–255 chars — Base URL the control plane uses for server-to-server calls to this node. |
capacity | body | number | No | 1–100_000 — Rooms this node advertises it can hold. A ceiling the allocator respects, not a target it aims for. |
version | body | string | No | 0–64 chars — Build identifier, so a fleet mid-rollout is legible. |
Nested objects
RtcTokenPermissionsDto
| Field | Type | Required | Notes |
|---|---|---|---|
join | boolean | No | Allowed to join the room at all Default true. |
subscribe | boolean | No | Allowed to subscribe to other participants' tracks Default true. |
publish | boolean | No | Allowed to publish any track at all Default false. |
publishAudio | boolean | No | Restricts publish to audio (microphone) — only meaningful when publish=true Default false. |
publishVideo | boolean | No | Restricts publish to video (camera) — only meaningful when publish=true Default false. |
publishData | boolean | No | Allowed to send/receive WebRTC data channel messages Default false. |
Next steps
- Conventions — base path, error envelope, request ids, pagination.
- Errors — every code this API can return.
- All endpoints — the whole surface on one page.