Skip to main content

Suggested events

GET /api/v1/catalog is the live list. This page records the v1 catalog so the admin app can show which events exist and which ones used to be on by default.

default_enabled is catalog metadata. It does not send mail. A company receives event mail only when an enabled email rule exists. See rules.md.

Auth-lane events get a built-in rule for every company, created on the first rules list or the first event. Those two events send on POST /api/v1/events without anyone creating a rule, and the rule cannot be deleted or turned off. Direct /send still works and does not consult rules. Identity can keep calling /send for magic links and invitations.

Every other event, including ones marked enabled below, returns 202 with skipped_reason: no_rule until the company creates a rule. That includes hosting.deployment.failed, identity.user.invitation_revoked, and identity.scim.provisioning_conflict, which used to send with no rule row.

An enabled rule with no recipient (recipients: [], or a static rule with no addresses) is accepted and skipped (no_recipients). See integration.md. Callers may omit company_name. email-service then uses a name it already stored, or the provider From name.

Events marked disabled below are noisy (every upload, every user edit). A company opts in by creating a rule.

Each event has a suggested subject and preheader in English and French, its variables, link_token (the URL variable a design's main link becomes), and default_template (the library design for built-in rules and for direct sends before any copy exists: barebone.activation for magic links, barebone.welcome for invitations, barebone.text-only otherwise). Design text is English and edited per copy.

Login events identity.auth.login.succeeded and identity.auth.login.failed are not listed. Identity marks them webhook: false.

EventLaneCatalog default_enabledWhy it is in the catalog
identity.auth.magic_link.requestedauthenabledSign-in. TTL 120s. Built-in rule. /send still works.
identity.user.invitedauthenabledInvitation. TTL 300s. Built-in rule. /send still works.
identity.user.invitation_revokedtransactionalenabledThe previous invitation must be known to be dead. Sends only after a company rule.
identity.scim.provisioning_conflicttransactionalenabledAn admin has to resolve a directory conflict. Sends only after a company rule.
hosting.deployment.failedtransactionalenabledA failed release is operational. Sends only after a company rule.
identity.user.createdtransactionaldisabledFires often during SCIM and invites.
identity.user.updatedtransactionaldisabledFires on ordinary profile edits.
identity.user.deletedtransactionaldisabledSensitive, and not every company wants a mail.
identity.group.createdtransactionaldisabledDirectory noise.
identity.group.updatedtransactionaldisabledDirectory noise.
identity.group.deletedtransactionaldisabledDirectory noise.
identity.group.membership_changedtransactionaldisabledDirectory noise.
identity.scim.user.provisionedtransactionaldisabledHigh volume.
identity.scim.user.deprovisionedtransactionaldisabledHigh volume. Create a rule if offboarding mail is required.
identity.scim.token.createdtransactionaldisabledSecurity-sensitive. Off until a company creates a rule.
identity.scim.token.revokedtransactionaldisabledSame as token created.
storage.bucket.createdtransactionaldisabledOne-time provisioning. Low urgency.
storage.object.uploadedtransactionaldisabledOne mail per file would flood the inbox.
storage.object.deletedtransactionaldisabledSame as uploads.
hosting.app.createdtransactionaldisabledInformational.
hosting.app.deletedtransactionaldisabledInformational.
hosting.deployment.createdtransactionaldisabledThe artifact may not exist yet.
hosting.deployment.succeededtransactionaldisabledSuccess is visible in the hosting UI. Create a rule for release mail.

Source files: defaults/<service>/<event>/ (definition.json with link_token and default_template, subjects.json, and en.json / fr.json with the subject and preheader), generated from the catalog by export_defaults in apps/email/catalog.py.