# List voices

- **Method:** `GET`
- **Path:** `/v1/voices`
- **Operation ID:** `listVoices`
- **Tags:** Voices

Lists your saved voices, newest first, then the preset voices.

## Effective servers

- `https://api.vcp.name`

## Authentication

- **bearer**: HTTP bearer (`API key`)

  An API key from Settings, starting vcp\_live\_.

## Query parameters

- **`type`**: `string`, possible values: `"saved", "preset"`

  Only saved voices or only presets.

## Responses

### 200 OK.

**Content type:** `application/json`

schema: `VoiceList`, no additional properties

- **`voices` (required)**: `array`

  **Items:**

  schema: `Voice`, no additional properties
  - **`created_at` (required)**: `string | null`, format: `date-time`

    When the voice was saved, or null for presets.
  - **`duration_seconds` (required)**: `number | null`, minimum: `0`

    Length of the reference clip, or null.
  - **`id` (required)**: `string`

    A uuid for saved voices, or the preset id.
  - **`model` (required)**: `string | null`

    The model a preset belongs to, or null for saved voices.
  - **`name` (required)**: `string`
  - **`type` (required)**: `string`, possible values: `"clone", "design", "preset"`

**Example:**

```json
{
  "voices": [
    {
      "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "name": "Narrator",
      "type": "clone",
      "model": null,
      "duration_seconds": 12.4,
      "created_at": "2026-10-30T00:10:42Z"
    },
    {
      "id": "af_alloy",
      "name": "Alloy",
      "type": "preset",
      "model": "kokoro",
      "duration_seconds": null,
      "created_at": null
    }
  ]
}
```

### 400, 401, 403, 429, 500, 503

- `400` The request is invalid. The message names the field.
- `401` The API key is missing, invalid or revoked.
- `403` The account needs a paid plan, or the action is not allowed.
- `429` Too many requests. Retry after the Retry-After header.
- `500` Something went wrong on our side.
- `503` Temporarily unavailable. Retry after the Retry-After header.

**Content type:** `application/json`

schema: `ErrorBody`, no additional properties

- **`error` (required)**: `object`, schema: `ErrorDetail`, no additional properties
  - **`code` (required)**: `string`

    A code from the error tables.
  - **`message` (required)**: `string`

    What went wrong.
  - **`param`**: `string`

    The request field at fault, when there is one.

**Example:**

```json
{
  "error": {
    "code": "invalid_request",
    "message": "text is required.",
    "param": "text"
  }
}
```

## Schemas

### ErrorBody

**Type:** `object`, no additional properties

*Schema `ErrorBody` is shown above.*

**Example:**

```json
{
  "error": {
    "code": "invalid_request",
    "message": "text is required.",
    "param": "text"
  }
}
```

- `ErrorDetail` — shown above.
- `Voice` — shown above.
- `VoiceList` — shown above.
