Webhooks

Outbound events your integration can subscribe to, and the GraphQL types for webhook configuration.

Event Types

Your integration can register webhooks to receive these events via HTTP POST. Events are delivered at least once: failed deliveries are retried automatically (up to 5 attempts, with exponential backoff) and ordering is not guaranteed, so a retry can arrive after the first attempt at a later event. Dedupe using the id field on the payload envelope, which stays the same across the original delivery and every retry of it.
calendar_event_created
Calendar Event Created
Fires after a new calendar event is created via CalendarEventService.create_event, once the creating transaction commits. The payload carries the created event's id, calendar_id, recurrence flags (is_recurring, recurring_event_id), start_time/end_time/timezone, title, and description.
calendar_event_updated
Calendar Event Updated
Fires after an existing calendar event's fields (title, description, start/end time, timezone, or recurrence rule) are changed via CalendarEventService.update_event, once the transaction commits. The payload carries the updated event's id, calendar_id, recurrence flags, start_time/end_time/timezone, title, and description — the same shape as calendar_event_created.
calendar_event_deleted
Calendar Event Deleted
Fires after a calendar event is removed via CalendarEventService.delete_event, once the transaction commits. Deleting a single occurrence of a recurring series also records a cancellation exception on the series so future occurrence generation skips it, in addition to the occurrence's own row being deleted. The payload is a snapshot of the event captured immediately before deletion, in the same shape as calendar_event_created.
calendar_event_attendee_added
Calendar Event Attendee Added
Fires once per newly-added attendee (internal member or external invitee) when CalendarEventService.update_event adds them to an existing event's attendee list. The payload carries the attendee's email, name, status, user_id (null for external attendees), and the event they were added to.
calendar_event_attendee_removed
Calendar Event Attendee Removed
Fires once per attendee (internal member or external invitee) when CalendarEventService.update_event drops them from an existing event's attendee list during reconciliation. The payload carries the removed attendee's email, name, status, user_id (null for external attendees), and the event they were removed from.
calendar_event_attendee_updated
Calendar Event Attendee Updated
Fires once per external attendee already on the event that CalendarEventService.update_event matches while reconciling the attendee list, overwriting their email and name with the incoming values — even if those values are unchanged from before. The payload carries the updated attendee's email, name, status, user_id (null, as this only applies to external attendees), and the event they belong to.
organization_member_created
Organization member created
Fires after a new, active organization membership is created — covering an organization's first admin membership on org creation, a user accepting an OrganizationInvitation, and the signup-time tenant-provisioning flow that auto-joins a user via a pending invitation. Emitted post-commit; skipped entirely for inactive memberships. The payload carries the member's user_id and email, the organization's id and name, and the membership's role.

Configuration

Use the GraphQL API to manage webhook subscriptions. See the types below for details: