# client.conference_rooms

> The conference_rooms methods of the morevoice Python SDK: Conference rooms, guests and AI notes.

Conference rooms, guests and AI notes. These methods are on `client.conference_rooms`, where `client` is a `MoreVoice` client (see [the Python SDK](https://docs.morevoice.ai/sdk/python/#connect)). On `AsyncMoreVoice` the same methods are awaited. Each one returns the response object and raises an exception 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.

```python
# client.conference_rooms
def create(self, body: _m.ConferenceRoomsCreateBody | Mapping[str, Any], *, more_voice_version: str | Unset = UNSET, idempotency_key: str | Unset = UNSET) -> _m.ConferenceRoomWithLink
```

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

### Request body

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `string` | yes | — |
| `moderator_pin` | `string` | no | Moderator PIN (different from the participant PIN). |
| `pin` | `string` | no | Participant PIN for phone dial-in (4–8 digits). |
| `schedule` | `object` | no | Replaces the schedule. |
| `settings` | `object` | no | Only the settings you send change (defaults on create). |

### 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

```python
from morevoice import MoreVoice

client = MoreVoice()  # MOREVOICE_API_KEY from the environment

conference_room_with_link = client.conference_rooms.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",
    },
})
print(conference_room_with_link)
```

## `create_link()`

**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.

```python
# client.conference_rooms
def create_link(self, id: str, body: _m.ConferenceRoomLinkParamsInput | Mapping[str, Any] | Unset = UNSET, *, more_voice_version: str | Unset = UNSET, idempotency_key: str | Unset = UNSET) -> _m.ConferenceRoomWithLink
```

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

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `str` | yes | A conference room ID (`room_…`). |

### 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

```python
from morevoice import MoreVoice

client = MoreVoice()  # MOREVOICE_API_KEY from the environment

conference_room_with_link = client.conference_rooms.create_link("room_7Hk2Lm9Qp", {})
print(conference_room_with_link)
```

## `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.

```python
# client.conference_rooms
def delete(self, id: str, *, more_voice_version: str | Unset = UNSET, idempotency_key: str | Unset = UNSET) -> _m.DeletedConferenceRoom
```

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

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `str` | yes | A conference room ID (`room_…`). |

### Returns

`DeletedConferenceRoom`:

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

### Example

```python
from morevoice import MoreVoice

client = MoreVoice()  # MOREVOICE_API_KEY from the environment

deleted_conference_room = client.conference_rooms.delete("room_7Hk2Lm9Qp")
print(deleted_conference_room)
```

## `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.

```python
# client.conference_rooms
def invite(self, id: str, body: _m.ConferenceRoomsInviteBody | Mapping[str, Any], *, more_voice_version: str | Unset = UNSET, idempotency_key: str | Unset = UNSET) -> _m.ConferenceInviteBatch
```

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

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `str` | yes | A conference room ID (`room_…`). |

### Request body

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `emails` | `string[]` | yes | Up to 50 addresses. |
| `message` | `string` | no | A personal note in the invitation. |
| `pin` | `string` | no | Print this participant PIN in the invitation (otherwise it says a PIN is required). |

### 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

```python
from morevoice import MoreVoice

client = MoreVoice()  # MOREVOICE_API_KEY from the environment

conference_invite_batch = client.conference_rooms.invite("room_7Hk2Lm9Qp", {
    "emails": [
        "dana@example.com",
    ],
    "message": "Agenda: Q4 pipeline.",
})
print(conference_invite_batch)
```

## `list()`

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

```python
# client.conference_rooms
def list(self, *, limit: int | Unset = 20, starting_after: str | Unset = UNSET, ending_before: str | Unset = UNSET, more_voice_version: str | Unset = UNSET) -> AsyncPage[_m.ConferenceRoom]
```

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

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `limit` | `integer` | no | How many objects to return, 1–100 (default 20). |
| `starting_after` | `string` | no | A cursor (`next_cursor`) or object ID: return the objects after it (older). |
| `ending_before` | `string` | no | A cursor or object ID: return the objects before it (newer). |

### Returns

A page of results (`ConferenceRoomList`): `data`, `has_more` and `next_cursor`.

### Example

```python
from morevoice import MoreVoice

client = MoreVoice()  # MOREVOICE_API_KEY from the environment

for conference_room in client.conference_rooms.list():
    print(conference_room)
```

## `list_sessions()`

**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}.

```python
# client.conference_rooms
def list_sessions(self, id: str, *, limit: int | Unset = 20, starting_after: str | Unset = UNSET, ending_before: str | Unset = UNSET, more_voice_version: str | Unset = UNSET) -> AsyncPage[_m.ConferenceSession]
```

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

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `str` | yes | A conference room ID (`room_…`). |
| `limit` | `integer` | no | How many objects to return, 1–100 (default 20). |
| `starting_after` | `string` | no | A cursor (`next_cursor`) or object ID: return the objects after it (older). |
| `ending_before` | `string` | no | A cursor or object ID: return the objects before it (newer). |

### Returns

A page of results (`ConferenceSessionList`): `data`, `has_more` and `next_cursor`.

### Example

```python
from morevoice import MoreVoice

client = MoreVoice()  # MOREVOICE_API_KEY from the environment

for conference_room in client.conference_rooms.list_sessions("room_7Hk2Lm9Qp"):
    print(conference_room)
```

## `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.

```python
# client.conference_rooms
def moderate(self, id: str, body: _m.ConferenceRoomsModerateBody | Mapping[str, Any] | Unset = UNSET, *, more_voice_version: str | Unset = UNSET, idempotency_key: str | Unset = UNSET) -> _m.ConferenceLive
```

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

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `str` | yes | A conference room ID (`room_…`). |

### Request body

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `end` | `true` | no | End the session for everyone. |
| `hold` | `boolean` | no | — |
| `lock` | `boolean` | no | Lock (true) or unlock the room: when locked nobody else can join. |
| `mute` | `boolean` | no | — |
| `mute_all` | `true` | no | Mute everyone except the moderators. |
| `participant_id` | `string` | no | The participant to act on (from GET …/live). |
| `remove` | `true` | no | Remove the participant from the room. |
| `role` | `"moderator" \| "member"` | no | — |

### 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

```python
from morevoice import MoreVoice

client = MoreVoice()  # MOREVOICE_API_KEY from the environment

conference_live = client.conference_rooms.moderate("room_7Hk2Lm9Qp", {
    "mute": True,
    "participant_id": "g7Hk2pQx",
})
print(conference_live)
```

## `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.

```python
# client.conference_rooms
def retrieve(self, id: str, *, more_voice_version: str | Unset = UNSET) -> _m.ConferenceRoom
```

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

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `str` | yes | A conference room ID (`room_…`). |

### 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

```python
from morevoice import MoreVoice

client = MoreVoice()  # MOREVOICE_API_KEY from the environment

conference_room = client.conference_rooms.retrieve("room_7Hk2Lm9Qp")
print(conference_room)
```

## `retrieve_ics()`

**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`.

```python
# client.conference_rooms
def retrieve_ics(self, id: str, *, more_voice_version: str | Unset = UNSET) -> str
```

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

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `str` | yes | A conference room ID (`room_…`). |

### Returns

Nothing, on success.

### Example

```python
from morevoice import MoreVoice

client = MoreVoice()  # MOREVOICE_API_KEY from the environment

data = client.conference_rooms.retrieve_ics("room_7Hk2Lm9Qp")
print(data)
```

## `retrieve_live()`

**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.

```python
# client.conference_rooms
def retrieve_live(self, id: str, *, more_voice_version: str | Unset = UNSET) -> _m.ConferenceLive
```

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

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `str` | yes | A conference room ID (`room_…`). |

### 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

```python
from morevoice import MoreVoice

client = MoreVoice()  # MOREVOICE_API_KEY from the environment

conference_live = client.conference_rooms.retrieve_live("room_7Hk2Lm9Qp")
print(conference_live)
```

## `update()`

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

```python
# client.conference_rooms
def update(self, id: str, body: _m.ConferenceRoomsUpdateBody | Mapping[str, Any] | Unset = UNSET, *, more_voice_version: str | Unset = UNSET) -> _m.ConferenceRoom
```

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

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `str` | yes | A conference room ID (`room_…`). |

### Request body

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `active` | `boolean` | no | false: switch the room off (it can't be joined). |
| `moderator_pin` | `string \| null` | no | A new moderator PIN; null removes it. |
| `name` | `string` | no | — |
| `pin` | `string \| null` | no | A new participant PIN; null removes it. |
| `schedule` | `object` | no | Replaces the schedule. |
| `settings` | `object` | no | Only the settings you send change (defaults on create). |

### 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

```python
from morevoice import MoreVoice

client = MoreVoice()  # MOREVOICE_API_KEY from the environment

conference_room = client.conference_rooms.update("room_7Hk2Lm9Qp", {
    "name": "Sales sync (Tuesdays)",
    "settings": {
        "mute_on_entry": True,
    },
})
print(conference_room)
```
