# Rename a designed voice

`PATCH https://api.paxalabs.com/v1/voices/designed/{id}`

PATCH /v1/voices/designed/{id} changes a designed voice's name and returns the voice.

The id and the sound stay the same. A catalog voice's name answers [400 voice_name_taken](https://paxalabs.com/docs/errors#voice_name_taken), and an id the account does not hold answers [400 unknown_voice](https://paxalabs.com/docs/errors#unknown_voice). Renaming costs nothing and takes no rate-limit token.

## Headers

- `authorization` (Bearer pxa_..., required): Authorization: Bearer pxa_... (recommended).
- `x-api-key` (pxa_..., optional): Alternative to the Authorization header. Ignored when Authorization is present.

See authentication at https://paxalabs.com/docs/authentication.

## Path

- `id` (string, required): The designed voice's id, starting "voice_".

## Body

- `name` (string, required, 1 to 60 characters): The new name, up to 60 characters. A catalog voice's name answers 400 voice_name_taken.

## Response

- `id` (string, required): The voice id, starting "voice_". Send it as voice with model paxa-tts-flash-v2 on POST /v1/tts, POST /v1/audio/speech, or the /v1/tts/live socket.
- `name` (string, required): Display name, which PATCH changes. The voice field does not accept it.
- `role` (string, required): Who the voice is, in a few words.
- `description` (string, required): How the voice sounds, in one sentence.
- `gender` ("f" or "m", required): Voice gender, "f" or "m".
- `language` ("th" or "en" or "zh", required): The one language the voice speaks: "th" (Thai), "en" (English), or "zh" (Mandarin Chinese, Simplified script).
- `model` (string, required): The model the voice speaks on.
- `created_at` (string, required): Save time, ISO 8601.

## Errors

- `validation` (400): The request body, query, or headers failed validation against the endpoint schema, or broke a rule the endpoint's reference states. A field the schema refused adds two fields to the problem body. path names the first failing field by location and name in dot form, such as body.voice or headers.idempotency-key. A body that could not be read gives the path body alone. reason is one stable code from the validation reasons list.
- `unknown_voice` (400): The voice id names no voice on the model's roster and no designed voice this account holds.
- `voice_name_taken` (400): The name is a catalog voice's name, which no designed voice can take. Nothing was saved.
- `unauthorized` (401): The request carried no API key, or the key is invalid or disabled.

## Example

curl:

```bash
curl -X PATCH https://api.paxalabs.com/v1/voices/designed/voice_3f9a1c2e7b4d4e8a9c0b1d2e3f4a5b6c \
  -H "Authorization: Bearer $PAXA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Nok, night shift"}'
```

Response:

```json
{
  "id": "voice_3f9a1c2e7b4d4e8a9c0b1d2e3f4a5b6c",
  "name": "Nok, night shift",
  "role": "Pharmacist",
  "description": "A calm, warm voice that explains each step slowly.",
  "gender": "f",
  "language": "th",
  "model": "paxa-tts-flash-v2",
  "created_at": "2026-10-23T08:41:16.204Z"
}
```
