Skip to main content
Paid plans only Daily supports two transcription modes:
  • Real-time — transcription runs during a call and streams text to all participants as speech is detected. Powered by Deepgram.
  • Post-call — submit a recording ID or media URL to the Batch Processor API after a call ends. It produces a transcript in txt, srt, vtt, or json format, and can optionally generate a written summary.

Pricing

Transcriptions are charged based on usage and Deepgram model. For real-time, you pay per unmuted participant minute. For post-call, you pay per recorded minute. See the transcription pricing page for billing details.

Permissions

To dynamically start or stop a real-time transcription from a client, a participant must have canAdmin: 'transcription'. Meeting owners always have this permission. Non-owners can be granted it in two ways:
  • At join time: include canAdmin: ['transcription'] in their meeting token’s permissions.
  • Dynamically: a meeting owner calls updateParticipant() with updatePermissions: { canAdmin: new Set(['transcription']) }.

Storage

By default, real-time transcripts are generated and broadcast to participants but not saved. To persist transcripts as WebVTT files, set enable_transcription_storage: true at the room or domain level. While transcription is active, the file is written to storage every two minutes; the final version is written when transcription ends. Transcripts are stored in Daily’s cloud by default. For HIPAA use cases or custom storage, configure the transcription_bucket domain property — the setup process is the same as configuring a custom S3 bucket for recordings:
"transcription_bucket": {
  "bucket_name": "notes-bucket",
  "bucket_region": "me-central-1",
  "assume_role_arn": "arn:aws:iam::123456789000:role/DAILY_ROLE",
  "allow_api_access": true
}

Real-time transcription APIs

Real-time transcription streams speech-to-text to all call participants as it’s detected. By default, transcripts are ephemeral — participants receive transcription-message events but nothing is persisted. Enable enable_transcription_storage at the room or domain level to save transcripts as WebVTT files, accessible after the call via the /transcript REST endpoints or a webhook notification.

daily-js

Start and manage transcription from a call object. Includes full parameter reference and a complete live captions example.

Daily React

Overview of the useTranscription hook to manage and control transcriptions — with a complete live captions example.

REST API

Guide to all transcription-related REST endpoints: real-time management, auto-start via meeting tokens, post-call transcription, and storage.

Post-call transcription

The Batch Processor API generates transcripts and summaries from existing recordings or any publicly accessible audio/video URL. Use it when you need to transcribe a call after it ends, or process media that wasn’t transcribed live. See the REST API transcription guide for details on submitting post-call transcription jobs and retrieving results.