Fish Audio Docs
API ReferenceVoice Management

Voice Cloning

Upload reference audio and create a custom voice.

Voice Cloning

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

Full URL:

https://fishaudio.org/api/open/v1/voices

Voice creation uses reference audio and the FishAudio creation flow. The Open API route ignores provider overrides, so you do not need to send a provider field.

Request Fields

FieldTypeRequiredDescription
namestringYesVoice name
audioFilesfile[]YesOne or more reference audio files
descriptionstringNoVoice description
referenceTextstringNoTranscript for the reference audio
visibilitystringNoprivate or public. Default: private
languagesstringNoJSON string array, such as '["zh","en"]'

Supported file extensions: aac, flac, m4a, mp3, mp4, mpeg, oga, ogg, opus, wav, and webm. Each file can be up to 10MB.

Do not set the multipart boundary manually. When using curl -F, browser FormData, or an SDK, let the client generate Content-Type.

curl Example

curl -X POST "https://fishaudio.org/api/open/v1/voices" \
  -H "Authorization: Bearer FISHAUDIO_API_KEY" \
  -F "name=My cloned voice" \
  -F "description=Chinese narration voice" \
  -F "visibility=private" \
  -F 'languages=["zh"]' \
  -F "audioFiles=@/path/to/sample-1.mp3;type=audio/mpeg" \
  -F "audioFiles=@/path/to/sample-2.wav;type=audio/wav"

Response

{
  "voiceId": "voice_abc123",
  "title": "My cloned voice",
  "description": "Chinese narration voice",
  "createdAt": "2026-07-09T00:00:00.000Z"
}

Store the returned voiceId, then pass it directly when generating speech.

Errors

StatusMeaning
400Missing fields, unsupported file type, or oversize file
401API key is missing or invalid
403Account cannot create voices
429Voice creation requests are too frequent
500Voice creation failed on the server

Creating a voice records Open API usage and is subject to the current account's Open API quota and provider allocation.

On this page