Skip to main content
Projects group issues across crews. They belong to the current workspace, and all reads are workspace-scoped. The project list includes computed issue counts; the stats endpoint provides status, assignee, label, and crew breakdowns.

Endpoints

Create/update mutations require the create role; delete requires manage. Read routes require an authenticated workspace member.

Project shape

List projects

Request: Optional status and sort query parameters; no request body. status optionally filters by a comma-separated list. sort accepts created_at or updated_at; any other value (including omission) sorts by name ASC. The response is a JSON array, never null.

Create a project

Request: JSON body with required name; optional fields are description, icon, color, status, priority, lead_type, lead_id, start_date, and target_date. Accepted fields are name (required), description, icon, color, status, priority, lead_type, lead_id, start_date, and target_date. The lead pair is validated against the current workspace. Returns 201 Created with the full project shape. Missing name or malformed JSON returns 400; an invalid or cross-workspace lead also returns 400.

Get a project

Request: projectId is a required path parameter. No request body. Returns 200 OK with the full project shape, or 404 when the project is not in the current workspace.

Update a project

Request: projectId is a required path parameter and the JSON body contains one or more accepted project fields. Computed fields and timestamps are not patchable. All project fields except id, workspace_id, computed fields, and timestamps are accepted as optional patch fields. Supplying no accepted field returns 400. A changed name also updates slug; lead changes must remain a valid workspace-local user/agent pair. Returns the updated project.

Delete a project

Request: projectId is a required path parameter. No request body. Unlinks associated issues by setting project_id to NULL, then hard-deletes the project. Returns 204 No Content; an unknown or cross-workspace project returns 404.

Project stats

Request: projectId is a required path parameter. No request body. Returns 200 OK:
by_assignee, by_label, and crews are arrays (empty when there are no matching issues). An unknown or cross-workspace project returns 404. See also Milestones and Labels.