Reference

Webhooks

Fire-and-forget event dispatch for invites, member changes, team updates, and any mutation you want to expose.

All team-scoped mutations can fire a webhook to the team's configured webhook_url (set in Settings → General). Delivery is fire-and-forget: the originating request never blocks on the webhook, and failures are silently ignored. The pattern is general — add fireWebhook(...) anywhere a mutation happens (announcements, profile updates, custom feature events) and external tools can react.

Payloads always include event, team_id, team_name, and timestamp; event-specific fields are listed below.

Built-in events

EventFired whenExtra fields
invitation.createdAdmin invites someoneemail, role, invite_url, invited_by
invitation.acceptedInvitee accepts the invitationemail, role, member_name
invitation.revokedAdmin revokes a pending invitationemail, role, revoked_by
member.removedAdmin removes a membermember_email, member_name, removed_by
member.role_changedAdmin changes a member's rolemember_email, member_name, old_role, new_role, changed_by
team.updatedTeam settings are savedchanges (object of updated fields), updated_by
team.deletedOwner deletes a teamdeleted_by

Adding your own events

fireWebhook lives in server/utils/fireWebhook.ts. Two steps to add a new event type:

  1. Extend the WebhookEvent union in fireWebhook.ts with your event name (e.g. "announcement.published").
  2. Call it from your server route after a mutation:
    await fireWebhook(
      serviceClient,
      teamId,
      "announcement.published",
      { announcement_id: id, title, published_by: user.sub },
    );
    

Natural extensions:

  • announcement.published after creating a banner
  • profile.updated when a user changes their display name or avatar
  • <resource>.created / <resource>.deleted for any feature you build on top of the template

Reliability

Webhook delivery is fire-and-forget: failures are silently ignored and do not block the originating request. If you need retries or delivery guarantees, replace server/utils/fireWebhook.ts with a queue-backed implementation (BullMQ, Inngest, a Postgres job table, etc.).