> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.meetstream.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.meetstream.ai/_mcp/server.

# Transcription Providers

> Compare every transcription provider on MeetStream: Deepgram, AssemblyAI, Sarvam, JigsawStack, the in-house MeetStream engine, native meeting captions, and the streaming providers for live transcripts.

Every MeetStream bot can transcribe its meeting — you pick the engine per request. Configure exactly **one** provider under `recording_config.transcript.provider`:

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

## Post-call vs live

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

| Provider                                                                        | Default model | Notable                                                        |
| ------------------------------------------------------------------------------- | ------------- | -------------------------------------------------------------- |
| [Deepgram](/guides/transcription-recordings/providers/deepgram)                 | `nova-3`      | Diarization, smart formatting, keywords on by default          |
| [AssemblyAI](/guides/transcription-recordings/providers/assemblyai)             | `universal-2` | Speaker labels, optional PII redaction and chapters            |
| [Sarvam](/guides/transcription-recordings/providers/sarvam)                     | `saaras:v3`   | Indic-language strength, transcribe or translate modes         |
| [MeetStream engine](/guides/transcription-recordings/providers/meetstream)      | in-house      | Auto language detection, optional translation                  |
| [JigsawStack](/guides/transcription-recordings/providers/jigsawstack)           | —             | Auto language, per-speaker output                              |
| [Meeting captions](/guides/transcription-recordings/providers/meeting-captions) | native        | The platform's own captions (Google Meet / Teams), zero config |

**Streaming providers** push live transcript chunks to your webhook during the meeting:

| Provider                                                                                | Default model                 | Modes                               |
| --------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------- |
| [Deepgram Streaming](/guides/transcription-recordings/providers/deepgram-streaming)     | `nova-2`                      | `sentence` (default), `word`, `raw` |
| [AssemblyAI Streaming](/guides/transcription-recordings/providers/assemblyai-streaming) | `universal-streaming-english` | `raw` (default), `sentence`         |

Streaming setup needs one extra field — `live_transcription_required.webhook_url` — see [Live Transcription](/guides/transcription-recordings/live-transcription).

Streaming providers (and `meeting_captions`) deliver their text during the call and do **not** produce a post-call transcript: their webhook pipeline ends at `audio.processed`, with no `transcription.processed` or `bot.done`. If you need both live and post-call output, run a streaming provider live and [re-transcribe](#re-transcribe-any-recording) afterwards.

## Fetching post-call transcripts

1. Resolve the `transcript_id` via `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.
3. `GET /api/v1/bots/{bot_id}/transcriptions` lists every transcription run with status (`Success` / `Processing` / `Failed`) and presigned download URLs (valid 1 hour).

## Re-transcribe any recording

Recorded audio can be transcribed again with any provider — different engine, different language — without re-recording:

```bash
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": {} } }'
```

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