bots

Create and deploy a speaking bot in a meeting.

Launches an AI-powered bot that joins a video meeting through MeetingBaas and processes audio using Pipecat's voice AI framework.

post/bots

Request

Request body

meeting_urlstring required

URL of the Google Meet, Zoom or Microsoft Teams meeting to join

bot_namestring

Name to display for the bot in the meeting

personasstring[] nullable

List of persona names to use. The first available will be selected.

bot_imagestring nullable
entry_messagestring nullable
extraobject nullable
enable_toolsboolean
promptstring nullable
websocket_urlstring nullable

Optional public WebSocket base URL override, e.g. wss://bot.example.com

prompt_data_token_limitinteger

Approximate total token cap for loaded prompt_data_sources. 0 disables loading.

mcp_profile'professional' | 'personal' | 'all' nullable

Optional trusted local mcpproxy group preset. 'professional' connects to MCP_PROXY_PROFESSIONAL_URL or http://127.0.0.1:8111/mcp; 'personal' connects to MCP_PROXY_PERSONAL_URL or http://127.0.0.1:8110/mcp; 'all' connects to MCP_PROXY_ALL_URL or http://127.0.0.1:8109/mcp. The preset is merged with explicit mcp servers when both are supplied.

mcp_profile_tool_access'read_only' | 'read_write'

Tool exposure for mcp_profile presets. 'read_only' exposes retrieve_tools, call_tool_read, read_cache, and set_profile. 'read_write' also exposes call_tool_write. Presets never expose upstream_servers, call_tool_destructive, code_execution, registry, or quarantine tools.

llm_provider'openai' | 'anthropic' | 'zai' nullable

LLM provider for this bot. Defaults to LLM_PROVIDER, then openai.

llm_modelstring nullable

Provider model for this bot. Defaults to provider-specific env vars.

speech_speednumber nullable

TTS speaking speed multiplier between 0.6 and 1.5; values outside are rejected. Defaults to CARTESIA_TTS_SPEED, TTS_SPEED, SPEECH_SPEED, or the runner default.

speech_volumenumber nullable

TTS loudness multiplier. Honored range is 0.5-2.0 (Cartesia sonic-3). Omit for the provider default.

speech_emotionstring nullable

Emotion tag guiding the TTS tone (Cartesia sonic-3, experimental; 60+ tags such as 'excited', 'calm'). Omit to let the model infer tone from the text, which Cartesia recommends.

wake_phrasesstring[] nullable

Other ways the bot's name may be heard, for respond_mode 'mentioned': spellings, nicknames, how the speech-to-text tends to write it. The name itself, split and joined variants of it, and these are all accepted, and all are boosted in the recogniser. Up to 10 phrases of at most 40 characters each.

respond_mode'always' | 'mentioned'

When the bot replies. 'always': every completed turn gets an answer (good for 1:1 calls). 'mentioned': the bot only hears turns within a short window after someone says its name β€” the mode for multi-party meetings where it should stay quiet until addressed.

transcription_enabledboolean

Have MeetingBaas transcribe the recording once the meeting ends, with the bot's own turns attributed to it by name. Set false for a recording without a transcript.

transcription_provider'gladia' | 'deepgram' | 'assemblyai' | 'speechmatics' | 'soniox'

MeetingBaas speech-to-text provider for that transcript.

languagestring nullable

Language the bot listens for, as a BCP-47 tag (en, en-NG, fr), or 'multi' to let Deepgram switch between its multilingual set during the call. Defaults to en-US.

callback_urlstring nullable

Where this API posts the bot's own events: each utterance it speaks, each escalation to its owner, and the end of the call with the usage report and briefing. An https URL on a public host; signed with callback_secret when one is given. Redirects are not followed.

callback_secretstring password nullable

Shared secret used to sign callback_url deliveries (x-speaking-bot-signature: sha256=<HMAC of the body>).

Example request

{
  "authority": {
    "approved_positions": [
      "Ada supports option B for the vendor choice"
    ],
    "escalate_on": [
      "any spending above 500 dollars"
    ],
    "forbidden": [
      "agreeing to new deadlines"
    ],
    "owner_name": "Ada Okafor"
  },
  "bot_image": "https://example.com/bot-avatar.png",
  "bot_name": "Meeting Assistant",
  "briefing": {
    "language": "en"
  },
  "callback_url": "https://app.example.com/hooks/speaking-bot",
  "enable_tools": true,
  "entry_message": "Hello! I'm here to assist with the meeting.",
  "extra": {
    "company": "ACME Corp",
    "meeting_purpose": "Weekly sync"
  },
  "language": "en",
  "llm_model": "claude-opus-4-8",
  "llm_provider": "anthropic",
  "mcp": {
    "servers": [
      {
        "name": "crm",
        "tool_allowlist": [
          "get_account",
          "list_recent_calls"
        ],
        "tools": [
          "get_account",
          "list_recent_calls"
        ],
        "transport": "streamable_http",
        "url": "https://mcp.example.com"
      }
    ]
  },
  "mcp_profile": "professional",
  "mcp_profile_tool_access": "read_only",
  "meeting_url": "https://meet.google.com/abc-defg-hij",
  "personas": [
    "helpful_assistant",
    "meeting_facilitator"
  ],
  "prompt": "You are Meeting Assistant, a concise and professional                 AI bot that helps summarize key points and keep the meeting on track. Speak clearly and stay on topic.",
  "prompt_data_sources": [
    {
      "name": "CRM account notes",
      "type": "url",
      "url": "https://example.com/account-notes.md"
    }
  ],
  "prompt_data_token_limit": 3000,
  "speech_speed": 1.15,
  "websocket_url": "wss://bots.example.com"
}

Response

Bot successfully created and joined the meeting

bot_idstring required

The MeetingBaas bot ID used for API operations with MeetingBaas

Changes

    • info

      added the new optional request property

    • info

      added the new optional request property

    • info

      added the new optional request property

    • info

      added the new optional request property

    • info

      added the new optional request property

    • info

      added the new optional request property