---
title: "Update Template"
method: PATCH
path: "/v1/templates/{template_id}"
tags: ["templates"]
---

# Update Template

`PATCH /v1/templates/{template_id}`

Update template name, description, goals, settings, or status.

For CHILD templates (parent_template_id IS NOT NULL), inherited fields
are read-only — they live only on the parent. The backend SILENTLY
STRIPS any inherited fields from the PATCH body and proceeds with the
allowed fields (name, description, status, settings.skills). This is
forgiving: the existing frontend save flow re-sends every field on
every save, even when only `skills` changed. Returning 422 for those
breaks the save UX. We log every strip so drift is observable.

Allowed on a child: name, description, status, settings.skills.

## Path parameters

- `template_id` string, required

## Request body

- TemplateUpdate
  - `name` string, nullable
  - `description` string, nullable
  - `goals` GoalBase[], nullable
    - `id` string, required
    - `type` string, required
    - `prompt` string, required
    - `follow_up_depth` string, nullable
    - `schema` object, nullable
    - `walk_through` boolean, nullable
    - `probing_areas` string[], nullable
    - `entry_points` string[], nullable
    - `capture_mode` string, nullable
    - `track` string[], nullable
    - `commit_policy` string, nullable
    - `invariants` unknown[], nullable
      - unknown
    - `extraction_mode` string, nullable
  - `settings` TemplateSettings
    - `greeting` string
    - `greeting_text` string
    - `language` string
    - `tone` string
    - `max_session_duration_minutes` integer
    - `allow_screen_share` boolean
    - `suggest_screen_sharing` boolean
    - `instant_start` boolean
    - `multi_session` boolean
    - `system_instructions` string
    - `outputs` object[]
    - `speaker_skills` string[]
    - `speaker_skillsets` string[]
    - `advisors` string[]
    - `skills` string[]
    - `skill_execution_mode` string
    - `data_sources` object[]
    - `embedded` EmbeddedSettings
      - `skip_join_screen` boolean
      - `auto_close` boolean
      - `fab_anchor` string
      - `persist_across_conversations` boolean
  - `status` string, nullable
  - `is_default` boolean, nullable
  - `learnings` object, nullable
  - `phases_enabled` boolean, nullable
  - `phases` Phase[], nullable
    - `phase_id` string, required
    - `kind` string, required
    - `ref` string, nullable
    - `inline` PhaseInline — Inline phase definition — content lives in the parent template, editable in place. Unlike a referenced phase, this content is not shared with any other template; the parent is its single source of truth.
      - `body_instructions` string
      - `goals` GoalBase[]
        - `id` string, required
        - `type` string, required
        - `prompt` string, required
        - `follow_up_depth` string, nullable
        - `schema` object, nullable
        - `walk_through` boolean, nullable
        - `probing_areas` string[], nullable
        - `entry_points` string[], nullable
        - `capture_mode` string, nullable
        - `track` string[], nullable
        - `commit_policy` string, nullable
        - `invariants` unknown[], nullable
          - unknown
        - `extraction_mode` string, nullable
      - `speaker_skills` string[]
      - `speaker_skillsets` string[]
      - `advisors` string[]
      - `data_sources` object[]
      - `outputs` object[]
    - `bridging_instructions` string, nullable
    - `display_name` string, nullable
    - `carry_summary` boolean
    - `required_goals` string[], nullable
  - `intro_instructions` string, nullable
  - `outro_instructions` string, nullable
  - `default_use` string, nullable
  - `speaker_model` string, nullable
  - `advisor_model` string, nullable
  - `turn_detector_backend` string, nullable
  - `archetype_id` string, nullable

## Response `200`

Successful Response

- TemplateOut
  - `id` string, uuid, required
  - `name` string, required
  - `description` string, required
  - `goals` object[], required
  - `settings` object, required
  - `session_brief` string
  - `tldr` string
  - `status` string, required
  - `is_default` boolean
  - `phases_enabled` boolean
  - `phases` object[]
  - `intro_instructions` string
  - `outro_instructions` string
  - `default_use` string
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `warnings` object[]
  - `parent_template_id` string, uuid, nullable
  - `inheritance` object, nullable
  - `created_by` string, uuid, nullable
  - `creator_name` string, nullable
  - `creator_email` string, nullable
  - `speaker_model` string, nullable
  - `advisor_model` string, nullable
  - `turn_detector_backend` string, nullable
  - `archetype_id` string, uuid, nullable
  - `conversation_count` integer

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/roxels/apis/interviewer.md) · [All operations](https://skmtc.dev/roxels/apis/interviewer/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/roxels/interviewer/revisions/4ef48ed226e1/schema)
