Skip to content

Email Templates

Endpoints

GET    /api/v1/email-templates           list — query params: search
POST   /api/v1/email-templates           create
PUT    /api/v1/email-templates/:id       update
DELETE /api/v1/email-templates/:id       delete

Template fields

typescript
{
  key: string,         // e.g. "signup-otp", "password-reset", "invitation"
  locale: string,      // default "default"; supports per-locale overrides like "en", "tr"
  subject: string,     // subject line; supports {{variables}}
  body_html: string,   // HTML body
  body_text: string,   // plaintext fallback
  description?: string,
}

Unique constraint on (key, locale). The backend looks up the user's locale first; if no template exists for that locale, falls back to "default".

Standard keys

KeyTriggered when
signup-otpOTP code emails during signup.
password-resetPassword reset link.
invitationWorkspace invitation.
billing-receiptSuccessful invoice.
billing-failedFailed payment.

The exact list depends on which integrations your instance uses; new template keys are added when new flows ship.

Variables

Bodies support , , , , etc. Available variables vary per template — check the source notification call site for the bound vars.

Live preview

The frontend admin form at /admin/system/email-templates includes a side-by-side rendered preview of body_html so you can iterate without sending.