# mv.conferenceRooms

> The conferenceRooms methods of @morevoice/sdk: Conference rooms, guests and AI notes.

Conference rooms, guests and AI notes. These methods are on `mv.conferenceRooms`, where `mv` is your client (see [the Node.js SDK](https://docs.morevoice.ai/sdk/node/#connect)). Each one returns the response object and throws when the API answers with an error.

## `create()`

**Create a conference room.** Returns the room with its guest link (`join_url`), shown only now. Phone dial-in comes from an inbound route to the room.

```ts
mv.conferenceRooms.create(body: ConferenceRoomsCreateData["body"], options?: RequestOptions): Promise<ConferenceRoomsCreateResponse>
```

`POST /conference_rooms` · [API reference](https://docs.morevoice.ai/api/operations/conference_rooms_create/)

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `body.name` | `string` | yes |  |
| `body.moderator_pin` | `string` | no | Moderator PIN (different from the participant PIN). |
| `body.pin` | `string` | no | Participant PIN for phone dial-in (4–8 digits). |
| `body.schedule` | `object` | no | Replaces the schedule. |
| `body.settings` | `object` | no | Only the settings you send change (defaults on create). |
| `options.headers["MoreVoice-Version"]` | `string` | no | The API version to use for this request. Defaults to the version the API key is pinned to. |
| `options.headers["Idempotency-Key"]` | `string` | no | A unique key (for example a UUID) that makes this request safe to retry: for 24 hours, a retry with the same key and parameters returns the first response instead of acting twice. |
| `options` | `RequestOptions` | no | `idempotencyKey`, extra `headers` and an abort `signal`: see [retries and idempotency](https://docs.morevoice.ai/sdk/typescript/retries/). |

### Returns

`ConferenceRoomWithLink`:

| Field | Type | Description |
| --- | --- | --- |
| `object` | `"conference_room"` | Always `conference_room`. |
| `id` | `string` | A conference room ID (prefix `room_`). |
| `livemode` | `boolean` | `true` in live mode, `false` in test mode. |
| `name` | `string` | — |
| `owner_id` | `string \| null` | `usr_…` ID. |
| `active` | `boolean` | Switched off rooms can't be joined. |
| `has_pin` | `boolean` | Phone participants need a PIN (never returned). |
| `pin_length` | `integer \| null` | — |
| `has_moderator_pin` | `boolean` | — |
| `dial_in` | `string[]` | Phone numbers routed to this room (inbound routes). |
| `settings` | `ConferenceRoomSettings` | — |
| `schedule` | `ConferenceRoomSchedule` | A scheduled room can be joined from 15 minutes before each occurrence until 2 hours after it ends. |
| `live` | `object \| null` | The session in progress, or null. |
| `created` | `string` | An ISO-8601 timestamp in UTC. |
| `updated` | `string` | An ISO-8601 timestamp in UTC. |
| `join_url` | `string` | The guest link: anyone with it can join as a guest. Shown only now — store it. |

### Example

```ts
import MoreVoice from "@morevoice/sdk";

const mv = new MoreVoice(); // MOREVOICE_API_KEY from the environment

const conferenceRoomWithLink = await mv.conferenceRooms.create({
	name: "Weekly sales sync",
	pin: "4821",
	schedule: {
		end_at: "2026-11-03T10:30:00+02:00",
		recurrence: "weekly",
		start_at: "2026-11-03T10:00:00+02:00",
	},
	settings: {
		ai_note_taker: true,
		language: "he",
	},
});
console.log(conferenceRoomWithLink);
```

## `createLink()`

**Create a new guest link.** Replaces the room's guest link: the previous one stops working at once. The new `join_url` is shown only now.

```ts
mv.conferenceRooms.createLink(id: ConferenceRoomsCreateLinkData["path"]["id"], body?: ConferenceRoomsCreateLinkData["body"], options?: RequestOptions): Promise<ConferenceRoomsCreateLinkResponse>
```

`POST /conference_rooms/{id}/links` · [API reference](https://docs.morevoice.ai/api/operations/conference_rooms_create_link/)

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | yes | A conference room ID (`room_…`). |
| `options.headers["MoreVoice-Version"]` | `string` | no | The API version to use for this request. Defaults to the version the API key is pinned to. |
| `options.headers["Idempotency-Key"]` | `string` | no | A unique key (for example a UUID) that makes this request safe to retry: for 24 hours, a retry with the same key and parameters returns the first response instead of acting twice. |
| `options` | `RequestOptions` | no | `idempotencyKey`, extra `headers` and an abort `signal`: see [retries and idempotency](https://docs.morevoice.ai/sdk/typescript/retries/). |

### Returns

`ConferenceRoomWithLink`:

| Field | Type | Description |
| --- | --- | --- |
| `object` | `"conference_room"` | Always `conference_room`. |
| `id` | `string` | A conference room ID (prefix `room_`). |
| `livemode` | `boolean` | `true` in live mode, `false` in test mode. |
| `name` | `string` | — |
| `owner_id` | `string \| null` | `usr_…` ID. |
| `active` | `boolean` | Switched off rooms can't be joined. |
| `has_pin` | `boolean` | Phone participants need a PIN (never returned). |
| `pin_length` | `integer \| null` | — |
| `has_moderator_pin` | `boolean` | — |
| `dial_in` | `string[]` | Phone numbers routed to this room (inbound routes). |
| `settings` | `ConferenceRoomSettings` | — |
| `schedule` | `ConferenceRoomSchedule` | A scheduled room can be joined from 15 minutes before each occurrence until 2 hours after it ends. |
| `live` | `object \| null` | The session in progress, or null. |
| `created` | `string` | An ISO-8601 timestamp in UTC. |
| `updated` | `string` | An ISO-8601 timestamp in UTC. |
| `join_url` | `string` | The guest link: anyone with it can join as a guest. Shown only now — store it. |

### Example

```ts
import MoreVoice from "@morevoice/sdk";

const mv = new MoreVoice(); // MOREVOICE_API_KEY from the environment

const conferenceRoomWithLink = await mv.conferenceRooms.createLink("room_7Hk2Lm9Qp", {});
console.log(conferenceRoomWithLink);
```

## `delete()`

**Delete a conference room.** Ends a session in progress, unlinks the room's inbound routes and deletes it. Its past sessions (call records) stay.

```ts
mv.conferenceRooms.delete(id: ConferenceRoomsDeleteData["path"]["id"], options?: RequestOptions): Promise<ConferenceRoomsDeleteResponse>
```

`DELETE /conference_rooms/{id}` · [API reference](https://docs.morevoice.ai/api/operations/conference_rooms_delete/)

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | yes | A conference room ID (`room_…`). |
| `options.headers["MoreVoice-Version"]` | `string` | no | The API version to use for this request. Defaults to the version the API key is pinned to. |
| `options.headers["Idempotency-Key"]` | `string` | no | A unique key (for example a UUID) that makes this request safe to retry: for 24 hours, a retry with the same key and parameters returns the first response instead of acting twice. |
| `options` | `RequestOptions` | no | `idempotencyKey`, extra `headers` and an abort `signal`: see [retries and idempotency](https://docs.morevoice.ai/sdk/typescript/retries/). |

### Returns

`DeletedConferenceRoom`:

| Field | Type | Description |
| --- | --- | --- |
| `object` | `"conference_room"` | Always `conference_room`. |
| `id` | `string` | A conference room ID (prefix `room_`). |
| `deleted` | `true` | — |

### Example

```ts
import MoreVoice from "@morevoice/sdk";

const mv = new MoreVoice(); // MOREVOICE_API_KEY from the environment

const deletedConferenceRoom = await mv.conferenceRooms.delete("room_7Hk2Lm9Qp");
console.log(deletedConferenceRoom);
```

## `invite()`

**Email invitations.** Emails each address the room's guest link, phone dial-in and a calendar file, in the room's language. Needs a live key.

```ts
mv.conferenceRooms.invite(id: ConferenceRoomsInviteData["path"]["id"], body: ConferenceRoomsInviteData["body"], options?: RequestOptions): Promise<ConferenceRoomsInviteResponse>
```

`POST /conference_rooms/{id}/invite` · [API reference](https://docs.morevoice.ai/api/operations/conference_rooms_invite/)

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | yes | A conference room ID (`room_…`). |
| `body.emails` | `string[]` | yes | Up to 50 addresses. |
| `body.message` | `string` | no | A personal note in the invitation. |
| `body.pin` | `string` | no | Print this participant PIN in the invitation (otherwise it says a PIN is required). |
| `options.headers["MoreVoice-Version"]` | `string` | no | The API version to use for this request. Defaults to the version the API key is pinned to. |
| `options.headers["Idempotency-Key"]` | `string` | no | A unique key (for example a UUID) that makes this request safe to retry: for 24 hours, a retry with the same key and parameters returns the first response instead of acting twice. |
| `options` | `RequestOptions` | no | `idempotencyKey`, extra `headers` and an abort `signal`: see [retries and idempotency](https://docs.morevoice.ai/sdk/typescript/retries/). |

### Returns

`ConferenceInviteBatch`:

| Field | Type | Description |
| --- | --- | --- |
| `object` | `"conference_invite_batch"` | Always `conference_invite_batch`. |
| `livemode` | `boolean` | `true` in live mode, `false` in test mode. |
| `room_id` | `string` | A conference room ID (prefix `room_`). |
| `sent` | `integer` | — |
| `results` | `object[]` | — |

### Example

```ts
import MoreVoice from "@morevoice/sdk";

const mv = new MoreVoice(); // MOREVOICE_API_KEY from the environment

const conferenceInviteBatch = await mv.conferenceRooms.invite("room_7Hk2Lm9Qp", {
	emails: [
		"dana@example.com",
	],
	message: "Agenda: Q4 pipeline.",
});
console.log(conferenceInviteBatch);
```

## `list()`

**List conference rooms.** The organisation's active rooms, newest first. Guest links are not included: they are shown only when created.

```ts
mv.conferenceRooms.list(query?: NonNullable<ConferenceRoomsListData["query"]>, options?: RequestOptions): PagedList<ConferenceRoomsListResponse["data"][number], NonNullable<ConferenceRoomsListData["query"]>>
```

`GET /conference_rooms` · [API reference](https://docs.morevoice.ai/api/operations/conference_rooms_list/)

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `query.limit` | `integer` | no | How many objects to return, 1–100 (default 20). |
| `query.starting_after` | `string` | no | A cursor (`next_cursor`) or object ID: return the objects after it (older). |
| `query.ending_before` | `string` | no | A cursor or object ID: return the objects before it (newer). |
| `options.headers["MoreVoice-Version"]` | `string` | no | The API version to use for this request. Defaults to the version the API key is pinned to. |
| `options` | `RequestOptions` | no | `idempotencyKey`, extra `headers` and an abort `signal`: see [retries and idempotency](https://docs.morevoice.ai/sdk/typescript/retries/). |

### Returns

A [`PagedList`](https://docs.morevoice.ai/sdk/typescript/pagination/): `await` it for the first page, `for await` it for every item.

### Example

```ts
import MoreVoice from "@morevoice/sdk";

const mv = new MoreVoice(); // MOREVOICE_API_KEY from the environment

for await (const conferenceRoom of mv.conferenceRooms.list()) {
	console.log(conferenceRoom);
}
```

## `listSessions()`

**List a room's past sessions.** The room's recent sessions (up to 100), newest first, with their AI meeting notes. Each one is a call: fetch its recording and transcript through /v1/calls/{id}.

```ts
mv.conferenceRooms.listSessions(id: ConferenceRoomsListSessionsData["path"]["id"], query?: NonNullable<ConferenceRoomsListSessionsData["query"]>, options?: RequestOptions): PagedList<ConferenceRoomsListSessionsResponse["data"][number], NonNullable<ConferenceRoomsListSessionsData["query"]>>
```

`GET /conference_rooms/{id}/history` · [API reference](https://docs.morevoice.ai/api/operations/conference_rooms_list_sessions/)

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | yes | A conference room ID (`room_…`). |
| `query.limit` | `integer` | no | How many objects to return, 1–100 (default 20). |
| `query.starting_after` | `string` | no | A cursor (`next_cursor`) or object ID: return the objects after it (older). |
| `query.ending_before` | `string` | no | A cursor or object ID: return the objects before it (newer). |
| `options.headers["MoreVoice-Version"]` | `string` | no | The API version to use for this request. Defaults to the version the API key is pinned to. |
| `options` | `RequestOptions` | no | `idempotencyKey`, extra `headers` and an abort `signal`: see [retries and idempotency](https://docs.morevoice.ai/sdk/typescript/retries/). |

### Returns

A [`PagedList`](https://docs.morevoice.ai/sdk/typescript/pagination/): `await` it for the first page, `for await` it for every item.

### Example

```ts
import MoreVoice from "@morevoice/sdk";

const mv = new MoreVoice(); // MOREVOICE_API_KEY from the environment

for await (const conferenceRoom of mv.conferenceRooms.listSessions("room_7Hk2Lm9Qp")) {
	console.log(conferenceRoom);
}
```

## `moderate()`

**Moderate a live session.** Acts on the session in progress (409 when nobody is in the room): mute, hold, promote or remove a participant (`participant_id` from GET …/live), lock or unlock the room, mute everyone but the moderators, or end the session. Returns the live view after the change. Needs a live key.

```ts
mv.conferenceRooms.moderate(id: ConferenceRoomsModerateData["path"]["id"], body?: ConferenceRoomsModerateData["body"], options?: RequestOptions): Promise<ConferenceRoomsModerateResponse>
```

`POST /conference_rooms/{id}/moderate` · [API reference](https://docs.morevoice.ai/api/operations/conference_rooms_moderate/)

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | yes | A conference room ID (`room_…`). |
| `body.end` | `true` | no | End the session for everyone. |
| `body.hold` | `boolean` | no |  |
| `body.lock` | `boolean` | no | Lock (true) or unlock the room: when locked nobody else can join. |
| `body.mute` | `boolean` | no |  |
| `body.mute_all` | `true` | no | Mute everyone except the moderators. |
| `body.participant_id` | `string` | no | The participant to act on (from GET …/live). |
| `body.remove` | `true` | no | Remove the participant from the room. |
| `body.role` | `"moderator" \| "member"` | no |  |
| `options.headers["MoreVoice-Version"]` | `string` | no | The API version to use for this request. Defaults to the version the API key is pinned to. |
| `options.headers["Idempotency-Key"]` | `string` | no | A unique key (for example a UUID) that makes this request safe to retry: for 24 hours, a retry with the same key and parameters returns the first response instead of acting twice. |
| `options` | `RequestOptions` | no | `idempotencyKey`, extra `headers` and an abort `signal`: see [retries and idempotency](https://docs.morevoice.ai/sdk/typescript/retries/). |

### Returns

`ConferenceLive`:

| Field | Type | Description |
| --- | --- | --- |
| `object` | `"conference_live"` | Always `conference_live`. |
| `livemode` | `boolean` | `true` in live mode, `false` in test mode. |
| `room_id` | `string` | A conference room ID (prefix `room_`). |
| `active` | `boolean` | A session is in progress. |
| `session_id` | `string \| null` | `call_…` ID. |
| `started_at` | `string \| null` | — |
| `locked` | `boolean` | — |
| `recording` | `boolean` | — |
| `participants` | `object[]` | — |

### Example

```ts
import MoreVoice from "@morevoice/sdk";

const mv = new MoreVoice(); // MOREVOICE_API_KEY from the environment

const conferenceLive = await mv.conferenceRooms.moderate("room_7Hk2Lm9Qp", {
	mute: true,
	participant_id: "g7Hk2pQx",
});
console.log(conferenceLive);
```

## `retrieve()`

**Retrieve a conference room.** Returns the `ConferenceRoom` object. Answers `404` with the code `resource_missing` when nothing has this ID in this organisation and mode.

```ts
mv.conferenceRooms.retrieve(id: ConferenceRoomsRetrieveData["path"]["id"], options?: RequestOptions): Promise<ConferenceRoomsRetrieveResponse>
```

`GET /conference_rooms/{id}` · [API reference](https://docs.morevoice.ai/api/operations/conference_rooms_retrieve/)

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | yes | A conference room ID (`room_…`). |
| `options.headers["MoreVoice-Version"]` | `string` | no | The API version to use for this request. Defaults to the version the API key is pinned to. |
| `options` | `RequestOptions` | no | `idempotencyKey`, extra `headers` and an abort `signal`: see [retries and idempotency](https://docs.morevoice.ai/sdk/typescript/retries/). |

### Returns

`ConferenceRoom`:

| Field | Type | Description |
| --- | --- | --- |
| `object` | `"conference_room"` | Always `conference_room`. |
| `id` | `string` | A conference room ID (prefix `room_`). |
| `livemode` | `boolean` | `true` in live mode, `false` in test mode. |
| `name` | `string` | — |
| `owner_id` | `string \| null` | `usr_…` ID. |
| `active` | `boolean` | Switched off rooms can't be joined. |
| `has_pin` | `boolean` | Phone participants need a PIN (never returned). |
| `pin_length` | `integer \| null` | — |
| `has_moderator_pin` | `boolean` | — |
| `dial_in` | `string[]` | Phone numbers routed to this room (inbound routes). |
| `settings` | `ConferenceRoomSettings` | — |
| `schedule` | `ConferenceRoomSchedule` | A scheduled room can be joined from 15 minutes before each occurrence until 2 hours after it ends. |
| `live` | `object \| null` | The session in progress, or null. |
| `created` | `string` | An ISO-8601 timestamp in UTC. |
| `updated` | `string` | An ISO-8601 timestamp in UTC. |

### Example

```ts
import MoreVoice from "@morevoice/sdk";

const mv = new MoreVoice(); // MOREVOICE_API_KEY from the environment

const conferenceRoom = await mv.conferenceRooms.retrieve("room_7Hk2Lm9Qp");
console.log(conferenceRoom);
```

## `retrieveIcs()`

**Download the calendar invitation.** An .ics file (RFC 5545) for the room's schedule, with its guest link and phone dial-in. It carries the guest link, so it needs `conference:write`.

```ts
mv.conferenceRooms.retrieveIcs(id: ConferenceRoomsRetrieveIcsData["path"]["id"], options?: RequestOptions): Promise<ConferenceRoomsRetrieveIcsResponse>
```

`GET /conference_rooms/{id}/ics` · [API reference](https://docs.morevoice.ai/api/operations/conference_rooms_retrieve_ics/)

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | yes | A conference room ID (`room_…`). |
| `options.headers["MoreVoice-Version"]` | `string` | no | The API version to use for this request. Defaults to the version the API key is pinned to. |
| `options` | `RequestOptions` | no | `idempotencyKey`, extra `headers` and an abort `signal`: see [retries and idempotency](https://docs.morevoice.ai/sdk/typescript/retries/). |

### Returns

Nothing, on success.

### Example

```ts
import MoreVoice from "@morevoice/sdk";

const mv = new MoreVoice(); // MOREVOICE_API_KEY from the environment

const data = await mv.conferenceRooms.retrieveIcs("room_7Hk2Lm9Qp");
console.log(data);
```

## `retrieveLive()`

**Who is in the room now.** Returns the `ConferenceLive` object. Answers `404` with the code `resource_missing` when nothing has this ID in this organisation and mode.

```ts
mv.conferenceRooms.retrieveLive(id: ConferenceRoomsRetrieveLiveData["path"]["id"], options?: RequestOptions): Promise<ConferenceRoomsRetrieveLiveResponse>
```

`GET /conference_rooms/{id}/live` · [API reference](https://docs.morevoice.ai/api/operations/conference_rooms_retrieve_live/)

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | yes | A conference room ID (`room_…`). |
| `options.headers["MoreVoice-Version"]` | `string` | no | The API version to use for this request. Defaults to the version the API key is pinned to. |
| `options` | `RequestOptions` | no | `idempotencyKey`, extra `headers` and an abort `signal`: see [retries and idempotency](https://docs.morevoice.ai/sdk/typescript/retries/). |

### Returns

`ConferenceLive`:

| Field | Type | Description |
| --- | --- | --- |
| `object` | `"conference_live"` | Always `conference_live`. |
| `livemode` | `boolean` | `true` in live mode, `false` in test mode. |
| `room_id` | `string` | A conference room ID (prefix `room_`). |
| `active` | `boolean` | A session is in progress. |
| `session_id` | `string \| null` | `call_…` ID. |
| `started_at` | `string \| null` | — |
| `locked` | `boolean` | — |
| `recording` | `boolean` | — |
| `participants` | `object[]` | — |

### Example

```ts
import MoreVoice from "@morevoice/sdk";

const mv = new MoreVoice(); // MOREVOICE_API_KEY from the environment

const conferenceLive = await mv.conferenceRooms.retrieveLive("room_7Hk2Lm9Qp");
console.log(conferenceLive);
```

## `update()`

**Update a conference room.** Only the fields (and settings) you send change; `schedule` is replaced as a whole. A `null` PIN removes it.

```ts
mv.conferenceRooms.update(id: ConferenceRoomsUpdateData["path"]["id"], body?: ConferenceRoomsUpdateData["body"], options?: RequestOptions): Promise<ConferenceRoomsUpdateResponse>
```

`PATCH /conference_rooms/{id}` · [API reference](https://docs.morevoice.ai/api/operations/conference_rooms_update/)

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | yes | A conference room ID (`room_…`). |
| `body.active` | `boolean` | no | false: switch the room off (it can't be joined). |
| `body.moderator_pin` | `string \| null` | no | A new moderator PIN; null removes it. |
| `body.name` | `string` | no |  |
| `body.pin` | `string \| null` | no | A new participant PIN; null removes it. |
| `body.schedule` | `object` | no | Replaces the schedule. |
| `body.settings` | `object` | no | Only the settings you send change (defaults on create). |
| `options.headers["MoreVoice-Version"]` | `string` | no | The API version to use for this request. Defaults to the version the API key is pinned to. |
| `options` | `RequestOptions` | no | `idempotencyKey`, extra `headers` and an abort `signal`: see [retries and idempotency](https://docs.morevoice.ai/sdk/typescript/retries/). |

### Returns

`ConferenceRoom`:

| Field | Type | Description |
| --- | --- | --- |
| `object` | `"conference_room"` | Always `conference_room`. |
| `id` | `string` | A conference room ID (prefix `room_`). |
| `livemode` | `boolean` | `true` in live mode, `false` in test mode. |
| `name` | `string` | — |
| `owner_id` | `string \| null` | `usr_…` ID. |
| `active` | `boolean` | Switched off rooms can't be joined. |
| `has_pin` | `boolean` | Phone participants need a PIN (never returned). |
| `pin_length` | `integer \| null` | — |
| `has_moderator_pin` | `boolean` | — |
| `dial_in` | `string[]` | Phone numbers routed to this room (inbound routes). |
| `settings` | `ConferenceRoomSettings` | — |
| `schedule` | `ConferenceRoomSchedule` | A scheduled room can be joined from 15 minutes before each occurrence until 2 hours after it ends. |
| `live` | `object \| null` | The session in progress, or null. |
| `created` | `string` | An ISO-8601 timestamp in UTC. |
| `updated` | `string` | An ISO-8601 timestamp in UTC. |

### Example

```ts
import MoreVoice from "@morevoice/sdk";

const mv = new MoreVoice(); // MOREVOICE_API_KEY from the environment

const conferenceRoom = await mv.conferenceRooms.update("room_7Hk2Lm9Qp", {
	name: "Sales sync (Tuesdays)",
	settings: {
		mute_on_entry: true,
	},
});
console.log(conferenceRoom);
```
