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

# Custom voices

> Make a voice from a short recording

A voice can be made from a short recording of a person and used like any other voice (`"voice": "<id>"`).

> [!WARNING]
>
> The result is a similar-sounding voice, not an exact copy of the person. You must have the person's consent.

A voice belongs to one language: record the person speaking that language, and the voice speaks only that language. It works best with 10-30 s of clean speech of one person, recorded with a microphone (not through a phone call), in a quiet room.

## What happens to the recording

It is decoded, its silences are trimmed and it is levelled. The best 5-8 s become the voice. Before anything is stored, the new voice speaks three test sentences; if it fails them the request answers `422`.

**The uploaded recording is not kept.** Only the voice state and its details (name, language, gender, consent record, quality numbers) are stored. `DELETE` removes them for good. A voice belongs to the account of the API key; other accounts get `404`.

## `quality` in the answer

| Field | Meaning |
| - | - |
| `speech_seconds` | Speech in the upload |
| `reference_seconds` | The part used |
| `snr_db` | Rough signal-to-noise estimate |
| `high_band_db` | Energy above 4 kHz against below; telephone audio has none |
| `duration_ratio_max` | Longest test sentence against the default voice; 1.0 = same length |

## Rejected recordings (`422`)

Not 10-30 s long; less than 5 s of speech; too noisy (estimated SNR under 20 dB); telephone band (nothing above 4 kHz); the voice fails the test sentences. The message says why. Several speakers, music and strong echo are not checked: send one person's speech only.

## Limits

20 custom voices per account (more answers `409`); upload at most 10 MB (`413`).

## Speaking with a custom voice

`POST /v1/audio/speech` with `"voice": "<id>"` or `"voice": {"id": "<id>"}`. The language is the voice's; another `language` answers `400`. An id that is not yours answers `404` and never falls back to a default voice. After a model update a voice may answer `409`: create it again.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.