Bots

Bot recording completed

Sent when the provider recording is available for processing. The transcript and summary are not ready yet.

Delivered to every workspace webhook endpoint subscribed to this event, signed with the endpoint's whsec_ secret. See Webhooks for signature verification, retries, and ordering.

postWebhookbot.recording_completed

Payload

idstring

Stable typed event ID beginning with evt_. Use it to deduplicate retries.

type'bot.recording_started' | 'bot.recording_completed' | 'bot.transcript_ready' | 'bot.summary_ready' | 'bot.failed' | 'bot.cancelled'

The event type. Also sent in the X-HappyScribe-Event header.

  • bot.recording_started: the notetaker is in the call and recording.
  • bot.recording_completed: the call ended and the recording is available.
  • bot.transcript_ready: the transcript is ready.
  • bot.summary_ready: the summary is ready; the bot is completed.
  • bot.failed: the bot ended without a usable result.
  • bot.cancelled: the bot was cancelled.
created_atstring date-time

When HappyScribe emitted the event.

Example payload

{
  "data": {
    "object": {
      "id": "bot_01k0h4r9s8x7c2dvq3m5n6p4ab",
      "object": "bot",
      "meeting_id": "mtg_01k0h4r9s8x7c2dvq3m5n6p4ab",
      "meeting_url": "https://zoom.us/j/123456789",
      "join_at": "2026-07-20T14:00:00Z",
      "status": "queued",
      "bot_name": "Acme Notetaker",
      "welcome_message": "Recording this meeting for Acme",
      "language": "en",
      "recording_start": "on_join",
      "recording_mode": "audio_only",
      "silence_alert": true,
      "summary_language": "en",
      "summary_template": "discovery_call",
      "participants": [
        {
          "email": "carmen@example.com",
          "name": "Carmen"
        }
      ],
      "metadata": {
        "partner_meeting_id": "meeting-123"
      },
      "created_at": "2026-07-20T13:58:12Z",
      "ended_at": null
    }
  }
}

Response

Return any 2xx status to acknowledge receipt. Any other status, or a timeout, triggers a retry — up to 21 attempts with backoff.

Changes

Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.