Skip to main content
Send a bot to the meeting with one POST, then read the transcript while the call is still running. The bot joins Microsoft Teams like any participant — no plugins, no host configuration — and streams back a speaker-attributed transcript you either poll over REST or subscribe to over WebSocket.
Hosted, no install: connect your agent (Claude Code, Codex, Cursor) or get an API key (free credit, no card required). Self-hosting: Deployment.

1. Send the bot

Teams meetings come addressed two ways, and both are valid native_meeting_ids:
  • the numeric meeting ID (10–15 digits) Teams prints next to a passcode — pass the passcode in passcode, never glued onto the id;
  • the thread id out of a classic …/l/meetup-join/19:meeting_…@thread.v2 link, which carries its own credential and takes no separate passcode.
Sending the full meeting_url instead settles both the host and the passcode on its own. $API_BASE is https://api.cloud.vexa.ai hosted, or http://localhost:18056 self-hosted.

2. Read the transcript live

Segments stream in as the meeting runs. Poll:
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:

Microsoft Teams specifics

  • Admission. The bot may wait in the lobby until a host admits it — admit it like any guest. A run that ended there reports awaiting_admission_timeout or awaiting_admission_rejected; automatic_leave.max_wait_for_admission sets how long it waits.
  • Non-default clouds. On teams.live.com for personal meetings, or gov. / dod. teams.microsoft.us for GCC-High and DoD, add teams_base_host — otherwise the bot builds its URL on the world-wide host and joins a different Teams. Hosts outside the Teams web clients are rejected with 422.
  • Passcodes. Only passcode is read. password, meeting_password and similar aliases are rejected with a 422 naming the right field. The passcode is kept off the stored constructed_meeting_url and out of the logs.
  • Language auto-detection. Teams rides the mixed-audio lane, where a low-confidence detection discards the window rather than guessing; those windows carry language: null. Pin language on the spawn to avoid it.

Stop the bot

See also