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

# Workspace Webhook Endpoints

> Create workspace-level webhook endpoints in the MeetStream dashboard: pick exactly which bot lifecycle and post-call events to receive, and inspect deliveries in the Logs tab.

Besides the per-bot `callback_url` you can pass on [`create_bot`](/api-reference/api-endpoints/bot-endpoints/create-bot), the dashboard's [Webhooks page](https://app.meetstream.ai/webhooks) lets you register **workspace-level endpoints**: MeetStream delivers the events you subscribe to for your bots, no per-request wiring needed.

![The Webhooks page in the MeetStream dashboard, with Endpoints and Logs tabs](https://fdr-prod-docs-files-public.s3.us-east-1.amazonaws.com/meetstream-ai-573402.docs.buildwithfern.com/78f2732176239a88f41ca1c79a76a14637df218a48f529e75041cd93e834b12c/docs/assets/images/dashboard/dashboard-webhooks.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIA6KXJSKKNFOCF7G4B%2F20260814%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260814T144310Z&X-Amz-Expires=604800&X-Amz-Signature=c39724183d904d6e3c8d0299d64481a1e9ad43538abb1fd8ecf18b61f2f2c38e&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)

## Creating an endpoint

Click **Add Webhook**, name the endpoint, and point it at an HTTPS URL you host. Then pick exactly which events it should receive:

![Creating a webhook endpoint: name, URL, and per-event subscription](https://fdr-prod-docs-files-public.s3.us-east-1.amazonaws.com/meetstream-ai-573402.docs.buildwithfern.com/24071d2e1a07487afde73f021c3b6a73a33216e3fd73bf0f67b1dc3a179ce4a2/docs/assets/images/dashboard/dashboard-webhook-events-1.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIA6KXJSKKNFOCF7G4B%2F20260814%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260814T144310Z&X-Amz-Expires=604800&X-Amz-Signature=7a399aea89ce9de5d39fb0265d2389ecc3c96ad5304363799b256fb82738aebb&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)

The subscription list covers the full event catalog, grouped:

| Group                     | Events                                                                                                                                            |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| Scheduling                | `bot.scheduled`, `bot.joining`                                                                                                                    |
| Bot lifecycle             | `bot.in_waiting_room`, `bot.inmeeting`, `bot.recording`, `bot.leaving`, `bot.stopped`, `bot.kicked`, `bot.denied`, `bot.notallowed`, `bot.failed` |
| Zoom recording permission | `bot.recording_permission_allowed`, `bot.recording_permission_denied` (Zoom only)                                                                 |
| Post-call processing      | `audio.processed`, `transcription.processed`, `video.processed`, `bot.done`, `data_deletion`                                                      |

![The Zoom recording permission and post-call processing event groups](https://fdr-prod-docs-files-public.s3.us-east-1.amazonaws.com/meetstream-ai-573402.docs.buildwithfern.com/b596c3a8062f03fd8da1c23a48efaef3e1140c2c24b2410e1e68c73ab75ad230/docs/assets/images/dashboard/dashboard-webhook-events-2.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIA6KXJSKKNFOCF7G4B%2F20260814%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260814T144310Z&X-Amz-Expires=604800&X-Amz-Signature=c1c3d45ac60737105306a10a601810d3fae97004b10b139e67bbe1f67de765c9&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)

Subscribing narrowly is good practice: a notetaker product usually needs just `bot.inmeeting`, `bot.stopped`, `bot.failed`, and the post-call `*.processed` events.

## Inspecting deliveries

The **Logs** tab on the same page shows recent deliveries per endpoint, which is the fastest way to confirm your server is receiving and returning 2xx. Remember delivery is best-effort — non-2xx responses are not retried — so during development pair this with a local receiver:

```bash
meetstream listen --port 3333     # pretty-prints every event; pair with: ngrok http 3333
```

## Which should I use — workspace endpoints or per-bot callback\_url?

* **Workspace endpoint**: one place to receive events for everything; ideal for ops dashboards, billing reconciliation, and monitoring.
* **Per-bot `callback_url`**: routes a specific bot's events to a specific handler; ideal when each bot belongs to a different customer or job. `custom_attributes` set at create time are echoed in every event either way, so you can route in your own code too.

Payload shapes and event semantics are the same as documented in [Webhooks and Events](/guides/webhooks/webhooks-and-events); event-by-event debugging tips live in [Debugging Bots](/guides/help/debugging-bots).