{"openapi":"3.1.0","info":{"title":"Astravue API","description":"This API exposes all the endpoints of Astravue application","version":"1.0.0"},"servers":[{"url":"https://api.astravue.com","description":"Astravue's API server"}],"tags":[{"name":"Notifications and Mentions","description":"Operations related to user notifications and mentions"},{"name":"Project Tasks","description":"Operations related to project tasks"},{"name":"Personal Subtasks","description":"Create, retrieve, update and delete subtasks of a given personal task"},{"name":"Projects","description":"Operations related to project"},{"name":"Task Attachments","description":"Upload, list, rename and delete files on a task or one of its subtasks"},{"name":"Personal Tasks","description":"Operations related to personal tasks"},{"name":"Task Timer","description":"Public API for Task Timer Operations"},{"name":"Spaces","description":"Operations related to spaces"},{"name":"Task Comments","description":"Operations related to task comments (public API)"},{"name":"Bulk Export","description":"Org-wide bulk read endpoints for external sync and reporting"},{"name":"Project Attachments","description":"Upload, list, rename and delete files attached to a project"},{"name":"Tasks Checklist","description":"Operations related to Task Checklist"},{"name":"Project Subtasks","description":"Retrieve project subtasks of a given task"}],"paths":{"/v1/time-track/{trackId}":{"put":{"tags":["Task Timer"],"summary":"Update a timer","description":"Update billing status, notes, or start time and duration of a timer","operationId":"updateTimer","parameters":[{"name":"trackId","in":"path","description":"Timer Track ID to update","required":true,"schema":{"type":"integer","example":5}},{"name":"X-Org-Id","in":"header","description":"Organization ID (in header)","required":true,"schema":{"type":"integer","example":1}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimerUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Timer updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTimeTrackerDto"}}}}}},"delete":{"tags":["Task Timer"],"summary":"Delete a timer entry","description":"Deletes a specific timer entry for the current user","operationId":"deleteTimeTracker","parameters":[{"name":"trackId","in":"path","description":"Timer Track ID to delete","required":true,"schema":{"type":"integer","example":5}},{"name":"X-Org-Id","in":"header","description":"Organization ID (in header)","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Time tracker deleted successfully","content":{"application/vnd.hal+json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseVoid"}}}}}}},"/v1/time-track/{trackId}/stop":{"put":{"tags":["Task Timer"],"summary":"Stop timer for a task","description":"Stops the running timer for the given track ID","operationId":"stopTimer","parameters":[{"name":"trackId","in":"path","description":"Timer Track ID to stop","required":true,"schema":{"type":"integer","example":5}},{"name":"X-Org-Id","in":"header","description":"Organization ID (in header)","required":true,"schema":{"type":"integer","example":1}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimerRequest"}}},"required":true},"responses":{"200":{"description":"Timer stopped successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTimeTrackerDto"}}}}}}},"/v1/time-track/{trackId}/resume":{"put":{"tags":["Task Timer"],"summary":"Resume timer for a task","description":"Resumes a paused timer for the given track ID","operationId":"resumeTimer","parameters":[{"name":"trackId","in":"path","description":"Timer Track ID to resume","required":true,"schema":{"type":"integer","example":5}},{"name":"X-Org-Id","in":"header","description":"Organization ID (in header)","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Timer resumed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTimeTrackerDto"}}}}}}},"/v1/time-track/{trackId}/pause":{"put":{"tags":["Task Timer"],"summary":"Pause timer for a task","description":"Pauses the running timer for the given track ID. The elapsed time is preserved.","operationId":"pauseTimer","parameters":[{"name":"trackId","in":"path","description":"Timer Track ID to pause","required":true,"schema":{"type":"integer","example":5}},{"name":"X-Org-Id","in":"header","description":"Organization ID (in header)","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Timer paused successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTimeTrackerDto"}}}}}}},"/v1/tasks/{taskId}":{"get":{"tags":["Personal Tasks"],"summary":"Get task by ID","description":"Retrieve a task by its ID","operationId":"getTaskById","parameters":[{"name":"taskId","in":"path","description":"ID of the task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Task details fetched successfully","content":{"application/vnd.hal+json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTaskDto"}}}}}},"put":{"tags":["Personal Tasks"],"summary":"Update a task","description":"Update a task by its ID","operationId":"updateTask","parameters":[{"name":"taskId","in":"path","description":"ID of the task to be updated","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Task updated successfully","content":{"application/vnd.hal+json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTaskDto"}}}}}},"delete":{"tags":["Personal Tasks"],"summary":"Delete a task","description":"Delete a task by its ID","operationId":"deleteTask","parameters":[{"name":"taskId","in":"path","description":"ID of the task to be deleted","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Task deleted successfully","content":{"application/vnd.hal+json":{"schema":{"type":"object"}}}}}}},"/v1/tasks/{taskId}/subtasks/{subtaskId}/checklists/{checklistId}":{"put":{"tags":["Tasks Checklist"],"summary":"Update a checklist of a subtask","description":"Replace name, completion state and assignee of the given subtask checklist item. Every field is applied as sent, so omitting assigneeId unassigns the item.","operationId":"updateCheckListForSubtask","parameters":[{"name":"taskId","in":"path","description":"ID of the parent task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"subtaskId","in":"path","description":"ID of the subtask","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"checklistId","in":"path","description":"ID of the checklist item to update","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChecklistUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Subtask checklist updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTaskCheckListDto"}}}}}},"delete":{"tags":["Tasks Checklist"],"summary":"Delete a checklist of a subtask","description":"Delete the given subtask checklist item and close the gap it leaves in the checklist order","operationId":"deleteCheckListForSubtask","parameters":[{"name":"taskId","in":"path","description":"ID of the parent task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"subtaskId","in":"path","description":"ID of the subtask","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"checklistId","in":"path","description":"ID of the checklist item to delete","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Subtask checklist deleted successfully"}}}},"/v1/tasks/{taskId}/subtasks/{subtaskId}/attachments/{attachmentId}":{"get":{"tags":["Task Attachments"],"summary":"Get one attachment of a subtask","description":"Fetch a single attachment of the subtask with its upload progress","operationId":"getSubtaskAttachment","parameters":[{"name":"taskId","in":"path","description":"ID of the parent task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"subtaskId","in":"path","description":"ID of the subtask","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"attachmentId","in":"path","description":"ID of the attachment","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Attachment fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseAttachmentWithStateDto"}}}}}},"put":{"tags":["Task Attachments"],"summary":"Rename a subtask attachment","description":"Rename an attachment. Send the new name without an extension — the stored extension is kept.","operationId":"renameSubtaskAttachment","parameters":[{"name":"taskId","in":"path","description":"ID of the parent task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"subtaskId","in":"path","description":"ID of the subtask","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"attachmentId","in":"path","description":"ID of the attachment","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentRenameRequest"}}},"required":true},"responses":{"200":{"description":"Attachment renamed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseAttachmentDto"}}}}}},"delete":{"tags":["Task Attachments"],"summary":"Delete a subtask attachment","description":"Delete the attachment and the stored file. This cannot be undone.","operationId":"deleteSubtaskAttachment","parameters":[{"name":"taskId","in":"path","description":"ID of the parent task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"subtaskId","in":"path","description":"ID of the subtask","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"attachmentId","in":"path","description":"ID of the attachment","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Attachment deleted successfully"}}}},"/v1/tasks/{taskId}/checklists/{checklistId}":{"put":{"tags":["Tasks Checklist"],"summary":"Update a checklist of a parent task","description":"Replace name, completion state and assignee of the given checklist item. Every field is applied as sent, so omitting assigneeId unassigns the item.","operationId":"updateCheckListForTask","parameters":[{"name":"taskId","in":"path","description":"ID of the parent task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"checklistId","in":"path","description":"ID of the checklist item to update","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChecklistUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Checklist updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTaskCheckListDto"}}}}}},"delete":{"tags":["Tasks Checklist"],"summary":"Delete a checklist of a parent task","description":"Delete the given checklist item and close the gap it leaves in the checklist order","operationId":"deleteCheckListForTask","parameters":[{"name":"taskId","in":"path","description":"ID of the parent task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"checklistId","in":"path","description":"ID of the checklist item to delete","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Checklist deleted successfully"}}}},"/v1/tasks/{taskId}/attachments/{attachmentId}":{"get":{"tags":["Task Attachments"],"summary":"Get one attachment of a task","description":"Fetch a single attachment of the task with its upload progress","operationId":"getTaskAttachment","parameters":[{"name":"taskId","in":"path","description":"ID of the task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"attachmentId","in":"path","description":"ID of the attachment","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Attachment fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseAttachmentWithStateDto"}}}}}},"put":{"tags":["Task Attachments"],"summary":"Rename a task attachment","description":"Rename an attachment. Send the new name without an extension — the stored extension is kept.","operationId":"renameTaskAttachment","parameters":[{"name":"taskId","in":"path","description":"ID of the task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"attachmentId","in":"path","description":"ID of the attachment","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentRenameRequest"}}},"required":true},"responses":{"200":{"description":"Attachment renamed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseAttachmentDto"}}}}}},"delete":{"tags":["Task Attachments"],"summary":"Delete a task attachment","description":"Delete the attachment and the stored file. This cannot be undone.","operationId":"deleteTaskAttachment","parameters":[{"name":"taskId","in":"path","description":"ID of the task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"attachmentId","in":"path","description":"ID of the attachment","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Attachment deleted successfully"}}}},"/v1/tasks/{parentTaskId}/subtasks/{subtaskId}":{"put":{"tags":["Personal Subtasks"],"summary":"Update a subtask for a personal task","description":"Update an existing subtask for a given personal task","operationId":"updatePersonalSubtask","parameters":[{"name":"parentTaskId","in":"path","description":"ID of the parent task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"subtaskId","in":"path","description":"ID of the subtask to update","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralSubtaskUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Subtask updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTaskDto"}}}}}},"delete":{"tags":["Personal Subtasks"],"summary":"Delete a subtask for a personal task","description":"Delete an existing subtask for a given personal task","operationId":"deletePersonalSubtask","parameters":[{"name":"parentTaskId","in":"path","description":"ID of the parent task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"subtaskId","in":"path","description":"ID of the subtask to delete","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Subtask deleted successfully","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/spaces/{spaceId}":{"get":{"tags":["Spaces"],"summary":"Get space by ID","description":"Fetches the details of a specific space by its ID.","operationId":"getSpaceById","parameters":[{"name":"spaceId","in":"path","description":"ID of the space to fetch","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/vnd.hal+json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseSpaceDto"}}}}}},"put":{"tags":["Spaces"],"summary":"Update a space","description":"Updates the details of a specific space by its ID.","operationId":"updateSpace","parameters":[{"name":"spaceId","in":"path","description":"ID of the space to update","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceUpdateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/vnd.hal+json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseSpaceDto"}}}}}},"delete":{"tags":["Spaces"],"summary":"Delete a space","description":"Deletes a specific space by its ID.","operationId":"deleteSpace","parameters":[{"name":"spaceId","in":"path","description":"ID of the space to delete","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/vnd.hal+json":{"schema":{"type":"object"}}}}}}},"/v1/spaces/{spaceId}/projects/{projectId}":{"get":{"tags":["Projects"],"summary":"Get project details by ID","description":"Fetches the details of a specific project by its ID within a given space.","operationId":"getProjectById","parameters":[{"name":"spaceId","in":"path","description":"ID of the space","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/vnd.hal+json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseProjectDto"}}}}}},"put":{"tags":["Projects"],"summary":"Update a project","description":"Updates the details of a specific project by its ID within a given space.","operationId":"updateProject","parameters":[{"name":"spaceId","in":"path","description":"ID of the space","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/vnd.hal+json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseProjectDto"}}}}}},"delete":{"tags":["Projects"],"summary":"Delete a project","description":"Deletes a specific project by its ID within a given space.","operationId":"deleteProject","parameters":[{"name":"spaceId","in":"path","description":"ID of the space","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/vnd.hal+json":{"schema":{"type":"object"}}}}}}},"/v1/spaces/{spaceId}/projects/{projectId}/tasks/{taskId}":{"get":{"tags":["Project Tasks"],"summary":"Get a project task by ID","description":"Retrieve a project task by its ID","operationId":"getProjectTaskById","parameters":[{"name":"spaceId","in":"path","description":"ID of the space","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"taskId","in":"path","description":"ID of the task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Project task fetched successfully","content":{"application/vnd.hal+json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTaskDto"}}}}}},"put":{"tags":["Project Tasks"],"summary":"Update a project task","description":"Update a project task by its ID","operationId":"updateProjectTask","parameters":[{"name":"spaceId","in":"path","description":"ID of the space","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"taskId","in":"path","description":"ID of the task to be updated","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectTaskUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Project task updated successfully","content":{"application/vnd.hal+json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTaskDto"}}}}}},"delete":{"tags":["Project Tasks"],"summary":"Delete a project task","description":"Delete a project task by its ID","operationId":"deleteProjectTask","parameters":[{"name":"spaceId","in":"path","description":"ID of the space","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"taskId","in":"path","description":"ID of the task to be updated","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Project task deleted successfully","content":{"application/vnd.hal+json":{"schema":{"type":"object"}}}}}}},"/v1/spaces/{spaceId}/projects/{projectId}/tasks/{taskId}/subtasks/{subtaskId}":{"put":{"tags":["Project Subtasks"],"summary":"Update a subtask","description":"Update an existing subtask for a given parent task","operationId":"updateSubtask","parameters":[{"name":"spaceId","in":"path","description":"ID of the space","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"taskId","in":"path","description":"ID of the parent task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"subtaskId","in":"path","description":"ID of the subtask to update","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectSubtaskUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Subtask updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTaskDto"}}}}}},"delete":{"tags":["Project Subtasks"],"summary":"Delete a subtask","description":"Delete an existing subtask for a given parent task","operationId":"deleteSubtask","parameters":[{"name":"spaceId","in":"path","description":"ID of the space","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"taskId","in":"path","description":"ID of the parent task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"subtaskId","in":"path","description":"ID of the subtask to delete","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Subtask deleted successfully","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/spaces/{spaceId}/projects/{projectId}/attachments/{attachmentId}":{"get":{"tags":["Project Attachments"],"summary":"Get one attachment of a project","description":"Fetch a single project attachment with its upload progress","operationId":"getProjectAttachment","parameters":[{"name":"spaceId","in":"path","description":"ID of the space","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"attachmentId","in":"path","description":"ID of the attachment","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Attachment fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseAttachmentWithStateDto"}}}}}},"put":{"tags":["Project Attachments"],"summary":"Rename a project attachment","description":"Rename an attachment. Send the new name without an extension — the stored extension is kept.","operationId":"renameProjectAttachment","parameters":[{"name":"spaceId","in":"path","description":"ID of the space","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"attachmentId","in":"path","description":"ID of the attachment","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentRenameRequest"}}},"required":true},"responses":{"200":{"description":"Attachment renamed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseAttachmentDto"}}}}}},"delete":{"tags":["Project Attachments"],"summary":"Delete a project attachment","description":"Delete the attachment and the stored file. This cannot be undone.","operationId":"deleteProjectAttachment","parameters":[{"name":"spaceId","in":"path","description":"ID of the space","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"attachmentId","in":"path","description":"ID of the attachment","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Attachment deleted successfully"}}}},"/v1/notifications/read/{notificationId}":{"put":{"tags":["Notifications and Mentions"],"summary":"Mark notification/mentions as read","description":"Marks a specific notification as read for the logged-in user in the given organization.","operationId":"markNotificationAsRead","parameters":[{"name":"notificationId","in":"path","description":"ID of the notification to mark as read","required":true,"schema":{"type":"integer","example":101}},{"name":"X-Org-Id","in":"header","description":"Organization ID (in header)","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Notification marked as read successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseNotificationReadResponseDto"}}}}}}},"/v1/time-track/{taskId}/start":{"post":{"tags":["Task Timer"],"summary":"Start timer for a task","description":"Starts a new timer for the given task ID. Used to track task duration.","operationId":"startTimer","parameters":[{"name":"taskId","in":"path","description":"Task ID for which the timer is to be started","required":true,"schema":{"type":"integer","example":101}},{"name":"X-Org-Id","in":"header","description":"Organization ID (in header)","required":true,"schema":{"type":"integer","example":1}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimerRequest"}}},"required":true},"responses":{"200":{"description":"Timer started successfully","content":{"application/vnd.hal+json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTimeTrackerDto"}}}}}}},"/v1/time-track/tasks/{taskId}/range":{"post":{"tags":["Task Timer"],"summary":"Add a time range entry for a task","description":"Logs a time entry based on a start and end timestamp. Useful when you know the exact time window.","operationId":"addNewTimeRange","parameters":[{"name":"taskId","in":"path","description":"ID of the task for which the time range is to be added","required":true,"schema":{"type":"integer","example":1}},{"name":"X-Org-Id","in":"header","description":"Organization ID (from header)","required":true,"schema":{"type":"integer","example":1}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RangeTimerRequest"}}},"required":true},"responses":{"200":{"description":"Time range added successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTimeTrackerDto"}}}}}}},"/v1/time-track/tasks/{taskId}/manual":{"post":{"tags":["Task Timer"],"summary":"Add manual time entry for a task","description":"Adds a manual time entry to a task with hours, minutes, start time, billing info, and optional notes.","operationId":"addNewManualTime","parameters":[{"name":"taskId","in":"path","description":"ID of the task to which manual time is being added","required":true,"schema":{"type":"integer","example":101}},{"name":"X-Org-Id","in":"header","description":"Organization ID (provided in the request header)","required":true,"schema":{"type":"integer","example":1}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualTimerRequest"}}},"required":true},"responses":{"200":{"description":"Manual time added successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTimeTrackerDto"}}}}}}},"/v1/time-track/projects/{projectId}/tasks/{taskId}/start":{"post":{"tags":["Task Timer"],"summary":"Start timer for a project task","description":"Starts a new timer for the given task ID inside a specific project. Used to track task duration.","operationId":"startProjectTaskTimer","parameters":[{"name":"projectId","in":"path","description":"Project ID containing the task","required":true,"schema":{"type":"integer","example":501}},{"name":"taskId","in":"path","description":"Task ID for which the timer is to be started","required":true,"schema":{"type":"integer","example":101}},{"name":"X-Org-Id","in":"header","description":"Organization ID (in header)","required":true,"schema":{"type":"integer","example":1}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimerRequest"}}},"required":true},"responses":{"200":{"description":"Timer started successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTimeTrackerDto"}}}}}}},"/v1/time-track/projects/{projectId}/tasks/{taskId}/range":{"post":{"tags":["Task Timer"],"summary":"Add range timer for a project task","description":"Adds a time range entry to a project task using start and end timestamps.","operationId":"addRangeTimerForProjectTask","parameters":[{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","example":5}},{"name":"taskId","in":"path","description":"ID of the project task to which range timer is being added","required":true,"schema":{"type":"integer","example":101}},{"name":"X-Org-Id","in":"header","description":"Organization ID (tenant)","required":true,"schema":{"type":"integer","example":1}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RangeTimerRequest"}}},"required":true},"responses":{"200":{"description":"Range timer added successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTimeTrackerDto"}}}}}}},"/v1/time-track/projects/{projectId}/tasks/{taskId}/manual":{"post":{"tags":["Task Timer"],"summary":"Add manual time entry for a project task","description":"Adds a manual time entry to a task with hours, minutes, start time (in millis), billing info, and optional notes.","operationId":"addNewManualTimeForTask","parameters":[{"name":"taskId","in":"path","description":"Task ID","required":true,"schema":{"type":"integer","example":101}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer","example":1}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualTimerRequest"}}},"required":true},"responses":{"200":{"description":"Manual time added successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTimeTrackerDto"}}}}}}},"/v1/tasks":{"get":{"tags":["Personal Tasks"],"summary":"Get all tasks","description":"Retrieve all tasks with optional filters and grouping","operationId":"getAll_1","parameters":[{"name":"title","in":"query","description":"Title of the task","required":false,"schema":{"type":"string","description":"Title of the task"}},{"name":"status","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","description":"List of task statuses"}}},{"name":"priority","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","description":"List of task priorities"}}},{"name":"tags","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","description":"List of task tags"}}},{"name":"creators","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer","format":"int64","description":"List of creator IDs"}}},{"name":"owners","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer","format":"int64","description":"List of owner IDs"}}},{"name":"startDate","in":"query","description":"Start date","required":false,"schema":{"type":"string","format":"date-time","description":"Start date"}},{"name":"dueDate","in":"query","description":"Due date","required":false,"schema":{"type":"string","format":"date-time","description":"Due date"}},{"name":"createdTime","in":"query","description":"Created time","required":false,"schema":{"type":"string","format":"date-time","description":"Created time"}},{"name":"modifiedTime","in":"query","description":"Modified time","required":false,"schema":{"type":"string","format":"date-time","description":"Modified time"}},{"name":"overdue","in":"query","description":"Whether the task is overdue","required":false,"schema":{"type":"boolean","description":"Whether the task is overdue"}},{"name":"dueDateSet","in":"query","description":"Whether the due date is set","required":false,"schema":{"type":"boolean","description":"Whether the due date is set"}},{"name":"pending","in":"query","description":"Whether the task is pending","required":false,"schema":{"type":"boolean","description":"Whether the task is pending"}},{"name":"upcoming","in":"query","description":"Whether the task is upcoming","required":false,"schema":{"type":"boolean","description":"Whether the task is upcoming"}},{"name":"customFields","in":"query","description":"Custom fields filter as JSON string. Conditions: IS, ISNOT, CONTAINS, NOTCONTAINS, STARTSWITH, ENDSWITH, ISEMPTY, ISNOTEMPTY, and on fields of type DATE also BEFORE, AFTER, BETWEEN, NOTBETWEEN, TODAY and TOMORROW. Date values are epoch milliseconds; BETWEEN and NOTBETWEEN take two, TODAY and TOMORROW take none.","required":false,"schema":{"type":"string","description":"Custom fields filter as JSON string. Conditions: IS, ISNOT, CONTAINS, NOTCONTAINS, STARTSWITH, ENDSWITH, ISEMPTY, ISNOTEMPTY, and on fields of type DATE also BEFORE, AFTER, BETWEEN, NOTBETWEEN, TODAY and TOMORROW. Date values are epoch milliseconds; BETWEEN and NOTBETWEEN take two, TODAY and TOMORROW take none.","example":[{"field":"Release date","condition":"BETWEEN","value":[1767225600000,1767830400000]}]},"example":[{"field":"Release date","condition":"BETWEEN","value":[1767225600000,1767830400000]}]},{"name":"page","in":"query","description":"Zero-based page index (0..N)","required":false,"schema":{"type":"integer","default":0,"minimum":0}},{"name":"size","in":"query","description":"The size of the page to be returned","required":false,"schema":{"type":"integer","default":20,"minimum":1}},{"name":"sort","in":"query","description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Tasks fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTaskListResponse"}}}}}},"post":{"tags":["Personal Tasks"],"summary":"Create a task","description":"Create a new task","operationId":"createTask","parameters":[{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskCreateRequest"}}},"required":true},"responses":{"200":{"description":"Task created successfully","content":{"application/vnd.hal+json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTaskDto"}}}}}}},"/v1/tasks/{taskId}/subtasks/{subtaskId}/checklists":{"get":{"tags":["Tasks Checklist"],"summary":"Get all checklists for a subtask","description":"Fetch all checklists for the given subtask under a parent task, ordered by index","operationId":"getAllCheckListsForSubtask","parameters":[{"name":"taskId","in":"path","description":"ID of the parent task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"subtaskId","in":"path","description":"ID of the subtask","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Subtask checklists fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseListTaskCheckListDto"}}}}}},"post":{"tags":["Tasks Checklist"],"summary":"Create a checklist for a subtask","description":"Append a checklist item to the given subtask. The item is created incomplete and takes the last position in the checklist order.","operationId":"createCheckListForSubtask","parameters":[{"name":"taskId","in":"path","description":"ID of the parent task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"subtaskId","in":"path","description":"ID of the subtask","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChecklistCreateRequest"}}},"required":true},"responses":{"200":{"description":"Subtask checklist created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTaskCheckListDto"}}}}}}},"/v1/tasks/{taskId}/subtasks/{subtaskId}/attachments":{"get":{"tags":["Task Attachments"],"summary":"Get all attachments of a subtask","description":"Fetch every file attached to the subtask, oldest first","operationId":"getAllSubtaskAttachments","parameters":[{"name":"taskId","in":"path","description":"ID of the parent task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"subtaskId","in":"path","description":"ID of the subtask","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Attachments fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseListAttachmentWithStateDto"}}}}}},"post":{"tags":["Task Attachments"],"summary":"Upload attachments to a subtask","description":"Upload up to 10 files in one multipart request under the field name `files`","operationId":"uploadSubtaskAttachments","parameters":[{"name":"taskId","in":"path","description":"ID of the parent task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"subtaskId","in":"path","description":"ID of the subtask","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FileUploadDto"}}}},"responses":{"200":{"description":"Attachments uploaded successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseListAttachmentDto"}}}}}}},"/v1/tasks/{taskId}/checklists":{"get":{"tags":["Tasks Checklist"],"summary":"Get all checklists for a parent task","description":"Fetch checklists for the given parent task with proper ordering","operationId":"getAllCheckListsForTask","parameters":[{"name":"taskId","in":"path","description":"ID of the parent task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Checklists fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseListTaskCheckListDto"}}}}}},"post":{"tags":["Tasks Checklist"],"summary":"Create a checklist for a parent task","description":"Append a checklist item to the given parent task. The item is created incomplete and takes the last position in the checklist order.","operationId":"createCheckListForTask","parameters":[{"name":"taskId","in":"path","description":"ID of the parent task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChecklistCreateRequest"}}},"required":true},"responses":{"200":{"description":"Checklist created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTaskCheckListDto"}}}}}}},"/v1/tasks/{taskId}/attachments":{"get":{"tags":["Task Attachments"],"summary":"Get all attachments of a task","description":"Fetch every file attached to the task, oldest first. Files still uploading carry their progress in completedBytes and totalSize.","operationId":"getAllTaskAttachments","parameters":[{"name":"taskId","in":"path","description":"ID of the task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Attachments fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseListAttachmentWithStateDto"}}}}}},"post":{"tags":["Task Attachments"],"summary":"Upload attachments to a task","description":"Upload up to 10 files in one multipart request under the field name `files`. Each file must be non-empty and of an allowed type, and must fit the organisation's plan limits.","operationId":"uploadTaskAttachments","parameters":[{"name":"taskId","in":"path","description":"ID of the task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FileUploadDto"}}}},"responses":{"200":{"description":"Attachments uploaded successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseListAttachmentDto"}}}}}}},"/v1/tasks/{parentTaskId}/subtasks":{"get":{"tags":["Personal Subtasks"],"summary":"Get all subtasks for a personal task","description":"Retrieve all subtasks for a given personal task with optional filters and sorting","operationId":"getPersonalSubtasks","parameters":[{"name":"parentTaskId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"title","in":"query","description":"Title of the task","required":false,"schema":{"type":"string","description":"Title of the task"}},{"name":"status","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","description":"List of task statuses"}}},{"name":"priority","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","description":"List of task priorities"}}},{"name":"tags","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","description":"List of task tags"}}},{"name":"creators","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer","format":"int64","description":"List of creator IDs"}}},{"name":"owners","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer","format":"int64","description":"List of owner IDs"}}},{"name":"startDate","in":"query","description":"Start date","required":false,"schema":{"type":"string","format":"date-time","description":"Start date"}},{"name":"dueDate","in":"query","description":"Due date","required":false,"schema":{"type":"string","format":"date-time","description":"Due date"}},{"name":"createdTime","in":"query","description":"Created time","required":false,"schema":{"type":"string","format":"date-time","description":"Created time"}},{"name":"modifiedTime","in":"query","description":"Modified time","required":false,"schema":{"type":"string","format":"date-time","description":"Modified time"}},{"name":"overdue","in":"query","description":"Whether the task is overdue","required":false,"schema":{"type":"boolean","description":"Whether the task is overdue"}},{"name":"dueDateSet","in":"query","description":"Whether the due date is set","required":false,"schema":{"type":"boolean","description":"Whether the due date is set"}},{"name":"pending","in":"query","description":"Whether the task is pending","required":false,"schema":{"type":"boolean","description":"Whether the task is pending"}},{"name":"upcoming","in":"query","description":"Whether the task is upcoming","required":false,"schema":{"type":"boolean","description":"Whether the task is upcoming"}},{"name":"customFields","in":"query","description":"Custom fields filter as JSON string. Conditions: IS, ISNOT, CONTAINS, NOTCONTAINS, STARTSWITH, ENDSWITH, ISEMPTY, ISNOTEMPTY, and on fields of type DATE also BEFORE, AFTER, BETWEEN, NOTBETWEEN, TODAY and TOMORROW. Date values are epoch milliseconds; BETWEEN and NOTBETWEEN take two, TODAY and TOMORROW take none.","required":false,"schema":{"type":"string","description":"Custom fields filter as JSON string. Conditions: IS, ISNOT, CONTAINS, NOTCONTAINS, STARTSWITH, ENDSWITH, ISEMPTY, ISNOTEMPTY, and on fields of type DATE also BEFORE, AFTER, BETWEEN, NOTBETWEEN, TODAY and TOMORROW. Date values are epoch milliseconds; BETWEEN and NOTBETWEEN take two, TODAY and TOMORROW take none.","example":[{"field":"Release date","condition":"BETWEEN","value":[1767225600000,1767830400000]}]},"example":[{"field":"Release date","condition":"BETWEEN","value":[1767225600000,1767830400000]}]},{"name":"page","in":"query","description":"Zero-based page index (0..N)","required":false,"schema":{"type":"integer","default":0,"minimum":0}},{"name":"size","in":"query","description":"The size of the page to be returned","required":false,"schema":{"type":"integer","default":20,"minimum":1}},{"name":"sort","in":"query","description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Subtasks fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTaskListResponse"}}}}}},"post":{"tags":["Personal Subtasks"],"summary":"Create a subtask for a personal task","description":"Create a new subtask for a given personal task","operationId":"createPersonalSubtask","parameters":[{"name":"parentTaskId","in":"path","description":"ID of the parent task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralSubtaskCreateRequest"}}},"required":true},"responses":{"200":{"description":"Subtask created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTaskDto"}}}}}}},"/v1/spaces":{"get":{"tags":["Spaces"],"summary":"Get all spaces","description":"Fetches a list of all spaces for the current tenant.","operationId":"getAllSpaces","parameters":[{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/vnd.hal+json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseListSpaceDto"}}}}}},"post":{"tags":["Spaces"],"summary":"Create a new space","description":"Creates a new space for the current tenant.","operationId":"createSpace","parameters":[{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/vnd.hal+json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseSpaceDto"}}}}}}},"/v1/spaces/{spaceId}/projects":{"get":{"tags":["Projects"],"summary":"Get all projects in a space","description":"Fetches a paginated list of projects for the given space ID with optional filtering and sorting.","operationId":"getAll_2","parameters":[{"name":"spaceId","in":"path","description":"ID of the space","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"title","in":"query","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"priority","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"health","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"creators","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}},{"name":"members","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}},{"name":"tags","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"startDate","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"dueDate","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"createdTime","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"modifiedTime","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"overdue","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"isPublic","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"dueDateSet","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pending","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"upcoming","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"page","in":"query","description":"Zero-based page index (0..N)","required":false,"schema":{"type":"integer","default":0,"minimum":0}},{"name":"size","in":"query","description":"The size of the page to be returned","required":false,"schema":{"type":"integer","default":20,"minimum":1}},{"name":"sort","in":"query","description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseProjectListResponse"}}}}}},"post":{"tags":["Projects"],"summary":"Create a new project","description":"Creates a new project within a given space.","operationId":"createProject","parameters":[{"name":"spaceId","in":"path","description":"ID of the space","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/vnd.hal+json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseProjectDto"}}}}}}},"/v1/spaces/{spaceId}/projects/{projectId}/tasks":{"get":{"tags":["Project Tasks"],"summary":"Get all tasks in a project","description":"Get all tasks in a project with optional filtering and sorting","operationId":"getAllTasksInProject_1","parameters":[{"name":"spaceId","in":"path","description":"ID of the space","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"title","in":"query","description":"Title of the task","required":false,"schema":{"type":"string","description":"Title of the task"}},{"name":"status","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","description":"List of task statuses"}}},{"name":"priority","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","description":"List of task priorities"}}},{"name":"tags","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","description":"List of task tags"}}},{"name":"creators","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer","format":"int64","description":"List of creator IDs"}}},{"name":"owners","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer","format":"int64","description":"List of owner IDs"}}},{"name":"startDate","in":"query","description":"Start date","required":false,"schema":{"type":"string","format":"date-time","description":"Start date"}},{"name":"dueDate","in":"query","description":"Due date","required":false,"schema":{"type":"string","format":"date-time","description":"Due date"}},{"name":"createdTime","in":"query","description":"Created time","required":false,"schema":{"type":"string","format":"date-time","description":"Created time"}},{"name":"modifiedTime","in":"query","description":"Modified time","required":false,"schema":{"type":"string","format":"date-time","description":"Modified time"}},{"name":"overdue","in":"query","description":"Whether the task is overdue","required":false,"schema":{"type":"boolean","description":"Whether the task is overdue"}},{"name":"dueDateSet","in":"query","description":"Whether the due date is set","required":false,"schema":{"type":"boolean","description":"Whether the due date is set"}},{"name":"pending","in":"query","description":"Whether the task is pending","required":false,"schema":{"type":"boolean","description":"Whether the task is pending"}},{"name":"upcoming","in":"query","description":"Whether the task is upcoming","required":false,"schema":{"type":"boolean","description":"Whether the task is upcoming"}},{"name":"customFields","in":"query","description":"Custom fields filter as JSON string. Conditions: IS, ISNOT, CONTAINS, NOTCONTAINS, STARTSWITH, ENDSWITH, ISEMPTY, ISNOTEMPTY, and on fields of type DATE also BEFORE, AFTER, BETWEEN, NOTBETWEEN, TODAY and TOMORROW. Date values are epoch milliseconds; BETWEEN and NOTBETWEEN take two, TODAY and TOMORROW take none.","required":false,"schema":{"type":"string","description":"Custom fields filter as JSON string. Conditions: IS, ISNOT, CONTAINS, NOTCONTAINS, STARTSWITH, ENDSWITH, ISEMPTY, ISNOTEMPTY, and on fields of type DATE also BEFORE, AFTER, BETWEEN, NOTBETWEEN, TODAY and TOMORROW. Date values are epoch milliseconds; BETWEEN and NOTBETWEEN take two, TODAY and TOMORROW take none.","example":[{"field":"Release date","condition":"BETWEEN","value":[1767225600000,1767830400000]}]},"example":[{"field":"Release date","condition":"BETWEEN","value":[1767225600000,1767830400000]}]},{"name":"page","in":"query","description":"Zero-based page index (0..N)","required":false,"schema":{"type":"integer","default":0,"minimum":0}},{"name":"size","in":"query","description":"The size of the page to be returned","required":false,"schema":{"type":"integer","default":20,"minimum":1}},{"name":"sort","in":"query","description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Project tasks fetched successfully","content":{"application/vnd.hal+json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseObject"}}}}}},"post":{"tags":["Project Tasks"],"summary":"Create a project task","description":"Create a new project task","operationId":"createProjectTask","parameters":[{"name":"spaceId","in":"path","description":"ID of the space","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectTaskCreateRequest"}}},"required":true},"responses":{"200":{"description":"Project task created successfully","content":{"application/vnd.hal+json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTaskDto"}}}}}}},"/v1/spaces/{spaceId}/projects/{projectId}/tasks/{taskId}/subtasks":{"get":{"tags":["Project Subtasks"],"summary":"Get all subtasks","description":"Retrieve all subtasks for a given parent task with optional filters and sorting","operationId":"getAllSubtasks","parameters":[{"name":"spaceId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"projectId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"taskId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"title","in":"query","description":"Title of the task","required":false,"schema":{"type":"string","description":"Title of the task"}},{"name":"status","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","description":"List of task statuses"}}},{"name":"priority","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","description":"List of task priorities"}}},{"name":"tags","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","description":"List of task tags"}}},{"name":"creators","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer","format":"int64","description":"List of creator IDs"}}},{"name":"owners","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer","format":"int64","description":"List of owner IDs"}}},{"name":"startDate","in":"query","description":"Start date","required":false,"schema":{"type":"string","format":"date-time","description":"Start date"}},{"name":"dueDate","in":"query","description":"Due date","required":false,"schema":{"type":"string","format":"date-time","description":"Due date"}},{"name":"createdTime","in":"query","description":"Created time","required":false,"schema":{"type":"string","format":"date-time","description":"Created time"}},{"name":"modifiedTime","in":"query","description":"Modified time","required":false,"schema":{"type":"string","format":"date-time","description":"Modified time"}},{"name":"overdue","in":"query","description":"Whether the task is overdue","required":false,"schema":{"type":"boolean","description":"Whether the task is overdue"}},{"name":"dueDateSet","in":"query","description":"Whether the due date is set","required":false,"schema":{"type":"boolean","description":"Whether the due date is set"}},{"name":"pending","in":"query","description":"Whether the task is pending","required":false,"schema":{"type":"boolean","description":"Whether the task is pending"}},{"name":"upcoming","in":"query","description":"Whether the task is upcoming","required":false,"schema":{"type":"boolean","description":"Whether the task is upcoming"}},{"name":"customFields","in":"query","description":"Custom fields filter as JSON string. Conditions: IS, ISNOT, CONTAINS, NOTCONTAINS, STARTSWITH, ENDSWITH, ISEMPTY, ISNOTEMPTY, and on fields of type DATE also BEFORE, AFTER, BETWEEN, NOTBETWEEN, TODAY and TOMORROW. Date values are epoch milliseconds; BETWEEN and NOTBETWEEN take two, TODAY and TOMORROW take none.","required":false,"schema":{"type":"string","description":"Custom fields filter as JSON string. Conditions: IS, ISNOT, CONTAINS, NOTCONTAINS, STARTSWITH, ENDSWITH, ISEMPTY, ISNOTEMPTY, and on fields of type DATE also BEFORE, AFTER, BETWEEN, NOTBETWEEN, TODAY and TOMORROW. Date values are epoch milliseconds; BETWEEN and NOTBETWEEN take two, TODAY and TOMORROW take none.","example":[{"field":"Release date","condition":"BETWEEN","value":[1767225600000,1767830400000]}]},"example":[{"field":"Release date","condition":"BETWEEN","value":[1767225600000,1767830400000]}]},{"name":"page","in":"query","description":"Zero-based page index (0..N)","required":false,"schema":{"type":"integer","default":0,"minimum":0}},{"name":"size","in":"query","description":"The size of the page to be returned","required":false,"schema":{"type":"integer","default":20,"minimum":1}},{"name":"sort","in":"query","description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Subtasks fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseSubtaskListResponse"}}}}}},"post":{"tags":["Project Subtasks"],"summary":"Create a subtask","description":"Create a new subtask for a given parent task","operationId":"createSubtask","parameters":[{"name":"spaceId","in":"path","description":"ID of the space","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"taskId","in":"path","description":"ID of the parent task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectSubtaskCreateRequest"}}},"required":true},"responses":{"200":{"description":"Subtask created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTaskDto"}}}}}}},"/v1/spaces/{spaceId}/projects/{projectId}/attachments":{"get":{"tags":["Project Attachments"],"summary":"Get all attachments of a project","description":"Fetch the files attached to the project itself, oldest first. Files attached to the project's tasks and chat are not included.","operationId":"getAllProjectAttachments","parameters":[{"name":"spaceId","in":"path","description":"ID of the space","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Attachments fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseListAttachmentWithStateDto"}}}}}},"post":{"tags":["Project Attachments"],"summary":"Upload attachments to a project","description":"Upload up to 10 files in one multipart request under the field name `files`. Each file must be non-empty and of an allowed type, and must fit the organisation's plan limits.","operationId":"uploadProjectAttachments","parameters":[{"name":"spaceId","in":"path","description":"ID of the space","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FileUploadDto"}}}},"responses":{"200":{"description":"Attachments uploaded successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseListAttachmentDto"}}}}}}},"/v1/time-track/{taskId}/users/{userId}/timers":{"get":{"tags":["Task Timer"],"summary":"Get timers for a user in a task","description":"Fetch all timer entries and total tracked time for a user in the given task","operationId":"getTimeEntriesForUser","parameters":[{"name":"taskId","in":"path","description":"Task ID","required":true,"schema":{"type":"integer","example":101}},{"name":"userId","in":"path","description":"User ID","required":true,"schema":{"type":"integer","example":5}},{"name":"X-Org-Id","in":"header","description":"Organization ID (in header)","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Timers retrieved successfully","content":{"application/vnd.hal+json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTaskTimerListDto"}}}}}}},"/v1/time-track/users/{userId}/active-timers":{"get":{"tags":["Task Timer"],"summary":"Get active timers for a user","description":"Fetch all active timers (not stopped) for a user across tasks","operationId":"getActiveTimersForUser","parameters":[{"name":"userId","in":"path","description":"User ID","required":true,"schema":{"type":"integer","example":5}},{"name":"X-Org-Id","in":"header","description":"Organization ID (in header)","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Active timers retrieved successfully","content":{"application/vnd.hal+json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseListTimeTrackerDto"}}}}}}},"/v1/time-track/reports/global":{"get":{"tags":["Task Timer"],"summary":"Get global timesheet report","description":"Fetches a paginated global timesheet report grouped by PROJECT or MEMBER. Returns hierarchical data: when grouped by PROJECT -> members -> tasks; when grouped by MEMBER -> projects -> tasks. Includes billable/non-billable time, total time, and billable cost for each level.","operationId":"getGlobalTimesheetReport","parameters":[{"name":"groupBy","in":"query","description":"Group results by PROJECT or MEMBER","required":false,"schema":{"type":"string","default":"MEMBER","enum":["PROJECT","MEMBER"]}},{"name":"startDate","in":"query","description":"Start date filter (ISO format: yyyy-MM-dd)","required":true,"schema":{"type":"string","format":"date","example":"2025-01-01"}},{"name":"endDate","in":"query","description":"End date filter (ISO format: yyyy-MM-dd)","required":true,"schema":{"type":"string","format":"date","example":"2025-12-31"}},{"name":"page","in":"query","description":"Page number (zero-based)","required":false,"schema":{"type":"integer","default":0}},{"name":"size","in":"query","description":"Page size","required":false,"schema":{"type":"integer","default":20}},{"name":"searchCriteria","in":"query","description":"JSON filter criteria. Supported fields: member, project, space, customer, status (IS/ISNOT with id list); billable (IS/ISNOT with boolean value, e.g. true for billable only, false for non-billable only); timeMode (selects which timestamp the date range and ordering target — allowed values: STARTED_TIME (default) or CREATED_TIME). Example: {\"filters\":[{\"field\":\"member\",\"condition\":\"IS\",\"value\":[1,2]},{\"field\":\"billable\",\"condition\":\"IS\",\"value\":true},{\"field\":\"timeMode\",\"value\":\"CREATED_TIME\"}],\"operator\":\"AND\"}","required":false,"schema":{"type":"string"}},{"name":"sortProperty","in":"query","description":"Column to sort task rows by. Defaults to the legacy most-recently-active ordering when omitted.","required":false,"schema":{"type":"string","enum":["startedTime","createdTime"]}},{"name":"sortDirection","in":"query","description":"Sort direction; only honoured when sortProperty is provided.","required":false,"schema":{"type":"string","default":"desc","enum":["asc","desc"]}},{"name":"X-Org-Id","in":"header","description":"Organization ID (in header)","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Global timesheet report fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseTimesheetReportResponse"}}}}}}},"/v1/time-track/projects/{projectId}/timesheet":{"get":{"tags":["Task Timer"],"summary":"Get project timesheet","description":"Fetches all time entries for a specific project, grouped by user. Each entry includes the user details, total occupied time, and individual time tracker records. Supports sorting and filtering via searchCriteria.","operationId":"getProjectTimesheet","parameters":[{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","example":5}},{"name":"searchCriteria","in":"query","description":"JSON filter criteria. Supported fields: billable, owners, creators, date, when, task. Example: {\"filters\":[{\"field\":\"billable\",\"condition\":\"IS\",\"value\":true}],\"operator\":\"AND\"}","required":false,"schema":{"type":"string"}},{"name":"sortProperty","in":"query","description":"Property to sort by","required":false,"schema":{"type":"string","default":"createdTime","enum":["createdTime","billable","title"]}},{"name":"sortDirection","in":"query","description":"Sort direction","required":false,"schema":{"type":"string","default":"asc","enum":["asc","desc"]}},{"name":"X-Org-Id","in":"header","description":"Organization ID (in header)","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Project timesheet fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseListProjectTimesheetResponse"}}}}}}},"/v1/time-track/projects/{projectId}/timesheet/summary":{"get":{"tags":["Task Timer"],"summary":"Get project timesheet summary","description":"Returns aggregated billable, non-billable, and total tracked time for a project in milliseconds.","operationId":"getProjectTimesheetSummary","parameters":[{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","example":5}},{"name":"X-Org-Id","in":"header","description":"Organization ID (in header)","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Project timesheet summary fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseMapStringLong"}}}}}}},"/v1/tasks/{taskId}/subtasks/{subtaskId}/attachments/{attachmentId}/download-url":{"get":{"tags":["Task Attachments"],"summary":"Get a download URL for a subtask attachment","description":"Returns a pre-signed URL valid for 24 hours that the client can download the file from directly","operationId":"getSubtaskAttachmentDownloadUrl","parameters":[{"name":"taskId","in":"path","description":"ID of the parent task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"subtaskId","in":"path","description":"ID of the subtask","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"attachmentId","in":"path","description":"ID of the attachment","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Download URL generated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseString"}}}}}}},"/v1/tasks/{taskId}/comments":{"get":{"tags":["Task Comments"],"summary":"Get comments for a task","description":"Retrieve all comments (including parent comments and replies) for a given task.\n\n**Usage Notes:**\n- Parent comments have `parentCommentId = null`.\n- Replies have `parentCommentId` set to the ID of the parent comment.\n- Clients can use this field to group replies under their parent comment for a threaded conversation view.\n- The `sort` parameter controls the order of **parent comments** (replies should be grouped by client regardless of sort order).\n- The `comment` field may contain HTML with `@mention` markup. Use `mentionedUserIds` to identify mentioned users.\n","operationId":"getComments_1","parameters":[{"name":"taskId","in":"path","description":"ID of the task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"sort","in":"query","description":"Sort order (asc or desc)","required":false,"schema":{"type":"string","default":"desc"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Comments fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseListTaskCommentDto"}}}}}}},"/v1/tasks/{taskId}/attachments/{attachmentId}/download-url":{"get":{"tags":["Task Attachments"],"summary":"Get a download URL for a task attachment","description":"Returns a pre-signed URL the client can stream or download the file from directly. The URL is valid for 24 hours and needs no authorization header of its own.","operationId":"getTaskAttachmentDownloadUrl","parameters":[{"name":"taskId","in":"path","description":"ID of the task","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"attachmentId","in":"path","description":"ID of the attachment","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Download URL generated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseString"}}}}}}},"/v1/tasks/bulk":{"get":{"tags":["Bulk Export"],"summary":"Bulk list tasks","description":"Returns an org-wide, paginated list of project tasks (including subtasks) across every project the calling user is a member of. Personal tasks are excluded. Rows are flat and denormalized (project name, space name, status, owners, tags) so external tools can consume them without follow-up calls. Ordered by taskId ascending for stable pagination.","operationId":"getBulkTasks","parameters":[{"name":"spaceId","in":"query","description":"Restrict to one space","required":false,"schema":{"type":"integer","example":12}},{"name":"projectId","in":"query","description":"Restrict to one project","required":false,"schema":{"type":"integer","example":101}},{"name":"status","in":"query","description":"Filter by task status name (case-insensitive exact match)","required":false,"schema":{"type":"string","example":"In Progress"}},{"name":"updatedSince","in":"query","description":"Only rows created or modified at/after this instant (ISO 8601 date-time, e.g. 2026-08-01T00:00:00.000Z). Use for incremental sync.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"includeDeleted","in":"query","description":"Include soft-deleted tasks; deleted rows carry deleted=true and deletedTime so consumers can remove them downstream","required":false,"schema":{"type":"boolean","default":false}},{"name":"page","in":"query","description":"Page number (zero-based)","required":false,"schema":{"type":"integer","default":0}},{"name":"size","in":"query","description":"Page size (default 200, max 1000)","required":false,"schema":{"type":"integer","default":200}},{"name":"X-Org-Id","in":"header","description":"Organization ID (in header)","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Tasks fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseBulkPageResponseBulkTaskDto"}}}}}}},"/v1/spaces/{spaceId}/projects/{projectId}/members":{"get":{"tags":["Projects"],"summary":"Get the assignable members of a project","description":"Fetches the project admins and members that a task in this project can be assigned to. Guests and members whose account is no longer active in the organization are left out. Use the returned userId values as the task owners.","operationId":"getProjectMembers","parameters":[{"name":"spaceId","in":"path","description":"ID of the space","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/vnd.hal+json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseProjectMemberListResponse"}}}}}}},"/v1/spaces/{spaceId}/projects/{projectId}/attachments/{attachmentId}/download-url":{"get":{"tags":["Project Attachments"],"summary":"Get a download URL for a project attachment","description":"Returns a pre-signed URL the client can stream or download the file from directly. The URL is valid for 24 hours and needs no authorization header of its own.","operationId":"getProjectAttachmentDownloadUrl","parameters":[{"name":"spaceId","in":"path","description":"ID of the space","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"projectId","in":"path","description":"ID of the project","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"attachmentId","in":"path","description":"ID of the attachment","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"X-Org-Id","in":"header","description":"Organization ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Download URL generated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseString"}}}}}}},"/v1/projects/bulk":{"get":{"tags":["Bulk Export"],"summary":"Bulk list projects","description":"Returns an org-wide, paginated list of projects across every space the calling user is a member of. Rows are flat and denormalized (space name, status, owners, tags) so external tools can consume them without follow-up calls. Ordered by projectId ascending for stable pagination.","operationId":"getBulkProjects","parameters":[{"name":"spaceId","in":"query","description":"Restrict to one space","required":false,"schema":{"type":"integer","example":12}},{"name":"status","in":"query","description":"Filter by project status name (case-insensitive exact match)","required":false,"schema":{"type":"string","example":"In Progress"}},{"name":"updatedSince","in":"query","description":"Only rows created or modified at/after this instant (ISO 8601 date-time, e.g. 2026-08-01T00:00:00.000Z). Use for incremental sync.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"includeDeleted","in":"query","description":"Include soft-deleted projects; deleted rows carry deleted=true and deletedTime so consumers can remove them downstream","required":false,"schema":{"type":"boolean","default":false}},{"name":"page","in":"query","description":"Page number (zero-based)","required":false,"schema":{"type":"integer","default":0}},{"name":"size","in":"query","description":"Page size (default 200, max 500)","required":false,"schema":{"type":"integer","default":200}},{"name":"X-Org-Id","in":"header","description":"Organization ID (in header)","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Projects fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseBulkPageResponseBulkProjectDto"}}}}}}},"/v1/notifications":{"get":{"tags":["Notifications and Mentions"],"summary":"Get all notifications and mentions","description":"Fetches all notifications and mentions for the current user in the given organization. Supports ascending or descending sort by created date.","operationId":"getAllNotifications","parameters":[{"name":"sort","in":"query","description":"Sort order for notifications (asc/desc)","required":false,"schema":{"type":"string","example":"desc"}},{"name":"X-Org-Id","in":"header","description":"Organization ID (in header)","required":true,"schema":{"type":"integer","example":1}}],"responses":{"200":{"description":"Notifications fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseListNotificationDto"}}}}}}},"/v1/notifications/delete":{"delete":{"tags":["Notifications and Mentions"],"summary":"Delete multiple notifications","description":"Deletes a list of notifications for the logged-in user in the given organization.","operationId":"deleteNotifications","parameters":[{"name":"X-Org-Id","in":"header","description":"Organization ID (in header)","required":true,"schema":{"type":"integer","example":1}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationDeleteRequestDto"}}},"required":true},"responses":{"200":{"description":"Notifications deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSuccessResponseNotificationDeleteResponseDto"}}}}}}}},"components":{"schemas":{"TimerData":{"type":"object","properties":{"startTime":{"type":"integer","format":"int64","description":"Start time of the timer in epoch milliseconds.","example":1754418600000}},"required":["startTime"]},"TimerUpdateRequest":{"type":"object","description":"Minimal request payload to update a task timer.","properties":{"billingType":{"type":"boolean","description":"Whether the timer is billable.","example":true},"notes":{"type":"string","description":"Optional notes about the timer.","example":"Worked on reporting module."},"hours":{"type":"integer","format":"int64","description":"Number of hours to set for the timer.","example":2,"minimum":0},"minutes":{"type":"integer","format":"int64","description":"Number of minutes to set for the timer.","example":0,"minimum":0},"timerData":{"$ref":"#/components/schemas/TimerData","description":"Timer data object with startTime in milliseconds since epoch."}},"required":["timerData"]},"ApiSuccessResponseTimeTrackerDto":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"$ref":"#/components/schemas/TimeTrackerDto","description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"OrgRoleDto":{"type":"object","properties":{"orgRoleId":{"type":"integer","format":"int64"},"roleName":{"type":"string"}}},"TimeTrackerDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"trackId":{"type":"integer","format":"int64"},"trackerType":{"type":"string"},"startTime":{"type":"string","format":"date-time"},"endTime":{"type":"string","format":"date-time"},"timePeriod":{"type":"integer","format":"int64"},"taskId":{"type":"integer","format":"int64"},"parentTaskId":{"type":"integer","format":"int64"},"title":{"type":"string"},"projectId":{"type":"integer","format":"int64"},"spaceId":{"type":"integer","format":"int64"},"billingType":{"type":"boolean"},"notes":{"type":"string"},"user":{"$ref":"#/components/schemas/UserMinimalDto"},"createdTime":{"type":"string","format":"date-time"},"when":{"type":"string","format":"date-time"},"status":{"type":"string"}}},"UserMinimalDto":{"type":"object","properties":{"userId":{"type":"integer","format":"int64"},"firstName":{"type":"string"},"email":{"type":"string"},"profilePicURL":{"type":"string"},"profilePicColor":{"type":"string"},"provider":{"type":"string"},"role":{"$ref":"#/components/schemas/OrgRoleDto"}}},"TimerRequest":{"type":"object","description":"Payload to start a timer for a task. Use this to mark time as billable or non-billable and optionally include notes about the work.","properties":{"billingType":{"type":"boolean","description":"Whether the timer is billable.","example":true},"notes":{"type":"string","description":"Optional notes about the timer.","example":"Worked on bug fixing."}},"required":["billingType"]},"TaskUpdateRequest":{"type":"object","description":"DTO for updating an existing task. This object is used to transfer data from the client to the server when updating a task.","properties":{"taskTitle":{"type":"string","description":"Title of the task. Optional for updates.","example":"Update authentication module"},"description":{"type":"string","description":"Description of the task. Optional for updates.","example":"This task involves updating the authentication module for the application."},"owners":{"type":"array","description":"List of owner IDs assigned to the task. Optional for updates.","example":[1,2,3],"items":{"type":"integer","format":"int64"}},"startDate":{"type":"string","format":"date-time","description":"Start date of the task. Optional for updates.","example":"2023-10-01T00:00:00.000Z"},"dueDate":{"type":"string","format":"date-time","description":"Due date of the task. Optional for updates.","example":"2023-10-15T00:00:00.000Z"},"noOfDays":{"type":"integer","format":"int32","description":"Duration in working days. When sent together with startDate or dueDate, the missing date is recomputed honouring the organisation's operational hours.","example":5,"minimum":1},"completion":{"type":"integer","format":"int32","description":"Completion percentage of the task. Must be between 0 and 100. Optional for updates.","example":75,"maximum":100,"minimum":0},"status":{"type":"string","description":"Status of the task. Optional for updates.","example":"Completed"},"priority":{"type":"string","description":"Priority of the task. Optional for updates.","example":"Medium"},"tags":{"type":"array","description":"List of tags associated with the task. Optional for updates.","example":["frontend","low-priority"],"items":{"type":"string"}}}},"ApiSuccessResponseTaskDto":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"$ref":"#/components/schemas/TaskDto","description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"CustomFieldOptionDto":{"type":"object","properties":{"optionId":{"type":"integer","format":"int64"},"optionName":{"type":"string","minLength":1},"color":{"type":"string"},"spaceId":{"type":"integer","format":"int64"},"projectId":{"type":"integer","format":"int64"},"taskCustomFieldId":{"type":"integer","format":"int64"}},"required":["optionName"]},"TagDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"tagId":{"type":"integer","format":"int64"},"tagName":{"type":"string"},"color":{"type":"string"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"createdTime":{"type":"string","format":"date-time"},"modifiedTime":{"type":"string","format":"date-time"},"taskCount":{"type":"integer","format":"int64"},"projectCount":{"type":"integer","format":"int64"}}},"TaskCustomFieldDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"taskCustomFieldId":{"type":"integer","format":"int64"},"fieldName":{"type":"string"},"description":{"type":"string"},"fieldType":{"type":"string"},"fieldValue":{"type":"array","items":{"$ref":"#/components/schemas/TaskFieldValue"}},"fieldIcon":{"type":"string"},"spaceId":{"type":"integer","format":"int64"},"projectId":{"type":"integer","format":"int64"},"associatedId":{"type":"integer","format":"int64"},"level":{"type":"string","enum":["ORG","SPACE","LOCAL"]},"active":{"type":"boolean"},"order":{"type":"integer","format":"int64"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"createdTime":{"type":"string","format":"date-time"},"modifiedTime":{"type":"string","format":"date-time"},"options":{"type":"array","items":{"$ref":"#/components/schemas/CustomFieldOptionDto"}}}},"TaskDependencyDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"dependencyId":{"type":"integer","format":"int64"},"spaceId":{"type":"integer","format":"int64"},"projectId":{"type":"integer","format":"int64"},"dependencyType":{"type":"string"},"blocking":{"$ref":"#/components/schemas/TaskResponseDto"},"blockedBy":{"$ref":"#/components/schemas/TaskResponseDto"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"createdTime":{"type":"string","format":"date-time"}}},"TaskDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"taskId":{"type":"integer","format":"int64"},"taskTitle":{"type":"string"},"description":{"type":"string"},"descriptionMentionedUserIds":{"type":"array","items":{"type":"integer","format":"int64"}},"startDate":{"type":"string","format":"date-time"},"dueDate":{"type":"string","format":"date-time"},"noOfDays":{"type":"integer","format":"int32"},"completion":{"type":"integer","format":"int32"},"priority":{"$ref":"#/components/schemas/TaskPriorityDto"},"status":{"$ref":"#/components/schemas/TaskStatusDto"},"taskTags":{"type":"array","items":{"$ref":"#/components/schemas/TagDto"}},"overdueStatus":{"type":"boolean"},"parentId":{"type":"integer","format":"int64"},"taskListId":{"type":"integer","format":"int64"},"createdByMail":{"type":"string"},"senderName":{"type":"string"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedTime":{"type":"string","format":"date-time"},"createdTime":{"type":"string","format":"date-time"},"deleted":{"type":"boolean"},"deletedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"deletedTime":{"type":"string","format":"date-time"},"completedTime":{"type":"string","format":"date-time"},"timer":{"type":"integer","format":"int64"},"messageId":{"type":"string"},"owners":{"type":"array","items":{"$ref":"#/components/schemas/UserMinimalDto"}},"followers":{"type":"array","items":{"$ref":"#/components/schemas/UserMinimalDto"}},"taggedUsers":{"type":"array","items":{"$ref":"#/components/schemas/UserMinimalDto"}},"members":{"type":"array","items":{"$ref":"#/components/schemas/UserMinimalDto"}},"projectId":{"type":"integer","format":"int64"},"spaceId":{"type":"integer","format":"int64"},"projectName":{"type":"string"},"spaceName":{"type":"string"},"subTaskCount":{"type":"integer","format":"int64"},"parentCommentCount":{"type":"integer","format":"int64"},"customFields":{"type":"array","items":{"$ref":"#/components/schemas/TaskCustomFieldDto"}},"blockedByTasks":{"type":"array","items":{"$ref":"#/components/schemas/TaskDependencyDto"}},"blockingTasks":{"type":"array","items":{"$ref":"#/components/schemas/TaskDependencyDto"}},"parent":{"type":"boolean"},"internal":{"type":"boolean"},"recurring":{"type":"boolean"},"isInternal":{"type":"boolean"}}},"TaskFieldValue":{"type":"object","properties":{"taskId":{"type":"integer","format":"int64"},"value":{}}},"TaskPriorityDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"taskPriorityId":{"type":"integer","format":"int64"},"priorityLabel":{"type":"string"},"color":{"type":"string"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"default":{"type":"boolean"},"primary":{"type":"boolean"}}},"TaskResponseDto":{"type":"object","properties":{"taskId":{"type":"integer","format":"int64"},"projectId":{"type":"integer","format":"int64"},"spaceId":{"type":"integer","format":"int64"},"taskTitle":{"type":"string"},"status":{"$ref":"#/components/schemas/TaskStatusDto"},"dueDate":{"type":"string","format":"date-time"},"owners":{"type":"array","items":{"$ref":"#/components/schemas/UserMinimalDto"}},"isInternal":{"type":"boolean"}}},"TaskStatusDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"taskStatusId":{"type":"integer","format":"int64"},"statusName":{"type":"string"},"color":{"type":"string"},"statusCategory":{"type":"string"},"projectId":{"type":"integer","format":"int64"},"spaceId":{"type":"integer","format":"int64"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"default":{"type":"boolean"},"primary":{"type":"boolean"}}},"ChecklistUpdateRequest":{"type":"object","description":"Request object for updating a checklist item. The request carries the complete desired state of the item:\nevery field is applied as sent, so `assigneeId` must be repeated to keep the current assignee and omitted to\nunassign the item.","properties":{"checkListName":{"type":"string","description":"Name of the checklist item. Must be between 3 and 150 characters.","example":"Review the API contract","maxLength":150,"minLength":3},"completed":{"type":"boolean","description":"Completion state of the checklist item.","example":true},"assigneeId":{"type":"integer","format":"int64","description":"User ID the checklist item is assigned to. The user must be an active member of the organisation. Omit to unassign the item.","example":42}},"required":["checkListName","completed"]},"ApiSuccessResponseTaskCheckListDto":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"$ref":"#/components/schemas/TaskCheckListDto","description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"TaskCheckListDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"checkListId":{"type":"integer","format":"int64"},"checkListName":{"type":"string"},"completed":{"type":"boolean"},"parentId":{"type":"integer","format":"int64"},"taskId":{"type":"integer","format":"int64"},"subtaskId":{"type":"integer","format":"int64"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"assignee":{"$ref":"#/components/schemas/UserMinimalDto"},"orderIndex":{"type":"integer","format":"int64"},"parent":{"type":"boolean"}}},"AttachmentRenameRequest":{"type":"object","description":"Request object for renaming an attachment. The stored file and its extension are untouched.","properties":{"attachmentName":{"type":"string","description":"New name without the file extension — the original extension is kept and re-appended. Sending a name that contains a dot is rejected.","example":"Signed contract","maxLength":200,"minLength":1}},"required":["attachmentName"]},"ApiSuccessResponseAttachmentDto":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"$ref":"#/components/schemas/AttachmentDto","description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"AttachmentDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"attachmentId":{"type":"integer","format":"int64"},"attachmentName":{"type":"string"},"attachmentUrl":{"type":"string"},"attachmentType":{"type":"string"},"size":{"type":"integer","format":"int64"},"projectId":{"type":"integer","format":"int64"},"spaceId":{"type":"integer","format":"int64"},"taskId":{"type":"integer","format":"int64"},"parentTaskId":{"type":"integer","format":"int64"},"commentId":{"type":"integer","format":"int64"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"createdTime":{"type":"string","format":"date-time"},"taskName":{"type":"string"},"projectName":{"type":"string"},"spaceName":{"type":"string"},"chatAttachment":{"type":"boolean"},"isChatAttachment":{"type":"boolean"}}},"GeneralSubtaskUpdateRequest":{"type":"object","description":"Request object for updating a personal subtask.","properties":{"taskTitle":{"type":"string","description":"Title of the subtask. Optional for updates.","example":"Update user authentication"},"description":{"type":"string","description":"Description of the subtask. Optional for updates.","example":"This subtask involves updating the user authentication module."},"owners":{"type":"array","description":"List of owner IDs assigned to the subtask. Optional for updates.","example":[1,2,3],"items":{"type":"integer","format":"int64"}},"startDate":{"type":"string","format":"date-time","description":"Start date of the subtask. Optional for updates.","example":"2023-10-01T00:00:00.000Z"},"dueDate":{"type":"string","format":"date-time","description":"Due date of the subtask. Optional for updates.","example":"2023-10-15T00:00:00.000Z"},"noOfDays":{"type":"integer","format":"int32","description":"Duration in working days. When sent together with startDate or dueDate, the missing date is recomputed honouring the organisation's operational hours.","example":5,"minimum":1},"completion":{"type":"integer","format":"int32","description":"Completion percentage of the subtask. Must be between 0 and 100. Optional for updates.","example":75,"maximum":100,"minimum":0},"status":{"type":"string","description":"Status of the subtask. Optional for updates.","example":"Completed"},"priority":{"type":"string","description":"Priority of the subtask. Optional for updates.","example":"Medium"},"tags":{"type":"array","description":"List of tags associated with the subtask. Optional for updates.","example":["frontend","low-priority"],"items":{"type":"string"}}}},"SpaceUpdateRequest":{"type":"object","properties":{"spaceName":{"type":"string"},"description":{"type":"string"},"spaceType":{"type":"string","pattern":"^(Public_To_All|Public_To_Request|Private)$"}}},"ApiSuccessResponseSpaceDto":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"$ref":"#/components/schemas/SpaceDto","description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"InvitedUserDto":{"type":"object","properties":{"userId":{"type":"integer","format":"int64"},"firstName":{"type":"string"},"email":{"type":"string"}}},"SpaceDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"spaceId":{"type":"integer","format":"int64"},"spaceName":{"type":"string"},"description":{"type":"string"},"color":{"type":"string"},"spaceType":{"type":"string"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"createdTime":{"type":"string","format":"date-time"},"modifiedTime":{"type":"string","format":"date-time"},"deleted":{"type":"boolean"},"deletedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"deletedTime":{"type":"string","format":"date-time"},"spaceMembers":{"type":"array","items":{"$ref":"#/components/schemas/SpaceMemberDto"}},"projectAdminMatch":{"type":"boolean"},"icon":{"type":"string"},"iconColor":{"type":"string"},"assignAdminScope":{"type":"string","enum":["ALL_PROJECTS","NEW_PROJECTS"]},"profilePicURL":{"type":"string"},"profilePicName":{"type":"string"},"archived":{"type":"boolean"},"defaultAdmin":{"type":"boolean"},"isDefaultAdmin":{"type":"boolean"}}},"SpaceMemberDto":{"type":"object","properties":{"spaceMemberId":{"type":"integer","format":"int64"},"spaceId":{"type":"integer","format":"int64"},"user":{"$ref":"#/components/schemas/UserMinimalDto"},"invitedBy":{"$ref":"#/components/schemas/InvitedUserDto"},"spaceRole":{"$ref":"#/components/schemas/SpaceRoleDto"},"joined":{"type":"boolean"},"orderIndex":{"type":"integer","format":"int64"},"hidden":{"type":"boolean"}}},"SpaceRoleDto":{"type":"object","properties":{"spaceRoleId":{"type":"integer","format":"int64"},"spaceRoleName":{"type":"string"}}},"ProjectUpdateRequest":{"type":"object","description":"Request object for updating an existing project","properties":{"name":{"type":"string","description":"Name of the project. Optional.","example":"Project Beta"},"description":{"type":"string","description":"Description of the project. Optional.","example":"Updated description of the project"},"isPublic":{"type":"boolean","description":"Indicates if the project is public. Optional.","example":false},"startDate":{"type":"string","format":"date-time","description":"Start date of the project. Optional.","example":"2023-02-01"},"dueDate":{"type":"string","format":"date-time","description":"Due date of the project. Optional.","example":"2023-11-30"},"status":{"type":"string","description":"Status of the project. Optional.","example":"Completed"},"priority":{"type":"string","description":"Priority of the project. Optional.","example":"Medium"},"health":{"type":"string","description":"Health of the project. Optional.","example":"At Risk"},"projectTags":{"type":"array","description":"List of tags associated with the project. Optional.","example":["tag3","tag4"],"items":{"type":"string"}},"contact":{"type":"integer","format":"int64","description":"Contact ID associated with the project. Optional.","example":67890},"actualStartDate":{"type":"string","format":"date-time","description":"Actual start date of the project. Optional.","example":"2023-01-05"},"actualEndDate":{"type":"string","format":"date-time","description":"Actual end date of the project. Optional.","example":"2023-12-15"},"allocatedBudget":{"type":"number","format":"double","description":"Budget allocated for the project. Optional.","example":500000},"billableCost":{"type":"number","format":"double","description":"Billable cost of the project so far. Optional.","example":200000},"nonBillableCost":{"type":"number","format":"double","description":"Non-billable cost of the project so far. Optional.","example":50000},"actualCost":{"type":"number","format":"double","description":"Actual cost of the project (billable + non-billable). Optional.","example":250000},"projectType":{"type":"string","description":"Commercial model of the project. One of FIXED_FEE, TIME_AND_MATERIAL, RETAINER. Optional.","example":"FIXED_FEE"},"contractValue":{"type":"number","format":"double","description":"Contract value for Fixed Fee projects. Optional.","example":45000},"alertThresholdPercent":{"type":"integer","format":"int32","description":"Threshold percent (1..100) at which health flips to AT_RISK. Shared by Fixed Fee and Time & Material. Optional.","example":80,"maximum":100,"minimum":1},"nteCapHours":{"type":"integer","format":"int64","description":"Not-to-exceed cap in milliseconds for Time & Material projects. Optional.","example":720000000},"retainerBudgetPeriod":{"type":"string","description":"Retainer budget period. One of MONTHLY, QUARTERLY, ANNUALLY. Optional.","example":"MONTHLY"},"retainerBudgetedHours":{"type":"integer","format":"int64","description":"Per-cycle hour budget in milliseconds for Retainer projects. Optional.","example":540000000},"retainerFee":{"type":"number","format":"double","description":"Per-cycle retainer fee in USD (base currency). Optional.","example":8000},"retainerCountHoursMode":{"type":"string","description":"Which time entries count toward the retainer hour bucket. One of BOTH, BILLABLE_ONLY, NON_BILLABLE_ONLY. Optional.","example":"BOTH"},"retainerCountCostMode":{"type":"string","description":"Which time entries count toward the retainer cost total. One of BOTH, BILLABLE_ONLY, NON_BILLABLE_ONLY. Optional.","example":"BOTH"},"retainerCycleAnchor":{"type":"string","format":"date","description":"First day of the first retainer cycle in yyyy-MM-dd format. Optional.","example":"2024-01-01"}}},"AccountLabelDto":{"type":"object","properties":{"accountId":{"type":"integer","format":"int64"},"accountName":{"type":"string"},"email":{"type":"string"},"profilePicUrl":{"type":"string"},"profilePicName":{"type":"string"},"profilePicColor":{"type":"string"}}},"ApiSuccessResponseProjectDto":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"$ref":"#/components/schemas/ProjectDto","description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"ContactDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"contactId":{"type":"integer","format":"int64"},"contactName":{"type":"string"},"email":{"type":"string"},"phone":{"$ref":"#/components/schemas/ContactProperties"},"mobile":{"$ref":"#/components/schemas/ContactProperties"},"address":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"state":{"type":"string"},"zipCode":{"type":"string"},"website":{"type":"string"},"profilePicURL":{"type":"string"},"profilePicName":{"type":"string"},"profilePicColor":{"type":"string"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"createdTime":{"type":"string","format":"date-time"},"modifiedTime":{"type":"string","format":"date-time"},"account":{"$ref":"#/components/schemas/AccountLabelDto"},"contactTags":{"type":"array","items":{"$ref":"#/components/schemas/ContactTagDto"}},"projectCount":{"type":"integer","format":"int32"}}},"ContactProperties":{"type":"object","properties":{"countryCode":{"type":"string","pattern":"^\\+[1-9]\\d{0,2}$"},"number":{"type":"string","pattern":"^\\d{5,15}$"},"countryName":{"type":"string"}}},"ContactTagDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"contactTagId":{"type":"integer","format":"int64"},"tagName":{"type":"string"},"color":{"type":"string"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"createdTime":{"type":"string","format":"date-time"},"modifiedTime":{"type":"string","format":"date-time"}}},"ProjectDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"spaceId":{"type":"integer","format":"int64"},"projectId":{"type":"integer","format":"int64"},"contact":{"$ref":"#/components/schemas/ContactDto"},"projectName":{"type":"string"},"description":{"type":"string"},"startDate":{"type":"string","format":"date-time"},"dueDate":{"type":"string","format":"date-time"},"completion":{"type":"integer","format":"int32"},"deleted":{"type":"boolean"},"createdTime":{"type":"string","format":"date-time"},"modifiedTime":{"type":"string","format":"date-time"},"deletedTime":{"type":"string","format":"date-time"},"completedTime":{"type":"string","format":"date-time"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"deletedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"projectStatus":{"$ref":"#/components/schemas/ProjectStatusDto"},"projectPriority":{"$ref":"#/components/schemas/ProjectPriorityDto"},"projectHealth":{"$ref":"#/components/schemas/ProjectHealthDto"},"projectTags":{"type":"array","items":{"$ref":"#/components/schemas/TagDto"}},"projectMembers":{"type":"array","items":{"$ref":"#/components/schemas/ProjectMemberDto"}},"projectMail":{"type":"string"},"spaceName":{"type":"string"},"actualStartDate":{"type":"string","format":"date-time"},"actualEndDate":{"type":"string","format":"date-time"},"allocatedBudget":{"type":"number","format":"double"},"billableCost":{"type":"number","format":"double"},"nonBillableCost":{"type":"number","format":"double"},"actualCost":{"type":"number","format":"double"},"projectType":{"type":"string","enum":["FIXED_FEE","TIME_AND_MATERIAL","RETAINER"]},"contractValue":{"type":"number","format":"double"},"alertThresholdPercent":{"type":"integer","format":"int32"},"nteCapHours":{"type":"integer","format":"int64"},"projectTypeLocked":{"type":"boolean"},"retainerBudgetPeriod":{"type":"string","enum":["MONTHLY","QUARTERLY","ANNUALLY"]},"retainerBudgetedHours":{"type":"integer","format":"int64"},"retainerFee":{"type":"number","format":"double"},"retainerCountHoursMode":{"type":"string","enum":["BOTH","BILLABLE_ONLY","NON_BILLABLE_ONLY"]},"retainerCountCostMode":{"type":"string","enum":["BOTH","BILLABLE_ONLY","NON_BILLABLE_ONLY"]},"retainerCycleAnchor":{"type":"string","format":"date"},"thresholdAlertRecipients":{"type":"array","items":{"$ref":"#/components/schemas/ThresholdAlertRecipientDto"},"readOnly":true},"margin":{"type":"number","format":"double","readOnly":true},"marginPercent":{"type":"number","format":"double","readOnly":true},"spentPercent":{"type":"number","format":"double","readOnly":true},"capUsedPercent":{"type":"number","format":"double","readOnly":true},"overageHours":{"type":"integer","format":"int64","readOnly":true},"retainerBudgetUsedPercent":{"type":"number","format":"double","readOnly":true},"retainerTotalCost":{"type":"number","format":"double","readOnly":true},"retainerOverageHours":{"type":"integer","format":"int64","readOnly":true},"budgetedHours":{"type":"integer","format":"int64"},"billableHours":{"type":"integer","format":"int64","readOnly":true},"nonBillableHours":{"type":"integer","format":"int64","readOnly":true},"actualHours":{"type":"integer","format":"int64","readOnly":true},"restrictGuestChatAccess":{"type":"boolean"},"autoClose":{"type":"boolean"},"currencyCode":{"type":"string"},"currencySymbol":{"type":"string"},"public":{"type":"boolean"},"overdue":{"type":"boolean"},"archived":{"type":"boolean"}}},"ProjectHealthDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"projectHealthId":{"type":"integer","format":"int64"},"healthLabel":{"type":"string"},"color":{"type":"string"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"default":{"type":"boolean"},"primary":{"type":"boolean"}}},"ProjectMemberDto":{"type":"object","properties":{"projectMemberId":{"type":"integer","format":"int64"},"projectId":{"type":"integer","format":"int64"},"user":{"$ref":"#/components/schemas/UserMinimalDto"},"invitedBy":{"$ref":"#/components/schemas/InvitedUserDto"},"role":{"$ref":"#/components/schemas/ProjectRoleDto"},"guestLevelAccess":{"type":"string"}}},"ProjectPriorityDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"projectPriorityId":{"type":"integer","format":"int64"},"priorityLabel":{"type":"string"},"color":{"type":"string"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"default":{"type":"boolean"},"primary":{"type":"boolean"}}},"ProjectRoleDto":{"type":"object","properties":{"projectRoleId":{"type":"integer","format":"int64"},"projectRoleName":{"type":"string"}}},"ProjectStatusDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"projectStatusId":{"type":"integer","format":"int64"},"projectStatusName":{"type":"string"},"color":{"type":"string"},"projectStatusCategory":{"type":"string"},"createdTime":{"type":"string","format":"date-time"},"modifiedTime":{"type":"string","format":"date-time"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"default":{"type":"boolean"}}},"ThresholdAlertRecipientDto":{"type":"object","description":"A configured recipient of contract-threshold breach alerts on a Fixed Fee project.","properties":{"id":{"type":"integer","format":"int64","description":"Recipient row id — use for PATCH/DELETE.","example":42},"userId":{"type":"integer","format":"int64","description":"Internal org member user id. Null for external stakeholders.","example":1024},"email":{"type":"string","description":"Email address that receives the alert (always present).","example":"cfo@acme.com"},"firstName":{"type":"string","description":"First name — from user-service for internal members; displayName for externals.","example":"Jane"},"profilePicURL":{"type":"string","description":"Profile picture URL — populated for internal members; null for externals."},"profilePicColor":{"type":"string","description":"Profile picture background color — populated for internal members; null for externals."},"provider":{"type":"string","description":"Auth provider of the internal member (local/google/etc). Null for externals."},"role":{"$ref":"#/components/schemas/OrgRoleDto","description":"Org role of the internal member. Null for externals."},"active":{"type":"boolean","description":"Whether this recipient currently receives threshold alerts."}}},"ProjectTaskUpdateRequest":{"type":"object","description":"Request object for updating a project task","properties":{"taskTitle":{"type":"string","description":"Title of the task","example":"Implement API endpoint"},"description":{"type":"string","description":"Detailed description of the task","example":"Create a REST API endpoint for user authentication"},"owners":{"type":"array","description":"List of owner IDs assigned to the task","example":[1,2,3],"items":{"type":"integer","format":"int64"}},"startDate":{"type":"string","format":"date-time","description":"Start date of the task","example":"2023-10-01T00:00:00.000Z"},"dueDate":{"type":"string","format":"date-time","description":"Due date of the task","example":"2023-10-15T00:00:00.000Z"},"noOfDays":{"type":"integer","format":"int32","description":"Duration in working days. When sent together with startDate or dueDate, the missing date is recomputed honouring the organisation's operational hours.","example":5,"minimum":1},"completion":{"type":"integer","format":"int32","description":"Completion percentage of the task","example":50},"status":{"type":"string","description":"Current status of the task","example":"In Progress"},"priority":{"type":"string","description":"Priority level of the task","example":"High"},"tags":{"type":"array","description":"Tags associated with the task","example":["backend","api"],"items":{"type":"string"}}}},"ProjectSubtaskUpdateRequest":{"type":"object","description":"Request object for updating a project subtask.","properties":{"taskTitle":{"type":"string","description":"Title of the subtask. Must be between 3 and 500 characters.","example":"Implement user authentication"},"description":{"type":"string","description":"Description of the subtask. Optional.","example":"This subtask involves implementing the user authentication module."},"owners":{"type":"array","description":"List of owner IDs assigned to the subtask. Optional.","example":[1,2,3],"items":{"type":"integer","format":"int64"}},"startDate":{"type":"string","format":"date-time","description":"Start date of the subtask. Optional.","example":"2023-10-01T00:00:00.000Z"},"dueDate":{"type":"string","format":"date-time","description":"Due date of the subtask. Optional.","example":"2023-10-15T00:00:00.000Z"},"noOfDays":{"type":"integer","format":"int32","description":"Duration in working days. When sent together with startDate or dueDate, the missing date is recomputed honouring the organisation's operational hours.","example":5,"minimum":1},"completion":{"type":"integer","format":"int32","description":"Completion percentage of the subtask. Must be between 0 and 100. Optional.","example":50,"maximum":100,"minimum":0},"status":{"type":"string","description":"Status of the subtask. Optional.","example":"In Progress"},"priority":{"type":"string","description":"Priority of the subtask. Optional.","example":"High"},"tags":{"type":"array","description":"List of tags associated with the subtask. Optional.","example":["backend","urgent"],"items":{"type":"string"}}}},"ApiSuccessResponseNotificationReadResponseDto":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"$ref":"#/components/schemas/NotificationReadResponseDto","description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"NotificationReadResponseDto":{"type":"object","properties":{"notificationIds":{"type":"array","items":{"type":"integer","format":"int64"}}}},"AppDto":{"type":"object","properties":{"appId":{"type":"string"},"clientName":{"type":"string"},"clientId":{"type":"string"},"clientSecret":{"type":"string"},"createdBy":{"type":"integer","format":"int64"},"createdDate":{"type":"string","format":"date-time"},"redirectUrls":{"type":"array","items":{"type":"string"}},"isActive":{"type":"boolean"},"isDeleted":{"type":"boolean"}}},"ResponseFormat":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"data":{},"errorCode":{"type":"integer","format":"int32"},"errors":{}}},"OrgMemberDto":{"type":"object","properties":{"orgMemberId":{"type":"integer","format":"int64"},"orgId":{"type":"integer","format":"int64"},"user":{"$ref":"#/components/schemas/UserDisplayDto"},"invitedBy":{"$ref":"#/components/schemas/InvitedUserDto"},"role":{"$ref":"#/components/schemas/OrgRoleDto"},"zohoBillingContactPersonId":{"type":"string"},"spaceCount":{"type":"integer","format":"int32"},"projectCount":{"type":"integer","format":"int32"},"taskCount":{"type":"integer","format":"int32"},"active":{"type":"boolean"},"isActive":{"type":"boolean"}}},"UserDisplayDto":{"type":"object","properties":{"userId":{"type":"integer","format":"int64"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"profilePicURL":{"type":"string"},"profilePicName":{"type":"string"},"profilePicColor":{"type":"string"},"provider":{"type":"string"},"newUser":{"type":"boolean"},"isTourCompleted":{"type":"boolean"},"about":{"type":"string"},"updateTime":{"type":"string","format":"date-time"},"expiryDate":{"type":"string","format":"date-time"},"status":{"type":"string"},"role":{"$ref":"#/components/schemas/OrgRoleDto"}}},"UserPreference":{"type":"object","properties":{"preferenceId":{"type":"integer","format":"int64"},"userId":{"type":"integer","format":"int64"},"userPreferences":{"$ref":"#/components/schemas/UserPreferenceProperties"}}},"UserPreferenceProperties":{"type":"object","properties":{"darkTheme":{"type":"boolean"},"notificationPreference":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}}},"taskPreference":{"type":"object","additionalProperties":{"type":"string"}}}},"PasswordUpdateDto":{"type":"object","properties":{"currentPassword":{"type":"string"},"newPassword":{"type":"string"}},"required":["newPassword"]},"UserDetailDto":{"type":"object","properties":{"userDetailId":{"type":"integer","format":"int64"},"userId":{"type":"integer","format":"int64"},"email":{"type":"string"},"phone":{"type":"string"},"country":{"type":"integer","format":"int64"},"state":{"type":"integer","format":"int64"},"city":{"type":"integer","format":"int64"},"address":{"type":"string"},"gender":{"type":"integer","format":"int64"},"weekStartDay":{"type":"string"},"timeZone":{"type":"string"},"dateFormat":{"type":"string"}}},"MemberPreferenceDto":{"type":"object","properties":{"preferenceId":{"type":"integer","format":"int64"},"orgId":{"type":"integer","format":"int64"},"spaceId":{"type":"integer","format":"int64"},"projectId":{"type":"integer","format":"int64"},"widgetProperties":{"type":"array","items":{"$ref":"#/components/schemas/WidgetProperties"}},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"createdTime":{"type":"string","format":"date-time"},"modifiedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedTime":{"type":"string","format":"date-time"},"filterId":{"type":"integer","format":"int64"},"groupBy":{"type":"string"},"customFieldId":{"type":"integer","format":"int64"},"calendarFilterId":{"type":"integer","format":"int64"}}},"WidgetProperties":{"type":"object","properties":{"widgetType":{"type":"string"},"widgetSection":{"type":"string"},"filterType":{"type":"string"},"widgetView":{"type":"string"},"projectIds":{"type":"array","items":{"type":"integer","format":"int64"}},"width":{"type":"integer","format":"int64"},"height":{"type":"integer","format":"int64"},"hidden":{"type":"boolean"}}},"UserReminderPreferenceDto":{"type":"object","properties":{"reminderEnabled":{"type":"boolean"},"reminderIntervalMinutes":{"type":"integer","format":"int32"},"reminderCount":{"type":"integer","format":"int32"},"autoStopTime":{"type":"string"},"autoStopTimeCustomized":{"type":"boolean"},"effectiveAutoStopTime":{"type":"string"},"autoStopSource":{"type":"string"}}},"TimeMapDto":{"type":"object","properties":{"timerData":{"$ref":"#/components/schemas/TimeTrackerDto"},"hours":{"type":"integer","format":"int64"},"minutes":{"type":"integer","format":"int64"}}},"AssignTaskRequest":{"type":"object","properties":{"taskId":{"type":"integer","format":"int64"},"parentTaskId":{"type":"integer","format":"int64"}}},"TimesheetFilterPreferenceDto":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"filterType":{"type":"string"},"groupBy":{"type":"string"},"timeMode":{"type":"string"},"customStartDate":{"type":"string","format":"date-time"},"customEndDate":{"type":"string","format":"date-time"},"searchCriteria":{"type":"string"}}},"TeamViewFilterPreferenceDto":{"type":"object","properties":{"section":{"type":"string","enum":["OVERDUE","PENDING","UPCOMING","COMPLETED"]},"dueDateRange":{"type":"string","enum":["ALL","TODAY","TOMORROW","YESTERDAY","THIS_WEEK","NEXT_WEEK","LAST_WEEK","THIS_MONTH","NEXT_MONTH","LAST_MONTH","NEXT_3_MONTHS","LAST_3_MONTHS","CUSTOM_RANGE"]}}},"DefaultProjectTaskStatusesTemplateDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"defaultProjectTaskStatusesTemplateId":{"type":"integer","format":"int64"},"defaultProjectTaskStatusesTemplateName":{"type":"string"},"spaceId":{"type":"integer","format":"int64"},"taskStatusTemplates":{"type":"array","items":{"$ref":"#/components/schemas/TaskStatusTemplateDto"}},"modified":{"type":"boolean"}}},"TaskStatusTemplateDto":{"type":"object","properties":{"taskStatusTemplateId":{"type":"integer","format":"int64"},"statusName":{"type":"string"},"color":{"type":"string"},"statusCategory":{"type":"string"},"statusOrder":{"type":"integer","format":"int64"},"globalTaskStatusesTemplateId":{"type":"integer","format":"int64"},"defaultProjectTaskStatusesTemplateId":{"type":"integer","format":"int64"},"default":{"type":"boolean"},"primary":{"type":"boolean"}}},"EmailContent":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"array","items":{"type":"string"}},"cc":{"type":"array","items":{"type":"string"}},"bcc":{"type":"array","items":{"type":"string"}},"receivedDate":{"type":"string","format":"date-time"},"subject":{"type":"string"},"body":{"type":"string"},"fromName":{"type":"string"}}},"TaskCommentDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"taskCommentId":{"type":"integer","format":"int64"},"comment":{"type":"string"},"content":{"$ref":"#/components/schemas/EmailContent"},"viaMail":{"type":"boolean"},"taskId":{"type":"integer","format":"int64"},"projectId":{"type":"integer","format":"int64"},"spaceId":{"type":"integer","format":"int64"},"parentCommentId":{"type":"integer","format":"int64"},"parentTaskId":{"type":"integer","format":"int64"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"mentionedUserIds":{"type":"array","items":{"type":"integer","format":"int64"}},"createdTime":{"type":"string","format":"date-time"},"modifiedTime":{"type":"string","format":"date-time"},"taskName":{"type":"string"},"projectName":{"type":"string"},"spaceName":{"type":"string"}}},"ReminderModeDto":{"type":"object","properties":{"modeId":{"type":"integer","format":"int64"},"modeName":{"type":"string"}}},"TaskReminderDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"reminderId":{"type":"integer","format":"int64"},"reminderName":{"type":"string"},"reminderDescription":{"type":"string"},"remindBefore":{"type":"string","format":"date-time"},"remindMode":{"$ref":"#/components/schemas/ReminderModeDto"},"taskId":{"type":"integer","format":"int64"},"remindToCreator":{"$ref":"#/components/schemas/UserMinimalDto"},"remindToOwners":{"type":"array","items":{"$ref":"#/components/schemas/UserMinimalDto"}},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"createdTime":{"type":"string","format":"date-time"},"modifiedTime":{"type":"string","format":"date-time"}}},"DailyRecurrenceSettings":{"type":"object","properties":{"skipWeekendsForDailyRecurrence":{"type":"boolean"}}},"DaysAfterRecurrenceSettings":{"type":"object","properties":{"recurAfterNDaysOfCompletion":{"type":"integer","format":"int32"}}},"FieldsToInclude":{"type":"object","properties":{"taskDescription":{"type":"boolean"},"taskOwners":{"type":"boolean"},"taskAttachments":{"type":"boolean"},"taskChecklist":{"type":"boolean"},"subtasks":{"type":"boolean"},"taskComments":{"type":"boolean"},"taskTags":{"type":"boolean"}}},"MonthlyRecurrenceSettings":{"type":"object","properties":{"monthlyRecurrenceMode":{"type":"string","enum":["ON_DATE","BY_WEEK"]},"recurMonthlyOnNthDate":{"type":"integer","format":"int32"},"recurMonthlyOnNthWeek":{"type":"integer","format":"int32"},"recurMonthlyOnDayOfWeek":{"type":"string","enum":["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]}}},"TaskRecurrenceDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"taskRecurrenceId":{"type":"integer","format":"int64"},"spaceId":{"type":"integer","format":"int64"},"projectId":{"type":"integer","format":"int64"},"taskId":{"type":"integer","format":"int64"},"createdBy":{"type":"integer","format":"int64"},"recurrenceInterval":{"type":"integer","format":"int64"},"recurrenceIntervalUnit":{"type":"string","enum":["DAYS","MONTHS","WEEKS","YEARS","DAYS_AFTER"]},"referenceDate":{"type":"integer","format":"int64"},"nextRecurrenceDate":{"type":"integer","format":"int64"},"recurrenceEndDate":{"type":"integer","format":"int64"},"currentNoOfRecurrences":{"type":"integer","format":"int64"},"noOfRecurrences":{"type":"integer","format":"int64"},"isCustom":{"type":"boolean"},"createTaskForEveryRecurrence":{"type":"boolean"},"recurIndefinitely":{"type":"boolean"},"recurringTriggerEvent":{"type":"string","enum":["WHEN_TASK_CLOSED","ON_SCHEDULE"]},"statusIdToUpdateTo":{"type":"integer","format":"int64"},"includeFields":{"$ref":"#/components/schemas/FieldsToInclude"},"isRecurrenceActive":{"type":"boolean"},"dailyRecurrenceSettings":{"$ref":"#/components/schemas/DailyRecurrenceSettings"},"weeklyRecurrenceSettings":{"$ref":"#/components/schemas/WeeklyRecurrenceSettings"},"monthlyRecurrenceSettings":{"$ref":"#/components/schemas/MonthlyRecurrenceSettings"},"yearlyRecurrenceSettings":{"$ref":"#/components/schemas/YearlyRecurrenceSettings"},"daysAfterRecurrenceSettings":{"$ref":"#/components/schemas/DaysAfterRecurrenceSettings"}}},"WeeklyRecurrenceSettings":{"type":"object","properties":{"recurWeeklyOnWeekDays":{"type":"array","items":{"type":"string","enum":["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]}}}},"YearlyRecurrenceSettings":{"type":"object","properties":{"recurYearlyOnMonth":{"type":"string","enum":["JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE","JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER"]},"recurYearlyOnDayOfMonth":{"type":"integer","format":"int32"}}},"TaskListDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"taskListId":{"type":"integer","format":"int64"},"taskListName":{"type":"string"},"description":{"type":"string"},"createdBy":{"type":"integer","format":"int64"},"modifiedBy":{"type":"integer","format":"int64"}}},"ProjectCustomFieldDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"projectCustomFieldId":{"type":"integer","format":"int64"},"level":{"type":"string","enum":["ORG","SPACE","LOCAL"]},"spaceId":{"type":"integer","format":"int64"},"projectId":{"type":"integer","format":"int64"},"associatedId":{"type":"integer","format":"int64"},"fieldName":{"type":"string"},"fieldType":{"type":"string"},"fieldIcon":{"type":"string"},"description":{"type":"string"},"order":{"type":"integer","format":"int64"},"active":{"type":"boolean"},"value":{},"selectedOptionIds":{"type":"array","items":{"type":"integer","format":"int64"}},"options":{"type":"array","items":{"$ref":"#/components/schemas/ProjectCustomFieldOptionDto"}},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"createdTime":{"type":"string","format":"date-time"},"modifiedTime":{"type":"string","format":"date-time"}}},"ProjectCustomFieldOptionDto":{"type":"object","properties":{"optionId":{"type":"integer","format":"int64"},"optionName":{"type":"string","minLength":1},"color":{"type":"string"},"index":{"type":"integer","format":"int64"},"projectCustomFieldId":{"type":"integer","format":"int64"}},"required":["optionName"]},"UpdateSkillDto":{"type":"object","properties":{"skillName":{"type":"string","maxLength":100,"minLength":2}},"required":["skillName"]},"UpdateResourceAllocationDto":{"type":"object","properties":{"title":{"type":"string"},"departmentId":{"type":"integer","format":"int64"},"skillIds":{"type":"array","items":{"type":"integer","format":"int64"}},"internalCostPerHour":{"type":"number","format":"double"},"billableRatePerHour":{"type":"number","format":"double"},"dailyCapacityHours":{"type":"number","format":"double"},"billableRatioTarget":{"type":"number","format":"double"}}},"OrganizationDto":{"type":"object","properties":{"orgId":{"type":"integer","format":"int64"},"orgName":{"type":"string","maxLength":150,"minLength":3},"industryType":{"type":"string","maxLength":100,"minLength":3},"orgPicColor":{"type":"string"},"createdUserId":{"type":"integer","format":"int64"},"isDeleted":{"type":"boolean"},"profilePicURL":{"type":"string"},"profilePicName":{"type":"string"},"members":{"type":"array","items":{"$ref":"#/components/schemas/OrgMemberDto"}},"paddleCustomerId":{"type":"string"},"paddleBusinessId":{"type":"string"}}},"UpdateOperationalHoursRequest":{"type":"object","properties":{"scheduleType":{"type":"string","enum":["ROUND_THE_CLOCK","STANDARD"]},"standardStartTime":{"type":"string"},"standardEndTime":{"type":"string"},"orgTimeZone":{"type":"string","maxLength":64,"minLength":0},"deferNotificationsOutsideWorkingHours":{"type":"boolean"},"workingDays":{"type":"array","items":{"$ref":"#/components/schemas/UpdateWorkingDayRequest"},"maxItems":7,"minItems":7}},"required":["scheduleType","standardEndTime","standardStartTime","workingDays"]},"UpdateWorkingDayRequest":{"type":"object","properties":{"dayOfWeek":{"type":"string","enum":["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]},"dayType":{"type":"string","enum":["ROUND_THE_CLOCK","STANDARD","CUSTOM","NON_WORKING"]},"startTime":{"type":"string"},"endTime":{"type":"string"}},"required":["dayOfWeek","dayType"]},"TaskAppleEventSync":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"syncId":{"type":"integer","format":"int64"},"allTask":{"type":"boolean"},"generalTask":{"type":"boolean"},"spaceIds":{"type":"array","items":{"type":"integer","format":"int64"}},"projectIds":{"type":"array","items":{"type":"integer","format":"int64"}},"includingCompleted":{"type":"boolean"},"createdTime":{"type":"string","format":"date-time"},"modifiedTime":{"type":"string","format":"date-time"}}},"UpsertHolidayRequest":{"type":"object","properties":{"holidayDate":{"type":"string","format":"date"},"description":{"type":"string","maxLength":255,"minLength":0},"recurring":{"type":"boolean"}},"required":["holidayDate","recurring"]},"TaskGoogleEventSync":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"syncId":{"type":"integer","format":"int64"},"allTask":{"type":"boolean"},"generalTask":{"type":"boolean"},"spaceIds":{"type":"array","items":{"type":"integer","format":"int64"}},"projectIds":{"type":"array","items":{"type":"integer","format":"int64"}},"includingCompleted":{"type":"boolean"},"createdTime":{"type":"string","format":"date-time"},"modifiedTime":{"type":"string","format":"date-time"}}},"GoogleCalendarEventDto":{"type":"object","properties":{"summary":{"type":"string"},"description":{"type":"string"},"startDateTime":{"type":"string","format":"date-time"},"endDateTime":{"type":"string","format":"date-time"},"allDay":{"type":"boolean"},"timeZone":{"type":"string"},"meetingRequired":{"type":"boolean"},"attendees":{"type":"array","items":{"type":"string"}},"location":{"type":"string"},"reminders":{"type":"array","items":{"type":"object","additionalProperties":{}}},"visibility":{"type":"string"},"showAsBusy":{"type":"boolean"}}},"Filter":{"type":"object","properties":{"field":{"type":"string"},"condition":{"type":"string","enum":["IS","ISNOT","CONTAINS","NOTCONTAINS","STARTSWITH","ENDSWITH","BEFORE","BETWEEN","AFTER","NOTBETWEEN","TODAY","TOMORROW","ISEMPTY","ISNOTEMPTY"]},"value":{}}},"FilterList":{"type":"object","properties":{"filters":{"type":"array","items":{"$ref":"#/components/schemas/Filter"}},"operator":{"type":"string"}}},"FilterViewDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"filterId":{"type":"integer","format":"int64"},"filterName":{"type":"string"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"filterData":{"$ref":"#/components/schemas/FilterList"},"projectId":{"type":"integer","format":"int64"},"spaceId":{"type":"integer","format":"int64"},"public":{"type":"boolean"},"default":{"type":"boolean"}}},"CalendarEvent":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"eventId":{"type":"integer","format":"int64"},"eventName":{"type":"string"},"createdDate":{"type":"string","format":"date-time"},"modifiedDate":{"type":"string","format":"date-time"},"startDate":{"type":"string","format":"date-time"},"endDate":{"type":"string","format":"date-time"},"description":{"type":"string","maxLength":4000,"minLength":0},"organiser":{"type":"integer","format":"int64"},"guests":{"type":"array","items":{"type":"integer","format":"int64"}},"allDay":{"type":"boolean"},"timeZone":{"type":"string"}}},"EventReminder":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"eventReminderId":{"type":"integer","format":"int64"},"eventReminderBefore":{"type":"string","format":"date-time"},"eventReminderModes":{"type":"array","items":{"type":"string"},"maxItems":2147483647,"minItems":1}},"required":["eventReminderBefore","eventReminderModes"]},"UpdateDepartmentDto":{"type":"object","properties":{"departmentName":{"type":"string","maxLength":100,"minLength":2}},"required":["departmentName"]},"ContactNotesDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"notesId":{"type":"integer","format":"int64"},"notes":{"type":"string"},"contactId":{"type":"integer","format":"int64"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"createdTime":{"type":"string","format":"date-time"},"modifiedTime":{"type":"string","format":"date-time"}}},"ColumnPreferenceDto":{"type":"object","properties":{"preferenceId":{"type":"integer","format":"int64"},"orgId":{"type":"integer","format":"int64"},"spaceId":{"type":"integer","format":"int64"},"projectId":{"type":"integer","format":"int64"},"preferenceProperties":{"type":"array","items":{"$ref":"#/components/schemas/ColumnPreferenceProperties"}},"createdTime":{"type":"string","format":"date-time"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedTime":{"type":"string","format":"date-time"},"modifiedBy":{"$ref":"#/components/schemas/UserMinimalDto"}}},"ColumnPreferenceProperties":{"type":"object","properties":{"columnName":{"type":"string"},"columnType":{"type":"string"},"uiLabel":{"type":"string"},"width":{"type":"integer","format":"int64"},"hidden":{"type":"boolean"},"fixed":{"type":"boolean"},"columnOrder":{"type":"integer","format":"int64"},"default":{"type":"boolean"}}},"AccountDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"accountId":{"type":"integer","format":"int64"},"accountName":{"type":"string"},"primaryContact":{"$ref":"#/components/schemas/ContactLabelDto"},"email":{"type":"string"},"website":{"type":"string"},"phone":{"$ref":"#/components/schemas/ContactProperties"},"profilePicUrl":{"type":"string"},"profilePicName":{"type":"string"},"profilePicColor":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"country":{"type":"string"},"zipCode":{"type":"string"},"description":{"type":"string"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"createdTime":{"type":"string","format":"date-time"},"modifiedTime":{"type":"string","format":"date-time"},"contacts":{"type":"array","items":{"$ref":"#/components/schemas/ContactLabelDto"}},"accountTags":{"type":"array","items":{"$ref":"#/components/schemas/AccountTagDto"}},"projectCount":{"type":"integer","format":"int32"}}},"AccountTagDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"accountTagId":{"type":"integer","format":"int64"},"tagName":{"type":"string"},"color":{"type":"string"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"modifiedBy":{"$ref":"#/components/schemas/UserMinimalDto"},"createdTime":{"type":"string","format":"date-time"},"modifiedTime":{"type":"string","format":"date-time"}}},"ContactLabelDto":{"type":"object","properties":{"contactId":{"type":"integer","format":"int64"},"contactName":{"type":"string"},"email":{"type":"string"},"profilePicURL":{"type":"string"},"profilePicName":{"type":"string"},"profilePicColor":{"type":"string"}}},"RangeTimerRequest":{"type":"object","description":"Payload to log a time range for a task, including start/end timestamps, billing, and optional notes.","properties":{"startTime":{"type":"integer","format":"int64","description":"Start time of the work (epoch millis)","example":1754505900000},"endTime":{"type":"integer","format":"int64","description":"End time of the work (epoch millis)","example":1754551800000},"billingType":{"type":"boolean","description":"Whether the time is billable","example":true},"notes":{"type":"string","description":"Optional notes describing the work","example":"Pair programming and debugging session"}},"required":["billingType","endTime","startTime"]},"ManualTimerRequest":{"type":"object","description":"Payload to add manual time entry for a task. Includes duration, start time, billing info, and optional notes.","properties":{"hours":{"type":"integer","format":"int32","description":"Hours to be logged manually","example":1},"minutes":{"type":"integer","format":"int32","description":"Minutes to be logged manually","example":30},"startTime":{"type":"integer","format":"int64","description":"Epoch timestamp indicating when the task work started","example":1754503994081},"billingType":{"type":"boolean","description":"Whether the logged time is billable","example":true},"notes":{"type":"string","description":"Optional notes describing the work done","example":"Worked on UI bug fixing"}},"required":["billingType","hours","minutes","startTime"]},"TaskCreateRequest":{"type":"object","description":"DTO for creating a new task. This object is used to transfer data from the client to the server when creating a new task.","properties":{"taskTitle":{"type":"string","description":"Title of the task. Must be between 3 and 500 characters.","example":"Implement authentication module","maxLength":500,"minLength":3},"description":{"type":"string","description":"Description of the task.","example":"This task involves implementing the authentication module for the application."},"owners":{"type":"array","description":"List of owner IDs assigned to the task.","example":[1,2,3],"items":{"type":"integer","format":"int64"}},"startDate":{"type":"string","format":"date-time","description":"Start date of the task.","example":"2023-10-01T00:00:00.000Z"},"dueDate":{"type":"string","format":"date-time","description":"Due date of the task.","example":"2023-10-15T00:00:00.000Z"},"noOfDays":{"type":"integer","format":"int32","description":"Duration in working days. When sent together with startDate or dueDate, the missing date is computed by honouring the organisation's operational hours.","example":5,"minimum":1},"completion":{"type":"integer","format":"int32","description":"Completion percentage of the task. Must be between 0 and 100.","example":50,"maximum":100,"minimum":0},"status":{"type":"string","description":"Status of the task.","example":"In Progress"},"priority":{"type":"string","description":"Priority of the task.","example":"High"},"tags":{"type":"array","description":"List of tags associated with the task.","example":["backend","urgent"],"items":{"type":"string"}}}},"ChecklistCreateRequest":{"type":"object","description":"Request object for creating a checklist item on a task or a subtask.","properties":{"checkListName":{"type":"string","description":"Name of the checklist item. Must be between 3 and 150 characters.","example":"Review the API contract","maxLength":150,"minLength":3},"assigneeId":{"type":"integer","format":"int64","description":"User ID the checklist item is assigned to. The user must be an active member of the organisation. Omit to leave the item unassigned.","example":42}},"required":["checkListName"]},"FileUploadDto":{"type":"object","properties":{"files":{"type":"array","items":{"type":"string","format":"binary"},"maxItems":10,"minItems":1}},"required":["files"]},"ApiSuccessResponseListAttachmentDto":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"type":"array","description":"Payload containing the response data","items":{"$ref":"#/components/schemas/AttachmentDto"}},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"GeneralSubtaskCreateRequest":{"type":"object","description":"Request object for creating a new personal subtask.","properties":{"taskTitle":{"type":"string","description":"Title of the subtask. Must be between 3 and 500 characters.","example":"Implement user authentication","maxLength":500,"minLength":3},"description":{"type":"string","description":"Description of the subtask.","example":"This subtask involves implementing the user authentication module."},"owners":{"type":"array","description":"List of owner IDs assigned to the subtask.","example":[1,2,3],"items":{"type":"integer","format":"int64"}},"startDate":{"type":"string","format":"date-time","description":"Start date of the subtask.","example":"2023-10-01T00:00:00.000Z"},"dueDate":{"type":"string","format":"date-time","description":"Due date of the subtask.","example":"2023-10-15T00:00:00.000Z"},"noOfDays":{"type":"integer","format":"int32","description":"Duration in working days. When sent together with startDate or dueDate, the missing date is computed by honouring the organisation's operational hours.","example":5,"minimum":1},"completion":{"type":"integer","format":"int32","description":"Completion percentage of the subtask. Must be between 0 and 100.","example":50,"maximum":100,"minimum":0},"status":{"type":"string","description":"Status of the subtask.","example":"In Progress"},"priority":{"type":"string","description":"Priority of the subtask.","example":"High"},"tags":{"type":"array","description":"List of tags associated with the subtask.","example":["backend","urgent"],"items":{"type":"string"}}}},"SpaceCreateRequest":{"type":"object","description":"Request object for creating a new space","properties":{"spaceName":{"type":"string","description":"Name of the space","example":"Project Management Space"},"description":{"type":"string","description":"Description of the space","example":"This space is for managing project tasks"},"spaceType":{"type":"string","description":"Type of the space","enum":["Public_To_All","Public_To_Request","Private"],"example":"Public_To_All","pattern":"^(Public_To_All|Public_To_Request|Private)$"}},"required":["spaceName","spaceType"]},"ProjectCreateRequest":{"type":"object","description":"Request object for creating a new project","properties":{"name":{"type":"string","description":"Name of the project","example":"Project Alpha"},"description":{"type":"string","description":"Description of the project","example":"This is a sample project"},"isPublic":{"type":"boolean","description":"Indicates if the project is public","example":true},"startDate":{"type":"string","format":"date-time","description":"Start date of the project","example":"2023-01-01"},"dueDate":{"type":"string","format":"date-time","description":"Due date of the project","example":"2023-12-31"},"status":{"type":"string","description":"Status of the project","example":"In Progress"},"priority":{"type":"string","description":"Priority of the project","example":"High"},"health":{"type":"string","description":"Health of the project","example":"Good"},"projectTags":{"type":"array","description":"List of tags associated with the project","example":["tag1","tag2"],"items":{"type":"string"}},"contact":{"type":"integer","format":"int64","description":"Contact ID associated with the project","example":12345},"actualStartDate":{"type":"string","format":"date-time","description":"Actual start date of the project","example":"2023-01-05"},"actualEndDate":{"type":"string","format":"date-time","description":"Actual end date of the project","example":"2023-12-15"},"allocatedBudget":{"type":"number","format":"double","description":"Budget allocated for the project","example":500000},"billableCost":{"type":"number","format":"double","description":"Billable cost of the project so far","example":200000},"nonBillableCost":{"type":"number","format":"double","description":"Non-billable cost of the project so far","example":50000},"actualCost":{"type":"number","format":"double","description":"Actual cost of the project (billable + non-billable)","example":250000},"projectType":{"type":"string","description":"Commercial model of the project. One of FIXED_FEE, TIME_AND_MATERIAL, RETAINER. Nullable for legacy/undecided projects.","example":"FIXED_FEE"},"contractValue":{"type":"number","format":"double","description":"Contract value for Fixed Fee projects (client-facing amount). Required semantically when projectType=FIXED_FEE.","example":45000},"alertThresholdPercent":{"type":"integer","format":"int32","description":"Percentage of contract or NTE cap consumed at which the project is flagged AT_RISK. 1..100. Shared by FIXED_FEE (dollars) and TIME_AND_MATERIAL (hours).","example":80,"maximum":100,"minimum":1},"nteCapHours":{"type":"integer","format":"int64","description":"Not-to-exceed cap in milliseconds for Time & Material projects (matches actualHours unit). Required semantically when projectType=TIME_AND_MATERIAL.","example":720000000},"retainerBudgetPeriod":{"type":"string","description":"Retainer budget period. One of MONTHLY, QUARTERLY, ANNUALLY. Required semantically when projectType=RETAINER.","example":"MONTHLY"},"retainerBudgetedHours":{"type":"integer","format":"int64","description":"Per-cycle hour budget in milliseconds for Retainer projects (matches actualHours unit). Required semantically when projectType=RETAINER.","example":540000000},"retainerFee":{"type":"number","format":"double","description":"Per-cycle retainer fee in USD (base currency; converted at read). Required semantically when projectType=RETAINER.","example":8000},"retainerCountHoursMode":{"type":"string","description":"Which time entries count toward the retainer hour bucket. One of BOTH, BILLABLE_ONLY, NON_BILLABLE_ONLY. Defaults to BOTH.","example":"BOTH"},"retainerCountCostMode":{"type":"string","description":"Which time entries count toward the retainer cost total. One of BOTH, BILLABLE_ONLY, NON_BILLABLE_ONLY. Defaults to BOTH.","example":"BOTH"},"retainerCycleAnchor":{"type":"string","format":"date","description":"First day of the first retainer cycle in yyyy-MM-dd format. Falls back to project startDate, then createdTime, then today.","example":"2024-01-01"}},"required":["name"]},"ProjectTaskCreateRequest":{"type":"object","description":"Request object for creating a new project task.","properties":{"taskTitle":{"type":"string","description":"Title of the task. Must be between 3 and 500 characters.","example":"Implement login functionality","maxLength":500,"minLength":3},"description":{"type":"string","description":"Description of the task. Optional.","example":"This task involves implementing the login functionality for the application."},"owners":{"type":"array","description":"List of owner IDs assigned to the task. Optional.","example":[1,2,3],"items":{"type":"integer","format":"int64"}},"startDate":{"type":"string","format":"date-time","description":"Start date of the task. Optional.","example":"2023-10-01T00:00:00.000Z"},"dueDate":{"type":"string","format":"date-time","description":"Due date of the task. Optional.","example":"2023-10-15T00:00:00.000Z"},"noOfDays":{"type":"integer","format":"int32","description":"Duration in working days. When sent together with startDate or dueDate, the missing date is computed by honouring the organisation's operational hours.","example":5,"minimum":1},"completion":{"type":"integer","format":"int32","description":"Completion percentage of the task. Must be between 0 and 100. Optional.","example":75,"maximum":100,"minimum":0},"status":{"type":"string","description":"Status of the task. Optional.","example":"In Progress"},"priority":{"type":"string","description":"Priority of the task. Optional.","example":"High"},"tags":{"type":"array","description":"List of tags associated with the task. Optional.","example":["backend","urgent"],"items":{"type":"string"}}}},"ProjectSubtaskCreateRequest":{"type":"object","description":"Request object for creating a new project subtask.","properties":{"taskTitle":{"type":"string","description":"Title of the subtask. Must be between 3 and 500 characters.","example":"Implement user authentication","maxLength":500,"minLength":3},"description":{"type":"string","description":"Description of the subtask. Optional.","example":"This subtask involves implementing the user authentication module."},"owners":{"type":"array","description":"List of owner IDs assigned to the subtask. Optional.","example":[1,2,3],"items":{"type":"integer","format":"int64"}},"startDate":{"type":"string","format":"date-time","description":"Start date of the subtask. Optional.","example":"2023-10-01T00:00:00.000Z"},"dueDate":{"type":"string","format":"date-time","description":"Due date of the subtask. Optional.","example":"2023-10-15T00:00:00.000Z"},"noOfDays":{"type":"integer","format":"int32","description":"Duration in working days. When sent together with startDate or dueDate, the missing date is recomputed honouring the organisation's operational hours.","example":5,"minimum":1},"completion":{"type":"integer","format":"int32","description":"Completion percentage of the subtask. Must be between 0 and 100. Optional.","example":50,"maximum":100,"minimum":0},"status":{"type":"string","description":"Status of the subtask. Optional.","example":"In Progress"},"priority":{"type":"string","description":"Priority of the subtask. Optional.","example":"High"},"tags":{"type":"array","description":"List of tags associated with the subtask. Optional.","example":["backend","urgent"],"items":{"type":"string"}}}},"GlobalTaskStatusesTemplateDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"globalTaskStatusesTemplateId":{"type":"integer","format":"int64"},"globalTaskStatusesTemplateName":{"type":"string"},"taskStatusTemplates":{"type":"array","items":{"$ref":"#/components/schemas/TaskStatusTemplateDto"}},"custom":{"type":"boolean"}}},"ThresholdAlertRecipientCreateRequest":{"type":"object","description":"Add a recipient to a project's Fixed Fee threshold-alert list. Provide userId for internal members, or email (+ optional displayName) for external stakeholders.","properties":{"userId":{"type":"integer","format":"int64","description":"Internal org member user id. Set for internal members.","example":1024},"email":{"type":"string","format":"email","description":"Email address for external stakeholders (CEO, finance manager, etc). Ignored when userId is set.","example":"cfo@acme.com","maxLength":320,"minLength":0},"displayName":{"type":"string","description":"Optional freeform label for external stakeholders. Ignored for internal members (their name comes from user service).","example":"Jane Roe (CFO)","maxLength":255,"minLength":0}}},"ThresholdAlertRecipientBulkCreateRequest":{"type":"object","description":"Bulk-add recipients to a project's Fixed Fee threshold-alert list. Per-item outcome — partial success is normal.","properties":{"recipients":{"type":"array","description":"One entry per recipient to add. Deduplicated by email — a repeated email in the same batch will succeed once and be reported as already-configured on the second occurrence.","items":{"$ref":"#/components/schemas/ThresholdAlertRecipientCreateRequest"},"maxItems":50,"minItems":0}},"required":["recipients"]},"Budget":{"type":"object","properties":{"narrative":{"type":"string"},"allocated":{"type":"number","format":"double"},"billable":{"type":"number","format":"double"},"nonBillable":{"type":"number","format":"double"},"total":{"type":"number","format":"double"},"remaining":{"type":"number","format":"double"},"spentPct":{"type":"integer","format":"int32"},"currencyCode":{"type":"string"},"currencySymbol":{"type":"string"}}},"ExecutiveProjectSummaryDto":{"type":"object","properties":{"header":{"$ref":"#/components/schemas/Header"},"projectOverview":{"$ref":"#/components/schemas/ProjectOverview"},"overview":{"type":"string"},"healthOverall":{"$ref":"#/components/schemas/RagIndicator"},"healthSchedule":{"$ref":"#/components/schemas/RagIndicator"},"healthBudget":{"$ref":"#/components/schemas/RagIndicator"},"taskProgress":{"$ref":"#/components/schemas/TaskProgress"},"velocity":{"$ref":"#/components/schemas/Velocity"},"budget":{"$ref":"#/components/schemas/Budget"},"timeUtilizationNarrative":{"type":"string"},"timeUtilization":{"type":"array","items":{"$ref":"#/components/schemas/TimeUtilizationRow"}},"risks":{"type":"array","items":{"$ref":"#/components/schemas/Risk"}},"accomplishments":{"type":"array","items":{"type":"string"}},"nextSteps":{"type":"array","items":{"type":"string"}},"aiAssessment":{"type":"string"}}},"GanttTask":{"type":"object","properties":{"taskId":{"type":"integer","format":"int64"},"title":{"type":"string"},"startDate":{"type":"string"},"dueDate":{"type":"string"},"completed":{"type":"boolean"},"status":{"type":"string"},"priority":{"type":"string"}}},"Header":{"type":"object","properties":{"projectName":{"type":"string"},"spaceName":{"type":"string"},"reportDate":{"type":"string"}}},"ProjectOverview":{"type":"object","properties":{"status":{"type":"string"},"statusColor":{"type":"string"},"priority":{"type":"string"},"priorityColor":{"type":"string"},"health":{"type":"string"},"healthColor":{"type":"string"},"startDate":{"type":"string"},"dueDate":{"type":"string"},"actualStartDate":{"type":"string"},"actualEndDate":{"type":"string"},"completion":{"type":"integer","format":"int32"},"memberCount":{"type":"integer","format":"int32"},"overdue":{"type":"boolean"},"teamRoles":{"type":"array","items":{"type":"string"}},"members":{"type":"array","items":{"$ref":"#/components/schemas/UserMinimalDto"}}}},"RagIndicator":{"type":"object","properties":{"rag":{"type":"string","enum":["GREEN","AMBER","RED","UNKNOWN"]},"label":{"type":"string"},"reason":{"type":"string"},"color":{"type":"string"}}},"Risk":{"type":"object","properties":{"title":{"type":"string"},"type":{"type":"string","enum":["RISK","ISSUE"]},"severity":{"type":"string","enum":["HIGH","MEDIUM","LOW"]},"likelihood":{"type":"string","enum":["HIGH","MEDIUM","LOW"]},"statement":{"type":"string"},"priorityLabel":{"type":"string"},"priorityColor":{"type":"string"},"impact":{"type":"string"},"action":{"type":"string"}}},"TaskProgress":{"type":"object","properties":{"narrative":{"type":"string"},"totalTasks":{"type":"integer","format":"int32"},"completedTasks":{"type":"integer","format":"int32"},"pendingTasks":{"type":"integer","format":"int32"},"overdueCount":{"type":"integer","format":"int32"},"openCount":{"type":"integer","format":"int32"},"lateCompletionCount":{"type":"integer","format":"int32"},"averageCompletionDays":{"type":"number","format":"double"},"averageLateCompletionDays":{"type":"number","format":"double"},"averageOverdueDays":{"type":"number","format":"double"},"averageCompletionDaysAvailable":{"type":"boolean"},"averageLateCompletionDaysAvailable":{"type":"boolean"},"averageOverdueDaysAvailable":{"type":"boolean"},"gantt":{"type":"array","items":{"$ref":"#/components/schemas/GanttTask"}}}},"TimeUtilizationRow":{"type":"object","properties":{"member":{"type":"string"},"role":{"type":"string"},"loggedHours":{"type":"number","format":"double"},"billableHours":{"type":"number","format":"double"},"userObj":{"$ref":"#/components/schemas/UserMinimalDto"}}},"Velocity":{"type":"object","properties":{"narrative":{"type":"string"},"current":{"type":"integer","format":"int32"},"previous":{"type":"integer","format":"int32"},"trendPct":{"type":"integer","format":"int32"},"trendAvailable":{"type":"boolean"},"remaining":{"type":"integer","format":"int32"},"etaAvailable":{"type":"boolean"},"etaWeeks":{"type":"number","format":"double"},"targetDateAvailable":{"type":"boolean"},"runwayWeeks":{"type":"number","format":"double"},"overdueWorkingDays":{"type":"integer","format":"int32"},"weeklyTrend":{"type":"array","items":{"$ref":"#/components/schemas/WeekPoint"}}}},"WeekPoint":{"type":"object","properties":{"week":{"type":"string"},"count":{"type":"integer","format":"int32"}}},"CreateSkillDto":{"type":"object","properties":{"skillName":{"type":"string","maxLength":100,"minLength":2}},"required":["skillName"]},"PasswordResetDto":{"type":"object","properties":{"newPassword":{"type":"string"},"confirmPassword":{"type":"string"},"token":{"type":"string"}}},"UploadedPartDto":{"type":"object","properties":{"attachmentId":{"type":"integer","format":"int64"},"partNumber":{"type":"integer","format":"int32"},"partSize":{"type":"integer","format":"int64"},"etag":{"type":"string"}}},"UserDto":{"type":"object","properties":{"email":{"type":"string"},"redirect":{"type":"string"},"code":{"type":"string"},"plan":{"type":"string","enum":["STARTER_PLAN","PREMIUM_FREE_TRIAL","POWER_PACK_FREE_TRIAL","PREMIUM_PLAN","APPSUMO_PLAN","POWER_PACK_PLAN","LIFETIME_PACK_PLAN"]}},"required":["email"]},"InviteUserDto":{"type":"object","properties":{"email":{"type":"string","format":"email"},"userName":{"type":"string","maxLength":30,"minLength":3},"newPassword":{"type":"string"},"redirect":{"type":"string"},"token":{"type":"string"}},"required":["email","newPassword","userName"]},"CreateDepartmentDto":{"type":"object","properties":{"departmentName":{"type":"string","maxLength":100,"minLength":2}},"required":["departmentName"]},"AddCurrencyRequest":{"type":"object","properties":{"currencyCode":{"type":"string","minLength":1,"pattern":"[A-Za-z]{3}"},"currencySymbol":{"type":"string","maxLength":8,"minLength":0}},"required":["currencyCode"]},"UploadDto":{"type":"object","properties":{"attachmentId":{"type":"integer","format":"int64"},"key":{"type":"string"},"uploadId":{"type":"string"},"parts":{"type":"array","items":{"$ref":"#/components/schemas/UploadedPartDto"}}}},"StreamingResponseBody":{},"UserActivity":{"type":"object","properties":{"userActivityKey":{"$ref":"#/components/schemas/UserActivityKey"},"parameters":{"type":"string"},"referer":{"type":"string"},"headers":{"type":"object","additionalProperties":{"type":"string"}},"serverName":{"type":"string"},"serverPort":{"type":"integer","format":"int32"},"remoteAddr":{"type":"string"},"remoteHost":{"type":"string"},"remotePort":{"type":"integer","format":"int32"},"localName":{"type":"string"},"localAddr":{"type":"string"},"localPort":{"type":"integer","format":"int32"},"requestBody":{"type":"string"},"responseBody":{"type":"string"},"buildVersion":{"type":"integer","format":"int64"}}},"UserActivityKey":{"type":"object","properties":{"userId":{"type":"integer","format":"int64"},"orgId":{"type":"integer","format":"int64"},"url":{"type":"string"},"uri":{"type":"string"},"time":{"type":"string","format":"date-time"},"httpMethod":{"type":"string"}}},"ThresholdAlertRecipientUpdateRequest":{"type":"object","description":"Toggle whether a configured recipient currently receives threshold alerts.","properties":{"active":{"type":"boolean","description":"True to resume alerts, false to pause without removing.","example":true}},"required":["active"]},"ToggleOperationalHoursRequest":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]},"ApiSuccessResponseTaskTimerListDto":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"$ref":"#/components/schemas/TaskTimerListDto","description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"TaskTimerListDto":{"type":"object","properties":{"occupiedTime":{"type":"integer","format":"int64"},"timers":{"type":"array","items":{"$ref":"#/components/schemas/TimeTrackerDto"}}}},"ApiSuccessResponseListTimeTrackerDto":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"type":"array","description":"Payload containing the response data","items":{"$ref":"#/components/schemas/TimeTrackerDto"}},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"ApiSuccessResponseTimesheetReportResponse":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"$ref":"#/components/schemas/TimesheetReportResponse","description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"GlobalTimeReportDto":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"type":{"type":"string"},"user":{"$ref":"#/components/schemas/UserMinimalDto"},"spaceId":{"type":"integer","format":"int64"},"spaceName":{"type":"string"},"startedTime":{"type":"string","format":"date-time"},"createdTime":{"type":"string","format":"date-time"},"budgetedHours":{"type":"integer","format":"int64"},"billableTime":{"type":"integer","format":"int64"},"nonBillableTime":{"type":"integer","format":"int64"},"actualHours":{"type":"integer","format":"int64"},"budgetedCost":{"type":"number","format":"double"},"billableCost":{"type":"number","format":"double"},"nonBillableCost":{"type":"number","format":"double"},"actualCost":{"type":"number","format":"double"},"notes":{"type":"string"},"profilePic":{"type":"string"},"luminance":{"type":"string"}}},"TimesheetReportResponse":{"type":"object","description":"Paginated timesheet report response","properties":{"items":{"type":"array","description":"List of timesheet report items grouped by the specified groupBy parameter","items":{"$ref":"#/components/schemas/GlobalTimeReportDto"}},"totalCount":{"type":"integer","format":"int64","description":"Total number of distinct groups (projects or members)","example":25},"page":{"type":"integer","format":"int32","description":"Current page number (zero-based)","example":0},"size":{"type":"integer","format":"int32","description":"Page size","example":20},"totalPages":{"type":"integer","format":"int32","description":"Total number of pages","example":2},"hasNext":{"type":"boolean","description":"Whether there is a next page","example":true},"hasPrevious":{"type":"boolean","description":"Whether there is a previous page","example":false}}},"ApiSuccessResponseListProjectTimesheetResponse":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"type":"array","description":"Payload containing the response data","items":{"$ref":"#/components/schemas/ProjectTimesheetResponse"}},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"ProjectTimesheetResponse":{"type":"object","description":"Timesheet data grouped by user for a project","properties":{"user":{"$ref":"#/components/schemas/UserMinimalDto","description":"User details"},"occupiedTime":{"type":"integer","format":"int64","description":"Total tracked time in milliseconds for this user","example":7200000},"timeTrackers":{"type":"array","description":"List of time entries for this user","items":{"$ref":"#/components/schemas/TimeTrackerMinimalDto"}}}},"TimeTrackerMinimalDto":{"type":"object","properties":{"trackId":{"type":"integer","format":"int64"},"startTime":{"type":"string","format":"date-time"},"endTime":{"type":"string","format":"date-time"},"timePeriod":{"type":"integer","format":"int64"},"taskId":{"type":"integer","format":"int64"},"parentTaskId":{"type":"integer","format":"int64"},"userId":{"type":"integer","format":"int64"},"projectId":{"type":"integer","format":"int64"},"spaceId":{"type":"integer","format":"int64"},"billingType":{"type":"boolean"},"createdTime":{"type":"string","format":"date-time"},"billableTime":{"type":"integer","format":"int64"},"nonBillableTime":{"type":"integer","format":"int64"},"title":{"type":"string"},"notes":{"type":"string"},"trackerType":{"type":"string"}}},"ApiSuccessResponseMapStringLong":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"type":"object","additionalProperties":{"type":"integer","format":"int64"},"description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"ApiSuccessResponseTaskListResponse":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"$ref":"#/components/schemas/TaskListResponse","description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"TaskListResponse":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"tasks":{"type":"array","items":{"$ref":"#/components/schemas/TaskDto"}},"hasMore":{"type":"boolean"}}},"ApiSuccessResponseListTaskCheckListDto":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"type":"array","description":"Payload containing the response data","items":{"$ref":"#/components/schemas/TaskCheckListDto"}},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"ApiSuccessResponseListAttachmentWithStateDto":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"type":"array","description":"Payload containing the response data","items":{"$ref":"#/components/schemas/AttachmentWithStateDto"}},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"AttachmentWithStateDto":{"type":"object","properties":{"attachment":{"$ref":"#/components/schemas/AttachmentDto"},"completedBytes":{"type":"integer","format":"int64"},"totalSize":{"type":"integer","format":"int64"},"lastUpdated":{"type":"string","format":"date-time"}}},"ApiSuccessResponseAttachmentWithStateDto":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"$ref":"#/components/schemas/AttachmentWithStateDto","description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"ApiSuccessResponseString":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"type":"string","description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"ApiSuccessResponseListTaskCommentDto":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"type":"array","description":"Payload containing the response data","items":{"$ref":"#/components/schemas/TaskCommentDto"}},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"ApiSuccessResponseBulkPageResponseBulkTaskDto":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"$ref":"#/components/schemas/BulkPageResponseBulkTaskDto","description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"BulkOwnerDto":{"type":"object","description":"A user referenced by a bulk export row","properties":{"userId":{"type":"integer","format":"int64","description":"User ID","example":57},"name":{"type":"string","description":"Display name of the user","example":"Radha"},"email":{"type":"string","description":"Email of the user","example":"radha@example.com"}}},"BulkPageResponseBulkTaskDto":{"type":"object","description":"Paginated bulk export response","properties":{"items":{"type":"array","description":"Rows for the requested page","items":{"$ref":"#/components/schemas/BulkTaskDto"}},"totalCount":{"type":"integer","format":"int64","description":"Total number of rows matching the filters","example":89},"page":{"type":"integer","format":"int32","description":"Current page number (zero-based)","example":0},"size":{"type":"integer","format":"int32","description":"Page size","example":200},"totalPages":{"type":"integer","format":"int32","description":"Total number of pages","example":1},"hasNext":{"type":"boolean","description":"Whether there is a next page","example":false},"hasPrevious":{"type":"boolean","description":"Whether there is a previous page","example":false}}},"BulkTaskDto":{"type":"object","description":"A task row in the bulk export","properties":{"taskId":{"type":"integer","format":"int64","description":"Task ID","example":5001},"title":{"type":"string","description":"Task title","example":"Design landing page"},"parentTaskId":{"type":"integer","format":"int64","description":"Parent task ID when this row is a subtask"},"projectId":{"type":"integer","format":"int64","description":"Project ID","example":101},"projectName":{"type":"string","description":"Project name","example":"Website Revamp"},"spaceId":{"type":"integer","format":"int64","description":"Space ID","example":12},"spaceName":{"type":"string","description":"Space name","example":"Marketing"},"status":{"type":"string","description":"Task status name","example":"In Progress"},"statusCategory":{"type":"string","description":"Task status category","example":"Active"},"priority":{"type":"string","description":"Task priority label","example":"High"},"completion":{"type":"integer","format":"int32","description":"Completion percentage","example":60},"startDate":{"type":"string","format":"date-time","description":"Planned start date (epoch millis)"},"dueDate":{"type":"string","format":"date-time","description":"Planned due date (epoch millis)"},"completedTime":{"type":"string","format":"date-time","description":"Completion timestamp (epoch millis)"},"owners":{"type":"array","description":"Task owners","items":{"$ref":"#/components/schemas/BulkOwnerDto"}},"tags":{"type":"array","description":"Tag names on the task","items":{"type":"string"}},"deleted":{"type":"boolean","description":"Whether the task is soft-deleted; only present when includeDeleted=true","example":false},"deletedTime":{"type":"string","format":"date-time","description":"Deletion timestamp (epoch millis); only for deleted rows"},"createdTime":{"type":"string","format":"date-time","description":"Creation timestamp (epoch millis)"},"modifiedTime":{"type":"string","format":"date-time","description":"Last modification timestamp (epoch millis)"}}},"ApiSuccessResponseListSpaceDto":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"type":"array","description":"Payload containing the response data","items":{"$ref":"#/components/schemas/SpaceDto"}},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"ApiSuccessResponseProjectListResponse":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"$ref":"#/components/schemas/ProjectListResponse","description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"ProjectListResponse":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"spaceId":{"type":"integer","format":"int64"},"projects":{"type":"array","items":{"$ref":"#/components/schemas/ProjectDto"}},"hasMore":{"type":"boolean"}}},"ApiSuccessResponseObject":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"ApiSuccessResponseSubtaskListResponse":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"$ref":"#/components/schemas/SubtaskListResponse","description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"SubtaskListResponse":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"spaceId":{"type":"integer","format":"int64"},"projectId":{"type":"integer","format":"int64"},"parentTaskId":{"type":"integer","format":"int64"},"subtasks":{"type":"array","items":{"$ref":"#/components/schemas/TaskDto"}},"hasMore":{"type":"boolean"}}},"ApiSuccessResponseProjectMemberListResponse":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"$ref":"#/components/schemas/ProjectMemberListResponse","description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"ProjectMemberListResponse":{"type":"object","description":"The members of a project that a task may be assigned to.","properties":{"tenantId":{"type":"integer","format":"int64","description":"ID of the organization.","example":1},"spaceId":{"type":"integer","format":"int64","description":"ID of the space the project sits in.","example":10},"projectId":{"type":"integer","format":"int64","description":"ID of the project.","example":25},"members":{"type":"array","description":"Assignable members, ordered by name. Empty when the project has none.","items":{"$ref":"#/components/schemas/ProjectMemberResponse"}}}},"ProjectMemberResponse":{"type":"object","description":"A project member who can be set as the owner of a task in that project.","properties":{"userId":{"type":"integer","format":"int64","description":"ID of the user. Send this in the owners list when creating or updating a task.","example":42},"firstName":{"type":"string","description":"First name of the user.","example":"Sam"},"lastName":{"type":"string","description":"Last name of the user. Null when the user never filled it in.","example":"Wheeler"},"email":{"type":"string","description":"Email address of the user.","example":"sam.wheeler@example.com"},"role":{"type":"string","description":"Role the user holds in the project.","enum":["PROJECT_ADMIN","PROJECT_MEMBER"],"example":"PROJECT_ADMIN"},"profilePicURL":{"type":"string","description":"Profile picture URL of the user. Null when no picture was uploaded.","example":"https://cdn.example.com/sam.png"},"profilePicColor":{"type":"string","description":"Fallback avatar colour used when the user has no profile picture.","example":"#E4572E"}}},"ApiSuccessResponseBulkPageResponseBulkProjectDto":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"$ref":"#/components/schemas/BulkPageResponseBulkProjectDto","description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"BulkPageResponseBulkProjectDto":{"type":"object","description":"Paginated bulk export response","properties":{"items":{"type":"array","description":"Rows for the requested page","items":{"$ref":"#/components/schemas/BulkProjectDto"}},"totalCount":{"type":"integer","format":"int64","description":"Total number of rows matching the filters","example":89},"page":{"type":"integer","format":"int32","description":"Current page number (zero-based)","example":0},"size":{"type":"integer","format":"int32","description":"Page size","example":200},"totalPages":{"type":"integer","format":"int32","description":"Total number of pages","example":1},"hasNext":{"type":"boolean","description":"Whether there is a next page","example":false},"hasPrevious":{"type":"boolean","description":"Whether there is a previous page","example":false}}},"BulkProjectDto":{"type":"object","description":"A project row in the bulk export","properties":{"projectId":{"type":"integer","format":"int64","description":"Project ID","example":101},"projectName":{"type":"string","description":"Project name","example":"Website Revamp"},"spaceId":{"type":"integer","format":"int64","description":"Space ID the project belongs to","example":12},"spaceName":{"type":"string","description":"Space name","example":"Marketing"},"status":{"type":"string","description":"Project status name","example":"In Progress"},"statusCategory":{"type":"string","description":"Project status category","example":"Active"},"priority":{"type":"string","description":"Project priority label","example":"High"},"completion":{"type":"integer","format":"int32","description":"Completion percentage","example":40},"startDate":{"type":"string","format":"date-time","description":"Planned start date (epoch millis)"},"dueDate":{"type":"string","format":"date-time","description":"Planned due date (epoch millis)"},"completedTime":{"type":"string","format":"date-time","description":"Completion timestamp (epoch millis)"},"owners":{"type":"array","description":"Project admins","items":{"$ref":"#/components/schemas/BulkOwnerDto"}},"tags":{"type":"array","description":"Tag names on the project","items":{"type":"string"}},"archived":{"type":"boolean","description":"Whether the project is archived","example":false},"deleted":{"type":"boolean","description":"Whether the project is soft-deleted; only present when includeDeleted=true","example":false},"deletedTime":{"type":"string","format":"date-time","description":"Deletion timestamp (epoch millis); only for deleted rows"},"createdTime":{"type":"string","format":"date-time","description":"Creation timestamp (epoch millis)"},"modifiedTime":{"type":"string","format":"date-time","description":"Last modification timestamp (epoch millis)"}}},"ApiSuccessResponseListNotificationDto":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"type":"array","description":"Payload containing the response data","items":{"$ref":"#/components/schemas/NotificationDto"}},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"NotificationDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"notificationId":{"type":"integer","format":"int64"},"message":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"recipientId":{"type":"integer","format":"int64"},"isRead":{"type":"boolean"},"taskId":{"type":"integer","format":"int64"},"taskName":{"type":"string"},"subTaskId":{"type":"integer","format":"int64"},"attachmentId":{"type":"integer","format":"int64"},"checklistId":{"type":"integer","format":"int64"},"projectId":{"type":"integer","format":"int64"},"projectName":{"type":"string"},"spaceId":{"type":"integer","format":"int64"},"space":{"$ref":"#/components/schemas/SpaceMinimalDto"},"commentId":{"type":"integer","format":"int64"},"parentCommentId":{"type":"integer","format":"int64"},"createdBy":{"$ref":"#/components/schemas/UserMinimalDto"},"mentioned":{"type":"boolean"},"type":{"type":"string"},"trackId":{"type":"integer","format":"int64"},"field":{"type":"string"},"action":{"type":"string"},"prevColor":{"type":"string"},"currColor":{"type":"string"}}},"SpaceMinimalDto":{"type":"object","properties":{"spaceId":{"type":"integer","format":"int64"},"spaceName":{"type":"string"},"color":{"type":"string"},"icon":{"type":"string"},"iconColor":{"type":"string"},"profilePicURL":{"type":"string"},"profilePicName":{"type":"string"}}},"DashboardTaskDto":{"type":"object","properties":{"tenantId":{"type":"integer","format":"int64"},"taskId":{"type":"integer","format":"int64"},"taskTitle":{"type":"string"},"parentId":{"type":"integer","format":"int64"},"projectId":{"type":"integer","format":"int64"},"spaceId":{"type":"integer","format":"int64"},"startDate":{"type":"string","format":"date-time"},"dueDate":{"type":"string","format":"date-time"},"projectName":{"type":"string"},"spaceName":{"type":"string"},"status":{"$ref":"#/components/schemas/TaskStatusMinimalDto"},"priority":{"$ref":"#/components/schemas/TaskPriorityMinimalDto"},"owners":{"type":"array","items":{"$ref":"#/components/schemas/UserMinimalDto"}}}},"DashboardTasksResponse":{"type":"object","properties":{"tasks":{"type":"array","items":{"$ref":"#/components/schemas/DashboardTaskDto"}},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer","format":"int32"}}},"TaskPriorityMinimalDto":{"type":"object","properties":{"taskPriorityId":{"type":"integer","format":"int64"},"priorityLabel":{"type":"string"},"color":{"type":"string"}}},"TaskStatusMinimalDto":{"type":"object","properties":{"taskStatusId":{"type":"integer","format":"int64"},"statusName":{"type":"string"},"color":{"type":"string"},"statusCategory":{"type":"string"}}},"DashboardTaskCounts":{"type":"object","properties":{"totalTasks":{"type":"integer","format":"int64"},"pendingTasks":{"type":"integer","format":"int64"},"completedTasks":{"type":"integer","format":"int64"},"overdueTasks":{"type":"integer","format":"int64"}}},"BackupUserActivity":{"type":"object","properties":{"activityId":{"type":"integer","format":"int64"},"userActivity":{"type":"string"}}},"ApiSuccessResponseVoid":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"NotificationDeleteRequestDto":{"type":"object","description":"DTO for deleting notifications. This object is used to transfer the list of notification IDs that need to be deleted.","properties":{"notificationIds":{"type":"array","description":"List of notification IDs to be deleted.","example":[101,102,103],"items":{"type":"integer","format":"int64"},"minItems":1}},"required":["notificationIds"]},"ApiSuccessResponseNotificationDeleteResponseDto":{"type":"object","description":"Standard API success response structure","properties":{"success":{"type":"boolean","description":"Indicates if the operation was successful","example":true},"message":{"type":"string","description":"Message describing the result of the operation","example":"Operation completed successfully"},"code":{"type":"integer","format":"int32","description":"HTTP status code of the response","example":200},"data":{"$ref":"#/components/schemas/NotificationDeleteResponseDto","description":"Payload containing the response data"},"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the response","example":"2023-01-01T12:00:00Z"}}},"NotificationDeleteResponseDto":{"type":"object","properties":{"deletedNotificationIds":{"type":"array","items":{"type":"integer","format":"int64"}}}}}}}