---
title: "/surveys/templates"
method: POST
path: "/surveys/templates"
---

# /surveys/templates

`POST /surveys/templates`

## Request

- Base URL: `https://subdomain.workable.com/spi/v3`
- URL: `https://subdomain.workable.com/spi/v3/surveys/templates`
- Auth: API key in header `Authorization`

Creates a survey master template for the account. Required scope: `w_surveys`. Requires a user token whose member has permission to manage survey templates, or an account token with the `member_id` of such a member; an account token without `member_id` gets `403`. Send `member_id` as a query parameter, not in the body. The account must have the Surveys feature enabled. The body is validated before authorization.

`position` is auto-assigned when omitted. `type`, `semantic_type` and navigation rule `type` accept snake_case or PascalCase/camelCase. Unknown keys are rejected. The response is returned in snake_case.

## Query parameters

- `member_id` string

## Request body

- object
  - `title` string, required: Title of the template
  - `questionnaire` object, required
    - `sections` object[], required
      - `id` string, uuid: Optional client-assigned id
      - `body` string, required: Section title / header text
      - `position` integer: Defaults to the section's index when omitted.
      - `questions` object[], required
        - `id` string, uuid: Optional client-assigned id
        - `body` string, required: Question text
        - `position` integer: Defaults to the question's index when omitted.
        - `type` string: 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, nullable
          - `mandatory` boolean
          - `semantic_type` string: One of: `section_rating`, `overall_rating` (PascalCase also accepted).
          - `rating_options` object: Map of rating value to label
          - `answer_options` object
            - `choices` object: Map of choice key to label
          - `has_conditional_navigation` boolean: When `true`, `navigation_config` is required.
          - `navigation_config` object
            - `rules` object, required: Map of choice key to navigation rule

## Response `201`

201

- object
  - `id` string
  - `title` string
  - `updated_at` string, date-time: Omitted when unknown
  - `version` integer
  - `questionnaire` object
    - `sections` object[]
      - `id` string
      - `body` string
      - `questions` object[]
        - `id` string
        - `body` string
        - `type` 'paragraph' | 'paragraph_star_rated' | 'paragraph_numeric_rated' | 'paragraph_custom_rated' | 'single_choice' | 'multiple_choice' | 'star_rated' | 'numeric_rated' | 'custom_rated'
        - `metadata` object
          - `mandatory` boolean
          - `semantic_type` 'section_rating' | 'overall_rating'
          - `rating_options` object
          - `answer_options` object
            - `choices` object
          - `has_conditional_navigation` boolean
          - `navigation_config` object
            - `rules` object
  - `default` boolean
  - `sample` boolean
  - `disabled` boolean

## Other responses

- `400`: 400
- `401`: 401
- `403`: 403
- `409`: Template title already exists

## Changes

- **2026-11-03** `13ad2e8e2ee9`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/workable/apis/account-root/changes/surveys/templates/post.md)

---

[API](https://skmtc.dev/workable/apis/account-root.md) - [All operations](https://skmtc.dev/workable/apis/account-root/llms.txt) - [OpenAPI document](https://skmtc.dev/workable/apis/account-root/revisions/13ad2e8e2ee9?raw)
