---
title: "GET /voices/fishaudio/clones — My Fish Audio Voice Clones"
url: https://lumean.app/developers/docs/api/get-voices-fishaudio-clones
locale: ru
description: "My Fish Audio Voice Clones"
generated: 2026-10-17
operationId: fishAudioVoice.clones
method: GET
path: /voices/fishaudio/clones
scopes: [voices.read]
spec_version: 0.0.1
---

# GET /voices/fishaudio/clones

**My Fish Audio Voice Clones**

Клоны голоса Fish Audio владельца ключа, новые сверху. Архивные в список не входят —
только с `status=archived`.

У клона в статусе `ready` есть `voice_id` — его кладут в `tts_settings.voice_id`
шаблона Fish Audio. Пока клон `pending`/`cloning`, `voice_id` равен `null`.

Список работает без проверки подписки: истёкшая подписка созданные клоны не прячет.

**Требуемое право ключа:** `voices.read`.

- Право ключа: `voices.read`

## Запрос

```bash
curl -X GET 'https://api.lumean.app/api/public/voices/fishaudio/clones' \
  -H 'Accept: application/json' \
  -H 'X-API-KEY: YOUR_API_KEY'
```

## Параметры

| Поле | Где | Тип | Обяз. | Описание |
| --- | --- | --- | --- | --- |
| `status` | query | `FishAudioVoiceCloneStatus` — `pending` · `cloning` · `ready` · `failed` · `archived` · `banned` | — | Только клоны в этом статусе. Без параметра — все, кроме `archived`; архивные видны только с `status=archived`. |
| `search` | query | `string` — ≤ 255 симв. | — | Поиск по названию клона (`display_name`). |
| `page` | query | `integer` — ≥ 1 | — | Номер страницы, начиная с `1`. |
| `per_page` | query | `integer` — 1..100 | — | Сколько записей вернуть на странице. Метаданные пагинации лежат рядом с `items`: `current_page`, `last_page`, `per_page`, `total`. |

## Тело запроса

Тела нет.

## Ответы

### 200 — Успех. Полезная нагрузка — в поле `data`.

**Поля ответа**

| Поле | Тип | Обяз. | Описание |
| --- | --- | --- | --- |
| `success` | `boolean` | обяз. | Признак успеха. Решение принимайте по HTTP-коду: у любого ответа 2xx здесь `true`, а ошибка приходит телом другой формы, где этого поля может не быть вовсе. |
| `message` | `string` | обяз. | Пояснение для человека, на языке аккаунта. Показать пользователю можно; разбирать программно — нет: формулировки меняются без предупреждения и кодом ошибки не являются. |
| `data` | `object` | обяз. | Полезная нагрузка ответа. |
| `data.items` | `array<FishAudioVoiceClone>` | обяз. | Ваши клоны голоса Fish Audio на этой странице, новые сверху. |
| `data.items[].id` | `string` | обяз. | UUID клона. Его подставляют в пути `/voices/fishaudio/clones/{voiceClone}/…`; в шаблон он НЕ идёт — туда идёт `voice_id`. |
| `data.items[].provider` | `string` — `fishaudio` | обяз. | Провайдер клона — всегда `fishaudio`. |
| `data.items[].display_name` | `string` | обяз. | Название клона, заданное при создании. |
| `data.items[].language` | `string` | обяз. | Справочная метка языка (ISO 639-1) либо `null`, если не передавалась. На клонирование не влияет. |
| `data.items[].description` | `string` | обяз. | Ваше описание клона либо `null`. |
| `data.items[].status` | `string` | обяз. | Статус: `pending` → `cloning` → `ready` либо `failed`; `archived` — снят владельцем; `banned` — заблокирован модератором. Озвучивать можно только `ready`. |
| `data.items[].voice_id` | `string` | обяз. | Идентификатор голоса Fish Audio (строка из 32 hex-символов, не UUID) — значение для `tts_settings.voice_id` шаблона с `service_key: fishaudio`. Есть только у `ready`, иначе `null`. |
| `data.items[].attempts` | `integer` | обяз. | Номер попытки клонирования: 1 при создании, +1 за каждый повтор. |
| `data.items[].error` | `object` — nullable | обяз. | Причина отказа последней попытки; `null`, пока отказа не было. |
| `data.items[].error.reason` | `string` | обяз. | Машинный код отказа: `processing_error`, `max_retries`, `network`, `timeout`, `dispatch_failed`, `unbanned` (клон разбанен, но голоса у него не было). Повторить попытку — `POST /voices/fishaudio/clones/{voiceClone}/retry`; если `processing_error` повторяется, смените образец. |
| `data.items[].error.message` | `string` | обяз. | Пояснение к отказу для человека либо `null`. Ветвитесь по `reason`, а не по тексту. |
| `data.items[].created_at` | `string` | обяз. | Когда клон создан. |
| `data.items[].completed_at` | `string` | обяз. | Когда клон стал `ready`; `null` до этого. |
| `data.items[].failed_at` | `string` | обяз. | Когда последняя попытка завершилась отказом; `null`, если отказа нет. |
| `data.items[].banned_at` | `string` | обяз. | Когда клон заблокирован модератором (`status = banned`); `null`, если блокировки нет. |
| `data.items[].ban_reason` | `string` | обяз. | Причина блокировки от модератора либо `null`. Заблокированный клон нельзя ни использовать, ни архивировать. |
| `data.current_page` | `integer` | обяз. | Номер текущей страницы, с единицы. |
| `data.last_page` | `integer` | обяз. | Номер последней страницы. |
| `data.per_page` | `integer` | обяз. | Размер страницы, применённый сервером. |
| `data.total` | `integer` | обяз. | Сколько записей всего по фильтру. |

