Skip to content

Domain events

Every domain event registered at API boot, grouped by the module that emits it. These are the events webhooks can subscribe to and automations can trigger on. How events flow is in The event bus.

<!-- source: registerEventTypes(...) calls in packages/*/src/server/event-types.ts; per-model types in packages/data-models/src/server/registrations.ts; union in packages/common/src/contracts/events.generated.ts -->

Fields on every event

FieldTypeMeaning
typestringThe event type, such as kanban.card-moved.
occurredAtdateWhen the event happened.
correlationIdstringOptional. Ties events from one operation together.
subscriptionAliaseslistOptional. Extra types the event also matches when webhooks and achievements route it.

The "Payload fields" column below lists each event's own fields, beyond these.

Per-model record events

Each data model also gets three event types of its own, registered when the model is created and shown only to its organization. <model> is the model's key.

EventWhen it fires
data-models.<model>-record-createdA record was created in that model.
data-models.<model>-record-updatedA record in that model was updated.
data-models.<model>-record-deletedA record in that model was deleted.

They are aliases: the event emitted is the generic data-models.record-created (and so on), carrying the per-model type in subscriptionAliases.

Emitted but not subscribable

The webhooks module emits these events on the bus, but they aren't registered, and the webhook subscriber skips every webhook.* event so that a delivery can never trigger more deliveries. Notification subscribers use the two delivery-failure events to alert admins.

EventWhen it fires
webhook.delivery-failedA delivery attempt failed.
webhook.delivery-succeededA delivery was accepted by the receiver.
webhook.endpoint-createdA webhook endpoint was created.
webhook.endpoint-deletedA webhook endpoint was deleted.
webhook.endpoint-disabled-after-failuresAn endpoint was disabled automatically after repeated failures.
webhook.endpoint-secret-rotatedAn endpoint's signing secret was rotated.
webhook.endpoint-updatedA webhook endpoint was edited.

Achievements

EventWhen it firesPayload fields
achievements.awardedA user earned an achievement (its threshold was crossed).organizationId, achievementId, achievementName, points, userId, actorId

API keys

EventWhen it firesPayload fields
api-keys.key-createdA new API key was minted. The plaintext is never included.organizationId, apiKeyId, ownerUserId, actorId
api-keys.key-revokedAn API key was revoked and can no longer authenticate.organizationId, apiKeyId, actorId
api-keys.service-account-createdA service account (org-owned machine principal) was created.organizationId, serviceAccountId, name, roleIds, actorId
api-keys.service-account-disabledA service account was disabled ; its keys can no longer authenticate.organizationId, serviceAccountId, actorId

Authentication

EventWhen it firesPayload fields
oauth.provider-linkedA social provider was connected to an existing account (from account settings, or by Supabase's own verified-email identity matching at sign-in).userId, provider
oauth.provider-unlinkedA social provider was disconnected from an account. Security-relevant: it changes which credentials can reach the account.userId, provider, remainingProviders, hasPassword
totp.disabledTOTP was turned off (either by the user with their password, or by an admin reset).userId, triggeredBy
totp.enabledThe user confirmed TOTP enrollment. Their account now requires a second factor.userId
totp.recovery-code-usedA recovery code was consumed (one-time, can never be re-used).userId, remainingCodes
totp.recovery-codes-regeneratedThe user regenerated their two-factor recovery codes ; the previous batch was invalidated.userId, count
trusted-device.addedA new device was recognized + persisted on first sign-in from that device.userId, deviceId, userAgent, country
trusted-device.revokedA specific trusted device's cookie was revoked.userId, deviceId, scope, bulk
trusted-devices.all-revokedEvery trusted device for a user was revoked in a single sweep (e.g. password change).userId, count, scope
user.email-verifiedThe user clicked the confirmation link / entered the OTP and their email is now verified.userId, email
user.password-changedThe user's password was rotated. Fires for both self-service and admin-initiated resets.userId, triggeredBy
user.signed-inA user authenticated successfully. Fires every sign-in.userId, trustedDeviceId
user.signed-outA user explicitly signed out (their session was revoked).userId, scope
user.signed-upA new account was created. Fires once per user, after the row is committed but before email verification.userId, email, referralCode, provider

Automation

EventWhen it firesPayload fields
automation.createdAn automation flow was created.automationId, organizationId, name, actorId
automation.deletedAn automation flow was deleted.automationId, organizationId, actorId
automation.run-failedAn automation run failed after exhausting retries.automationId, runId, organizationId, triggerEventType, error
automation.run-startedAn automation run began executing.automationId, runId, organizationId, triggerEventType
automation.run-succeededAn automation run finished successfully.automationId, runId, organizationId, triggerEventType, durationMs
automation.updatedAn automation flow was edited.automationId, organizationId, actorId

Calendar

EventWhen it firesPayload fields
calendar.createdA calendar was created.calendarId, organizationId, name, actorId
calendar.deletedA calendar was soft-deleted.calendarId, organizationId, actorId
calendar.event-createdAn event was added to a calendar.eventId, calendarId, organizationId, title, startAt, endAt, actorId
calendar.event-deletedAn event was soft-deleted.eventId, calendarId, organizationId, actorId
calendar.event-updatedAn event's details, schedule, or calendar changed.eventId, calendarId, organizationId, changed, actorId
calendar.updatedA calendar's name, description, color, or role access changed.calendarId, organizationId, changed, actorId

Chat

EventWhen it firesPayload fields
chat.assistant-name-changedAn admin renamed the organization's AI assistant (or cleared the override back to the deploy default).organizationId, assistantName, actorId
chat.conversation-createdA new conversation was created (an AI-assistant thread or a human conversation).organizationId, conversationId, kind, actorId
chat.message-createdA message was added to a conversation. The content is never included.organizationId, conversationId, messageId, authorType, actorId

Data models

EventWhen it firesPayload fields
data-models.form-entry-publishedAn admin approved a public-form submission onto the public board (now visible).dataModelId, dataModelKey, recordId, formId, organizationId
data-models.form-submittedA record was submitted through a public form (anonymous link or email invite).dataModelId, dataModelKey, recordId, formId, mode, submitterEmail, organizationId
data-models.record-commentedA user posted a comment on a Data Record (discussions).dataModelId, dataModelKey, recordId, commentId, authorId, organizationId
data-models.record-createdA new Data Record was created.dataModelId, dataModelKey, recordId, organizationId, actorId
data-models.record-deletedA Data Record was soft-deleted (hard: false) or hard-deleted (hard: true).dataModelId, dataModelKey, recordId, recordTitle, organizationId, actorId, hard
data-models.record-scope-clearedA MonarkQL record scope was removed from a role, widening which of a model's records that role may read.dataModelId, dataModelKey, roleId, verb, actorId, organizationId
data-models.record-scope-setA MonarkQL record scope was attached to a role, limiting which of a model's records that role may read.dataModelId, dataModelKey, roleId, verb, actorId, organizationId
data-models.record-updatedA Data Record's fields, title, or slug changed.dataModelId, dataModelKey, recordId, organizationId, actorId, changed
data-models.schema-changedA Data Model or one of its fields was created, edited, reordered, or archived.dataModelId, organizationId, kind, actorId

Feature flags

EventWhen it firesPayload fields
feature-flag.flippedAn override was set or removed for a flag. The payload carries the new effective value + the scope (org / role / user / global).module, flagKey, scope, enabled, actorId

Files

EventWhen it firesPayload fields
files.bucket-createdA storage bucket was created.bucket, isPublic, actorId
files.file-deletedA file was deleted.fileId, organizationId, bucket, key, actorId
files.file-uploadedA file finished uploading (moved from pending to ready).fileId, organizationId, bucket, key, name, contentType, size, actorId

GitHub

EventWhen it firesPayload fields
github.issue-commentedA comment was added to an issue or pull request.organizationId, repo, issueNumber, isPullRequest, commentBody, url, author
github.issue-openedAn issue was opened in a connected repository.organizationId, repo, issueNumber, title, body, url, author
github.pull-request-mergedA pull request was merged.organizationId, repo, prNumber, title, url, author, mergedBy, headRef, baseRef
github.pull-request-openedA pull request was opened.organizationId, repo, prNumber, title, body, url, author, headRef, baseRef, draft
github.pull-request-review-submittedA review was submitted on a pull request (approved / changes requested / …).organizationId, repo, prNumber, state, reviewer, body, url
github.pushCommits were pushed to a branch.organizationId, repo, ref, branch, commitCount, headCommitId, headCommitMessage, pusher
github.release-publishedA release was published.organizationId, repo, tag, name, body, url, prerelease, author

Kanban

EventWhen it firesPayload fields
kanban.board-createdA new Kanban board was created.boardId, organizationId, name, actorId
kanban.card-assignedA card was assigned to a user (on creation with an assignee, or a reassignment to a new one).boardId, boardName, cardId, cardTitle, organizationId, assigneeId, assignedById
kanban.card-createdA card was created on a board.boardId, columnId, cardId, organizationId, title, assigneeIds, actorId
kanban.card-deletedA card was deleted.boardId, cardId, organizationId, actorId
kanban.card-movedA card moved to a different column or position. An in-column reorder fires this too (from and to column match).boardId, cardId, organizationId, fromColumnId, toColumnId, actorId
kanban.card-updatedA card's title, description, assignee, or due date was edited.boardId, cardId, organizationId, changed, assigneeIds, actorId
kanban.column-createdA column was added to a board.boardId, columnId, organizationId, name, actorId

Notifications

EventWhen it firesPayload fields
notification.createdA notification row was persisted for a user (one event per delivered channel).userId, kind, category, channel, notificationId
notification.delivery-failedAn EMAIL or push delivery failed (SMTP error, rendering failure, transport unreachable). The IN_APP row, if any, was still persisted.userId, kind, channel, notificationId, reason
notification.preference-changedThe user toggled a (category, channel) preference row, or an admin reset their prefs.userId, kind, channel, enabled

Organizations

EventWhen it firesPayload fields
organization.createdA new organization was provisioned (bootstrap, admin form, or invite-driven).organizationId, actorId
organization.invite-acceptedAn invitee completed signup (or signed in) and the membership + role were stamped.organizationId, inviteId, userId
organization.invite-sentAn admin invited an external email to join the organization at a specific role.organizationId, inviteId, email, roleId, roleKey, actorId
organization.member-joinedA user joined an organization (signup with invite, admin grant, or bootstrap singleton).organizationId, userId
organization.member-removedA user was removed from an organization, either self-service or by an admin.organizationId, userId, actorId
organization.updatedProfile fields changed on an organization (name, slug, logo, brand color). Slug rotations include the previous slug in the payload.organizationId, actorId, changed, previousSlug

Roles and permissions

EventWhen it firesPayload fields
rbac.role-assignedA role was granted to a user (UI grant, invite acceptance, or sysadmin CLI bootstrap). Skipped on idempotent re-grants where the user already had the role active.assignmentId, userId, organizationId, roleId, roleKey, grantedById, reason
rbac.role-createdAn admin created a custom role inside their organization.roleId, roleKey, organizationId, createdById
rbac.role-deletedA custom role was deleted. Only fires when no active assignments remain; the API hard-blocks deletion otherwise.roleId, organizationId, actorId
rbac.role-revokedA role assignment was revoked, either by an admin or by a user leaving an org.assignmentId, userId, organizationId, roleId, roleKey, revokedById, reason
rbac.role-updatedA custom role's name / description / color / permission set was edited.roleId, organizationId, changed, actorId

Secrets

EventWhen it firesPayload fields
secrets.createdA new organization secret was created. The value is never included.organizationId, key, actorId
secrets.deletedAn organization secret was deleted.organizationId, key, actorId
secrets.updatedAn existing organization secret's value or description was updated.organizationId, key, actorId

Telegram

EventWhen it firesPayload fields
telegram.commandA /command was sent to the connected bot (e.g. /start, /help).organizationId, chatId, chatType, messageId, command, args, fromId, fromUsername, fromFirstName
telegram.message-receivedA (non-command) text message was sent to the connected bot.organizationId, chatId, chatType, messageId, text, fromId, fromUsername, fromFirstName

Users

EventWhen it firesPayload fields
user.deletedHard-delete after the 14-day grace window. Personal data was anonymized + the row was removed from Supabase Auth.userId, previousEmail
user.deletion-canceledA pending deletion was canceled before the grace window expired. The user can sign in again normally.userId
user.deletion-requestedA user (or admin) requested account deletion. The 14-day grace window starts ; the row's deletedAt is now stamped.userId, deletionCompletesAt
user.email-changedThe user completed the two-side OTP confirmation flow ; their primary email is now the new value.userId, previousEmail, newEmail
user.profile-updatedProfile fields changed on a user (display name, avatar, banner, bio, locale).userId, changed

Wiki

EventWhen it firesPayload fields
wiki.page-createdA new wiki page was created.pageId, organizationId, parentId, title, actorId
wiki.page-deletedA wiki page was deleted, along with its whole subtree.pageId, organizationId, pageIds, actorId
wiki.page-movedA wiki page moved to a different parent or position in the tree.pageId, organizationId, fromParentId, toParentId, actorId
wiki.page-updatedA wiki page's title, icon, or content was edited.pageId, organizationId, changed, actorId