Skip to navigation

Transcription Providers

Choose the right transcription engine for your meeting bots
View as Markdown

Every MeetStream bot can transcribe its meeting. You pick the engine per request, under recording_config.transcript.provider:

{
"meeting_link": "https://meet.google.com/abc-defg-hij",
"bot_name": "Notetaker",
"recording_config": {
"transcript": {
"provider": { "deepgram": { "model": "nova-3" } }
}
}
}

recording_config.transcript.provider is the only place transcription is read from. An old top-level transcription field is ignored, and the bot records without a transcript.

Post-call vs live

Post-call providers transcribe the recording after the meeting and produce a speaker-labeled transcript you fetch by transcript_id:

ProviderDefault modelNotable
Deepgramnova-3Diarization, punctuation and utterances on by default
AssemblyAIuniversal-2Speaker labels, optional PII redaction and chapters
Sarvamsaaras:v3Indic-language strength, transcribe or translate modes
MeetStream enginein-houseNo provider key needed, auto language detection, optional translation
JigsawStackn/aAuto detection or 162 supported languages, per-speaker output
Meeting captionsnativeThe platform’s own captions (Google Meet and Teams only)

Streaming providers push transcript updates to your webhook during the meeting:

ProviderDefault modeltranscription_mode
Deepgram Streaming (deepgram_streaming)Differs by platform, so set model explicitlyraw (default), word_level, sentence
AssemblyAI Streaming (assemblyai_streaming)universal-streaming-englishraw (default), word_level, sentence
sarvam_streamingsaaras:v3raw (default), word_level, sentence. Sarvam’s own mode: transcribe, verbatim, translit or codemix; sample_rate 8000 or 16000
meetstream_streamingMeetStream-hostedraw (default), word_level, sentence. No provider key needed
jigsawstack_streamingn/aGoogle Meet only

Streaming needs one extra field, live_transcription_required.webhook_url. See Live Transcription.

Platform support

ZoomGoogle MeetMicrosoft Teams
Post-call providersdeepgram, assemblyai, jigsawstack, sarvam, meetstreamSameSame
Streaming providersdeepgram_streaming, assemblyai_streaming, sarvam_streaming, meetstream_streamingSame, plus jigsawstack_streamingdeepgram_streaming, assemblyai_streaming, sarvam_streaming, meetstream_streaming
meeting_captionsUse another provider (for example deepgram or deepgram_streaming)Yes. The bot turns captions on; EnglishOnly if captions are already running; labeled English
Live speaker labelsExact: each speaker’s audio is transcribed separatelyActive speaker at the time of each phraseDominant speaker at the time of each phrase

jigsawstack_streaming is available on Google Meet. On Zoom and Teams, use deepgram_streaming, assemblyai_streaming, sarvam_streaming or meetstream_streaming. See the capability matrix for the rest of each platform.

How many providers you can use

  • Post-call: list one provider in each request.
  • Streaming: one provider runs. List only the one you want.
  • Post-call plus streaming together: allowed. For example deepgram_streaming for live captions in your app and deepgram for a clean post-call transcript, in the same request.
  • meetstream and jigsawstack cannot be combined in one request.
  • meeting_captions can run alongside a streaming provider on Google Meet.

Who supplies the API key

ProviderKey
deepgram, deepgram_streamingYour Deepgram key
assemblyai, assemblyai_streamingYour AssemblyAI key
jigsawstack, jigsawstack_streamingYour JigsawStack key
sarvam, sarvam_streamingYour Sarvam key
meetstream, meetstream_streamingNone, MeetStream-hosted
meeting_captionsNone, the meeting platform’s captions

Save your provider keys once in the dashboard under Integrations > Transcription. The Mia Transcribe card is the MeetStream engine and needs no key. The MeetStream engine costs $0.10 for each hour of recording, in addition to the bot rate. See pricing. Using a provider without a saved key fails at create time with 400, for example DeepgramAPIKey not configured in user profile.

MeetStream dashboard Integrations page with the Transcription tab selected, showing the Mia Transcribe card and the Deepgram, Assembly AI, JigsawStack and Sarvam AI provider cards
Integrations > Transcription: (1) the Transcription tab, (2) the MeetStream engine, no key needed, (3) provider cards where you save your own keys.

Streaming providers (and meeting_captions) deliver their text during the call and do not produce a post-call transcript: their webhook pipeline has no transcription.processed or transcription.failed, though bot.done still fires at the end. If you need both live and post-call output, run a streaming provider live and re-transcribe afterwards.

Fetching post-call transcripts

  1. Take the transcript_id from the Create Bot response (or from GET /api/v1/bots/{bot_id}/detail).
  2. GET /api/v1/transcript/{transcript_id}/get_transcript returns the formatted transcript: an array of {speaker, transcript, start_time, end_time, words[]} with per-word confidence and speaker attribution. Add ?raw=true for the provider’s raw output. While processing it returns 202.
  3. GET /api/v1/bots/{bot_id}/transcriptions lists every transcription run with status (Success / Processing / Failed) and download links (valid 1 hour).

Details: Post-call transcription.

Re-transcribe any recording

Recorded audio can be transcribed again with any post-call provider (different engine, different language) without re-recording:

curl -X POST "https://api.meetstream.ai/api/v1/bots/<BOT_ID>/transcribe" \
-H "Authorization: Token <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{ "provider": { "assemblyai": {} } }'
  • Exactly one provider per request: deepgram, assemblyai, jigsawstack, sarvam or meetstream.
  • Returns 200 with a new transcript_id and processes in the background.
  • 409 while the bot is still in the meeting. 404 if no audio was recorded (for example, the bot was never admitted). meetstream can be used once per bot (a second request returns 409). 402 if your balance is too low.

CLI: meetstream transcribe <bot-id> -p <provider>.