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 bucket configuration (Amazon S3 or OCI Object Storage) 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