Bots & Meetings

This guide covers everything related to bots and meetings: launching bots, controlling them during meetings, retrieving transcripts and recordings, and managing meeting metadata.

Launching a bot

To send a bot into a meeting, use the POST /api/v1/bots endpoint.

bash
curl -X POST https://api.serveka.com/api/v1/bots \
  -H "X-API-Key: srvk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "platform": "google_meet",
    "meeting_url": "https://meet.google.com/abc-defg-hij",
    "bot_name": "Notetaker",
    "language": "en",
    "recording_enabled": true
  }'

Required fields:

  • platform: One of google_meet, zoom, or teams
  • meeting_url: The full URL of the meeting

Optional but commonly used:

  • bot_name: Display name for the bot in the meeting
  • language: BCP-47 language code for transcription (e.g., en, es, fr)
  • recording_enabled: Whether to record the meeting (default: workspace setting)
  • transcribe_enabled: Whether to transcribe audio (default: workspace setting)
  • capture_modes: Array of streams to capture (["audio"] or ["audio", "video"])
  • voice_agent_enabled: Enable TTS, chat, and screen share (default: true)

Response 201:

json
{
  "id": 99,
  "bot_id": "550e8400-e29b-41d4-a716-446655440000",
  "platform": "google_meet",
  "native_meeting_id": "abc-defg-hij",
  "status": "requested",
  "created_at": "2026-05-12T10:00:00Z",
  "updated_at": "2026-05-12T10:00:00Z"
}

Important: Save the bot_id (UUID) — this is the primary identifier for all bot operations.

Bot status lifecycle

Bots transition through these statuses:

requested → joining → awaiting_admission → active → stopping → completed
                           │                  │
                           └── failed ────────┘

You can check a bot's current status with GET /api/v1/bots/{bot_id}.

Controlling an active bot

When a bot is in active status, you can control its behavior in the meeting.

Speak (TTS)

Make the bot speak using text-to-speech:

bash
curl -X POST https://api.serveka.com/api/v1/bots/550e8400-e29b-41d4-a716-446655440000/speak \
  -H "X-API-Key: srvk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Hello everyone, I am your AI notetaker."
  }'

Send chat message

Post a message in the meeting chat:

bash
curl -X POST https://api.serveka.com/api/v1/bots/550e8400-e29b-41d4-a716-446655440000/chat \
  -H "X-API-Key: srvk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "message": "I'll be taking notes for this meeting."
  }'

Screen share

Display a URL on the bot's screen:

bash
curl -X POST https://api.serveka.com/api/v1/bots/550e8400-e29b-41d4-a716-446655440000/screen \
  -H "X-API-Key: srvk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/presentation.pdf"
  }'

Hand raise/lower

Raise or lower the bot's hand:

bash
# Raise hand
curl -X POST https://api.serveka.com/api/v1/bots/550e8400-e29b-41d4-a716-446655440000/hand \
  -H "X-API-Key: srvk_your_key_here"
 
# Lower hand
curl -X DELETE https://api.serveka.com/api/v1/bots/550e8400-e29b-41d4-a716-446655440000/hand \
  -H "X-API-Key: srvk_your_key_here"

Screenshot

Capture a screenshot of the bot's view:

bash
curl -X POST https://api.serveka.com/api/v1/bots/550e8400-e29b-41d4-a716-446655440000/screenshot \
  -H "X-API-Key: srvk_your_key_here"

Stop speaking/chat/screen

Each of the above actions has a corresponding DELETE endpoint to stop the action.

Getting participant list

Retrieve the current participants in the meeting:

bash
curl https://api.serveka.com/api/v1/bots/550e8400-e29b-41d4-a716-446655440000/participants \
  -H "X-API-Key: srvk_your_key_here"

Response:

json
{
  "bot_id": "550e8400-e29b-41d4-a716-446655440000",
  "participants": ["Alice", "Bob", "Charlie"]
}

Stopping a bot

Remove the bot from the meeting:

bash
curl -X DELETE https://api.serveka.com/api/v1/bots/550e8400-e29b-41d4-a716-446655440000 \
  -H "X-API-Key: srvk_your_key_here"

Response 202:

json
{ "message": "Bot stopping" }

The bot will leave gracefully and finalize the transcript.

Getting the full transcript

After the meeting ends, retrieve the complete transcript:

bash
curl https://api.serveka.com/api/v1/bots/550e8400-e29b-41d4-a716-446655440000/transcription \
  -H "X-API-Key: srvk_your_key_here"

See the Quickstart for the full response format.

Listing bots

Get a list of bots in your workspace with optional filters:

bash
curl "https://api.serveka.com/api/v1/bots?status=active&limit=10" \
  -H "X-API-Key: srvk_your_key_here"

Meeting management

Meeting records are accessible via /api/v1/meetings/{meeting_id} endpoints.

You can:

  • List meetings with filters
  • Get a specific meeting by ID
  • Update meeting metadata (name, participants, languages, notes)
  • Delete meeting artifacts (transcriptions, recordings) for completed meetings
  • List all bots that attended a specific meeting

See the API Reference for full details.

Updated May 2026Edit on GitHub