Transcription
RealtimeKit provides two transcription modes powered by Cloudflare Workers AI:
| Mode | Model | Use Case |
|---|---|---|
| Real-time | Deepgram Nova-3 | Live captions during meeting |
| Post-meeting | Whisper Large v3 Turbo | Accurate offline transcription |
Streams transcripts to participants as they speak using Deepgram Nova-3 via Cloudflare AI Gateway.
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.
Pass ai_config.transcription when creating a meeting:
{ "title": "Team Standup", "ai_config": { "transcription": { "language": "en-US", "keywords": ["RealtimeKit", "Cloudflare"], "profanity_filter": false } }}| Option | Type | Default | Description |
|---|---|---|---|
language | string | en-US | Language code for transcription |
keywords | string[] | [] | Terms to boost recognition (names, jargon) |
profanity_filter | boolean | false | Filter offensive language |
Supports all languages available in Deepgram Nova-3
// Get all transcriptsconst transcripts = meeting.ai.transcripts;
// Listen for new transcriptsmeeting.ai.on("transcript", (data) => { if (data.isPartialTranscript) { // Interim result - speaker still talking updateLiveCaption(data.peerId, data.transcript); } else { // Final result appendToHistory(data); }});{ "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"}| Field | Description |
|---|---|
isPartialTranscript | true = interim (still speaking), false = final |
peerId | Changes if participant rejoins |
userId | Persistent participant ID |
customParticipantId | Your custom ID from Add Participant API |
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.
Supports all languages in Whisper Large v3 Turbo. Uses ISO 639-1 language codes.
| Format | Use Case |
|---|---|
| CSV | Spreadsheets, data analysis |
| SRT | Video subtitle files |
| VTT | Web video captions (<track> element) |
| JSON | Programmatic access |
Timestamp,Participant ID,User ID,Custom Participant ID,Participant Name,Transcript2024-08-07T10:15:30.000Z,peer-123,user-456,cust-789,Alice,Hello everyone2024-08-07T10:15:35.000Z,peer-234,user-567,cust-890,Bob,Hi Alice[ { "startTime": 0, "endTime": 2.5, "sentence": "Hello everyone", "peerData": { "id": "peer-123", "userId": "user-456", "displayName": "Alice", "cpi": "cust-789" } }]Configure meeting.transcript event in webhooks:
{ "event": "meeting.transcript", "meetingId": "meeting-123", "sessionId": "session-456", "transcriptDownloadUrl": "https://...", "transcriptDownloadUrlExpiry": "2024-08-14T10:15:30.000Z"}Refer to Fetch the complete transcript for a session.
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.
Was this helpful?
- Resources
- API
- New to Cloudflare?
- Directory
- Sponsorships
- Open Source
- Support
- Help Center
- System Status
- Compliance
- GDPR
- Company
- cloudflare.com
- Our team
- Careers
- © 2026 Cloudflare, Inc.
- Privacy Policy
- Terms of Use
- Report Security Issues
- Trademark
-