Skip to main content
Paid plans only

Transcription overview

New to Daily transcription? Start here — covers real-time vs. post-call transcription, pricing, permissions, and transcript storage.
Daily’s transcription feature streams speech-to-text output to all participants in a call. It is powered by Deepgram and supports a wide range of languages, models, and configuration options.

Transcription permissions

Only meeting owners and participants with canAdmin: 'transcription' can start or stop transcription. See Permissions in the overview for how to grant this.

Transcript storage

By default, transcripts are ephemeral — participants receive transcription-message events but nothing is persisted. To save transcripts as WebVTT files, enable enable_transcription_storage at the room or domain level. See Storage in the overview for setup details, including custom S3 configuration for HIPAA use cases.

Starting transcription

startTranscription() starts a transcription session. All options are optional — call it with no arguments to use Deepgram defaults.
Check Deepgram’s language and model overview for the model/language combination that works best for your use case.
See startTranscription() for the full list of options.

Handling transcription messages

Listen to transcription-message to receive transcript segments in real time:

Updating transcription

Use updateTranscription() to change which participants are being transcribed while transcription is running:
Note that participants who join after transcription starts are not automatically added — use updateTranscription() to add them.

Stopping transcription

stopTranscription() ends a transcription session. If storage is enabled, the final transcript file is written at this point.

Events

Full payload details are in the transcription events reference.

Post-call transcription

To transcribe a recording after a call ends, use the Batch Processor API. See Post-call transcription in the overview for details.

Complete example

1

Start transcription when joining

2

Display captions in real time

3

Handle lifecycle events

4

Stop transcription on leave