Returns all templates owned by the tenant. Templates are scoped by tenant and never visible across tenant boundaries.
Request
// No body — tenant scoped via X-Tenant-ID header
Response
type GetTemplatesResponse = {
templates: {
id: number;
code: string;
name: string;
isActive: boolean;
}[];
};Returns a single template by code, including its subject and HTML body templates.
Request
// code in path — no request body
Response
type GetTemplateResponse = {
id: number;
code: string;
name: string;
description?: string;
subjectTemplate: string;
htmlTemplate: string;
isActive: boolean;
createdAt: string;
updatedAt: string;
};Creates a new template when creation fields are supplied. Also supports render-preview mode when request body includes id, slug, or template.
Request
type CreateTemplateRequest = {
code: string;
name: string;
description?: string;
subjectTemplate: string;
htmlTemplate: string;
};
type RenderViaTemplatePostRequest = {
id?: number;
slug?: string;
template?: string;
data: Record<string, unknown>;
options?: {
escapeHtml?: boolean;
removeSpaceBeforePunctuation?: boolean;
removeEmptyLines?: boolean;
collapseWhitespace?: boolean;
};
};Response
type CreateTemplateResponse = {
id: number;
code: string;
};
type RenderViaTemplatePostResponse = {
source: 'stored' | 'inline';
rendered: string;
renderedSubject?: string;
renderedHtml?: string;
};Updates one or more fields of an existing template. All fields are optional. Historical sent emails are unaffected by updates.
Request
type UpdateTemplateRequest = {
name?: string;
description?: string;
subjectTemplate?: string;
htmlTemplate?: string;
isActive?: boolean;
};Response
type UpdateTemplateResponse = {
success: boolean;
};Soft-deletes the template by marking it inactive. Existing email records are unchanged. Deactivated templates are excluded from future send operations.
Request
// code in path — no request body
Response
type DeleteTemplateResponse = {
success: boolean;
};