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

# GET /voices/fishaudio

**Fish Audio Voices**

The voice catalogue of the Fish Audio text-to-speech service: active voices, filterable
by language (`ru`, `en`, `es`), gender (`male`/`female`) and a search string. Put the
`voice_id` from the response (a 32-character hex string, not a UUID) into
`tts_settings.voice_id` of a template with `service_key: fishaudio`; the `voice_id`
parameter finds one voice by its exact id — the name of a voice already chosen in a
template.

Your own cloned voice does not show up in the catalogue — its `voice_id` comes from
`GET /voices/fishaudio/clones` (only once the clone is `ready`).

If the service is closed to the key owner (closed testing), the answer is `404`
with `reason: service_not_found`.

**Required key permission:** `voices.read`.

- Benötigtes Recht: `voices.read`

## Anfrage

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

## Parameter

| Feld | In | Typ | Pflicht | Beschreibung |
| --- | --- | --- | --- | --- |
| `language` | query | `string` — ≤ 16 Zeichen | — | Catalogue language: `ru`, `en` or `es`. |
| `gender` | query | `string` — ≤ 32 Zeichen | — | Voice gender: `male` or `female`. |
| `search` | query | `string` — ≤ 255 Zeichen | — | Search by voice name and description. |
| `voice_id` | query | `string` — ≤ 255 Zeichen | — | Exact voice `voice_id` — look up the name and preview of a voice already chosen in a template without paging through the catalogue. A voice withdrawn from the catalogue is not returned: the list is empty. |
| `page` | query | `integer` — ≥ 1 | — | Page number, starting at `1`. |
| `per_page` | query | `integer` — 1..200 | — | How many records to return per page. Pagination metadata sits next to `items`: `current_page`, `last_page`, `per_page`, `total`. |

## Request-Body

Kein Body.

## Antworten

### 200 — Success. The payload is in `data`.

**Antwortfelder**

| Feld | Typ | Pflicht | Beschreibung |
| --- | --- | --- | --- |
| `success` | `boolean` | Pflicht | Success flag. Branch on the HTTP status code instead: any 2xx response carries `true` here, while an error comes back in a different shape that need not contain this field at all. |
| `message` | `string` | Pflicht | A human-readable note in the account language. Fine to show to a user; do not parse it — the wording changes without notice and is not an error code. |
| `data` | `object` | Pflicht | The response payload. |
| `data.items` | `array<FishAudioVoice>` | Pflicht | Fish Audio catalogue voices on this page. |
| `data.items[].id` | `string` | Pflicht | Internal id of the catalogue entry. Not needed for narration — `voice_id` goes into the template. |
| `data.items[].voice_id` | `string` | Pflicht | The Fish Audio voice id (a 32-character hex string, not a UUID) — the value for `tts_settings.voice_id` of a template with `service_key: fishaudio`. |
| `data.items[].name` | `string` | Pflicht | Voice name. |
| `data.items[].description` | `string` | Pflicht | Voice description from Fish Audio, or `null`. |
| `data.items[].language` | `string` | Pflicht | Catalogue language the voice was imported under (`ru`, `en`, `es`), or `null`. |
| `data.items[].languages` | `string \| array<string>` | Pflicht | All languages of the voice according to Fish Audio. |
| `data.items[].gender` | `string` | Pflicht | Voice gender: `male`, `female`, or `null`. |
| `data.items[].tags` | `string \| array<string>` | Pflicht | Voice tags at Fish Audio. |
| `data.items[].author_name` | `string` | Pflicht | Voice author at Fish Audio, or `null`. |
| `data.items[].task_count` | `integer` | Pflicht | How many times the voice has been used at Fish Audio — a popularity measure; the catalogue is sorted by it. |
| `data.items[].like_count` | `integer` | Pflicht | Number of likes of the voice at Fish Audio. |
| `data.items[].preview_url` | `string` | Pflicht | A temporary link (60 minutes) to an MP3 sample of the voice, or `null` while the preview has not been downloaded yet. |
| `data.current_page` | `integer` | Pflicht | Current page number, starting from one. |
| `data.last_page` | `integer` | Pflicht | Number of the last page. |
| `data.per_page` | `integer` | Pflicht | Page size the server applied. |
| `data.total` | `integer` | Pflicht | Total number of records matching the filter. |

