# client.copilot_profiles

> The copilot_profiles methods of the morevoice Python SDK: Real-time agent copilot configuration.

Real-time agent copilot configuration. These methods are on `client.copilot_profiles`, 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 copilot profile.** Returns the new `CopilotProfile`.

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

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

### Request body

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `alerts` | `object[]` | no | — |
| `coaching` | `object` | no | — |
| `company` | `string` | no | Who the agent represents. |
| `compliance` | `object` | no | — |
| `fields` | `object[]` | no | Details the copilot picks out of the conversation. |
| `goal` | `string` | no | What the call should achieve. |
| `kb` | `object` | no | — |
| `language` | `string` | no | The calls' language (`he`, `en`, …). |
| `model` | `object` | no | — |
| `name` | `string` | no | Default: the template's name. |
| `objections` | `object[]` | no | The objection library. |
| `product` | `string` | no | — |
| `qa_rubric` | `object[]` | no | The QA rubric this profile's calls are scored against (empty: the organisation's rubric). |
| `script` | `object` | no | — |
| `stages` | `object[]` | no | The call's stages, each with a checklist (used when no `script` flow is set). |
| `template_id` | `"sales-outbound" \| "customer-service"` | no | Start from a template (GET /v1/copilot_profiles/templates); the fields you send override it. |
| `tone` | `string` | no | How the agent should sound. |

### Returns

`CopilotProfile`:

| Field | Type | Description |
| --- | --- | --- |
| `id` | `string` | The profile's ID. |
| `object` | `"copilot_profile"` | Always `copilot_profile`. |
| `livemode` | `boolean` | `true` in live mode, `false` in test mode. |
| `name` | `string` | — |
| `version` | `integer` | Goes up on every change. |
| `template_id` | `string \| null` | The template it was created from. |
| `goal` | `string` | What the call should achieve. |
| `tone` | `string` | How the agent should sound. |
| `company` | `string` | Who the agent represents. |
| `product` | `string` | — |
| `language` | `string` | The calls' language (`he`, `en`, …). |
| `stages` | `object[]` | The call's stages, each with a checklist (used when no `script` flow is set). |
| `objections` | `object[]` | The objection library. |
| `kb` | `object` | — |
| `fields` | `object[]` | Details the copilot picks out of the conversation. |
| `compliance` | `object` | — |
| `coaching` | `object` | — |
| `alerts` | `object[]` | — |
| `qa_rubric` | `object[]` | The QA rubric this profile's calls are scored against (empty: the organisation's rubric). |
| `script` | `object` | — |
| `model` | `object` | — |
| `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

copilot_profile = client.copilot_profiles.create({
    "company": "Acme",
    "name": "Outbound sales",
    "product": "Acme Cloud PBX",
    "template_id": "sales-outbound",
})
print(copilot_profile)
```

## `delete()`

**Delete a copilot profile.** Deletes the profile. Queues and calls that used it run without a copilot profile.

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

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

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `str` | yes | A copilot profile ID (`cop_…`). |

### Returns

`DeletedCopilotProfile`:

| Field | Type | Description |
| --- | --- | --- |
| `id` | `string` | A copilot profile ID (prefix `cop_`). |
| `object` | `"copilot_profile"` | Always `copilot_profile`. |
| `deleted` | `true` | — |

### Example

```python
from morevoice import MoreVoice

client = MoreVoice()  # MOREVOICE_API_KEY from the environment

deleted_copilot_profile = client.copilot_profiles.delete("cop_7Hk2Lm9Qp")
print(deleted_copilot_profile)
```

## `duplicate()`

**Duplicate a copilot profile.** Returns the new `CopilotProfile`. Answers `404` with the code `resource_missing` when nothing has this ID in this organisation and mode.

```python
# client.copilot_profiles
def duplicate(self, id: str, body: _m.DuplicateCopilotProfileParamsInput | Mapping[str, Any] | Unset = UNSET, *, more_voice_version: str | Unset = UNSET, idempotency_key: str | Unset = UNSET) -> _m.CopilotProfile
```

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

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `str` | yes | A copilot profile ID (`cop_…`). |

### Request body

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `string` | no | Default: the original's name with "(copy)". |

### Returns

`CopilotProfile`:

| Field | Type | Description |
| --- | --- | --- |
| `id` | `string` | The profile's ID. |
| `object` | `"copilot_profile"` | Always `copilot_profile`. |
| `livemode` | `boolean` | `true` in live mode, `false` in test mode. |
| `name` | `string` | — |
| `version` | `integer` | Goes up on every change. |
| `template_id` | `string \| null` | The template it was created from. |
| `goal` | `string` | What the call should achieve. |
| `tone` | `string` | How the agent should sound. |
| `company` | `string` | Who the agent represents. |
| `product` | `string` | — |
| `language` | `string` | The calls' language (`he`, `en`, …). |
| `stages` | `object[]` | The call's stages, each with a checklist (used when no `script` flow is set). |
| `objections` | `object[]` | The objection library. |
| `kb` | `object` | — |
| `fields` | `object[]` | Details the copilot picks out of the conversation. |
| `compliance` | `object` | — |
| `coaching` | `object` | — |
| `alerts` | `object[]` | — |
| `qa_rubric` | `object[]` | The QA rubric this profile's calls are scored against (empty: the organisation's rubric). |
| `script` | `object` | — |
| `model` | `object` | — |
| `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

copilot_profile = client.copilot_profiles.duplicate("cop_7Hk2Lm9Qp", {
    "name": "Outbound sales B",
})
print(copilot_profile)
```

## `list()`

