---
title: "Creates a new template."
method: POST
path: "/templates"
tags: ["Templates"]
---

# Creates a new template.

`POST /templates`

## Request

- Base URL: `https://api.clinicos.vet/backend/business`
- URL: `https://api.clinicos.vet/backend/business/templates`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/docs/templates/post.ts> (a function with typed inputs; its response is checked against the schema)

## Request body

- CreateTemplateDto: Request DTO for creating a template.
  - `name` string, required
  - `type` string
  - `logoUrl` string, nullable
  - `headerContent` string, nullable: Legacy field - use Sections instead for new templates.
  - `footerContent` string, nullable: Legacy field - use Sections instead for new templates.
  - `sections` TemplateSectionDto[], nullable: Block-based content sections.
    - `id` string
    - `type` string
    - `content` string
    - `order` union
      - integer
      - string, int32
    - `columns` TemplateSectionDto[], nullable
    - `widthPercent` union
      - number, double
      - string, double
  - `format` string, nullable
  - `emailSubject` string, nullable
  - `emailBody` string, nullable
  - `smsBody` string, nullable
  - `category` string, nullable: Client-message category key (type "client-message" only, ITE-1170).
  - `channel` string, nullable: Client-message channel: "email", "sms" or "both" (type "client-message" only).
  - `isDefault` boolean

## Response `200`

OK

- TemplateResponseDto: Response DTO for a template.
  - `id` string
  - `name` string
  - `type` string
  - `logoUrl` string, nullable
  - `headerContent` string, nullable: Legacy field - kept for backward compatibility.
  - `footerContent` string, nullable: Legacy field - kept for backward compatibility.
  - `sections` TemplateSectionDto[], nullable: Block-based content sections.
    - `id` string
    - `type` string
    - `content` string
    - `order` union
      - integer
      - string, int32
    - `columns` TemplateSectionDto[], nullable
    - `widthPercent` union
      - number, double
      - string, double
  - `format` string, nullable
  - `emailSubject` string, nullable
  - `emailBody` string, nullable
  - `smsBody` string, nullable
  - `category` string, nullable: Client-message category key (type "client-message" only, ITE-1170).
  - `channel` string, nullable: Client-message channel: "email", "sms" or "both" (type "client-message" only).
  - `isDefault` boolean
  - `archivedAt` string, date-time, nullable: When the template was archived; null while active.
  - `createdById` string, nullable
  - `createdBy` UserSummaryDto
    - `id` string
    - `email` string
    - `firstName` string, nullable
    - `lastName` string, nullable
    - `displayName` string, nullable
    - `type` string
    - `roleId` string, nullable
    - `roleName` string, nullable
  - `createdAt` string, date-time
  - `updatedAt` string, date-time
  - `unknownVariables` string[], nullable: Set on create/update responses only: {{tokens}} in the saved sections that the render pipeline will not substitute for this template's type (typos or variables from another template type). Null when everything is known or validation was not run.

## Changes

- **2026-10-28** `099cf36186e0`: 15 info
  - added the new optional request property `category` (media type: application/json)
  - added the new optional request property `category` (media type: text/json)
  - added the new optional request property `category` (media type: application/*+json)
  - added the new optional request property `channel` (media type: application/json)
  - …11 more

[Operation history](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/changes/templates/post.md)

---

[API](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1.md) - [All operations](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/llms.txt) - [OpenAPI document](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/revisions/099cf36186e0?raw)
