Skip to main content
Bots join meetings and stream audio for transcription (and optionally persist a recording). Validation/auth errors use the standard envelope:
{
  "detail": "..."
}

Meeting IDs by Platform

Extract the native_meeting_id (and passcode when required) from the meeting URL:
PlatformURL examplenative_meeting_idpasscode
Google Meethttps://meet.google.com/abc-defg-hijabc-defg-hij
Microsoft Teamshttps://teams.live.com/meet/1234567890123?p=XYZ1234567890123XYZ (required)
Zoomhttps://us05web.zoom.us/j/12345678901?pwd=...12345678901optional

POST /bots

Create a bot for a meeting. Common request fields:
  • platform (google_meet | teams | zoom)
  • native_meeting_id
  • passcode (Teams required; Zoom optional)
  • recording_enabled (optional)
  • transcribe_enabled (optional)
  • transcription_tier (realtime | deferred, optional)
  • voice_agent_enabled (optional, defaults to true) — enables Interactive Bots capabilities (speak, chat, screen share). Set to false to disable.
curl -X POST "$API_BASE/bots" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $API_KEY" \
  -d '{
    "platform": "google_meet",
    "native_meeting_id": "abc-defg-hij",
    "recording_enabled": true,
    "transcribe_enabled": true,
    "transcription_tier": "realtime"
  }'
Returns the created meeting record. Response format (201): full meeting object with id, platform, native_meeting_id, constructed_meeting_url, status, bot_container_id, start_time, end_time, data, created_at, and updated_at.
{
  "id": 219,
  "user_id": 4,
  "platform": "google_meet",
  "native_meeting_id": "abc-defg-hij",
  "constructed_meeting_url": "https://meet.google.com/abc-defg-hij",
  "status": "requested",
  "bot_container_id": "d21c5b0c5275...c9fe9333",
  "start_time": null,
  "end_time": null,
  "data": {},
  "created_at": "2026-02-16T17:42:33.524137",
  "updated_at": "2026-02-16T17:42:33.535113"
}

GET /bots/status

List bots currently running under your API key. Response format (200): {"running_bots":[{"container_id","container_name","platform","native_meeting_id","status","normalized_status","created_at","labels","meeting_id_from_name"}]}.
curl -H "X-API-Key: $API_KEY" \
  "$API_BASE/bots/status"
{
  "running_bots": [
    {
      "container_id": "d21c5b0c5275...c9fe9333",
      "container_name": "vexa-bot-219-fd0a58fb",
      "platform": "google_meet",
      "native_meeting_id": "abc-defg-hij",
      "status": "Up 4 seconds",
      "normalized_status": "Up",
      "created_at": "2026-02-16T17:42:33+00:00",
      "labels": {
        "vexa.user_id": "4"
      },
      "meeting_id_from_name": "219"
    }
  ]
}

PUT /bots/{platform}/{native_meeting_id}/config

Update an active bot configuration (currently supports language and task).
curl -X PUT "$API_BASE/bots/google_meet/abc-defg-hij/config" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $API_KEY" \
  -d '{"language":"es"}'
Response format (202): {"message":"Reconfiguration request accepted and sent to the bot."}.
{
  "message": "Reconfiguration request accepted and sent to the bot."
}

DELETE /bots/{platform}/{native_meeting_id}

Stop a bot (remove it from the meeting).
curl -X DELETE \
  -H "X-API-Key: $API_KEY" \
  "$API_BASE/bots/google_meet/abc-defg-hij"
Response format (202): {"message":"Stop request accepted and is being processed."}.
{
  "message": "Stop request accepted and is being processed."
}