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 deleteTemplate 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
| Key | Triggered when |
|---|---|
signup-otp | OTP code emails during signup. |
password-reset | Password reset link. |
invitation | Workspace invitation. |
billing-receipt | Successful invoice. |
billing-failed | Failed 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.