> ## Documentation Index
> Fetch the complete documentation index at: https://docs.goyappr.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Voices

> The two voice families, how a voice is selected over the API, and what each family supports.

An agent's `voice` is a persona name. It is the only thing that selects how the agent speaks — there is no engine, model or provider field in the API, and `engine` / `engine_voice` are rejected with a `400` if you send them.

```bash theme={null}
curl -X PATCH https://api.yappr.ai/v1/agents/{agent_id} \
  -H "Authorization: Bearer $YAPPR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "voice": "Keren" }'
```

Voice names are case-insensitive on the way in (`"keren"` works) and always come back Title Case:

```json theme={null}
{ "id": "…", "name": "Reception", "voice": "Keren", "language": "he", … }
```

## Two families

Every voice belongs to exactly one family, and no name appears in both. Naming a voice from the other family is what moves an agent between them — you never say which family you want.

### Standard voices

Thirty personas, and the default for every new agent (`Rachel`). They support the full agent surface: `temperature`, the three `vad_*` turn-taking settings, and `type: "flow"` agents.

`Michal`, `Yonatan`, `David`, `Rachel`, `Gil`, `Noa`, `Maya`, `Adam`, `Shira`, `Avigail`, `Amir`, `Liat`, `Omer`, `Tamar`, `Tom`, `Benny`, `Nir`, `Natan`, `Yael`, `Dvora`, `Yosef`, `Shir`, `Anat`, `Ariel`, `Roi`, `Shlomo`, `Dana`, `Alon`, `Ruth`, `Yuval`

### Expressive voices

Eight personas with a wider emotional range, more natural interruption handling and their own turn-taking.

| Voice   | Gender | Character | Accent when speaking English |
| ------- | ------ | --------- | ---------------------------- |
| `Keren` | female | Precise   | —                            |
| `Eitan` | male   | Composed  | North American               |
| `Hila`  | female | Sunny     | North American               |
| `Ido`   | male   | Agile     | Australian-influenced        |
| `Boaz`  | male   | Calm      | British-influenced           |
| `Tali`  | female | Soothing  | Irish-influenced             |
| `Erez`  | male   | Solid     | Irish-influenced             |
| `Efrat` | female | Steady    | —                            |

The accent column applies only when the agent speaks English. All eight speak Hebrew.

## What the expressive family does not take

These voices run their own turn-taking and expressiveness, so four settings have nothing to act on. Rather than storing a number that changes nothing about the call, the API rejects them with a `400`:

* `temperature`
* `vad_stop_secs`
* `vad_start_secs`
* `vad_confidence`

Everything else on the agent behaves identically: `system_prompt`, `greeting_message`, `agent_speaks_first`, `language`, tools, webhooks, `extraction_parameters`, `silence_timeout_secs`, `max_continuous_speech_secs`, `max_call_duration_secs`, `background_sound` and `lead_memory_enabled`.

They are also **not available on flow agents** (`type: "flow"`). A flow agent must use a standard voice.

## Switching an agent between families

`PATCH /agents/{id}` with a voice from the other family moves the agent. The move is lossless in both directions — the standard voice is kept aside while the agent is on an expressive one, so switching back restores exactly the voice it had:

```bash theme={null}
# Reception is on Rachel. Move it to Keren:
curl -X PATCH .../agents/{id} -d '{ "voice": "Keren" }'   # → { "voice": "Keren" }

# …and back:
curl -X PATCH .../agents/{id} -d '{ "voice": "Rachel" }'  # → { "voice": "Rachel" }
```

If the agent already carries `temperature` or `vad_*` values from its time on a standard voice, they stay on the row untouched and are simply not read while it is on an expressive voice. You do not have to clear them to switch — you only cannot *set* them in the same request.

## Availability

Both families are available to every workspace — there is nothing to switch on and nothing to request. All thirty-eight names are accepted on any agent, subject only to the two limits above: an expressive voice takes none of the four turn-taking settings, and cannot be used on a `type: "flow"` agent.

## Errors

| Status | Message                                                                      | Cause                                                                                                             |
| ------ | ---------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| `400`  | `Invalid voice. Options: …`                                                  | The name is not a Yappr voice. The listed options are every voice you may use.                                    |
| `400`  | `temperature, vad_stop_secs … cannot be set on an agent using the voice "…"` | One of the four unsupported settings was sent alongside an expressive voice. Omit it, or choose a standard voice. |
| `400`  | `The voice "…" is not available on flow agents.`                             | An expressive voice was requested for a `type: "flow"` agent.                                                     |
| `400`  | `The 'engine' field is not accepted. Set "voice" instead…`                   | There is no engine field. The voice carries that decision.                                                        |
