> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vexa.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a Google Meet transcript via API

> Google Meet transcript API: send a bot to the meeting with one POST, then read the live transcription over REST or WebSocket.

Send a bot to the meeting with **one POST**, then read the transcript **while the call is still
running**. The bot joins Google Meet like any participant — no plugin, no host configuration — and
streams back a speaker-attributed transcript you either poll over REST or subscribe to over
WebSocket.

<Tip>
  **Hosted, no install:** [connect your agent](https://vexa.ai/connect?utm_source=docs\&utm_medium=tip\&utm_campaign=how-to-google-meet-transcript-api) (Claude Code, Codex, Cursor) or [get an API key](https://vexa.ai/start?utm_source=docs\&utm_medium=tip\&utm_campaign=how-to-google-meet-transcript-api) (free credit, no card required). Self-hosting: [Deployment](/deployment).
</Tip>

## 1. Send the bot

```bash theme={null}
curl -X POST "$API_BASE/bots" \
  -H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
  -d '{"platform":"google_meet","native_meeting_id":"abc-defg-hij","bot_name":"Vexa"}'
```

`native_meeting_id` is the id **inside** the join URL — `abc-defg-hij` in
`https://meet.google.com/abc-defg-hij` — not the whole URL.

Have only the URL? Send `meeting_url` alone; the API parses it into `platform` and
`native_meeting_id`:

```bash theme={null}
curl -X POST "$API_BASE/bots" \
  -H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
  -d '{"meeting_url":"https://meet.google.com/abc-defg-hij","bot_name":"Vexa"}'
```

`$API_BASE` is `https://api.cloud.vexa.ai` hosted, or `http://localhost:18056` self-hosted.
Optional on the spawn: `language` (ISO code; omit for per-window auto-detection) and `task`
(`transcribe` default, or `translate`).

## 2. Read the transcript live

Segments stream in as the meeting runs. Poll:

```bash theme={null}
curl -H "X-API-Key: $API_KEY" \
  "$API_BASE/transcripts/google_meet/abc-defg-hij"
```

```json theme={null}
{
  "segments": [
    { "speaker": "Jane Liu", "text": "Let's lock the renewal pricing by July 1.",
      "start": 12.4, "end": 15.1, "language": "en", "completed": true, "confidence": 0.93 }
  ]
}
```

Live drafts arrive as `completed: false` and are replaced by `completed: true` confirmations. For
per-segment push instead of polling, subscribe on the gateway's `/ws`:

```json theme={null}
{ "action": "subscribe",
  "meetings": [ { "platform": "google_meet", "native_id": "abc-defg-hij" } ] }
```

## Google Meet specifics

* **Admission.** The bot may be parked in a lobby until a host admits it — admit it like any guest.
  A run that ended there reports
  [`awaiting_admission_timeout` or `awaiting_admission_rejected`](/troubleshooting/completion-reasons);
  `automatic_leave.max_wait_for_admission` sets how long it waits.
* **Joining as a real account.** With `authenticated: true` the bot uses a persistent browser
  profile and joins as your Google account instead of an anonymous guest. If that profile is signed
  out it refuses to join with `auth_session_missing` rather than silently degrading — see
  [Authenticated bots](/authenticated-bots).
* **Leaving on its own.** An active bot leaves after 10 minutes with no remote microphone audio and
  finishes as `completed(left_alone)`. Widen it per meeting with
  `automatic_leave.max_time_left_alone`.

## Stop the bot

```bash theme={null}
curl -X DELETE "$API_BASE/bots/google_meet/abc-defg-hij" -H "X-API-Key: $API_KEY"
```

## See also

* [Send a bot and get a transcript](/how-to/send-a-bot) — the full walkthrough, all platforms
* [Meetings API](/api/meetings) — every parameter, status, and response shape
* [Troubleshooting](/troubleshooting) — the bot joined but there is no transcript
