Skip to navigation

Create Bot

View as Markdown
This endpoint supports 20 different payload variations. Use the dropdown above the code panel to explore configurations for various use cases.

Authentication

AuthorizationToken

Format: Token <your_api_key>

Headers

Idempotency-KeystringOptional

Optional retry key (use a fresh UUID per logical create). If a bot was already created for your account with this key, the API skips creation and replays that bot with HTTP 507. Keys do not expire. A failed create is not cached, so a retry after a failure runs fresh.

Request

This endpoint expects an object.
bot_namestringRequired
The display name the bot will use in the meeting.
storage_config_idstringOptional

Optional ID of a custom storage destination configured in the MeetStream dashboard. Omit to use the user’s default destination. This selects a saved destination; storage setup is dashboard-only.

audio_requiredbooleanOptionalDefaults to true

Whether the bot records the mixed meeting audio. Must be true when audio_mixed_mp3 is true.

video_requiredbooleanOptionalDefaults to true

Whether the bot should record video. Defaults to true when the field is omitted, so an omitted field records video. Send false explicitly for an audio-only bot. Audio only is the recommended default unless you need the video: it is faster to process and smaller to store, and transcripts, summaries, diarization and speaker timelines all work without it.

audio_mixed_mp3booleanOptionalDefaults to false

Also produce an MP3 copy of the mixed meeting audio, returned as audio_mp3_url by Get Bot Audio. Requires audio_required: true. Can also be set inside recording_config; the top-level value wins when both are sent.

audio_separate_mp3booleanOptionalDefaults to false

Also produce MP3 copies of each per-participant audio segment, returned as download_url_mp3 by Get Audio Streams. Requires audio_separate_streams: true. Can also be set inside recording_config.

deduplication_keystringOptionalformat: "^[\x20-\x7E]+$"1-2000 characters

Your own logical key for this bot (printable ASCII, 1-2000 characters). It is bound permanently to the first bot created with it for your account. Sending the same key again returns that existing bot with HTTP 200 instead of creating a new one; sending it with a different meeting_link returns 409. Use the Idempotency-Key header instead for transport-level retries. See the Deduplication & Idempotency Keys guide.

initial_audioobjectOptional

A one-shot audio clip the bot plays into the meeting shortly after it is admitted. Google Meet and Microsoft Teams only (400 on other platforms).

agent_config_paramsmap from strings to stringsOptional

Values for the template variables in the MIA agent’s system prompt, for this bot only. Keys are variable names; values must be strings or primitives (objects and arrays are rejected). Used with agent_config_id.

zoomobjectOptional

Omit or use for guest join. For authenticated Zoom join, send exactly one of zak_url or obf_url. MeetStream fetches your HTTPS mint URL at join time; your server owns OAuth and refresh tokens. Fetch failure does not fall back to guest. Both URLs together return 400. The deprecated fields use_zoom_obf and zoom_oauth_connection_user_id are rejected. See /guides/app-integrations/zoom-authenticated-bots.

google_meetobjectOptional

Join Google Meet signed in, as an account on a Google Workspace domain registered through the Google login endpoints. See /guides/app-integrations/google-signed-in-bots.

teamsobjectOptional

Join Microsoft Teams signed in, as a Microsoft 365 account on a domain registered through the Teams login endpoints. The bot shows that account’s display name and picture, so bot_name and bot_image_url are not applied. Each account runs one bot at a time. A malformed teams block is dropped and the bot joins as a guest. See /guides/app-integrations/teams-signed-in-bots.

audio_separate_streamsbooleanOptional
Enable separate audio streams feature.
video_separate_streamsbooleanOptionalDefaults to false

Record one video file per participant in addition to the composited meeting video. Off unless you set it to true, and it stays an explicit opt-in because it multiplies processing and storage by the number of participants.

bot_messagestringOptional
An initial message for the bot to post in the meeting chat.
bot_image_urlstringOptional
URL for the bot's profile picture or avatar.
callback_urlstringOptional
A URL to receive webhook event callbacks.
join_atdatetimeOptional
ISO 8601 datetime to schedule the bot to join the meeting.
agent_config_idstringOptional
The ID of the agent configuration to enable agentic features.
custom_attributesmap from strings to anyOptional

Arbitrary key-value metadata attached to the bot.

socket_connection_urlobjectOptional

WebSocket URL for two-way audio/data bridge connection.

live_audio_requiredobjectOptional
WebSocket URL to stream live audio output from the meeting.
live_video_requiredobjectOptional
WebSocket URL to stream live video output from the meeting.
live_transcription_requiredobjectOptional
Webhook URL to receive live transcription events.
automatic_leaveobjectOptional
Configure how long the bot should remain in the meeting under different conditions before leaving automatically. All timeout values are specified in seconds and accept integer values only.
recording_configobjectOptional

Bot media is retained for 30 days (720 hours) by default, included in the base rate. Retention beyond 30 days is billed at $0.05 per GB per month. Set retention.hours lower to delete media sooner.

Response

Deduplication replay. A bot already exists for this deduplication_key and the same meeting_link; it is returned instead of creating a new one.

bot_idstringOptional
transcript_idstring or nullOptional

Set when a post-call transcription provider was configured; otherwise null.

meeting_urlstringOptional
statusstringOptional

Active for an immediate join, Scheduled when join_at was set. On a replay, the bot’s current status.

join_atdatetimeOptional
Present on scheduled bots only.
schedule_namestringOptional
Present on scheduled bots only.

Errors

400
Bad Request Error
403
Forbidden Error
409
Conflict Error
429
Too Many Requests Error
507
Insufficient Storage Error