Skip to content

Project Setup Templates API

All endpoints require authentication and templates tool permissions. Routes are mounted under /api/admin/project-setup-templates.

GET /api/admin/project-setup-templates

Returns all project setup templates with computed phase_count, task_count, and created_by_name.

Permission: templates:view

Response: { templates }


GET /api/admin/project-setup-templates/:id

Returns a template with nested phases and tasks.

Permission: templates:view

Path parameters:

ParamTypeDescription
idstringTemplate ID

Response: { template, phases }

Each phase includes a nested tasks array.

Error: 404 if template not found.


POST /api/admin/project-setup-templates

Permission: templates:update

Body:

FieldTypeRequiredDescription
namestringYesTemplate name
descriptionstringNoTemplate description
default_type_idstringNoDefault project type ID
default_squadstringNoDefault squad
is_globalbooleanNoWhether template is global (default: true)

Response: { template } (201)


PUT /api/admin/project-setup-templates/:id

Permission: templates:update

Path parameters:

ParamTypeDescription
idstringTemplate ID

Body (all fields optional): name, description, default_type_id, default_squad, is_global

Response: { ok: true }


DELETE /api/admin/project-setup-templates/:id

Cascade-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:

ParamTypeDescription
idstringTemplate ID

Query parameters:

ParamTypeDescription
confirmstringSet 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.


POST /api/admin/project-setup-templates/:id/duplicate

Creates a copy of the template including all phases and tasks. Named Copy of {original name}.

Permission: templates:update

Path parameters:

ParamTypeDescription
idstringSource template ID

Response: { template } (201)

Error: 404 if source template not found.


POST /api/admin/project-setup-templates/:id/phases

Permission: templates:update

Body:

FieldTypeRequiredDescription
namestringYesPhase name
descriptionstringNoPhase description
duration_daysnumberNoExpected duration in days
sort_ordernumberNoSort position (default: 0)

Response: { phase } (201)


PUT /api/admin/project-setup-template-phases/:phaseId

Permission: templates:update

Body (all fields optional): name, description, sort_order, duration_days

Response: { ok: true }


DELETE /api/admin/project-setup-template-phases/:phaseId

Cascade-deletes all tasks within the phase.

Permission: templates:manage

Response: { ok: true }


POST /api/admin/project-setup-template-phases/reorder

Bulk reorder phases by providing an ordered array of IDs.

Permission: templates:update

Body:

FieldTypeRequiredDescription
idsstring[]YesOrdered array of phase IDs

Response: { ok: true }


POST /api/admin/project-setup-template-phases/:phaseId/tasks

Permission: templates:update

Body:

FieldTypeRequiredDescription
titlestringYesTask title
descriptionstringNoTask description
sort_ordernumberNoSort position (default: 0)
default_assignee_rolestringNoDefault assignee role

Response: { task } (201)


PUT /api/admin/project-setup-template-tasks/:taskId

Permission: templates:update

Body (all fields optional): title, description, sort_order, default_assignee_role

Response: { ok: true }


DELETE /api/admin/project-setup-template-tasks/:taskId

Permission: templates:manage

Response: { ok: true }