# Voice Management

List, clone, and delete voices.

Manage your Stealth TTS voices — list available voices, clone custom voices from audio samples, and delete cloned voices.

### `GET /api/voices/stealth`

List available Stealth voices. Returns built-in voices plus any voices you have cloned.

**Example Request**

```
curl "https://api.algrow.online/api/voices/stealth" \
-H "Authorization: Bearer YOUR_API_KEY"
```

**Response**

```
{
  "success": true,
  "voices": [
    {
      "voice_id": "james",
      "name": "James",
      "language": "en",
      "description": "",
      "tags": [],
      "is_cloned": false
    },
    {
      "voice_id": "my-custom-voice",
      "name": "My Custom Voice",
      "language": "en",
      "description": "Cloned from sample",
      "tags": ["custom"],
      "is_cloned": true
    }
  ]
}
```

**Response Fields**

| Field | Type | Description |
| --- | --- | --- |
| voice_id | string | Use this as the `voice_id` parameter in `/api/generate-simple` |
| name | string | Display name of the voice |
| language | string | Language code (e.g. `en`, `es`, `de`) |
| is_cloned | boolean | Whether this voice was cloned by you |

200 Success 401 Auth failed

### `POST /api/voices/clone`

Clone a custom Stealth voice from an audio sample. Upload up to 30 seconds of clear speech audio. The cloned voice can then be used with `provider=stealth` in the generate endpoint.

**Clone limits by plan:** Professional — 30 clones, Ultimate — unlimited. Requires Professional or Ultimate plan.

**Request Parameters (multipart form-data)**

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| displayName | string | Required | — | Name for the cloned voice |
| audioFile | file | Required | — | Audio sample (MP3, WAV, M4A, OGG, WEBM). Max 15MB, max 30 seconds. |
| langCode | string | Optional | EN_US | Language of the audio. Values: `EN_US`, `ES_ES`, `FR_FR`, `DE_DE`, `PT_BR`, `IT_IT`, `JA_JP`, `KO_KR`, `ZH_CN`, `RU_RU`, `AR_SA`, `PL_PL`, `NL_NL`, `HI_IN`, `HE_IL` |
| transcription | string | Optional | — | Text transcription of the audio sample (improves clone quality) |
| description | string | Optional | — | Description of the voice |
| tags | string | Optional | — | Comma-separated tags (e.g. `narrator,deep`) |
| removeBackgroundNoise | string | Optional | false | Set to `true` to remove background noise from the sample |

**Example Request**

```
curl -X POST "https://api.algrow.online/api/voices/clone" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "displayName=My Narrator" \
-F "langCode=EN_US" \
-F "audioFile=@sample.mp3" \
-F "transcription=Hello, this is a sample of my voice." \
-F "removeBackgroundNoise=true"
```

**Response**

```
{
  "success": true,
  "voice": {
    "voice_id": "my-narrator",
    "name": "My Narrator",
    "language": "EN_US",
    "description": "",
    "tags": []
  }
}
```

200 Created 400 Validation error 401 Auth failed 403 Plan / limit

### `DELETE /api/voices/stealth/:voice_id`

Delete a cloned Stealth voice. Only voices you own can be deleted. This action is permanent.

**Path Parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| voice_id | string | Required | The `voice_id` of the cloned voice to delete |

**Example Request**

```
curl -X DELETE "https://api.algrow.online/api/voices/stealth/my-narrator" \
-H "Authorization: Bearer YOUR_API_KEY"
```

**Response**

```
{
  "success": true
}
```

200 Deleted 401 Auth failed 404 Not found

### `GET /api/voices/minimax`

