Meetily
Automation API

Event catalogue

The scope model, the full list of events, the delivery envelope, and how the frozen workflow trigger ids map to them.

Every event Meetily can push to a webhook is catalogued here: what it means, what scope it needs, and the fields it carries. Route-specific SSE waits observe only the transitions defined by their own endpoint. See Webhooks & SSE for how to subscribe, verify, and handle delivery.

Scope model

The access model is observe = Read, control = Record. Subscribing to any event below - including every recording.* event - only needs the Read scope. Controlling recording (the /v1/recording/* start/stop routes) still needs Record; watching that a recording happened is a read, not a control.

The 17 events

recording.*

EventScopeNote
recording.startedRead
recording.stoppedReadCapture ended, not necessarily saved meeting content. Also the recording/wait terminal state.
recording.pausedRead
recording.resumedRead
recording.failedReadFailed to start.
recording.stop_failedReadFailed to stop.
recording.errorReadNon-terminal error detail mid-recording.

Stopped does not mean ready

recording.stopped can arrive before Meetily finishes the transcript and saves the meeting. A fixed delay is not a readiness guarantee; check that the content you need is available before acting. For a finished summary, watch summary.completed instead. There is no callable saved-recording observation route yet; see Recording observation.

job.*

EventScopeNote
job.submittedRead
job.completedReadTerminal.
job.failedReadTerminal.
job.cancelledReadTerminal.
job.pausedRead
job.resumedRead
job.removedReadTerminal, force-remove.

summary.*

EventScopeNote
summary.completedReadSee "summary.completed can mean a regeneration failed" below.
summary.failedReadTerminal summary failure.

transcript.updated

EventScopeNote
transcript.updatedReadFires as the live transcript advances during a recording. Notification-only - carries no transcript text.

meeting.* is not subscribable

There is no meeting.created, meeting.updated, or meeting.deleted in this catalogue. Subscribing to a meeting.* name returns 400 bad_request rather than silently accepting a subscription that would never deliver.

The envelope

Gateway events share one envelope across webhook and event-wait transports. Required keys:

KeyDescription
schema_versionEnvelope version.
event_idThe dedup key. An idempotent handler keys off this, not off timing or order.
eventOne of the event names above.
occurred_atWhen the event happened.
resource{kind, id} - what the event is about.

Webhook bodies additionally carry delivery_id, the logical delivery/history-row id. It stays the same across every retry of that delivery. SSE GatewayEvent frames do not carry it.

Present only when they apply: meeting_id, message, still_recording, content_preserved.

This webhook example includes delivery_id:

{
  "schema_version": 1,
  "event_id": "0f9a1c3e-5b2d-4a71-9c84-6e0d2f8b3a15",
  "event": "job.completed",
  "occurred_at": "2023-11-14T22:13:20+00:00",
  "resource": { "kind": "job", "id": "job-abc123" },
  "delivery_id": "delivery-xyz789"
}

No transcript text, summary content, or meeting content ever appears in this envelope. Fetch the actual content with your token once the event arrives - see Meetily APIs.

summary.completed can mean a regeneration failed

If you regenerate a summary and Meetily preserves the previous content instead of losing it, that outcome still fires summary.completed, not summary.failed - marked with a content_preserved field. A subscriber that only watches summary.failed for problems will miss this. Check for content_preserved on summary.completed before treating it as a clean success.

Frozen workflow trigger ids

Four trigger ids are reserved for packaged Workflows, which are not available yet. The first three have live backing webhook events, not runnable workflow triggers:

Trigger idBacking eventAvailable today
recording-endsrecording.stoppedWebhook event live; workflow trigger reserved
summary-readysummary.completedWebhook event live; workflow trigger reserved
import-finishesjob.completed (for an import job)Webhook event live; workflow trigger reserved
transcript-readytranscription.completedNo event producer; workflow trigger reserved

transcript-ready is frozen as a contract but has no producer yet - transcription.completed isn't in the event table above, and there's no ETA for when it ships. It's reserved, not dropped: a subscription won't resolve it until the Workflows release adds the producer. See Workflows for what's planned around these ids.

Last updated on

On this page