Skip to navigation

Workspace Webhook Endpoints

Receive signed bot events for your whole workspace, configured in the dashboard
View as Markdown

Register an HTTPS endpoint once in the dashboard and MeetStream delivers signed events for every bot in your workspace, with no per-request wiring.

Workspace endpoints or per-bot callback_url?

There are two ways to receive the same events. Payloads are identical; what differs is signing and filtering.

Workspace endpoint (this page)Per-bot callback_url
Where you set itDashboard: Configure > WebhooksThe callback_url field on create_bot (or in a calendar bot_config)
CoversEvery bot in the workspaceOnly that bot
SignedYes: X-MeetStream-Signature and X-MeetStream-TimestampNo
Event filterOnly the events you subscribe toEvery event for that bot
LimitUp to 10 endpoints per workspaceOne URL per bot

If a bot’s callback_url is the same URL as an active workspace endpoint that subscribes to the event, MeetStream delivers the event once, signed. custom_attributes you set on the bot are included in the events either way, so you can route by customer or job in your own code.

Create an endpoint

1

Open Webhooks

In the sidebar, under Configure, click Webhooks. The page (“Receive real-time events from your bots”) has two tabs: Endpoints and Logs (2). Each endpoint card shows its name, Active or Disabled, the number of subscribed events and the URL (3); Edit (4) changes it. Click Add Webhook (1).

MeetStream Webhooks page listing two endpoints, with the Add Webhook button, the Endpoints and Logs tabs, an endpoint card and its Edit button highlighted
Webhooks page: Add Webhook (1), Endpoints and Logs tabs (2), an endpoint with its event count (3), Edit (4)
2

Name the endpoint and enter its URL

In Create New Endpoint, fill in:

  • Endpoint name (1), for example “Production Webhook”.
  • Endpoint URL (2): a publicly reachable HTTPS URL on your server.
  • Webhook type (optional) (3): transcription_webhook or error_webhook. This is a label that shows with the endpoint and its deliveries. It does not change which events are sent.
  • Subscribe to events (4): the counter shows how many events are selected. Select all and Clear change them all at once. You must pick at least one event.
Create New Endpoint dialog with the Endpoint name, Endpoint URL, Webhook type and Subscribe to events controls highlighted
Create New Endpoint: name (1), URL (2), optional type label (3), event subscriptions with Select all and Clear (4)
3

Choose events

Events are grouped exactly as below. A new endpoint starts with 9 events selected: bot.scheduled, bot.joining, bot.inmeeting, bot.stopped, bot.failed, audio.processed, transcription.processed, video.processed and bot.done.

Group in the dialogEventsSelected by default
Schedulingbot.scheduled, bot.joiningboth
Bot lifecyclebot.in_waiting_room, bot.inmeeting, bot.recording, bot.leaving, bot.stopped, bot.kicked, bot.denied, bot.notallowed, bot.failedbot.inmeeting, bot.stopped, bot.failed
Zoom recording permissionbot.recording_permission_allowed, bot.recording_permission_deniednone
Post-call processingaudio.processed, transcription.processed, video.processed, bot.done, data_deletionall except data_deletion
Bot lifecycle events in the dialog with bot.stopped, bot.kicked, bot.denied, bot.notallowed and bot.failed highlighted, and the Zoom recording permission group highlighted
Bot lifecycle endings (1) and the Zoom recording permission group (2)

Subscribe to all five ending events (1): bot.stopped, bot.kicked, bot.denied, bot.notallowed and bot.failed. Each bot ends with one of them. The default selection has bot.stopped and bot.failed. Add the other three to receive every ending. Add bot.done for one final event for every bot.

Post-call processing group with audio.processed, transcription.processed, video.processed, bot.done and data_deletion, and the Create Endpoint button highlighted
Post-call processing events (1) and Create Endpoint (2)

Some events are not listed in the dialog, for example bot.error, audio.failed, transcription.failed, transcription.skipped and participant events. You cannot switch them off here: every active endpoint receives them. Make your handler ignore event names it does not use. The full list is in the event catalog.

4

Create the endpoint and save the signing secret

Add an optional Description and click + Create Endpoint. The dialog switches to Webhook created and shows the Webhook secret with Reveal and Copy. Save it now: “we can’t show it to you again”. You can only regenerate it later.

Use the secret to verify signatures on every delivery. Click Done when it is stored in your secrets manager.

Manage an endpoint

Click an endpoint to open its detail view:

  • Message Attempts: recent deliveries with STATUS, EVENT, MESSAGE ID, BOT ID and WHEN.
  • Details: created and updated times and Status (Enabled or Disabled). Disabled endpoints receive nothing.
  • Subscribed events: what this endpoint receives. Use Edit on the Endpoints tab to change it.
  • Webhook secret: reveal it, or Regenerate it. Regenerating is immediate: “The previous secret will stop working”, so prepare your receivers to load the new secret first, then regenerate.
  • Copy URL and Refresh in the header.

Delivery, timeouts and resending

Know these rules before you go to production:

  • Delivery. MeetStream sends each event one time. If your endpoint returns an error or does not respond, the Logs tab shows the delivery as Failed, and you can resend it.
  • Respond fast. Return a 2xx within 5 seconds and do the real work (downloads, transcription, database writes) asynchronously after you respond. A quick response keeps the next events for the same bot on time.
  • Resend from the Logs tab. The Logs tab is an event log for all endpoints. Search by event, bot or message ID, filter by Event type… and by status (All statuses, Success, Failed), and use RESEND on a row to deliver that event again. Delivery logs are kept for 90 days.
  • Post-call events can arrive in any order. For example, audio.processed can arrive before or after transcription.processed. Use bot.done as the “everything for this bot is finished” signal.
  • Handle duplicates. A resend delivers the event again with a new timestamp. A resend carries event, bot_id, status, message and custom_attributes. Make your handler idempotent, for example with a key of bot_id plus the event name. You can resend each delivery up to 10 times.

During development, receive events on your laptop with the MeetStream CLI and a tunnel:

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

See Set Up Local Server for Webhook for the manual version.

Next steps