Project Setup Templates API
All endpoints require authentication and templates tool permissions. Routes are mounted under /api/admin/project-setup-templates.
Templates
Section titled “Templates”List Templates
Section titled “List Templates”GET /api/admin/project-setup-templatesReturns all project setup templates with computed phase_count, task_count, and created_by_name.
Permission: templates:view
Response: { templates }
Get Template Detail
Section titled “Get Template Detail”GET /api/admin/project-setup-templates/:idReturns a template with nested phases and tasks.
Permission: templates:view
Path parameters:
| Param | Type | Description |
|---|---|---|
id | string | Template ID |
Response: { template, phases }
Each phase includes a nested tasks array.
Error: 404 if template not found.
Create Template
Section titled “Create Template”POST /api/admin/project-setup-templatesPermission: templates:update
Body:
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Template name |
description | string | No | Template description |
default_type_id | string | No | Default project type ID |
default_squad | string | No | Default squad |
is_global | boolean | No | Whether template is global (default: true) |
Response: { template } (201)
Update Template
Section titled “Update Template”PUT /api/admin/project-setup-templates/:idPermission: templates:update
Path parameters:
| Param | Type | Description |
|---|---|---|
id | string | Template ID |
Body (all fields optional): name, description, default_type_id, default_squad, is_global
Response: { ok: true }
Delete Template
Section titled “Delete Template”DELETE /api/admin/project-setup-templates/:idCascade-deletes phases and tasks. If the template has been used (use_count > 0) and confirm is not set, returns a warning instead.
Permission: templates:manage
Path parameters:
| Param | Type | Description |
|---|---|---|
id | string | Template ID |
Query parameters:
| Param | Type | Description |
|---|---|---|
confirm | string | Set to true to confirm deletion of a used template |
Response: { ok: true } or { warning: true, use_count, message } (409)
Error: 404 if template not found.
Duplicate Template
Section titled “Duplicate Template”POST /api/admin/project-setup-templates/:id/duplicateCreates a copy of the template including all phases and tasks. Named Copy of {original name}.
Permission: templates:update
Path parameters:
| Param | Type | Description |
|---|---|---|
id | string | Source template ID |
Response: { template } (201)
Error: 404 if source template not found.
Phases
Section titled “Phases”Create Phase
Section titled “Create Phase”POST /api/admin/project-setup-templates/:id/phasesPermission: templates:update
Body:
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Phase name |
description | string | No | Phase description |
duration_days | number | No | Expected duration in days |
sort_order | number | No | Sort position (default: 0) |
Response: { phase } (201)
Update Phase
Section titled “Update Phase”PUT /api/admin/project-setup-template-phases/:phaseIdPermission: templates:update
Body (all fields optional): name, description, sort_order, duration_days
Response: { ok: true }
Delete Phase
Section titled “Delete Phase”DELETE /api/admin/project-setup-template-phases/:phaseIdCascade-deletes all tasks within the phase.
Permission: templates:manage
Response: { ok: true }
Reorder Phases
Section titled “Reorder Phases”POST /api/admin/project-setup-template-phases/reorderBulk reorder phases by providing an ordered array of IDs.
Permission: templates:update
Body:
| Field | Type | Required | Description |
|---|---|---|---|
ids | string[] | Yes | Ordered array of phase IDs |
Response: { ok: true }
Create Task
Section titled “Create Task”POST /api/admin/project-setup-template-phases/:phaseId/tasksPermission: templates:update
Body:
| Field | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Task title |
description | string | No | Task description |
sort_order | number | No | Sort position (default: 0) |
default_assignee_role | string | No | Default assignee role |
Response: { task } (201)
Update Task
Section titled “Update Task”PUT /api/admin/project-setup-template-tasks/:taskIdPermission: templates:update
Body (all fields optional): title, description, sort_order, default_assignee_role
Response: { ok: true }
Delete Task
Section titled “Delete Task”DELETE /api/admin/project-setup-template-tasks/:taskIdPermission: templates:manage
Response: { ok: true }