**Пример**

```json
{
  "success": true,
  "message": "Success",
  "data": {
    "items": [
      {
        "id": "01a10e08-2ee3-73c2-88b2-8df2bcef9d1e",
        "provider": "fishaudio",
        "display_name": "Narrator (my voice)",
        "language": "ru",
        "description": null,
        "status": "ready",
        "voice_id": "b3f1c9a07e5d4a2c8d6e1f0a9b7c5d34",
        "attempts": 1,
        "error": null,
        "created_at": "2026-10-14T08:02:11+00:00",
        "completed_at": "2026-10-14T08:03:40+00:00",
        "failed_at": null,
        "banned_at": null,
        "ban_reason": null
      },
      {
        "id": "01a10e08-2ee5-702c-b492-243c88fd9670",
        "provider": "fishaudio",
        "display_name": "Noisy sample",
        "language": "ru",
        "description": null,
        "status": "failed",
        "voice_id": null,
        "attempts": 1,
        "error": {
          "reason": "processing_error",
          "message": "The provider rejected the sample."
        },
        "created_at": "2026-10-14T07:40:02+00:00",
        "completed_at": null,
        "failed_at": "2026-10-14T07:41:15+00:00",
        "banned_at": null,
        "ban_reason": null
      }
    ],
    "current_page": 1,
    "last_page": 1,
    "per_page": 20,
    "total": 2
  }
}
```

### 401 — Невалидный или отсутствующий X-API-KEY

**Поля ответа**

| Поле | Тип | Обяз. | Описание |
| --- | --- | --- | --- |
| `success` | `boolean` | обяз. | Всегда `false` в ответах об ошибке. |
| `message` | `string` | обяз. | Текст ошибки на языке ключа (задаётся заголовком `X-Locale`). |
| `data` | `null` — nullable | обяз. | Всегда `null`, когда запрос отклонён до обработки. |

**Пример**

```json
{
  "success": false,
  "message": "API key is missing. Provide it in the X-API-KEY header.",
  "data": null
}
```

### 403 — У ключа нет права voices.read

**Поля ответа**

| Поле | Тип | Обяз. | Описание |
| --- | --- | --- | --- |
| `success` | `boolean` | обяз. | Всегда `false` в ответах об ошибке. |
| `message` | `string` | обяз. | Текст ошибки на языке ключа (задаётся заголовком `X-Locale`). |

**Пример**

```json
{
  "success": false,
  "message": "This API key does not have permission to perform this action."
}
```

### 422 — Ошибка валидации. Поля с ошибками перечислены в `errors`.

**Поля ответа**

| Поле | Тип | Обяз. | Описание |
| --- | --- | --- | --- |
| `message` | `string` | обяз. | Errors overview. |
| `errors` | `object` | обяз. | A detailed description of each field that failed validation. |
| `errors.*` | `array<string>` — произвольные ключи | — |  |

**Пример**

```json
{
  "message": "string",
  "errors": {}
}
```

---

- Эта же страница в браузере: https://lumean.app/developers/docs/api/get-voices-fishaudio-clones
- Машинный справочник целиком: https://api.lumean.app/docs/llm.md
