On this page
Rooms API
A room is a named place people meet. Read Rooms first for how names, privacy and properties work.
Create a room#
POST /api/v1/rooms
Send an Idempotency-Key header to repeat this call safely. The same key with the same body returns the first answer for 24 hours.
Body (JSON)
| Field | Type | Description |
|---|---|---|
name | string | Generated when left out. Pattern ^[A-Za-z0-9][A-Za-z0-9_-]{0,31}$ |
privacy | string | One of public, private. Default "public" |
properties | object | |
properties.max_participants | integer or null | Min 1, max 200 |
properties.start_audio_off | boolean | Default false |
properties.start_video_off | boolean | Default false |
properties.enable_chat | boolean | Default true |
properties.enable_screenshare | boolean | Default true |
properties.enable_knocking | boolean | Waiting room: the host admits people. Default false |
properties.enable_captions | boolean | Default true |
properties.enable_translation | boolean | Default false |
properties.languages | array of string | Translation languages; at least one when enable_translation is true. Up to 5 items |
properties.exp | integer or null | Unix seconds; the room stops opening |
properties.nbf | integer or null | Unix seconds; the room opens at this time |
properties.lang | string or null | |
properties.stable_partials | boolean or null | Speak stable, not yet final translation words earlier. null follows the project setting, then the server default |
properties.shape | string or null | One of call, meeting, stage |
properties.metadata | object | Your JSON, at most 4 KB |
Response
201 The room
| Field | Type | Description |
|---|---|---|
object | "room" | |
id | string | |
name | string | |
url | string | |
privacy | string | One of public, private |
properties | object | |
properties.max_participants | integer or null | Min 1, max 200 |
properties.start_audio_off | boolean | Default false |
properties.start_video_off | boolean | Default false |
properties.enable_chat | boolean | Default true |
properties.enable_screenshare | boolean | Default true |
properties.enable_knocking | boolean | Waiting room: the host admits people. Default false |
properties.enable_captions | boolean | Default true |
properties.enable_translation | boolean | Default false |
properties.languages | array of string | Translation languages; at least one when enable_translation is true. Up to 5 items |
properties.exp | integer or null | Unix seconds; the room stops opening |
properties.nbf | integer or null | Unix seconds; the room opens at this time |
properties.lang | string or null | |
properties.stable_partials | boolean or null | Speak stable, not yet final translation words earlier. null follows the project setting, then the server default |
properties.shape | string or null | One of call, meeting, stage |
properties.metadata | object | Your JSON, at most 4 KB |
created_at | string | |
livemode | boolean |
{
"object": "room",
"id": "6f1c2b7e-3a54-4d0e-9c1b-2f7a8e5d4c10",
"name": "order-1042",
"url": "https://meet.respiresoft.com/r/order-1042",
"privacy": "public",
"properties": {
"max_participants": 1,
"start_audio_off": false,
"start_video_off": false,
"enable_chat": true,
"enable_screenshare": true,
"enable_knocking": false,
"enable_captions": true,
"enable_translation": false,
"languages": [
"languages"
],
"exp": 1,
"nbf": 1,
"lang": "en",
"stable_partials": false,
"shape": "call"
},
"created_at": "2026-11-02T09:30:00Z",
"livemode": false
}Errors
| Status | Meaning |
|---|---|
| 400 | invalid_parameter, unknown_parameter or invalid_json; param names the field |
| 401 | invalid_api_key or revoked_api_key |
| 409 | room_exists, idempotency_key_reused, room_not_live |
| 429 | rate_limited; wait Retry-After seconds |
Every error has the shape {"error": {"code", "message", "param"?}}. See Errors.
Examples
curl "https://meet.respiresoft.com/api/v1/rooms" \
-H "Authorization: Bearer $MEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"order-1042","privacy":"private","properties":{"max_participants":4,"enable_knocking":true}}'import { Meet } from "@respiresoft/meet";
const meet = new Meet({ apiKey: process.env.MEET_API_KEY });
const room = await meet.rooms.create({
"name": "order-1042",
"privacy": "private",
"properties": {
"max_participants": 4,
"enable_knocking": true
}
});
console.log(room.url);
List rooms, newest first#
GET /api/v1/rooms
Parameters
| Name | In | Type | Description |
|---|---|---|---|
limit | query | integer | Default 10. Between 1 and 100 |
starting_after | query | string (uuid) | The id of the last room of the previous page |
Response
200 A page of rooms
| Field | Type | Description |
|---|---|---|
object | "list" | |
data | array of Room | |
data[].object | "room" | |
data[].id | string | |
data[].name | string | |
data[].url | string | |
data[].privacy | string | One of public, private |
data[].properties | object | |
data[].properties.max_participants | integer or null | Min 1, max 200 |
data[].properties.start_audio_off | boolean | Default false |
data[].properties.start_video_off | boolean | Default false |
data[].properties.enable_chat | boolean | Default true |
data[].properties.enable_screenshare | boolean | Default true |
data[].properties.enable_knocking | boolean | Waiting room: the host admits people. Default false |
data[].properties.enable_captions | boolean | Default true |
data[].properties.enable_translation | boolean | Default false |
data[].properties.languages | array of string | Translation languages; at least one when enable_translation is true. Up to 5 items |
data[].properties.exp | integer or null | Unix seconds; the room stops opening |
data[].properties.nbf | integer or null | Unix seconds; the room opens at this time |
data[].properties.lang | string or null | |
data[].properties.stable_partials | boolean or null | Speak stable, not yet final translation words earlier. null follows the project setting, then the server default |
data[].properties.shape | string or null | One of call, meeting, stage |
data[].properties.metadata | object | Your JSON, at most 4 KB |
data[].created_at | string | |
data[].livemode | boolean | |
has_more | boolean |
{
"object": "list",
"data": [
{
"object": "room",
"id": "6f1c2b7e-3a54-4d0e-9c1b-2f7a8e5d4c10",
"name": "order-1042",
"url": "https://meet.respiresoft.com/r/order-1042",
"privacy": "public",
"properties": {
"max_participants": 1,
"start_audio_off": false,
"start_video_off": false,
"enable_chat": true,
"enable_screenshare": true,
"enable_knocking": false,
"enable_captions": true,
"enable_translation": false,
"languages": [
"languages"
],
"exp": 1,
"nbf": 1,
"lang": "en",
"stable_partials": false,
"shape": "call"
},
"created_at": "2026-11-02T09:30:00Z",
"livemode": false
}
],
"has_more": false
}Errors
| Status | Meaning |
|---|---|
| 400 | invalid_parameter, unknown_parameter or invalid_json; param names the field |
| 401 | invalid_api_key or revoked_api_key |
| 429 | rate_limited; wait Retry-After seconds |
Every error has the shape {"error": {"code", "message", "param"?}}. See Errors.
Examples
curl "https://meet.respiresoft.com/api/v1/rooms?limit=20" \
-H "Authorization: Bearer $MEET_API_KEY"import { Meet } from "@respiresoft/meet";
const meet = new Meet({ apiKey: process.env.MEET_API_KEY });
for await (const room of meet.rooms.list({ limit: 20 })) {
console.log(room.name, room.privacy);
}
Get a room#
GET /api/v1/rooms/{name}
Parameters
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string |
Response
200 The room
| Field | Type | Description |
|---|---|---|
object | "room" | |
id | string | |
name | string | |
url | string | |
privacy | string | One of public, private |
properties | object | |
properties.max_participants | integer or null | Min 1, max 200 |
properties.start_audio_off | boolean | Default false |
properties.start_video_off | boolean | Default false |
properties.enable_chat | boolean | Default true |
properties.enable_screenshare | boolean | Default true |
properties.enable_knocking | boolean | Waiting room: the host admits people. Default false |
properties.enable_captions | boolean | Default true |
properties.enable_translation | boolean | Default false |
properties.languages | array of string | Translation languages; at least one when enable_translation is true. Up to 5 items |
properties.exp | integer or null | Unix seconds; the room stops opening |
properties.nbf | integer or null | Unix seconds; the room opens at this time |
properties.lang | string or null | |
properties.stable_partials | boolean or null | Speak stable, not yet final translation words earlier. null follows the project setting, then the server default |
properties.shape | string or null | One of call, meeting, stage |
properties.metadata | object | Your JSON, at most 4 KB |
created_at | string | |
livemode | boolean |
{
"object": "room",
"id": "6f1c2b7e-3a54-4d0e-9c1b-2f7a8e5d4c10",
"name": "order-1042",
"url": "https://meet.respiresoft.com/r/order-1042",
"privacy": "public",
"properties": {
"max_participants": 1,
"start_audio_off": false,
"start_video_off": false,
"enable_chat": true,
"enable_screenshare": true,
"enable_knocking": false,
"enable_captions": true,
"enable_translation": false,
"languages": [
"languages"
],
"exp": 1,
"nbf": 1,
"lang": "en",
"stable_partials": false,
"shape": "call"
},
"created_at": "2026-11-02T09:30:00Z",
"livemode": false
}Errors
| Status | Meaning |
|---|---|
| 401 | invalid_api_key or revoked_api_key |
| 404 | room_not_found, session_not_found or participant_not_found |
| 429 | rate_limited; wait Retry-After seconds |
Every error has the shape {"error": {"code", "message", "param"?}}. See Errors.
Examples
curl "https://meet.respiresoft.com/api/v1/rooms/order-1042" \
-H "Authorization: Bearer $MEET_API_KEY"import { Meet } from "@respiresoft/meet";
const meet = new Meet({ apiKey: process.env.MEET_API_KEY });
const room = await meet.rooms.get("order-1042");
console.log(room.properties);
Change privacy or properties (only the properties you send change)#
PATCH /api/v1/rooms/{name}
Parameters
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string |
Body (JSON)
| Field | Type | Description |
|---|---|---|
privacy | string | One of public, private |
properties | object | |
properties.max_participants | integer or null | Min 1, max 200 |
properties.start_audio_off | boolean | Default false |
properties.start_video_off | boolean | Default false |
properties.enable_chat | boolean | Default true |
properties.enable_screenshare | boolean | Default true |
properties.enable_knocking | boolean | Waiting room: the host admits people. Default false |
properties.enable_captions | boolean | Default true |
properties.enable_translation | boolean | Default false |
properties.languages | array of string | Translation languages; at least one when enable_translation is true. Up to 5 items |
properties.exp | integer or null | Unix seconds; the room stops opening |
properties.nbf | integer or null | Unix seconds; the room opens at this time |
properties.lang | string or null | |
properties.stable_partials | boolean or null | Speak stable, not yet final translation words earlier. null follows the project setting, then the server default |
properties.shape | string or null | One of call, meeting, stage |
properties.metadata | object | Your JSON, at most 4 KB |
Response
200 The room
| Field | Type | Description |
|---|---|---|
object | "room" | |
id | string | |
name | string | |
url | string | |
privacy | string | One of public, private |
properties | object | |
properties.max_participants | integer or null | Min 1, max 200 |
properties.start_audio_off | boolean | Default false |
properties.start_video_off | boolean | Default false |
properties.enable_chat | boolean | Default true |
properties.enable_screenshare | boolean | Default true |
properties.enable_knocking | boolean | Waiting room: the host admits people. Default false |
properties.enable_captions | boolean | Default true |
properties.enable_translation | boolean | Default false |
properties.languages | array of string | Translation languages; at least one when enable_translation is true. Up to 5 items |
properties.exp | integer or null | Unix seconds; the room stops opening |
properties.nbf | integer or null | Unix seconds; the room opens at this time |
properties.lang | string or null | |
properties.stable_partials | boolean or null | Speak stable, not yet final translation words earlier. null follows the project setting, then the server default |
properties.shape | string or null | One of call, meeting, stage |
properties.metadata | object | Your JSON, at most 4 KB |
created_at | string | |
livemode | boolean |
{
"object": "room",
"id": "6f1c2b7e-3a54-4d0e-9c1b-2f7a8e5d4c10",
"name": "order-1042",
"url": "https://meet.respiresoft.com/r/order-1042",
"privacy": "public",
"properties": {
"max_participants": 1,
"start_audio_off": false,
"start_video_off": false,
"enable_chat": true,
"enable_screenshare": true,
"enable_knocking": false,
"enable_captions": true,
"enable_translation": false,
"languages": [
"languages"
],
"exp": 1,
"nbf": 1,
"lang": "en",
"stable_partials": false,
"shape": "call"
},
"created_at": "2026-11-02T09:30:00Z",
"livemode": false
}Errors
| Status | Meaning |
|---|---|
| 400 | invalid_parameter, unknown_parameter or invalid_json; param names the field |
| 401 | invalid_api_key or revoked_api_key |
| 404 | room_not_found, session_not_found or participant_not_found |
| 429 | rate_limited; wait Retry-After seconds |
Every error has the shape {"error": {"code", "message", "param"?}}. See Errors.
Examples
curl -X PATCH "https://meet.respiresoft.com/api/v1/rooms/order-1042" \
-H "Authorization: Bearer $MEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"properties":{"max_participants":6}}'import { Meet } from "@respiresoft/meet";
const meet = new Meet({ apiKey: process.env.MEET_API_KEY });
const room = await meet.rooms.update("order-1042", {
"properties": {
"max_participants": 6
}
});
console.log(room.properties.max_participants);
Delete a room (ends a running meeting, frees the name)#
DELETE /api/v1/rooms/{name}
Parameters
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string |
Response
200 Deleted
| Field | Type | Description |
|---|---|---|
object | "room" | |
id | string | |
name | string | |
deleted | boolean | |
livemode | boolean |
{
"object": "room",
"id": "6f1c2b7e-3a54-4d0e-9c1b-2f7a8e5d4c10",
"name": "order-1042",
"deleted": true,
"livemode": false
}Errors
| Status | Meaning |
|---|---|
| 401 | invalid_api_key or revoked_api_key |
| 404 | room_not_found, session_not_found or participant_not_found |
| 429 | rate_limited; wait Retry-After seconds |
Every error has the shape {"error": {"code", "message", "param"?}}. See Errors.
Examples
curl -X DELETE "https://meet.respiresoft.com/api/v1/rooms/order-1042" \
-H "Authorization: Bearer $MEET_API_KEY"import { Meet } from "@respiresoft/meet";
const meet = new Meet({ apiKey: process.env.MEET_API_KEY });
const gone = await meet.rooms.delete("order-1042");
console.log(gone.deleted);