---
title: "Creates a template from a starter layout. The copy is the clinic's own — it is never made the default automatically, and later changes to the starter don't touch it. The name gets a \" (2)\", \" (3)\"… suffix if the clinic already has one by that name."
method: POST
path: "/templates/starters/{key}"
tags: ["Templates"]
---

# Creates a template from a starter layout. The copy is the clinic's own — it is never made the default automatically, and later changes to the starter don't touch it. The name gets a " (2)", " (3)"… suffix if the clinic already has one by that name.

`POST /templates/starters/{key}`

## Request

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

## Path parameters

- `key` string, required

## Response `201`

Created

- 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.

## Other responses

- `404`: Not Found

## Changes

- **2026-10-28** `099cf36186e0`: 9 info
  - added the optional property `archivedAt` to the response with the `201` status (media type: text/plain)
  - added the optional property `archivedAt` to the response with the `201` status (media type: application/json)
  - added the optional property `archivedAt` to the response with the `201` status (media type: text/json)
  - added the optional property `category` to the response with the `201` status (media type: text/plain)
  - …5 more
- **2026-10-11** `f7ab358172d0`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/changes/templates/starters/:key/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)
