Model removal: February 26, 2027

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.

OpenAI deprecations

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.

OpenAI speech-to-text guide

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.

8 fields mapped, with a rollback plan

Prompt

Connect MCP
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.

  1. OpenAI Whisper API

    POST /v1/audio/transcriptions

    Cartesia
    client.stt.transcribe(...) in the Cartesia SDK, or POST /stt
  2. OpenAI Whisper API

    Authorization: Bearer $OPENAI_API_KEY

    Cartesia
    Cartesia(api_key=...)
  3. OpenAI Whisper API

    file (multipart upload, up to 25 MB)

    Cartesia
    file, an open binary file
    Note
    Batch STT accepts uploads only. Download remote audio before you send it.
  4. OpenAI Whisper API

    model: whisper-1

    Cartesia
    model: ink-whisper
  5. OpenAI Whisper API

    language, optional

    Cartesia
    language
    Note
    Whisper detects the language when you leave it out. Cartesia's batch call assumes en and does not detect, so set it every time.
  6. OpenAI Whisper API

    timestamp_granularities[]: word

    Cartesia
    timestamp_granularities: ["word"]
    Note
    The response carries words, each with word, start and end. Segment-level timestamps have no equivalent.
  7. OpenAI Whisper API

    Open-source whisper: model.transcribe(..., word_timestamps=True)

    Cartesia
    timestamp_granularities: ["word"]
    Note
    Self-hosted word_timestamps=True and the API's word granularity both become this one argument on Cartesia.
  8. OpenAI Whisper API

    Realtime transcription session

    Cartesia
    client.stt.auto_finalize.websocket(model="ink-2", ...)
    Note
    Ink-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.

  1. OpenAI Whisper API

    Authorization: Bearer header

    Cartesia
    X-API-Key plus Cartesia-Version: 2026-08-14
    Note
    The open-source Whisper package runs on your own machine and needs no API key.
  2. OpenAI Whisper API

    OPENAI_API_KEY

    Cartesia
    CARTESIA_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.

  1. Model or plan

    whisper-1

    OpenAI Whisper API
    $0.36
    Note
    $0.006 a minute; removed February 26, 2027
  2. Model or plan

    gpt-4o-transcribe

    OpenAI Whisper API
    $0.36
    Note
    $0.006 a minute; removed February 26, 2027
  3. Model or plan

    gpt-4o-mini-transcribe

    OpenAI Whisper API
    $0.18
    Note
    $0.003 a minute; removed February 26, 2027
  4. Model or plan

    gpt-transcribe

    OpenAI Whisper API
    $0.27
    Note
    $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 pricing

Sources

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.

  1. Limit

    Request limit

    Cartesia
    No published file size maximum for batch /stt; stream long or live audio over the Ink-2 WebSocket
    OpenAI Whisper API
    25 MB per uploaded file, as mp3, mp4, mpeg, mpga, m4a, wav or webm
  2. Limit

    Languages

    Cartesia
    5 on Ink-2 (en, es, fr, hi, ja); about 100 on Ink Whisper
    OpenAI Whisper API
    98 languages on whisper-1, with accuracy that varies by language

Cartesia's figures come from its pricing page and speech to text docs.

Cartesia pricing and plan limits

Sources

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.

  1. Run python -m pip install --upgrade cartesia, then export CARTESIA_API_KEY in the environment that calls Whisper today.

  2. Swap the client and the call as shown. Pick a short list of your hardest recordings and compare both transcripts.

  3. Find every call that leaves out language and pass the code explicitly, or Cartesia assumes English.

  4. For live conversation, move to Ink-2 over the WebSocket. The Ink-2 docs describe its turn events.

  5. Check each request field you send today against the table and the STT docs.

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.

Contact Sales

Start building.

Create an API key, then hand your coding agent the migration prompt and a few of your own recordings.

Try Cartesia