**List copilot profiles.** Returns a page of `CopilotProfile` objects, newest first. Pass `next_cursor` as `starting_after` for the next page; the SDKs iterate every page for you.

```python
# client.copilot_profiles
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.CopilotProfile]
```

`client.copilot_profiles.list()` · `await async_client.copilot_profiles.list()` · `GET /copilot_profiles` · [API reference](https://docs.morevoice.ai/api/operations/copilot_profiles_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 (`CopilotProfileList`): `data`, `has_more` and `next_cursor`.

### Example

```python
from morevoice import MoreVoice

client = MoreVoice()  # MOREVOICE_API_KEY from the environment

for copilot_profile in client.copilot_profiles.list():
    print(copilot_profile)
```

## `list_templates()`

**List copilot profile templates.** The built-in profiles you can start from (`template_id` on create).

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

`client.copilot_profiles.list_templates()` · `await async_client.copilot_profiles.list_templates()` · `GET /copilot_profiles/templates` · [API reference](https://docs.morevoice.ai/api/operations/copilot_profiles_list_templates/)

### 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 (`CopilotProfileTemplateList`): `data`, `has_more` and `next_cursor`.

### Example

```python
from morevoice import MoreVoice

client = MoreVoice()  # MOREVOICE_API_KEY from the environment

for copilot_profile in client.copilot_profiles.list_templates():
    print(copilot_profile)
```

## `retrieve()`

**Retrieve a copilot profile.** Returns the `CopilotProfile` object. Answers `404` with the code `resource_missing` when nothing has this ID in this organisation and mode.

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

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

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `str` | yes | A copilot profile ID (`cop_…`). |

### Returns

`CopilotProfile`:

| Field | Type | Description |
| --- | --- | --- |
| `id` | `string` | The profile's ID. |
| `object` | `"copilot_profile"` | Always `copilot_profile`. |
| `livemode` | `boolean` | `true` in live mode, `false` in test mode. |
| `name` | `string` | — |
| `version` | `integer` | Goes up on every change. |
| `template_id` | `string \| null` | The template it was created from. |
| `goal` | `string` | What the call should achieve. |
| `tone` | `string` | How the agent should sound. |
| `company` | `string` | Who the agent represents. |
| `product` | `string` | — |
| `language` | `string` | The calls' language (`he`, `en`, …). |
| `stages` | `object[]` | The call's stages, each with a checklist (used when no `script` flow is set). |
| `objections` | `object[]` | The objection library. |
| `kb` | `object` | — |
| `fields` | `object[]` | Details the copilot picks out of the conversation. |
| `compliance` | `object` | — |
| `coaching` | `object` | — |
| `alerts` | `object[]` | — |
| `qa_rubric` | `object[]` | The QA rubric this profile's calls are scored against (empty: the organisation's rubric). |
| `script` | `object` | — |
| `model` | `object` | — |
| `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

copilot_profile = client.copilot_profiles.retrieve("cop_7Hk2Lm9Qp")
print(copilot_profile)
```

## `update()`

**Update a copilot profile.** Updates the fields you send. Nested objects merge with the stored values; lists (stages, objections, alerts…) replace them. Calls that start afterwards use the new version.

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

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

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `str` | yes | A copilot profile ID (`cop_…`). |

### Request body

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `alerts` | `object[]` | no | — |
| `coaching` | `object` | no | — |
| `company` | `string` | no | Who the agent represents. |
| `compliance` | `object` | no | — |
| `fields` | `object[]` | no | Details the copilot picks out of the conversation. |
| `goal` | `string` | no | What the call should achieve. |
| `kb` | `object` | no | — |
| `language` | `string` | no | The calls' language (`he`, `en`, …). |
| `model` | `object` | no | — |
| `name` | `string` | no | — |
| `objections` | `object[]` | no | The objection library. |
| `product` | `string` | no | — |
| `qa_rubric` | `object[]` | no | The QA rubric this profile's calls are scored against (empty: the organisation's rubric). |
| `script` | `object` | no | — |
| `stages` | `object[]` | no | The call's stages, each with a checklist (used when no `script` flow is set). |
| `tone` | `string` | no | How the agent should sound. |

### Returns

`CopilotProfile`:

| Field | Type | Description |
| --- | --- | --- |
| `id` | `string` | The profile's ID. |
| `object` | `"copilot_profile"` | Always `copilot_profile`. |
| `livemode` | `boolean` | `true` in live mode, `false` in test mode. |
| `name` | `string` | — |
| `version` | `integer` | Goes up on every change. |
| `template_id` | `string \| null` | The template it was created from. |
| `goal` | `string` | What the call should achieve. |
| `tone` | `string` | How the agent should sound. |
| `company` | `string` | Who the agent represents. |
| `product` | `string` | — |
| `language` | `string` | The calls' language (`he`, `en`, …). |
| `stages` | `object[]` | The call's stages, each with a checklist (used when no `script` flow is set). |
| `objections` | `object[]` | The objection library. |
| `kb` | `object` | — |
| `fields` | `object[]` | Details the copilot picks out of the conversation. |
| `compliance` | `object` | — |
| `coaching` | `object` | — |
| `alerts` | `object[]` | — |
| `qa_rubric` | `object[]` | The QA rubric this profile's calls are scored against (empty: the organisation's rubric). |
| `script` | `object` | — |
| `model` | `object` | — |
| `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

copilot_profile = client.copilot_profiles.update("cop_7Hk2Lm9Qp", {
    "coaching": {
        "talk_ratio_max": 0.6,
    },
})
print(copilot_profile)
```
