Speech-to-text API

Send us an audio file, get back what was said. One HTTP request, no queue to poll and no SDK of ours to install — it is the same endpoint and the same request shape as OpenAI’s, so most codebases change a base URL and nothing else.

OpenAI-compatible99 languagesUp to 100MB per fileSubtitles out of the box

What this actually does

You have a recording — a support call, a meeting, a voice note someone left in your app, the audio track of a video — and you need the words as text. You upload the file; a few seconds later you have a transcript. There is no conversation to manage, no prompt to write, and nothing to keep open between requests.

The model doing the work is Whisper large-v3 turbo, the fast member of OpenAI’s Whisper family, released under the MIT licence and run on our own hardware. It listens in 99 languages and writes the transcript in whichever one it hears. It is good at the things that defeat naive speech recognition: accents, crosstalk, background noise, and speakers who trail off mid-sentence.

What people build with it

  • Call and meeting records — a searchable transcript, and the input to whichever model writes the summary.
  • Subtitles and captions — ask for srt or vtt and the response is the subtitle file, timings included.
  • Voice input in your own product — the user talks, you store text.
  • The ear of a voice agent — speech in here, text through a chat model, and speech back out through text-to-speech.
  • Podcast and archive search — transcribe once, index the text, and the back catalogue becomes searchable.

Call it

POST /v1/audio/transcriptions, as multipart/form-data — you are uploading a file, so there is no JSON body and no Content-Type header to set by hand. In curl, -F is what makes the request multipart and lets curl choose its own boundary.

curlbash
curl https://api.infersia.com/v1/audio/transcriptions \
  -H "Authorization: Bearer $INFERSIA_API_KEY" \
  -F model=openai/whisper-large-v3-turbo \
  -F file=@meeting.m4a \
  -F response_format=json

The same call with the official OpenAI SDK. No plugin, no fork — a different base_url and a model id:

transcribe.pypython
from openai import OpenAI
import os

client = OpenAI(
    base_url="https://api.infersia.com/v1",
    api_key=os.environ["INFERSIA_API_KEY"],
)

with open("meeting.m4a", "rb") as audio:
    transcript = client.audio.transcriptions.create(
        model="openai/whisper-large-v3-turbo",
        file=audio,
    )

print(transcript.text)

What you can send

wav, mp3, m4a/mp4, flac, ogg (opus or vorbis) and webm, up to 100MB per request. A video container is fine — we read the audio track out of it.

Duration is read from the container header before anything is dispatched, so the charge is known before the work starts and a file we cannot measure is refused with a 400 rather than billed on a guess. Whisper itself hears in 30-second windows, but that chunking happens on our side: you send one file and get one transcript back.

Two optional fields are worth knowing. language skips detection when you already know the answer, and prompt biases spelling — pass a list of the product names, drug names or surnames the recording is full of and they come back spelled the way you spell them.

What comes back

response_format decides the shape of the response, and it is the parameter most worth reading twice:

response_formatYou get
jsonThe default. JSON with a single text field.
verbose_jsonJSON with duration, language, text, segments, words and usage. The only format that carries timings.
textThe bare transcript as plain text. Not JSON.
srtA SubRip subtitle file, ready to save next to the video.
vttA WebVTT subtitle file, for the HTML video element.

If you want to know when something was said — to jump to a moment, highlight a clip, or line the transcript up against the audio — verbose_json is the one. It is also the only format that reports the duration we measured, which is the quantity you were billed on.

segments.pypython
with open("meeting.m4a", "rb") as audio:
    result = client.audio.transcriptions.create(
        model="openai/whisper-large-v3-turbo",
        file=audio,
        response_format="verbose_json",
    )

print(result.language, result.duration)

for segment in result.segments:
    print(f"[{segment.start:7.2f}s] {segment.text}")

And for subtitles, the response body already is the file — write it straight to disk rather than parsing it:

curlbash
curl https://api.infersia.com/v1/audio/transcriptions \
  -H "Authorization: Bearer $INFERSIA_API_KEY" \
  -F model=openai/whisper-large-v3-turbo \
  -F file=@interview.mp4 \
  -F response_format=srt \
  --output interview.srt

How fast

A 480-second recording — eight minutes of speech — came back in 11.8 seconds measured end to end, on the hardware serving this model. Most of that was the upload rather than the transcription.

That is one measurement of one file, not a benchmark, and your own numbers will move with file size and connection. It is here because it is the figure we actually recorded, and because “faster than real time” is a claim worth being able to check.

What it costs

How that compares

Transcription is one of the few parts of this market where everyone quotes the same unit, so the comparison is arithmetic rather than argument. Every figure below was read off the vendor’s own pricing page on 7 August 2026.

ProviderModelPublished price
OpenAIwhisper-1$0.006 / minute
OpenAIgpt-4o-transcribe
OpenAI's estimate; sold per audio token
$0.006 / minute
OpenAIgpt-4o-mini-transcribe
OpenAI's estimate; sold per audio token
$0.003 / minute
DeepgramNova-3 monolingual
pre-recorded, pay-as-you-go
$0.0077 / minute
DeepgramNova-3 monolingual
streaming, pay-as-you-go
$0.0048 / minute

Sources, fetched 7 August 2026: developers.openai.com/api/docs/pricing and deepgram.com/pricing. Prices change and this table does not update itself — check the source before you make a decision on it.

The row worth reading carefully is whisper-1: those are the same weights, from the same lab, under the same MIT licence. What differs is who is running them and what they charge to do it. OpenAI’s cheaper transcription model, gpt-4o-mini-transcribe, is not Whisper and is not open — comparable on price, not on what you can inspect or move.

Where to go next

The model

Precision served, accepted parameters, measured latency and licence.

whisper-large-v3-turbo →

The docs

Authentication, error shapes, rate limits and how billing is metered.

Quickstart →

The playground

Drop a file in the browser and read the transcript before writing any code.

Open the playground →

Your audio is not retained

What we keep about a transcription is the duration we billed you on, its cost and whether it succeeded. Our usage table has no column an upload or a transcript could be written into, so keeping one would take a schema migration rather than a lapse. That is not a setting to find — it is the default, and the reasoning is set out in full on the transparency page.