Email templates
Customize the text and styling of every transactional email.
Last updated 2026-05-05
Every transactional email — invitation, invoice issued, payment received, ticket reply, password reset, expense approved — is rendered from a template stored per tenant. Templates use MJML for the layout (so they look identical across Gmail, Outlook, Apple Mail) and a Handlebars-style merge syntax {{customer.name}} for variable substitution. The editor at Settings → Email templates offers a live preview pane that re-renders on each keystroke, plus a "send test" button that fires a real email to your address using sample data.
Default templates ship with the platform; tenant overrides are stored as deltas so the upstream defaults can evolve without clobbering your customizations.
Related endpoints
GET /api/tenant/email-templates— list (each withdefault+overrideflags).PUT /api/tenant/email-templates/:key— replace the override.DELETE /api/tenant/email-templates/:key— revert to default.POST /api/tenant/email-templates/:key/test— send to current user.
See the source at apps/web/src/app/(tenant)/settings/email-templates and the layouts at packages/email-templates.