Generate SRT and VTT subtitles with the Speechall API

To get a subtitle file, send your audio to POST https://api.speechall.com/v1/transcribe with output_format=srt (SubRip) or output_format=vtt (WebVTT). The response body is the subtitle file as plain text, so you can write it straight to disk. There is no JSON to convert first.

Subtitle output depends on the model. Some models support SRT, VTT, both or neither. The same request works across providers: change the model value and keep everything else.

Models that return SRT or VTT

Models with at least one subtitle format are listed first.

ModelProviderSubtitle formats Word timestamps
AssemblyAI Universal 2
assemblyai.universal-2
AssemblyAISRT, VTT Yes
Microsoft MAI-Transcribe-2
microsoft.mai-transcribe-2
AzureSRT, VTT Yes
Azure AI Speech-to-Text
azure.standard
AzureSRT, VTT Yes
Cloudflare Whisper
cloudflare.whisper
CloudflareVTT No
Cloudflare Whisper Tiny (EN)
cloudflare.whisper-tiny-en
CloudflareVTT Yes
Cloudflare Whisper Large v3 Turbo
cloudflare.whisper-large-v3-turbo
CloudflareVTT Yes
Deepgram Nova
deepgram.nova
DeepgramVTT Yes
Deepgram Nova 2
deepgram.nova-2
DeepgramVTT Yes
Deepgram Nova 3
deepgram.nova-3
DeepgramVTT Yes
Deepgram Base
deepgram.base
DeepgramVTT Yes
Deepgram Enhanced
deepgram.enhanced
DeepgramVTT Yes
ElevenLabs Scribe
elevenlabs.scribe-v1
ElevenLabsSRT, VTT Yes
Gladia Solaria
gladia.standard
GladiaVTT No
OpenAI Whisper
openai.whisper-1
OpenAISRT, VTT Yes
Rev AI Enhanced
revai.fusion
Rev AISRT, VTT Yes
Rev AI Reverb ASR
revai.machine
Rev AISRT, VTT Yes
Soniox Async v5
soniox.stt-async-v5
SonioxSRT, VTT Yes
Speechmatics Standard
speechmatics.standard
SpeechmaticsSRT Yes
Speechmatics Enhanced
speechmatics.enhanced
SpeechmaticsSRT Yes
AssemblyAI Universal-3.5 Pro
assemblyai.universal-3-5-pro
AssemblyAINone Yes
Gemini 2.5 Flash-Lite
gemini.gemini-2.5-flash-lite
GeminiNone No
Gemini 2.5 Flash
gemini.gemini-2.5-flash
GeminiNone No
Gemini 2.5 Pro
gemini.gemini-2.5-pro
GeminiNone No
Gemini 3.5 Transcribe
gemini.gemini-3.5-transcribe
GeminiNone Yes
Groq Whisper Large v3 Turbo
groq.whisper-large-v3-turbo
GroqNone Yes
Groq Whisper Large v3
groq.whisper-large-v3
GroqNone Yes
IBM Watson Speech to Text
ibm.standard
IBMNone Yes
Mistral Voxtral Mini Transcribe
mistral.voxtral-mini
MistralNone No
Mistral Voxtral Mini Transcribe v2
mistral.voxtral-mini-v2
MistralNone No
OpenAI GPT-Transcribe
openai.gpt-transcribe
OpenAINone No
Smallest AI Pulse
smallestai.pulse
Smallest AINone Yes
Smallest AI Pulse Pro
smallestai.pulse-pro
Smallest AINone Yes
Grok Speech to Text
xai.grok-stt
SpaceXAINone Yes
NVIDIA Parakeet TDT 0.6B V3 Realtime
togetherai.nvidia-parakeet-tdt-0.6b-v3
Together AINone Yes
Thinking Machines Inkling
togetherai.thinkingmachines-inkling
Together AINone No

35 models from the Speechall catalog, last checked November 7, 2026. Rates are what Speechall charges per hour of audio, in USD. See the model catalog for every feature and the full list of variants.

Request an SRT file with curl

The native /transcribe endpoint takes the raw audio bytes as the request body and the options as query parameters. Subtitles are selected with output_format.

curl -X POST "https://api.speechall.com/v1/transcribe?model=deepgram.nova-3&language=en&output_format=srt" 
  -H "Authorization: Bearer $SPEECHALL_API_KEY" 
  -H "Content-Type: audio/wav" 
  --data-binary @interview.wav 
  -o interview.srt