**Beispiel**

```json
{
  "success": true,
  "message": "Success",
  "data": {
    "items": [
      {
        "id": 31,
        "voice_id": "8ef4a238714b45718ce04243307c57a7",
        "name": "Russian Narrator",
        "description": "Calm male narrator.",
        "language": "ru",
        "languages": [
          "ru"
        ],
        "gender": "male",
        "tags": [
          "male",
          "narration"
        ],
        "author_name": "Fish",
        "task_count": 120450,
        "like_count": 380,
        "preview_url": "https://s3.example.com/fishaudio/voice-previews/8ef4a238714b45718ce04243307c57a7.mp3?X-Amz-Expires=3600"
      },
      {
        "id": 32,
        "voice_id": "5c3a9e1b7d2f4086a1b4e0c9d8f72a63",
        "name": "Warm Storyteller",
        "description": null,
        "language": "en",
        "languages": [
          "en",
          "es"
        ],
        "gender": "female",
        "tags": [
          "female"
        ],
        "author_name": null,
        "task_count": 8120,
        "like_count": 54,
        "preview_url": null
      }
    ],
    "current_page": 1,
    "last_page": 1,
    "per_page": 50,
    "total": 2
  }
}
```

### 401 — The key is missing, unknown, disabled or expired.

**Antwortfelder**

| Feld | Typ | Pflicht | Beschreibung |
| --- | --- | --- | --- |
| `success` | `boolean` | Pflicht | Always `false` in error responses. |
| `message` | `string` | Pflicht | Error text in the key's language (set through the `X-Locale` header). |
| `data` | `null` — nullable | Pflicht | Always `null` when the request is rejected before processing. |

**Beispiel**

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

### 403 — The key lacks the `voices.read` permission.

**Antwortfelder**

| Feld | Typ | Pflicht | Beschreibung |
| --- | --- | --- | --- |
| `success` | `boolean` | Pflicht | Always `false` in error responses. |
| `message` | `string` | Pflicht | Error text in the key's language (set through the `X-Locale` header). |

**Beispiel**

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

### 404 — The Fish Audio service is closed to the key owner (`reason: service_not_found`).

**Antwortfelder**

| Feld | Typ | Pflicht | Beschreibung |
| --- | --- | --- | --- |
| `success` | `boolean` | Pflicht | Always `false` in error responses. |
| `message` | `string` | Pflicht | The reason for the rejection in words, in the account language. Meant for display; do not branch on it, the wording changes. |
| `reason` | `string` | Pflicht | Machine-readable reason of a business refusal (for example, `input_expired`, `insufficient_balance`). Branch on it, not on the `message` text. |
| `error_code` | `string` | Pflicht | The same machine-readable code as in `reason` — a second name for the field. The values always match. |

**Beispiel**

```json
{
  "success": false,
  "message": "Service not found.",
  "reason": "service_not_found",
  "error_code": "service_not_found"
}
```

### 422 — Validation error, for example `per_page` above 200. Offending fields are listed in `errors`.

**Antwortfelder**

| Feld | Typ | Pflicht | Beschreibung |
| --- | --- | --- | --- |
| `message` | `string` | Pflicht | Errors overview. |
| `errors` | `object` | Pflicht | A detailed description of each field that failed validation. |
| `errors.*` | `array<string>` — beliebige Schlüssel | — |  |

**Beispiel**

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

---

- Diese Seite im Browser: https://lumean.app/de/developers/docs/api/get-voices-fishaudio
- Vollständige maschinenlesbare Referenz: https://api.lumean.app/docs/llm.md
