Skip to navigation

Create Bot Payload Reference

View as Markdown

Create Bot Payload Reference: Platform Authentication

Use POST /api/v1/bots/create_bot with Authorization: Token <YOUR_API_KEY> and Content-Type: application/json. See the Create Bot API for the full request schema.

Recording defaults

Three defaults are worth setting deliberately on every create bot call, because the API defaults are not the ones most integrations want.

FieldAPI defaultRecommendedWhy
video_requiredtruefalseAudio only is faster to process and smaller to store. Transcripts, summaries, diarization and speaker timelines all work without video.
recording_config.video_layoutgrid_viewspeaker_viewSpeaker view follows the active speaker, which is what you want for review and clipping. Grid view is a composited mosaic of everyone.
video_separate_streamsfalseleave unsetOne video file per participant multiplies processing and storage. Turn it on only when you actually want per-participant video.

1. Send video_required: false for audio-only bots. video_required defaults to true, so an omitted field records video. Send false explicitly for an audio-only bot:

{
"meeting_link": "<YOUR_MEETING_LINK>",
"bot_name": "MeetStream Notetaker",
"video_required": false
}

2. When video is on, send speaker_view. recording_config.video_layout accepts exactly speaker_view or grid_view. It is ignored when video_required is false, because an audio-only bot never runs the compositor. Google Meet, Microsoft Teams and Zoom accept both values; WhatsApp accepts only grid_view.

{
"meeting_link": "<YOUR_MEETING_LINK>",
"bot_name": "MeetStream Notetaker",
"video_required": true,
"recording_config": {
"video_layout": "speaker_view"
}
}

Use grid_view only when you specifically want the mosaic.

3. Per-participant video is opt-in. Never set video_separate_streams: true by default. It produces one video file per participant, which is a deliberate choice, not a sensible default. See Per-Participant Video Streams when you do want it. Per-participant audio (audio_separate_streams) is a separate flag and is unaffected by these recording defaults.


Nested: teams

Optional. Omit this object for an anonymous guest join. To join as a registered Microsoft 365 bot account, set login_required: true and provide a Teams login domain that belongs to your MeetStream account.

FieldTypeDescription
login_requiredbooleanSet true to request a signed-in Teams join.
teams_login_domainstringRequired when login_required is true. The domain registered with MeetStream.
sign_in_emailstringOptional account to use instead of automatically selecting an available account in the domain.
strict_emailbooleanApplies with sign_in_email; defaults to true. If false, MeetStream may fall back to another available account in the domain.
{
"meeting_link": "https://teams.microsoft.com/l/meetup-join/...",
"bot_name": "MeetStream Notetaker",
"video_required": false,
"teams": {
"login_required": true,
"teams_login_domain": "bots.acme.com"
}
}

Register the domain and accounts before creating the bot. See Microsoft Teams Signed-In Bots for the complete setup and account-selection behavior.

Nested: zoom

Optional. Omit the object, or pass an empty object, for a guest Zoom join.

Pass exactly one of zak_url or obf_url for authenticated join. MeetStream fetches that HTTPS URL at join time; you mint the token on your server (OAuth + Zoom token APIs). Guide: Zoom Authenticated Bots.

FieldTypeDescription
zak_urlstringHTTPS URL that returns a ZAK (signed-in bot). Mutually exclusive with obf_url.
obf_urlstringHTTPS URL that returns an OBF (on-behalf-of bot). Mutually exclusive with zak_url. MeetStream appends meeting_number.

use_zoom_obf and zoom_oauth_connection_user_id are rejected.

URLs must use HTTPS, include a host, and be at most 4096 characters. They must be reachable from MeetStream bots running in AWS. Do not include meeting_number in obf_url: MeetStream adds it at join time. The parent user must already be in the meeting; mint a fresh OBF token when called.

MeetStream does not store end-user Zoom OAuth refresh tokens for join. Your server owns OAuth and token minting. If token fetching fails, the bot does not fall back to a guest join.