> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.meetstream.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.meetstream.ai/_mcp/server.

# API Playground

> Build and launch a real meeting bot from the dashboard with no code, step by step, then copy the exact API request it generates into your own integration.

The [API Playground](https://app.meetstream.ai/api-playground) is a visual bot builder inside the dashboard. It walks the full `create_bot` surface in 10 steps (Core, Identity, Streams, Record, Transcribe, Callback, Timeouts, Schedule, Meta and Agent) and sends **live requests to the real API** with one of your keys. Every field maps 1:1 to a [Create Bot](/api-reference/api-endpoints/bot-endpoints/create-bot) request field, so anything you build here can be copied into code.

Why it is useful even if you live in code:

* **See the request you are building.** The **Code** toggle shows the exact JSON payload for your current configuration.
* **Preview before you send.** The **Bot Preview** pane shows the platform detected from your link and how the bot will appear in the meeting.
* **Explore the long tail.** Per-participant streams, transcription providers, callbacks, timeout tuning, scheduling, custom attributes and MIA agents are all laid out as steps instead of buried in a schema.

> **Note**
>
> The Playground sends real requests. A bot you send joins the meeting and is billed like any other bot. Admitting it, removing it and its recordings all work exactly as they do from the API.

## Step by step

#### Core: link, name and key

Pick the API key to send with (1), paste the meeting link (2) and set the display name participants will see (3). The platform (Zoom, Google Meet, Microsoft Teams, or WhatsApp calls in Beta) is detected from the link and shown in the preview (4). Only these two fields are required.

![API Playground Core step with the token selector, meeting link, bot name and preview toggle highlighted](/_fern-img/e66c1c3192d6bcaca1bfe8a812fb3a959aed4740e94a259185916284c940259b.webp)

Link rules differ by platform (for example, Zoom bots join `/j/<meeting-id>` links with the passcode in `pwd=`). See [Meeting Platforms Supported](/navigation).

#### Identity: avatar and join message

`bot_image_url` (1) is shown as the bot's camera tile; use an HTTPS PNG or JPG. `bot_message` (2) is posted in the meeting chat when the bot joins, which is a simple way to tell participants the meeting is being recorded.

![API Playground Identity step with the bot image URL and join message fields highlighted](/_fern-img/36b06f2281ea20add5ccf8f4cbd40a1f0c9506c5a145f1bfef01bf19e9506452.webp)

#### Streams: video and per-participant media

`video_required` (1) records video. `video_separate_streams` (2) saves one video file per participant and `audio_separate_streams` (3) saves one audio file per speaker. Limits differ by platform; see [per-participant audio](/guides/transcription-recordings/per-participant-audio) and [per-participant video](/guides/transcription-recordings/per-participant-video).

![API Playground Streams step with the three stream toggles highlighted](/_fern-img/d3bde5cfc54b3138c2ffb3751a96e996045368268af09ef67b92e80f90f6bdbc.webp)

#### Record: layout and retention

`recording_config.video_layout` (1) chooses `speaker_view` or `grid_view` for the composited recording. `recording_config.retention.type` (2) controls how long media is kept; see [Usage & Retention](/guides/features/usage-and-retention).

![API Playground Record step with the video layout and retention selectors highlighted](/_fern-img/3f31ec6916218d08334da1cdd4cb124686f28297a67f401860156eec121f0132.webp)

#### Transcribe: live or post-call

Choose **Live transcription** or **Post-call transcription** (1), then a provider (2). Live transcription also needs `live_transcription_required.webhook_url` (3), where transcript events are POSTed during the call. Streaming providers differ by platform; see [Live Transcription](/guides/transcription-recordings/live-transcription) and [Post-Call Transcription](/guides/transcription-recordings/post-call-transcription).

![API Playground Transcribe step in live mode with the provider select and webhook URL highlighted](/_fern-img/63f79209ba5cf2b9712244e5cb1475df18ab51194cbdc1f7ebe18860225e8566.webp)![API Playground Transcribe step in post-call mode with the provider select highlighted](/_fern-img/1f1f14aea3fdcd24f2d4e9a6b8874deb9abf327553590299a61e9ebfd20f5160.webp)

#### Callback

`callback_url` receives lifecycle events for this bot only, unsigned. For signed delivery to a fixed endpoint, use [Workspace Webhook Endpoints](/guides/webhooks/workspace-webhooks) instead.

#### Timeouts: automatic leave

Sent as the `automatic_leave` object: `waiting_room_timeout` (1), `everyone_left_timeout` (2), `voice_inactivity_timeout` (3) and `in_call_recording_timeout` (4), all in seconds. When a timeout is not included in the request, the platform default applies. Allowed ranges and which timeouts each platform honors are on [Automatic Leave Configurations](/guides/features/automatic-leave-configuration).

![API Playground Timeouts step with the four automatic leave fields highlighted](/_fern-img/8b379f429377a6d3a8c1cadfe8c95e3ace90b2deedaaac7039290019feb9ca78.webp)

#### Schedule

**Join immediately** (1) or **Schedule for later** (2), which sets `join_at` (ISO 8601, up to 90 days ahead). See [Scheduling Bots](/guides/features/scheduling-bots).

![API Playground Schedule step with Join immediately and Schedule for later highlighted](/_fern-img/4e9bdc433123202215cae40cf790f43b26626d21c14c71bc906c5f1467e73bcc.webp)

#### Meta: custom attributes

Add `custom_attributes` key/value pairs. They are echoed back in webhooks, which makes it easy to map a bot to your own user, meeting or CRM record. See [Custom Attributes](/guides/features/custom-attributes).

#### Agent: attach a MIA agent, then send

Attach a hosted MIA agent by `agent_config_id` (1), or point the bot at your own agent with `agent_url` (2); MeetStream appends `/bridge` and `/bridge/audio` for the control and live-audio sockets. **Send Request** (3) creates the bot.

![API Playground Agent step with the hosted agent selector, self-hosted agent URL and Send Request button highlighted](/_fern-img/fc1ce586036dfe208d919be71ffd819e2b8adfae3da62f97eb55f31e8a73fdb4.webp)

See [What is MIA?](/guides/mia/what-is-mia) and [Bridge Server Architecture](/guides/websockets/bridge-server-architecture).

## A good first session

1. Create an API key in the dashboard under **Configure > API Keys** (the Playground's token dropdown lists your keys by name).
2. Open [meet.new](https://meet.new) to start a test Google Meet that you host.
3. Paste the link into **Core**, name your bot, go to **Agent** and click **Send Request**, then admit the bot from the meeting.
4. Open **All Bots** to watch its status timeline, then flip to **Code** and copy the request into your codebase.

From there, the [quickstart](/guides/get-started/create-your-first-bot) covers fetching the recording, [webhooks](/guides/webhooks/webhooks-and-events) close the loop on events, and the [Bot Status and Error Code Reference](/guides/reference/bot-status-and-error-codes) explains every status you will see.

## Prefer a terminal?

Everything the Playground does, the [MeetStream CLI](/build-with-ai/meetstream-cli) does with flags (`meetstream bot create ... -t deepgram -c <webhook>`), and the [MCP server](/build-with-ai/meetstream-mcp-server) does as agent tools.