List MiniMax voices you have cloned. MiniMax has no built-in catalog — every voice in your library was created via [/api/voices/minimax/clone](#clone-minimax-voice). Requires Professional or Ultimate plan.

**Headers**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| Authorization | string | Required | Bearer token: `Bearer YOUR_API_KEY` |

**Example Request**

```
curl "https://api.algrow.online/api/voices/minimax" \
-H "Authorization: Bearer YOUR_API_KEY"
```

**Response**

```
{
  "success": true,
  "voices": [
    {
      "voice_id": "user_abc123_my_narrator",
      "name": "My Narrator",
      "language": "English",
      "is_cloned": true,
      "created_at": "2026-06-01T12:00:00"
    }
  ]
}
```

**Response Fields**

| Field | Type | Description |
| --- | --- | --- |
| voice_id | string | Use this as the `voice_id` parameter in `/api/generate-simple` with `provider=minimax` |
| name | string | Display name you assigned when cloning |
| language | string | Language tag assigned at clone time (e.g. `English`, `Spanish`) |
| is_cloned | boolean | Always `true` — MiniMax voices are user-cloned only |
| created_at | string | ISO-8601 timestamp when the voice was cloned |

200 Success 401 Auth failed 403 Plan required

### `POST /api/voices/minimax/clone`

Clone a custom MiniMax voice from an audio sample. Upload a clear speech sample of at least 30 seconds. The cloned voice can then be used with `provider=minimax` in the generate endpoint. Requires Professional or Ultimate plan.

**Headers**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| Authorization | string | Required | Bearer token: `Bearer YOUR_API_KEY` |
| Content-Type | string | Auto | Set automatically by `curl -F`. If manual: `multipart/form-data` |

**Clone limits by plan:** Starter — 3 clones, Professional — 8 clones, Ultimate — 15 clones. Pro/Ultimate required to use this endpoint — the Starter limit is informational only.

**Request Parameters (multipart form-data)**

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| voice_name | string | Required | — | Display name for the cloned voice |
| audio_file | file | Required | — | Audio sample (MP3, WAV, M4A, OGG, WEBM). Max 5MB. Min 30 seconds. |
| language | string | Optional | English | Language of the sample. Values: `English`, `Chinese`, `Spanish`, `French`, `German`, `Italian`, `Portuguese`, `Polish`, `Russian`, `Ukrainian`, `Czech`, `Slovak`, `Croatian`, `Serbian`, `Bulgarian`, `Dutch`, `Romanian`, `Swedish`, `Norwegian`, `Afrikaans`, `Catalan`, `Greek`, `Lithuanian`, `Latvian`, `Vietnamese`, `Indonesian`, `Malay`, `Tagalog`, `Swahili`, `Hindi`, `Japanese`, `Korean`, `Danish`, `Finnish`, `Hungarian`, `Slovenian` |
| need_noise_reduction | string | Optional | true | Set to `false` to skip background-noise reduction on the sample |

**Example Request**

```
curl -X POST "https://api.algrow.online/api/voices/minimax/clone" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "voice_name=My Narrator" \
-F "audio_file=@sample.mp3" \
-F "language=English" \
-F "need_noise_reduction=true"
```

**Response**

```
{
  "success": true,
  "voice": {
    "voice_id": "user_abc123_my_narrator",
    "name": "My Narrator",
    "language": "English",
    "is_cloned": true
  }
}
```

**Response Fields**

| Field | Type | Description |
| --- | --- | --- |
| voice_id | string | Use this as the `voice_id` parameter in `/api/generate-simple` with `provider=minimax` |
| name | string | Display name you supplied |
| language | string | Language tag assigned to the clone |
| is_cloned | boolean | Always `true` |

200 Created 400 Validation error 401 Auth failed 403 Plan / limit 502 Upstream error

### `DELETE /api/voices/minimax/{voice_id}`

Delete one of your cloned MiniMax voices. Removes the voice from your library and best-effort deletes it upstream. Requires Professional or Ultimate plan.

**Headers**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| Authorization | string | Required | Bearer token: `Bearer YOUR_API_KEY` |

**Path Parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| voice_id | string | Required | The `voice_id` of one of your cloned MiniMax voices (from [/api/voices/minimax](#list-minimax-voices)) |

**Example Request**

```
curl -X DELETE "https://api.algrow.online/api/voices/minimax/user_abc123_my_narrator" \
-H "Authorization: Bearer YOUR_API_KEY"
```

**Response**

```
{
  "success": true
}
```

200 Deleted 401 Auth failed 403 Plan required 404 Not owned
