> 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.

# Create Bot Payload Reference: Zoom

Use `POST /api/v1/bots/create_bot` with `Authorization: Token <YOUR_API_KEY>` and `Content-Type: application/json`. See the [Create Bot API](/api-reference/api-endpoints/bot-endpoints/create-bot) for the full request schema.

## 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](/guides/app-integrations/zoom-authenticated-bots).

| Field | Type | Description |
|-------|------|-------------|
| `zak_url` | `string` | HTTPS URL that returns a ZAK (signed-in bot). Mutually exclusive with `obf_url`. |
| `obf_url` | `string` | HTTPS 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.