---
title: "Create an account template"
method: POST
path: "/rest/api/v1/projects/{projectId}/templates"
tags: ["Account Template API"]
---

# Create an account template

`POST /rest/api/v1/projects/{projectId}/templates`

## Path parameters

- `projectId` string, uuid, required

## Request body

- AccountTemplateDTO
  - `attentionReason` string — Short human-readable explanation of why needsAttention is set.
  - `blocks` string[] — Content blocks this template carries.
  - `compatibility` string — Payload compatibility marker: CURRENT, AUTO_MIGRATED, or REVIEW_NEEDED.
  - `created` string, date-time
  - `createdBy` string
  - `description` string
  - `expectedRevision` integer — Required on update. The server compares this against the current revision and returns HTTP 409 on mismatch.
  - `id` string, uuid
  - `linkedCount` integer — Number of accounts currently linked to this template.
  - `metadataUpdated` string, date-time
  - `name` string, required — Display name. Must be unique per project (case-insensitive).
  - `needsAttention` boolean — True if this template references resources that no longer exist (for example, a deleted source account or strategy).
  - `payload` JsonNode, required — Full template payload. Includes a `schemaVersion` discriminator describing its JSON shape; older versions are migrated transparently on read.
  - `projectId` string, uuid, required — Project this template belongs to. Set from the URL path; any value in the body is ignored.
  - `referenceAccountId` string, uuid — Account that was used as the source when this template was created. Helps clients resolve symbol references in the payload.
  - `revision` integer — Current revision number. Bumped only when the payload actually changes.
  - `updated` string, date-time
  - `updatedBy` string

## Response `200`

OK

- AccountTemplateDTO
  - `attentionReason` string — Short human-readable explanation of why needsAttention is set.
  - `blocks` string[] — Content blocks this template carries.
  - `compatibility` string — Payload compatibility marker: CURRENT, AUTO_MIGRATED, or REVIEW_NEEDED.
  - `created` string, date-time
  - `createdBy` string
  - `description` string
  - `expectedRevision` integer — Required on update. The server compares this against the current revision and returns HTTP 409 on mismatch.
  - `id` string, uuid
  - `linkedCount` integer — Number of accounts currently linked to this template.
  - `metadataUpdated` string, date-time
  - `name` string, required — Display name. Must be unique per project (case-insensitive).
  - `needsAttention` boolean — True if this template references resources that no longer exist (for example, a deleted source account or strategy).
  - `payload` JsonNode, required — Full template payload. Includes a `schemaVersion` discriminator describing its JSON shape; older versions are migrated transparently on read.
  - `projectId` string, uuid, required — Project this template belongs to. Set from the URL path; any value in the body is ignored.
  - `referenceAccountId` string, uuid — Account that was used as the source when this template was created. Helps clients resolve symbol references in the payload.
  - `revision` integer — Current revision number. Bumped only when the payload actually changes.
  - `updated` string, date-time
  - `updatedBy` string

---

[API](https://skmtc.net/metacopier/apis/metacopier-api.md) · [All operations](https://skmtc.net/metacopier/apis/metacopier-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/metacopier/metacopier-api/revisions/ff1699330afa/schema)
