---
title: "/review-cycles/templates"
method: POST
path: "/review-cycles/templates"
---

# /review-cycles/templates

`POST /review-cycles/templates`

Creates a performance review master template for the account. Required scope: `w_reviews`. Requires a user token with permission to manage performance templates.

The `questionnaire` is normalised before being persisted — `position` is auto-assigned when omitted, and `type` / `semantic_type` accept either snake_case (e.g. `star_rated`) or PascalCase (e.g. `StarRated`). The response is returned in snake_case.

## Request body

- object
  - `title` string, required — Title of the template
  - `questionnaire` object, required
    - `sections` object[], required
      - `id` string — Optional client-assigned id
      - `body` string, required — Section title / header text
      - `position` integer — Order of the section. Defaults to the section's index when omitted.
      - `questions` object[], required
        - `id` string — Optional client-assigned id
        - `body` string, required — Question text
        - `position` integer — Order of the question within the section. Defaults to the question's index when omitted.
        - `type` string — Question type. One of: `paragraph`, `paragraph_star_rated`, `paragraph_numeric_rated`, `paragraph_custom_rated`, `single_choice`, `multiple_choice`, `star_rated`, `numeric_rated`, `custom_rated`. PascalCase equivalents are also accepted.
        - `metadata` object
          - `mandatory` boolean
          - `semantic_type` string — One of: `section_rating`, `overall_rating`. PascalCase (`SectionRating`, `OverallRating`) is also accepted.
          - `rating_options` object — Map of rating value to label
          - `answer_options` object
            - `choices` object — Map of choice key to label

## Response `201`

201

- PerformanceReviewTemplate
  - `id` string — Master template id
  - `title` string
  - `updated_at` string, nullable — ISO 8601 timestamp of the last update in the template registry
  - `version` integer
  - `questionnaire` object
    - `sections` object[]
      - `id` string
      - `body` string
      - `questions` object[]
        - `id` string
        - `body` string
        - `type` string — Question type in snake_case (e.g. `star_rated`, `paragraph`, `multiple_choice`)
        - `metadata` object
          - `mandatory` boolean
          - `semantic_type` string — One of: `section_rating`, `overall_rating`
          - `rating_options` object
          - `answer_options` object
            - `choices` object

## Other responses

- `400` — 400
- `403` — 403

---

[API](https://skmtc.net/workable/apis/account-root.md) · [All operations](https://skmtc.net/workable/apis/account-root/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/workable/account-root/revisions/3ead9ec42165/schema)
