Meeting Captions
meeting_captions saves the captions the meeting platform itself generates. No provider key and no extra cost for a transcription engine.
Platform support
On Zoom, use any other provider instead. See the capability matrix for the rest of what each platform supports.
Enable
To also receive Google Meet captions live, add a webhook:
CLI: meetstream bot create <link> -t meeting_captions.
How it works on each platform
Google Meet
After the bot is admitted, it turns Meet’s captions on for itself. If that does not take on the first try, it retries every 15 seconds; the join itself never fails because of captions. The bot reads caption text directly from Meet, with the speaker’s name and Meet device ID, and requests captions in English.
With live_transcription_required.webhook_url set, each caption update is POSTed to your webhook:
The same captionId can arrive more than once as Meet refines the text: keep the update with the highest version. MeetStream sends each caption update one time. Respond with a 2xx quickly, then process the update. Caption POSTs do not include the X-MeetStream-Signature header, so put a secret token in the webhook URL and check it on each request.
Microsoft Teams
The bot does not click the captions button. It collects captions only while live captions are already running in the meeting, and keeps final captions only (no interim text). Captions are saved for retrieval during and after the call; they are not sent to a webhook. Every caption is labeled en, whatever language was spoken.
Zoom
On Zoom, use a post-call provider such as deepgram, or a live provider such as deepgram_streaming.
Fetch the captions
meeting_captions returns a transcript_id in the Create Bot response, like other providers:
- During the call, this returns the captions collected so far. After the call, it returns the final caption file.
404withCaptions not available yet...means no captions were captured yet. On Zoom, use another provider.
You can also download the raw file from GET /api/v1/bots/{bot_id}/detail: the caption_file field is {"available": true, "download_url": "..."} when captions exist (link valid for 1 hour), or {"available": false}.
What to know
- Availability depends on the meeting. On Teams, captions have to be running in the meeting for the bot to collect anything. If the platform does not produce captions for a meeting, there is nothing to save.
- Webhook pipeline: captions are not a post-call transcription run, so there is no
transcription.processedevent. The bot’s post-call pipeline still ends withbot.done. See webhooks and events. - Speaker labels come from the platform, so they match the names people use in the meeting.
Need a formatted, speaker-labeled transcript from a provider instead? Re-transcribe the recording with any post-call provider.
