Fish Audio Voice Clone API

Upload a clean sample to create a reusable Fish Audio Voice ID, then use it as reference_id; the website Free Tier lists 3 public voice slots.

Updated 7/15/2026Provider trust 50/1002 code examples

About the Model

Why choose Fish Audio S2.1 Pro?

Choose S2.1 Pro when you need natural speech across many languages without maintaining separate language models. It automatically detects the input language and supports 83 languages.

Core strengths

  • Natural direction: place descriptive cues such as [whispers sweetly], [laugh], or [sigh] inside the text.
  • Reusable voices: create a voice clone once, then pass its Voice ID as reference_id to later TTS requests.
  • Same free-model quality: s2.1-pro-free uses the same model quality and language coverage as s2.1-pro.

What free means

The API model s2.1-pro-free costs $0 for development and testing under unpublished fair-use limits. It has no TTFA or DPA guarantees. This is separate from the website Free Tier, which currently lists 8,000 monthly credits, about 7 minutes, 500 characters per generation, and 3 public voice slots.

Create a Fish Audio account and API key: https://fish.audio/?aff=QNLX47TF37QU6

How to Access for Free (via Fish Audio)

Why create a persistent voice clone?

A persistent clone turns one or more recordings into a reusable Voice ID for a consistent brand, narrator, character, or localization voice.

Recording guidance

  • Upload WAV, MP3, M4A, or Opus with one clear speaker.
  • Aim for at least 10 seconds; one or two minutes of clean speech improves fidelity.
  • Avoid music, reverb, noise, and overlapping speech. Matching transcripts can improve pronunciation.

What free means

The website Free Tier currently lists enhanced voice cloning and 3 public voice slots with no credit card. That allowance is separate from the $0 fair-use s2.1-pro-free API model. This endpoint has complete multipart examples but is intentionally excluded from our Playground because recording upload and voice-model management need a dedicated consent and storage flow.

Create a Fish Audio account and API key: https://fish.audio/?aff=QNLX47TF37QU6

Try it in your browser

Pick a model, paste your own free key, and run. Your key is sent once to call the provider and never stored on our servers.

Pick a model, paste your own free key, and run. Your key is sent once to call the provider and never stored on our servers.

Code Examples

curl
curl --request POST https://api.fish.audio/model \
  --header "Authorization: Bearer $FISH_API_KEY" \
  --form type=tts \
  --form title="My Voice" \
  --form "description=Cloned from a clean sample" \
  --form visibility=public \
  --form train_mode=fast \
  --form enhance_audio_quality=true \
  --form voices=@sample.wav
python
import os
import requests

with open("sample.wav", "rb") as audio:
    response = requests.post(
        "https://api.fish.audio/model",
        headers={"Authorization": f"Bearer {os.environ['FISH_API_KEY']}"} ,
        data={"type": "tts", "title": "My Voice",
              "visibility": "public", "train_mode": "fast",
              "enhance_audio_quality": "true"},
        files={"voices": ("sample.wav", audio, "audio/wav")},
        timeout=60,
    )
response.raise_for_status()
print(response.json()["_id"])