Speaking Bots/POST

Join Meeting

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

Authorization

ApiKeyAuth
x-meeting-baas-api-key<token>

MeetingBaas API key for authentication

In: header

Request Body

application/json

meeting_url*string

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

bot_name?string

Name to display for the bot in the meeting

Default""
personas?array<>|

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

bot_image?|
entry_message?|
extra?|
enable_tools?boolean
Defaulttrue
prompt?|
websocket_url?|

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

turn_config?|

Per-bot turn-taking tuning (VAD confidence/start_secs/stop_secs/min_volume)

prompt_data_sources?array<>|

External text or URL data sources to append to the bot prompt

prompt_data_token_limit?integer

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

Default4000
Range0 <= value <= 50000
mcp?|

MCP server/tool metadata and optional live connection details

mcp_profile?|

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?string

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.

Default"read_only"
Value in"read_only" | "read_write"
llm_provider?|

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

llm_model?|

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

speech_speed?|

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.

credentials?|

Bring your own provider keys for this bot (LLM, speech-to-text, text-to-speech). Any key left out falls back to the server's own configuration. Keys are used only by this bot's pipeline and are never stored or returned.

transcription_enabled?boolean

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.

Defaulttrue
transcription_provider?string

MeetingBaas speech-to-text provider for that transcript.

Default"gladia"
Value in"gladia" | "deepgram" | "assemblyai" | "speechmatics" | "soniox"
[key: string]?never

Response Body

application/json

application/json

curl -X POST "https://speaking.meetingbaas.com/bots" \  -H "Content-Type: application/json" \  -d '{    "bot_image": "https://example.com/bot-avatar.png",    "bot_name": "Meeting Assistant",    "enable_tools": true,    "entry_message": "Hello! I\'m here to assist with the meeting.",    "extra": {      "company": "ACME Corp",      "meeting_purpose": "Weekly sync"    },    "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"  }'
{
  "bot_id": "string"
}
Empty
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string"
    }
  ]
}
Empty