Projects
update-project-tool
Update top-level fields on a project. Flipping status to invoiced auto-finishes every open deadline.
Updates a project. Only the whitelisted fields below can be changed; anything else is ignored. Setting status to invoiced finishes every open deadline on the project — that side-effect is deliberate and matches the UI behaviour.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
id | integer | yes | Project id. |
title | string | no | Project title (max 255). |
description | string | null | no | Free-text description. |
status | string | no | One of active, finished, invoiced, on-hold, inactive, archived. |
start_date | string (Y-m-d) | null | no | Start date, or null to clear. |
end_date | string (Y-m-d) | null | no | End date, or null to clear. Must be on or after start_date. |
customer_id | integer | no | Primary customer id. |
sub_customer_id | integer | null | no | Sub-customer id, or null to clear. |
project_manager_id | integer | null | no | User id of the project manager. |
account_manager_id | integer | null | no | User id of the account manager. |
application_id | integer | null | no | Application id. |
workflow_id | integer | null | no | Workflow id. |
workflow_mode | string | null | no | One of sprints, simple. |
is_billable | boolean | no | Whether time is billable. |
is_continuous | boolean | no | Whether this is a continuous (non-finite) project. |
Permissions
projects::update, plus the project policy's update gate.
Example
{
"id": 7,
"status": "invoiced"
}Response
The full project payload, same shape as get-project-tool.
Errors
- An invalid
statusorworkflow_modereturns a validation error. - A non-existent
idreturns a 404-style error. - Missing
projects::updatereturns an authorization error.