FishSpeech Docs
API ReferenceVoices

Voices

List, create, and delete voice models.

Voices

Voice endpoints manage the voice ids used by TTS requests. Most applications list voices for selection, create custom voices from reference audio, and delete voices that should no longer be available.

List Voices

GET /api/open/v1/voices
Authorization: Bearer YOUR_API_TOKEN

Request

Supported query parameters may include provider, search, limit, and offset. Keep pagination in your UI even if your account starts with only a few voices.

curl "https://fishaudio.org/api/open/v1/voices?limit=20&offset=0" \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Response

{
  "total": 1,
  "page": 1,
  "pageSize": 20,
  "totalPages": 1,
  "items": [
    {
      "id": "voice_123",
      "name": "My Voice",
      "provider": "fishaudio"
    }
  ]
}

Use id as voiceId in TTS requests. Do not rely on display names for stable lookup because users can rename voices.

Create Voice

POST /api/open/v1/voices
Authorization: Bearer YOUR_API_TOKEN
Content-Type: multipart/form-data

Voice creation commonly uses reference audio. The exact multipart fields depend on the enabled provider and model creation flow, so validate against GET /api/openapi.json for your deployed environment.

Store the returned voice id with the user or project that owns it. If creation is asynchronous for your account, show a training or processing state before allowing the voice to be selected for generation.

Delete Voice

DELETE /api/open/v1/voices/{voiceId}
Authorization: Bearer YOUR_API_TOKEN

Deletion should be treated as a destructive account operation. Confirm the owner, remove the voice from your own selection lists, and expect old generation records to keep referencing the historical id.

Billing And Credits

Listing voices is an account operation. Creating a voice may consume credits, quota, or provider-specific allocation depending on the enabled provider. Deleting a voice does not imply refund of previous generation or training usage.

Errors

StatusMeaningAction
400Invalid query, multipart fields, or voice idFix the request
401Token is invalidRefresh credentials
402Account lacks credits or provider allocation for creationStop voice creation and show billing state
404Voice id does not exist for this accountRefresh your local voice list
409Voice cannot be deleted because it is in useRemove dependencies first

On this page