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

# Send a bot and get a transcript

> Capture a Google Meet, Zoom, or Teams call in real time.

A Vexa bot joins a call like any participant and streams back a **speaker-attributed** transcript. No
plugin, no host configuration.

## 1. Send the bot

The only thing that changes between platforms is the `platform` value.

<Tabs>
  <Tab title="Google Meet">
    ```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"}'
    ```
  </Tab>

  <Tab title="Zoom">
    ```bash theme={null}
    curl -X POST "$API_BASE/bots" \
      -H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
      -d '{"platform":"zoom","native_meeting_id":"81234567890","bot_name":"Vexa"}'
    ```
  </Tab>

  <Tab title="Microsoft Teams">
    ```bash theme={null}
    curl -X POST "$API_BASE/bots" \
      -H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
      -d '{"platform":"teams","native_meeting_id":"<meeting-id>","bot_name":"Vexa"}'
    ```
  </Tab>
</Tabs>

`native_meeting_id` is the id **inside** the join URL (e.g. `abc-defg-hij` for Meet), not the whole URL.
Optional: `language` (ISO code, omit to auto-detect) and `task` (`transcribe` default, or `translate`).

On Meet and Teams the bot may wait in the lobby until a host admits it.

## 2. Read the transcript

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 }
  ]
}
```

Each segment is diarized (who said what) with word-level timestamps. Live drafts arrive as
`completed: false` and are replaced by `completed: true` confirmations. For live, per-segment push instead
of polling, subscribe over **WebSocket** — see the [Meetings API](/api/meetings#get-the-transcript).

## 3. Manage and stop

```bash theme={null}
# switch to live Spanish translation mid-call
curl -X PUT "$API_BASE/bots/google_meet/abc-defg-hij/config" \
  -H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
  -d '{"language":"es","task":"translate"}'

# stop the bot / leave the call
curl -X DELETE "$API_BASE/bots/google_meet/abc-defg-hij" -H "X-API-Key: $API_KEY"
```

The audio **recording** lands in your object storage — retrieve it via `GET /recordings`
([Meetings API](/api/meetings#recordings)).

## Next

The transcript compiles into your [workspace](/concepts#workspace), where agents act on it. Turn that into
an automatic write-up: [Report after every meeting](/how-to/post-meeting-report).

<Note>
  If the bot joins but no text appears, transcription isn't configured — see
  [Troubleshooting](/troubleshooting#bot-joins-but-theres-no-transcript).
</Note>
