Skip to content

Transcription

RealtimeKit provides two transcription modes powered by Cloudflare Workers AI:

ModeModelUse Case
Real-timeDeepgram Nova-3Live captions during meeting
End-of-meetingWhisper Large v3 TurboAccurate offline transcription

Real-time transcription

Streams transcripts to participants as they speak using Deepgram Nova-3 via Cloudflare AI Gateway.

Enable via preset

Set transcription_enabled: true in the participant's preset:

{
"name": "webinar_host",
"transcription_enabled": true
}

Only participants with this flag will have their audio transcribed.

Configure

Pass ai_config.transcription when creating a meeting:

{
"title": "Team Standup",
"ai_config": {
"transcription": {
"language": "en-US",
"keywords": ["RealtimeKit", "Cloudflare"],
"profanity_filter": false
}
}
}
OptionTypeDefaultDescription
languagestringen-USLanguage code for transcription
keywordsstring[][]Terms to boost recognition (names, jargon)
profanity_filterbooleanfalseFilter offensive language

Supported languages

Real-time transcription is powered by Deepgram Nova-3 on Workers AI.

Nova-3 on Workers AI supports the following languages for transcription:

LanguageCode(s)
Englishen, en-US, en-AU, en-GB, en-IN, en-NZ
Spanishes, es-419
Frenchfr, fr-CA
Germande, de-CH
Hindihi
Russianru
Portuguesept, pt-BR, pt-PT
Japaneseja
Italianit
Dutchnl

Use multi for automatic multilingual detection across all of the languages listed above.

If no language is specified, the model defaults to en-US. For best accuracy, explicitly set the language code matching your audio.

Consume transcripts

Client SDK

JavaScript
// Get all transcripts
const transcripts = meeting.ai.transcripts;
// Listen for new transcripts
meeting.ai.on("transcript", (data) => {
if (data.isPartialTranscript) {
// Interim result - speaker still talking
updateLiveCaption(data.peerId, data.transcript);
} else {
// Final result
appendToHistory(data);
}
});

Transcript payload

{
"id": "1a2b3c4d-5678-90ab-cdef-1234567890ab",
"name": "Alice",
"peerId": "4f5g6h7i-8j9k-0lmn-opqr-1234567890st",
"userId": "uvwxyz-1234-5678-90ab-cdefghijklmn",
"customParticipantId": "abc123xyz",
"transcript": "Hello everyone",
"isPartialTranscript": false,
"date": "2024-08-07T10:15:30.000Z"
}
FieldDescription
isPartialTranscripttrue = interim (still speaking), false = final
peerIdChanges if participant rejoins
userIdPersistent participant ID
customParticipantIdYour custom ID from Add Participant API

End of meeting transcription

Generates transcripts after the meeting ends using Whisper Large v3 Turbo. Transcripts from all participants are consolidated into a unified timeline and delivered via webhook or REST API.

Enable end of meeting transcription

Set transcribe_on_end: true when creating a meeting:

{
"title": "Team Standup",
"transcribe_on_end": true
}

Use ai_config.transcription.language to set the transcript language. If transcribe_on_end is not set, end-of-meeting transcription is disabled and real time transcripts are generated.

Supported languages

Supports all languages in Whisper Large v3 Turbo. Use ISO 639-1 language codes, such as en, es, or fr.

Output formats

FormatUse Case
CSVSpreadsheets, data analysis
SRTVideo subtitle files
VTTWeb video captions (<track> element)
JSONProgrammatic access

CSV example

Timestamp,Participant ID,User ID,Custom Participant ID,Participant Name,Transcript
2024-08-07T10:15:30.000Z,peer-123,user-456,cust-789,Alice,Hello everyone
2024-08-07T10:15:35.000Z,peer-234,user-567,cust-890,Bob,Hi Alice

JSON example

[
{
"startTime": 0,
"endTime": 2.5,
"sentence": "Hello everyone",
"peerData": {
"id": "peer-123",
"userId": "user-456",
"displayName": "Alice",
"cpi": "cust-789"
}
}
]

Fetch transcripts

Webhook

Configure meeting.transcript event in webhooks:

{
"event": "meeting.transcript",
"meetingId": "meeting-123",
"sessionId": "session-456",
"transcriptDownloadUrl": "https://...",
"transcriptDownloadUrlExpiry": "2024-08-14T10:15:30.000Z"
}

REST API

Refer to Fetch the complete transcript for a session.

Terminal window
curl -X GET "https://api.cloudflare.com/client/v4/accounts/{account_id}/realtime/kit/{app_id}/sessions/{session_id}/transcript" \
-H "Authorization: Bearer {api_token}"

Transcripts are available for 7 days after meeting ends.