Migration guides / OpenAI Whisper API
OpenAI Whisper alternative: migrate to Cartesia
As an OpenAI Whisper alternative, Cartesia's batch STT call takes the same file, model and language fields as the Whisper API's /v1/audio/transcriptions.
Why migrate from OpenAI Whisper API now
Dated changes on the OpenAI Whisper API side, each linked to the page that announces it.
OpenAI deprecates whisper-1 and its gpt-4o transcription models
OpenAI notified developers that the four transcription models would leave the API in six months. It recommends gpt-transcribe for files and gpt-live-transcribe for live audio.
Word timestamps and /v1/audio/translations go with whisper-1
whisper-1 is the only OpenAI model that accepts timestamp_granularities, so word and segment timing end with it. /v1/audio/translations shuts down on the same day.
Migrate from OpenAI Whisper API with your coding agent
Paste this into Claude Code, Cursor or Codex in the repo that calls OpenAI Whisper API. It carries the field mapping, the Cartesia request and a rollout that keeps OpenAI Whisper API behind a flag until you switch.
Prompt
Move this codebase from OpenAI Whisper API to Cartesia for speech to text. Keep OpenAI Whisper API working behind a flag until I switch over.
Deadline (Model removal): February 26, 2027. OpenAI removes `whisper-1`, `gpt-4o-transcribe`, `gpt-4o-mini-transcribe` and `gpt-4o-transcribe-diarize` from its API on this date. Calls that name any of the four start failing.
August 26, 2026: OpenAI deprecates whisper-1 and its gpt-4o transcription models. OpenAI notified developers that the four transcription models would leave the API in six months. It recommends `gpt-transcribe` for files and `gpt-live-transcribe` for live audio. (https://developers.openai.com/api/docs/deprecations)
## 1. Find the calls
Search for `openai` or `OPENAI_API_KEY`. The request to replace is `POST /v1/audio/transcriptions`. List every call site before you edit anything.
## 2. Target
- Recorded files: `client.stt.transcribe(...)` in the `cartesia` SDK, or `POST https://api.cartesia.ai/stt`, with `model: "ink-whisper"`
- Live audio: `ink-2` over the STT WebSocket
- Headers: `X-API-Key` read from the `CARTESIA_API_KEY` environment variable, and `Cartesia-Version: 2026-08-14`
- Auth swap: OpenAI Whisper API sends the key in `Authorization: Bearer` header from `OPENAI_API_KEY`. Replace it with `X-API-Key` from `CARTESIA_API_KEY` on the Cartesia path only, and keep `OPENAI_API_KEY` for the OpenAI Whisper API path. The open-source Whisper package runs on your own machine and needs no API key.
- Add `CARTESIA_API_KEY` wherever the project documents its environment (`.env.example`, README, deploy config). Never hardcode the key.
- Request size: OpenAI Whisper API caps a request at 25 MB per uploaded file, as mp3, mp4, mpeg, mpga, m4a, wav or webm. Cartesia publishes no per-request maximum, so keep any file splitting the code already does until larger files are tested.
- Always pass `language`. Cartesia's batch call doesn't detect it and assumes `en`.
## 3. Field mapping, OpenAI Whisper API → Cartesia
- `POST /v1/audio/transcriptions` → `client.stt.transcribe(...)` in the Cartesia SDK, or `POST /stt`
- `Authorization: Bearer $OPENAI_API_KEY` → `Cartesia(api_key=...)`
- `file` (multipart upload, up to 25 MB) → `file`, an open binary file. Batch STT accepts uploads only. Download remote audio before you send it.
- `model`: `whisper-1` → `model`: `ink-whisper`
- `language`, optional → `language`. Whisper detects the language when you leave it out. Cartesia's batch call assumes `en` and does not detect, so set it every time.
- `timestamp_granularities[]`: `word` → `timestamp_granularities`: `["word"]`. The response carries `words`, each with `word`, `start` and `end`. Segment-level timestamps have no equivalent.
- Open-source `whisper`: `model.transcribe(..., word_timestamps=True)` → `timestamp_granularities`: `["word"]`. Self-hosted `word_timestamps=True` and the API's word granularity both become this one argument on Cartesia.
- Realtime transcription session → `client.stt.auto_finalize.websocket(model="ink-2", ...)`. Ink-2 handles English, Spanish, French, Hindi and Japanese, and detects which one it hears.
## 4. OpenAI Whisper API fields with no Cartesia equivalent
- `prompt`: vocabulary or style hint. What to do: Ink-2 on the WebSocket takes up to 100 `keyterm` values. The batch endpoint takes none.
- `response_format`: `srt` or `vtt`. What to do: Build caption cues from the `words` timestamps.
- `gpt-4o-transcribe-diarize` speaker labels. What to do: Cartesia STT returns no speaker labels. Keep a separate diarization step if you depend on them.
- `POST /v1/audio/translations`. What to do: Transcribe in the source language, then translate the text with your LLM.
## 5. Reference request
Match the language and HTTP client the codebase already uses. This is the same request in Python:
```python
import os
from cartesia import Cartesia
client = Cartesia(api_key=os.environ["CARTESIA_API_KEY"])
with open("meeting.mp3", "rb") as audio_file:
result = client.stt.transcribe(
file=audio_file,
model="ink-whisper",
language="en",
timestamp_granularities=["word"],
)
print(result.text)
for word in result.words or []:
print(f"{word.start:6.2f}s {word.word}")
```
## 6. Roll out
1. Choose OpenAI Whisper API or Cartesia per request from one config flag, defaulting to OpenAI Whisper API.
2. Transcribe the same recordings with both and save the transcripts side by side. Compare the words, the word timestamps and the language on each.
3. Leave the OpenAI Whisper API client, call and key in place so rollback is flipping the flag. Don't delete them in this change.
4. Run the existing tests, and add one that checks the Cartesia request body.
## Docs
- OpenAI deprecations: https://developers.openai.com/api/docs/deprecations
- OpenAI speech-to-text guide: https://developers.openai.com/api/docs/guides/speech-to-text
- OpenAI API pricing: https://developers.openai.com/api/docs/pricing
- Open-source Whisper on GitHub (MIT License, word_timestamps): https://github.com/openai/whisper
- Cartesia speech-to-text docs: https://docs.cartesia.ai/use-the-api/stt/compare-endpoints
When you're done, tell me which files changed, which fields you couldn't map, and how to flip the flag.Every OpenAI Whisper API field, mapped to Cartesia
The prompt carries this table. Each row is a field in your OpenAI Whisper API request and the Cartesia field that replaces it.
- OpenAI Whisper API
POST /v1/ audio/ transcriptions Cartesiaclient.stt.transcribe(...)in the Cartesia SDK, orPOST /stt - OpenAI Whisper API
Authorization: Bearer $OPENAI_API_KEYCartesiaCartesia(api_key=...) - OpenAI Whisper API
file(multipart upload, up to 25 MB)Cartesiafile, an open binary fileNoteBatch STT accepts uploads only. Download remote audio before you send it. - OpenAI Whisper API
model:whisper-1Cartesiamodel:ink-whisper - OpenAI Whisper API
language, optionalCartesialanguageNoteWhisper detects the language when you leave it out. Cartesia's batch call assumesenand does not detect, so set it every time. - OpenAI Whisper API
timestamp_granularities[]:wordCartesiatimestamp_granularities:["word"]NoteThe response carrieswords, each withword,startandend. Segment-level timestamps have no equivalent. - OpenAI Whisper API
Open-source
whisper:model.transcribe(..., word_timestamps=True)Cartesiatimestamp_granularities:["word"]NoteSelf-hostedword_timestamps=Trueand the API's word granularity both become this one argument on Cartesia. - OpenAI Whisper API
Realtime transcription session
Cartesiaclient.stt.auto_finalize.websocket(model="ink-2", ...)NoteInk-2 handles English, Spanish, French, Hindi and Japanese, and detects which one it hears.
OpenAI Whisper API key and auth, mapped to Cartesia
Cartesia reads the key from the X-API-Key header and pins the API version with Cartesia-Version on every request.
- OpenAI Whisper API
Authorization: BearerheaderCartesiaX-API-KeyplusCartesia-Version: 2026-08-14NoteThe open-source Whisper package runs on your own machine and needs no API key. - OpenAI Whisper API
OPENAI_API_KEYCartesiaCARTESIA_API_KEY
OpenAI Whisper API pricing per hour of audio
List prices per hour of audio from the vendor's own pricing page. Plans, regions and volume discounts change what you pay.
- Model or plan
whisper-1
OpenAI Whisper API$0.36Note$0.006 a minute; removed February 26, 2027 - Model or plan
gpt-4o-transcribe
OpenAI Whisper API$0.36Note$0.006 a minute; removed February 26, 2027 - Model or plan
gpt-4o-mini-transcribe
OpenAI Whisper API$0.18Note$0.003 a minute; removed February 26, 2027 - Model or plan
gpt-transcribe
OpenAI Whisper API$0.27Note$0.0045 a minute; the model OpenAI recommends next
On Cartesia, usage draws from your plan's credits: 20,000 credits a month on the Free plan (about 111 minutes of Ink-2 at 3 credits a second). Enterprise pricing is custom.
Cartesia plans and pricingSources
Prices read from each company's pricing page in November 2026.
OpenAI Whisper API limits compared with Cartesia
Published limits from both companies. Plans change them, so check both pages before you size a rollout.
- Limit
Request limit
CartesiaNo published file size maximum for batch/stt; stream long or live audio over the Ink-2 WebSocketOpenAI Whisper API25 MB per uploaded file, as mp3, mp4, mpeg, mpga, m4a, wav or webm - Limit
Languages
Cartesia5 on Ink-2 (en, es, fr, hi, ja); about 100 on Ink WhisperOpenAI Whisper API98 languages onwhisper-1, with accuracy that varies by language
Cartesia's figures come from its pricing page and speech to text docs.
Cartesia pricing and plan limitsSources
Limits read from each company's documentation in November 2026.
What you get on Cartesia
What changes once the OpenAI Whisper API call is gone.
Same call, same shape
client.stt.transcribe takes a file, a model, a language and timestamp_granularities, the same parts as /v1/audio/transcriptions.
Word timestamps you keep
Ask for timestamp_granularities=["word"] and get a start and end time for every word. OpenAI's own replacement, gpt-transcribe, returns no word timestamps.
About 100 languages in batch
ink-whisper covers about 100 languages. Pass the language code of each recording.
Ink-2 for live audio
In a voice agent, Ink-2 streams text while the caller speaks and detects the end of each turn itself.
How to migrate from OpenAI Whisper API to Cartesia
The same changes the prompt makes, if you'd rather make them yourself.
Run
python -m pip install --upgrade cartesia, then exportCARTESIA_API_KEYin the environment that calls Whisper today.Swap the client and the call as shown. Pick a short list of your hardest recordings and compare both transcripts.
Find every call that leaves out
languageand pass the code explicitly, or Cartesia assumes English.For live conversation, move to Ink-2 over the WebSocket. The Ink-2 docs describe its turn events.
Check each request field you send today against the table and the STT docs.
Sources
Request shapes checked against vendor documentation in November 2026.
Compare and read next
Frequently asked questions
Is OpenAI Whisper free?
The open-source model is. OpenAI releases Whisper's code and weights under the MIT License, and you pay only for the hardware you run it on. The hosted OpenAI Whisper API is paid: whisper-1 costs $0.006 a minute, or $0.36 an hour, until OpenAI removes it on February 26, 2027.
When is whisper-1 removed?
February 26, 2027. OpenAI's deprecation notice gives the same date for whisper-1, gpt-4o-transcribe, gpt-4o-mini-transcribe and gpt-4o-transcribe-diarize; see OpenAI's deprecations page.
Why not move to gpt-transcribe?
OpenAI recommends gpt-transcribe, which runs on the same /v1/audio/transcriptions endpoint at $0.0045 a minute against $0.006 for whisper-1. The catch is word timing. OpenAI supports timestamp_granularities only on whisper-1, so gpt-transcribe returns no word timestamps. ink-whisper returns a start and end time for every word.
What is the Whisper API file size limit?
25 MB per file. OpenAI's advice for longer recordings is to compress them or split them into chunks of 25 MB or less, cutting between sentences. Before you cut over, send your largest real recording through Cartesia's batch call.
Which Cartesia model replaces whisper-1?
ink-whisper for recorded files on the batch endpoint, and Ink-2 for live audio in voice agents.
What doesn't carry over from the Whisper API?
Automatic language detection on recorded files, the prompt hint, SRT and VTT output, segment timestamps, speaker labels from gpt-4o-transcribe-diarize and the translations endpoint. The table above gives a workaround for each.
How do I test Cartesia without risking production transcripts?
Send each file to both APIs for a week and store both transcripts, keyed by file. Compare word error rate on the files people correct by hand. One config value picks which transcript your app reads, so a rollback is one change until OpenAI removes whisper-1.
Does the removal affect the open-source Whisper model?
OpenAI's notice lists hosted API models only and says nothing about the weights on GitHub. Our Whisper pricing guide covers running it yourself.
Get started today
Talk to an expert.
Connect with a member of our team and learn how Cartesia can help you build world-class voice experiences.
Start building.
Create an API key, then hand your coding agent the migration prompt and a few of your own recordings.