OpenAI removes tts-1, tts-1-hd and gpt-4o-mini-tts from its API on January 6, 2027.Source

OpenAI TTS alternative: keep the SDK, change the base URL

Fish Audio serves the same /v1/audio/speech call. Point your OpenAI client at Fish, pick the free model, and your speech code keeps running after OpenAI's TTS models are gone.

No credit card required: fish-audio/s2.1-pro-free costs $0 through November 30, 2026.

Two lines move the client

base_url and api_key point the official OpenAI SDK at Fish. In the call, set a Fish model and voice. The new code runs as-is on a fresh account with a $0 balance.

import os from openai import OpenAI client = OpenAI(Added line:     base_url="https://api.fish.audio/compat/v1",Removed line:     api_key=os.environ["OPENAI_API_KEY"],Added line:     api_key=os.environ["FISH_API_KEY"],) with client.audio.speech.with_streaming_response.create(Removed line:     model="tts-1",Removed line:     voice="alloy",Added line:     model="fish-audio/s2.1-pro-free",Added line:     voice="",    input="Hello, world!",    response_format="mp3",) as response:    response.stream_to_file("speech.mp3")
import fs from "node:fs";import OpenAI from "openai"; const client = new OpenAI({Added line:   baseURL: "https://api.fish.audio/compat/v1",Removed line:   apiKey: process.env.OPENAI_API_KEY,Added line:   apiKey: process.env.FISH_API_KEY,}); const response = await client.audio.speech.create({Removed line:   model: "tts-1",Removed line:   voice: "alloy",Added line:   model: "fish-audio/s2.1-pro-free",Added line:   voice: "",  input: "Hello, world!",  response_format: "mp3",});fs.writeFileSync("speech.mp3", Buffer.from(await response.arrayBuffer()));
Removed line: curl https://api.openai.com/v1/audio/speech \Removed line:   -H "Authorization: Bearer $OPENAI_API_KEY" \Added line: curl https://api.fish.audio/compat/v1/audio/speech \Added line:   -H "Authorization: Bearer $FISH_API_KEY" \  -H "Content-Type: application/json" \  -d '{Removed line:     "model": "tts-1",Removed line:     "voice": "alloy",Added line:     "model": "fish-audio/s2.1-pro-free",Added line:     "voice": "",    "input": "Hello, world!",    "response_format": "mp3"  }' \  --output speech.mp3

Needs the official OpenAI SDK (pip install openai or npm install openai) and your Fish API key in FISH_API_KEY.

What else changes

  • voice takes a Fish voice ID. OpenAI preset names such as nova return a 400; an empty string uses the model's default voice.
  • response_format defaults to pcm on Fish, not mp3. Set it explicitly.
  • instructions is not supported and returns a 400. Write delivery cues into the text instead, such as [whispering].
  • tts-1, tts-1-hd and gpt-4o-mini-tts still work as model names. They map to the paid fish-audio/s2.1-pro.

Pick a voice

OpenAI's preset voices don't exist on Fish. Pass the ID of any voice in the Fish Voice Library, or of a voice you clone. An empty string uses the model's default voice.

Hannah · Voice Library

voice="9a9cf47702da476aa4629e2506d4a857"
Browse the Voice Library

Pricing

S2.1-Pro bills by UTF-8 bytes of input text. In English one character is one byte, so it costs the same as tts-1 and half as much as tts-1-hd. Most Chinese, Japanese and Korean characters take 3 bytes.

ModelPrice
Fish Audiofish-audio/s2.1-pro-freeFree through November 30, 2026, under fair-use limits. Same model as S2.1-Pro, without latency (TTFA) or DPA guarantees; requests may be used to improve the model.$0.00 / 1M UTF-8 bytes
Fish Audiofish-audio/s2.1-proFor production. Pay as you go, no subscription.$15.00 / 1M UTF-8 bytes
OpenAItts-1Removed from the OpenAI API on January 6, 2027.$15.00 / 1M characters
OpenAItts-1-hdRemoved from the OpenAI API on January 6, 2027.$30.00 / 1M characters

Prices from the official pricing pages, checked October 29, 2026:Fish AudioOpenAI

Frequently asked questions

OpenAI's deprecations page lists tts-1, tts-1-hd and gpt-4o-mini-tts for removal from the API on January 6, 2027. Its recommended replacement, gpt-realtime-2.1-mini, runs on the Realtime API rather than /v1/audio/speech.

Switch before January 6, 2027

Create a free key, change two lines, and keep shipping speech.