📄️ Update a team member
Updates member role and/or lead status for a team member on a project. Automatically demotes other leads when promoting a member to lead.
📄️ Update a project contact
Updates the primary status of a project contact. If promoting to primary, automatically demotes all others. If demoting from primary, clears the primary flag.
📄️ Update an existing project
Updates an existing project by ID with partial update support. Tenant ID is automatically extracted from authentication context.
📄️ Get project by ID
Retrieves a specific project by ID with all related entities and enforces tenant isolation
📄️ Remove team members from a project
Removes one or more team members from a project with lead validation
📄️ Get project team members
Retrieves all team members assigned to a project with tenant isolation
📄️ Add team members to a project
Adds one or more team members to a project. If adding a new lead, automatically demotes existing leads to ensure only one lead per project.
📄️ Remove customer contacts from a project
Removes one or more customer contacts from a project. If removing a primary contact, clears the primary flag.
📄️ Get all customer contacts for a project
Returns all customer contacts assigned to a project, ordered by primary status then assignment date.
📄️ Add customer contacts to a project
Adds one or more customer contacts to a project. If adding a new primary contact, automatically demotes existing primaries.
📄️ Get all projects
Retrieves a filtered and paginated list of projects for the authenticated user's tenant with support for sorting
📄️ Create a new project
Creates a new project with the provided details. Tenant ID is automatically extracted from authentication context.
📄️ Duplicate an existing project
Creates a copy of an existing project including its phases, work items, and milestones. Customer-specific data (customer, owners, team members, dates) is not copied. The duplicated project name will be prefixed with 'Copy-'. Request body is optional; omit or send {} to use default project name and no customer override.
📄️ Archive or unarchive a project
Archives or unarchives a project based on the isArchived flag in the request body. When isArchived is true, the project is archived (soft deleted). When isArchived is false, the project is unarchived (restored).