RealtimeKit generates AI-powered meeting summaries from transcript data.
RealtimeKit automatically selects a Workers AI model based on the estimated size of the transcript and prompts, plus an output token allowance. It currently uses these models:
| Model | When used |
|---|---|
@cf/meta/llama-3.2-3b-instruct |
Requests that fit the Llama context budget or chunks from requests exceeding the GLM budget. |
@cf/zai-org/glm-4.7-flash |
Requests that exceed the Llama context budget but fit the GLM budget. |
If a request exceeds the GLM context budget, RealtimeKit splits the transcript into chunks. It uses Llama to summarize the chunks and combine their results, which requires multiple model calls. Cloudflare may change the models or how they are selected at any time.
Both summarization and transcription contribute to Workers AI usage on your Cloudflare account. Summarization usage depends on the model and the input and output tokens across model calls. For rates, refer to Workers AI model pricing.
Set summarize_on_end: true when creating a meeting. For post-meeting summaries, also set transcribe_on_end: true so RealtimeKit generates the summary automatically after the transcript is available:
curl -X POST "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/meetings" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Product Review",
"transcribe_on_end": true,
"summarize_on_end": true,
"ai_config": {
"transcription": {
"language": "en-US"
},
"summarization": {
"word_limit": 500,
"text_format": "markdown",
"summary_type": "team_meeting"
}
}
}'| Option | Type | Default | Description |
|---|---|---|---|
word_limit |
number | 500 | Summary length (150-1000 words) |
text_format |
string | markdown |
Output format: plain_text or markdown |
summary_type |
string | general |
Meeting context for tailored summaries |
Choose a type that matches your meeting for better results:
| Type | Best for |
|---|---|
general |
Any meeting (default) |
team_meeting |
Regular team syncs |
daily_standup |
Agile standups |
one_on_one_meeting |
1:1 meetings |
sales_call |
Customer sales conversations |
client_check_in |
Client status updates |
interview |
Job interviews |
lecture |
Educational content |
code_review |
Technical code reviews |
Configure the meeting.summary event in RealtimeKit webhooks to receive the summary download URL when it is ready:
{
"event": "meeting.summary",
"meeting": {
"id": "bbb8940e-1b97-402a-97d6-2708b7feca41",
"sessionId": "05e57591-d89e-45c9-ae44-08dc1eaad0e0",
"organizedBy": {
"id": "c94c437b-592a-4a39-b9e2-47ef1451e43b",
"name": "Example organization"
}
},
"summaryDownloadUrl": "https://example.com/summary.txt",
"summaryDownloadUrlExpiry": "2026-06-10T10:30:00.000Z"
}Refer to Fetch summary of transcripts for a session.
curl -X GET "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/sessions/$SESSION_ID/summary" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"Use the Generate summary of transcripts for the session API if summarize_on_end was not set and you want to generate a summary manually after the transcript is available.
curl -X POST "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/sessions/$SESSION_ID/summary" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"With text_format: "markdown" and summary_type: "team_meeting":
## Meeting Summary
### Key Discussion Points
- Reviewed Q4 roadmap priorities
- Discussed deployment timeline for v2.0
- Identified blockers for the auth migration
### Action Items
- @alice: Update design specs by Friday
- @bob: Schedule security review
- @charlie: Create migration runbook
### Decisions Made
- Approved moving forward with Kubernetes migration
- Delayed analytics dashboard to next sprintSummaries are stored for 7 days after the meeting ends.