The saved file is standard SubRip: numbered cues, each with a start and end time and the text spoken in that interval. For example (illustrative text, not output from a specific model):

1
00:00:00,000 --> 00:00:03,200
Thanks for joining. Let's start with your background.

2
00:00:03,600 --> 00:00:07,900
Sure. I've worked on speech recognition for about six years.

-o interview.srt saves the response body. Open the file to check it. If the request fails, the body is a JSON error message instead of subtitles, so check the HTTP status (for example with curl --fail-with-body) before you use the file. Set Content-Type to match your audio (audio/mpeg for MP3, audio/flac for FLAC). The model ID deepgram.nova-3 only illustrates the provider.model format; confirm that your chosen model supports SRT first (see below).

Request a VTT file

Change output_format to vtt and the file extension to .vtt. Everything else stays the same.

curl -X POST "https://api.speechall.com/v1/transcribe?model=deepgram.nova-3&language=en&output_format=vtt" 
  -H "Authorization: Bearer $SPEECHALL_API_KEY" 
  -H "Content-Type: audio/wav" 
  --data-binary @interview.wav 
  -o interview.vtt

SRT and VTT are separate capabilities in the catalog. A model can support one and not the other.

Videos

The native endpoint accepts audio (audio/*). The OpenAI-compatible endpoint lists MP4 and WebM among its accepted upload formats, and the Speechall CLI accepts a video file such as webinar.mp4 directly. If you call /transcribe with a video file and want to send only the audio track, you can extract it first. This step is optional preprocessing and not a Speechall requirement:

# Optional: extract a mono 16 kHz WAV audio track with ffmpeg
ffmpeg -i video.mp4 -vn -ac 1 -ar 16000 audio.wav

Then send audio.wav as in the examples above.

Use the OpenAI SDK

The OpenAI-compatible endpoint uses response_format instead of output_format, and accepts srt and vtt there. Point the OpenAI Python SDK (pip install openai) at Speechall:

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["SPEECHALL_API_KEY"],
    base_url="https://api.speechall.com/v1/openai-compatible",
)

with open("interview.wav", "rb") as audio:
    subtitles = client.audio.transcriptions.create(
        model="deepgram.nova-3",
        file=audio,
        response_format="srt",
    )

with open("interview.srt", "w", encoding="utf-8") as out:
    out.write(subtitles)

For srt, vtt and text the OpenAI Python SDK returns the body as a string. See Speech-to-Text for the base URL, model IDs and supported fields. The native endpoint’s output_format parameter and this endpoint’s response_format parameter are different names for the same choice, so do not mix them.

Check which models support subtitles

The table above is read from the live catalog. On the models page, use the SRT Support and VTT Support filters, or read the Subtitle Formats column. Each model’s own page shows whether SRT and VTT are supported.

In code, GET /v1/speech-to-text-models returns the catalog as JSON. Every model entry has the boolean fields supports_srt and supports_vtt. This example lists the IDs of models that support SRT with jq:

curl -s "https://api.speechall.com/v1/speech-to-text-models" 
  -H "Authorization: Bearer $SPEECHALL_API_KEY" 
  | jq -r '.[] | select(.supports_srt) | .id'

Use select(.supports_vtt) for VTT. The catalog changes over time, so query it instead of copying a model list.

Switch providers by changing the model ID

The request contains no provider-specific fields for subtitles. To compare how two providers handle the same audio, run the same command twice with different model values:

for MODEL in deepgram.nova-3 openai.whisper-1; do
  curl -X POST "https://api.speechall.com/v1/transcribe?model=$MODEL&language=en&output_format=srt" 
    -H "Authorization: Bearer $SPEECHALL_API_KEY" 
    -H "Content-Type: audio/wav" 
    --data-binary @interview.wav 
    -o "interview.$MODEL.srt"
done

Run this only with models whose catalog entry shows SRT support. Cue timing and line breaks come from the selected model and provider, so review the output on your own recordings before you pick one. Provider-specific options such as diarization or custom vocabulary vary by model and do not carry over automatically.

Create subtitles from the command line

The Speechall CLI writes the transcript to standard output, so redirect it to a file:

speechall webinar.mp4 --output-format srt > webinar.srt
speechall webinar.mp4 --output-format vtt > webinar.vtt

Next steps