Every speech-to-text endpoint returns text, but the shape of that text decides how much work your pipeline has to do next. A subtitle renderer wants timestamps. A search index wants plain prose. A summarizer may want the raw segments so it can cite where a sentence came from.

An OpenAI-compatible transcription endpoint gives you a response_format field, and each value returns a different shape for the same audio. This page walks through the five common formats, what each one is good for, and the smallest request to try each on your own file. To check the transcription itself against your own audio first, see how to test Whisper-compatible transcription accuracy on your own audio.

The five formats

  • json: a single text string. The default and the smallest payload. Use it when you only need the transcript and nothing downstream needs timing. It is the easiest to store and the cheapest to move between services.
  • text: the transcript as plain text, with no JSON envelope. Use it when the caller is a human, a shell script, or a logging line, and you do not want to parse JSON at all.
  • srt: SubRip subtitle format. Numbered cues with start --> end timecodes. Use it when the destination is a video player, an editor, or a platform that ingests .srt files.
  • vtt: WebVTT. A web-native subtitle format that browsers understand natively through <track>. Use it when the captions ship to a web player rather than a file download.
  • verbose_json: the full structured response. It carries the transcript plus segment-level timing and other metadata, so a downstream step can align text to audio. Use it when you need to build a search index, jump-to-timestamp, diarization-style alignment, or a summarizer that cites the segment it summarized.

A quick decision rule

  • Only the words? json or text.
  • Subtitles for a file? srt.
  • Captions for a web player? vtt.
  • Text plus timing for another program? verbose_json.

Try it on your own audio

Send one file to the transcription endpoint and name the format. The request is multipart, so the audio is the file part and the rest are form fields.

curl https://webwright.ai/v1/audio/transcriptions \
  -H "Authorization: Bearer www_v1_YOUR_API_KEY" \
  -F model="whisper-large-v3-turbo" \
  -F response_format="verbose_json" \
  -F file="@interview.mp3"

Swap response_format to json, text, srt, or vtt and run the same command. Compare the payloads against what your next pipeline stage actually consumes. If your renderer only needs cues, srt saves you writing a formatter. If your summarizer needs to quote a timestamp, verbose_json saves you a second alignment pass.

A note on cost

Transcription is billed by audio duration, not by the number of text tokens in the response, so choosing a richer response format does not change the transcription charge. Pick the format your pipeline needs rather than the smallest one.

Where this fits

If you are comparing hosted transcription endpoints and want a second opinion on the integration before you commit engineering time, book a short session and bring your pipeline.

The WebWright Team