From 91d598d20fa8566e539e6d6e118506e745845a1e Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 25 Aug 2026 00:12:22 +0000 Subject: [PATCH 01/16] Update API specifications with fern api update --- fern/apis/v1/openapi/openapi.json | 123 +++++++++++++++++++++++------- 1 file changed, 94 insertions(+), 29 deletions(-) diff --git a/fern/apis/v1/openapi/openapi.json b/fern/apis/v1/openapi/openapi.json index bb420a7..09cc61b 100644 --- a/fern/apis/v1/openapi/openapi.json +++ b/fern/apis/v1/openapi/openapi.json @@ -26567,7 +26567,7 @@ "admin": "true", "workspace-manage-config": "read" }, - "x-internal": "true" + "x-internal": true } }, "/roles/{roleId}": { @@ -68743,7 +68743,8 @@ }, "content": { "description": "Content in JSON format.", - "nullable": true + "nullable": true, + "example": "(JSON formatted response)" } }, "additionalProperties": false @@ -70474,7 +70475,8 @@ }, "value": { "description": "The event value as serialized JSON object", - "nullable": true + "nullable": true, + "example": "(JSON serialized data)" } }, "additionalProperties": false @@ -74953,13 +74955,16 @@ "description": "The dashboards endpoints allow you to work with user's dashboards." }, { - "name": "Documents", - "description": "The documents endpoints allow you to create and manage documents, their versions and related entities such as contributors or connected teams." + "name": "DocumentComments" }, { "name": "DocumentSpaces", "description": "The document spaces endpoints allow you to create and manage document spaces and related entities such as contributors or connected teams." }, + { + "name": "Documents", + "description": "The documents endpoints allow you to create and manage documents, their versions and related entities such as contributors or connected teams." + }, { "name": "Filters", "description": "Provides endpoints to manage and share saved filters." @@ -74973,24 +74978,23 @@ "description": "Private tasks belong to a single user.\n Only the users themselves have access to their tasks and they can only be assigned to them.\n It is possible to create and assign private tasks to another user in which case both users have access to the task." }, { - "name": "ProjectMembers", - "description": "Project Members feature allows you to manage the members of a project, including adding users, assigning roles, and setting responsible members. Only users with the appropriate permissions can add or modify project members. Roles and responsibilities are enforced according to project type and permissions." + "name": "ProjectComments" }, { - "name": "ProjectMilestones", - "description": "The project milestone endpoints allow you to work with the basic project milestone data." + "name": "ProjectMembers", + "description": "Project Members feature allows you to manage the members of a project, including adding users, assigning roles, and setting responsible members. Only users with the appropriate permissions can add or modify project members. Roles and responsibilities are enforced according to project type and permissions." }, { "name": "ProjectMilestoneTemplates", "description": "The project milestone template endpoints allow you to work with milestone templates for project templates." }, { - "name": "ProjectRoles", - "description": "The project roles endpoints allow you to define roles for your project members.\n You can assign members to these roles on each project.\n If the roles are linked to the project types then the roles are available in every project using this type.\n When you want to delete a project role which is still in use, you are required to specify which role the currently assigned members should be assigned to instead." + "name": "ProjectMilestones", + "description": "The project milestone endpoints allow you to work with the basic project milestone data." }, { - "name": "Projects", - "description": "The projects endpoints allow you to work with the basic project data.\n If you don't assign a customer to the project, the project will be an internal project.\n In addition to the normal operation you can handle the project members and tags of the projects.\n When you assign a user to this project as a project member, you need to specify a project role for this project member. The available roles depend on the type of the project.\n You can also make one member responsible for the project, which means that we will notify this person if anything of interest happens in the project.\n The tags help you to add additional values to your projects and to find them faster.\n If you create new tags, they will be available for all other projects, too." + "name": "ProjectRoles", + "description": "The project roles endpoints allow you to define roles for your project members.\n You can assign members to these roles on each project.\n If the roles are linked to the project types then the roles are available in every project using this type.\n When you want to delete a project role which is still in use, you are required to specify which role the currently assigned members should be assigned to instead." }, { "name": "ProjectStatuses", @@ -75004,18 +75008,22 @@ "name": "ProjectTasks", "description": "The project tasks are linked to projects.\n Only members of the project or users with project management 'read' permissions have access to these tasks." }, - { - "name": "ProjectTemplates", - "description": "The project templates endpoints allow you to define different templates for projects." - }, { "name": "ProjectTemplateTags", "description": "Manage tags for project templates." }, + { + "name": "ProjectTemplates", + "description": "The project templates endpoints allow you to define different templates for projects." + }, { "name": "ProjectTypes", "description": "The project types endpoints allow you to define different types for projects." }, + { + "name": "Projects", + "description": "The projects endpoints allow you to work with the basic project data.\n If you don't assign a customer to the project, the project will be an internal project.\n In addition to the normal operation you can handle the project members and tags of the projects.\n When you assign a user to this project as a project member, you need to specify a project role for this project member. The available roles depend on the type of the project.\n You can also make one member responsible for the project, which means that we will notify this person if anything of interest happens in the project.\n The tags help you to add additional values to your projects and to find them faster.\n If you create new tags, they will be available for all other projects, too." + }, { "name": "Retainers", "description": "Retainers are used for projects with recurring budgets. Currently only hourly based monthly recurring budgets are supported." @@ -75028,6 +75036,9 @@ "name": "TaskBundles", "description": "Task bundles are reusable templates for task lists, tasks, and assignments that can be added to projects or created from existing project data." }, + { + "name": "TaskComments" + }, { "name": "TaskDependencies", "description": "The TaskDependencies endpoints allow you to get all task dependencies of a project or a task.\n A task can have multiple predecessors and multiple successors through separate dependency relationships." @@ -75040,10 +75051,6 @@ "name": "TaskLists", "description": "Task lists are a way to group tasks into user-defined lists.\n Task lists are currently available in projects and for users.\n This way, each project and each user can have a set of ordered task lists.\n Task lists can be reordered as well as the tasks within the list.\n Since tasks can be in multiple lists, the order is only applied to one list and does not affect others." }, - { - "name": "Tasks", - "description": "The Tasks endpoints can be used for general task operations and batch operations.\n The batch operations include changing the task status, assigning users and more." - }, { "name": "TaskSchedules", "description": "" @@ -75056,13 +75063,17 @@ "name": "TaskTags", "description": "Manage tags for tasks." }, + { + "name": "TaskTemplateTags", + "description": "Manage tags for task templates." + }, { "name": "TaskTemplates", "description": "The task templates endpoints can be used for managing task templates within task bundles." }, { - "name": "TaskTemplateTags", - "description": "Manage tags for task templates." + "name": "Tasks", + "description": "The Tasks endpoints can be used for general task operations and batch operations.\n The batch operations include changing the task status, assigning users and more." }, { "name": "Teams", @@ -75096,14 +75107,14 @@ "name": "UserCapacities", "description": "The user capacity endpoints allow you to define the work capacity of users." }, - { - "name": "Users", - "description": "The users endpoints allow you to manage the users of your workspace as well as their contact details." - }, { "name": "UserTags", "description": "The user tags endpoints allow you to manage tags on users." }, + { + "name": "Users", + "description": "The users endpoints allow you to manage the users of your workspace as well as their contact details." + }, { "name": "Workflows", "description": "The workflows endpoints allow you to define and manage workflows for projects and project templates." @@ -75117,25 +75128,73 @@ "description": "Use those endpoints to define workspace wide absences. A WorkspaceAbsence is an absence that is applied to all the users of the workspace. \n It is useful for defining company specific events/holidays, for example." }, { - "name": "Files", - "description": "File export endpoints." + "name": "Company Files" + }, + { + "name": "CompanyFiles" + }, + { + "name": "Document Files" + }, + { + "name": "DocumentFiles" }, { "name": "FileUpload", "description": "These endpoints can be used to upload files to the workspace." }, + { + "name": "Files", + "description": "File export endpoints." + }, { "name": "Images", "description": "The image endpoints are used to upload and download profile images, for example for users, projects and your workspace.\n These endpoints also allow you to crop and scale the image to the size you need." }, + { + "name": "Project Files" + }, + { + "name": "ProjectFiles" + }, + { + "name": "ProjectTemplate Files" + }, + { + "name": "ProjectTemplateFiles" + }, { "name": "SharedFiles", "description": "These file endpoints are used to get shared files and public profile images." }, + { + "name": "Task Files" + }, + { + "name": "TaskFiles" + }, + { + "name": "TaskTemplate Files" + }, + { + "name": "TaskTemplateFiles" + }, { "name": "Temporary Files", "description": "The temporary file endpoints allow you to upload and update files\n that do not have a connection to any entity. The files can be linked to an entity later.\n They don't show up in awork before they are either linked to a file or marked as a global file.\n Only the user who uploaded the file has access to the temporary file." }, + { + "name": "User Files" + }, + { + "name": "UserFiles" + }, + { + "name": "Workspace Files" + }, + { + "name": "WorkspaceFiles" + }, { "name": "Project Automations", "description": "Endpoints to manage automations and actions scoped to projects." @@ -75156,6 +75215,12 @@ "name": "Autopilot", "description": "Endpoints to manage awork autopilot settings for projects." }, + { + "name": "Project Activities" + }, + { + "name": "Task Activities" + }, { "name": "Search", "description": "Endpoints for full-text search and search index maintenance." From 94695e813e42058f13d441287092cf3f565c993f Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 26 Aug 2026 00:12:49 +0000 Subject: [PATCH 02/16] Update API specifications with fern api update --- fern/apis/v1/openapi/openapi.json | 191 ++++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) diff --git a/fern/apis/v1/openapi/openapi.json b/fern/apis/v1/openapi/openapi.json index 09cc61b..f8c4357 100644 --- a/fern/apis/v1/openapi/openapi.json +++ b/fern/apis/v1/openapi/openapi.json @@ -1156,6 +1156,186 @@ } } }, + "/agents/{agentId}/files": { + "get": { + "tags": [ + "AgentFiles" + ], + "summary": "Returns all files of the agent with the specified id.", + "description": "Returns all file metadata of the agent with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetAgentFiles", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "The id of the agent.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/{agentId}/files/byuploadid": { + "post": { + "tags": [ + "FileUpload" + ], + "summary": "Creates a file from an upload id.", + "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file agent from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostUploadByUploadId", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "The id of the agent to attach the file to.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model describing the uploaded file metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadByUploadIdForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/{agentId}/files/{fileId}": { + "delete": { + "tags": [ + "AgentFiles" + ], + "summary": "Deletes the agent file with the specified id.", + "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", + "operationId": "DeleteAgentFile", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "The id of the agent.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, "/apiusers": { "get": { "tags": [ @@ -54876,6 +55056,14 @@ "type": "string", "description": "The response format. Supported values are `html` and `markdown`.", "nullable": true + }, + "maximumContentBytes": { + "maximum": 104857600, + "minimum": 1, + "type": "integer", + "description": "The optional maximum aggregate UTF-8 bytes returned for document content.", + "format": "int32", + "nullable": true } }, "additionalProperties": false, @@ -75127,6 +75315,9 @@ "name": "WorkspaceAbsences", "description": "Use those endpoints to define workspace wide absences. A WorkspaceAbsence is an absence that is applied to all the users of the workspace. \n It is useful for defining company specific events/holidays, for example." }, + { + "name": "AgentFiles" + }, { "name": "Company Files" }, From ea91ce18c4d1c1f7eca8fcf072fb40e49cc10e34 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 27 Aug 2026 01:32:05 +0000 Subject: [PATCH 03/16] Update API specifications with fern api update --- fern/apis/v1/openapi/openapi.json | 91 ------------------------------- 1 file changed, 91 deletions(-) diff --git a/fern/apis/v1/openapi/openapi.json b/fern/apis/v1/openapi/openapi.json index f8c4357..30d2916 100644 --- a/fern/apis/v1/openapi/openapi.json +++ b/fern/apis/v1/openapi/openapi.json @@ -55490,11 +55490,6 @@ "description": "Whether the user has been deactivated.", "example": false }, - "isAgent": { - "type": "boolean", - "description": "Whether this user represents an agent.", - "example": false - }, "deactivatedOn": { "type": "string", "description": "The date the user was deactivated.", @@ -60344,78 +60339,6 @@ "additionalProperties": false, "description": "A tag model used for the timetrackings ProjectModelForTimeTrackings.\nDo not delete, we need to create copies of the tag model for each entity to avoid issues with Automapper." }, - "ProjectTaskKeyMigrationResult": { - "type": "object", - "properties": { - "workspaceId": { - "type": "string", - "format": "uuid", - "example": "123e4567-e89b-12d3-a456-426614174000" - }, - "succeeded": { - "type": "boolean" - }, - "wasSkipped": { - "type": "boolean" - }, - "validationExecuted": { - "type": "boolean" - }, - "message": { - "type": "string", - "nullable": true - }, - "errorMessage": { - "type": "string", - "nullable": true - }, - "projectsMissingKeysBefore": { - "type": "integer", - "format": "int32" - }, - "tasksMissingNumbersBefore": { - "type": "integer", - "format": "int32" - }, - "tasksWithInvalidIdentifiersBefore": { - "type": "integer", - "format": "int32" - }, - "projectsProcessed": { - "type": "integer", - "format": "int32" - }, - "tasksNumbered": { - "type": "integer", - "format": "int32" - }, - "taskIdentifiersFixed": { - "type": "integer", - "format": "int32" - }, - "projectKeyGenerationFailures": { - "type": "integer", - "format": "int32" - }, - "projectsMissingKeysAfter": { - "type": "integer", - "format": "int32" - }, - "tasksMissingNumbersAfter": { - "type": "integer", - "format": "int32" - }, - "tasksWithInvalidIdentifiersAfter": { - "type": "integer", - "format": "int32" - }, - "sequenceDriftCountAfter": { - "type": "integer", - "format": "int32" - } - }, - "additionalProperties": false - }, "ProjectTeamModel": { "type": "object", "properties": { @@ -66531,11 +66454,6 @@ "description": "Whether the user has been deactivated.", "example": false }, - "isAgent": { - "type": "boolean", - "description": "Whether this user represents an agent.", - "example": false - }, "deactivatedOn": { "type": "string", "description": "The date the user was deactivated.", @@ -66695,11 +66613,6 @@ "description": "Whether the user has been deactivated.", "example": false }, - "isAgent": { - "type": "boolean", - "description": "Whether this user represents an agent.", - "example": false - }, "deactivatedOn": { "type": "string", "description": "The date the user was deactivated.", @@ -67088,10 +67001,6 @@ "type": "boolean", "description": "Whether this user is an API key user.\nAPI key users should always be archived." }, - "isAgent": { - "type": "boolean", - "description": "Whether this user represents an agent." - }, "isExternal": { "type": "boolean", "description": "True if this entity is coming from an external workspace (awork Connect)." From 0ee9d6a0422c34b0ed88f5821b938866ecce8147 Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 28 Aug 2026 02:53:27 +0000 Subject: [PATCH 04/16] Update API specifications with fern api update --- fern/apis/v1/openapi/openapi.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fern/apis/v1/openapi/openapi.json b/fern/apis/v1/openapi/openapi.json index 30d2916..a153013 100644 --- a/fern/apis/v1/openapi/openapi.json +++ b/fern/apis/v1/openapi/openapi.json @@ -67122,6 +67122,10 @@ "UserPermissionFullModel": { "type": "object", "properties": { + "isAiPlanActive": { + "type": "boolean", + "description": "Whether the workspace has an active AI plan." + }, "userId": { "type": "string", "description": "The id of the user.", From a5fae7f1670794c1653e1dbe25e298495488cf43 Mon Sep 17 00:00:00 2001 From: github-actions Date: Mon, 31 Aug 2026 00:30:16 +0000 Subject: [PATCH 05/16] Update API specifications with fern api update --- fern/apis/v1/openapi/openapi.json | 167 ++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) diff --git a/fern/apis/v1/openapi/openapi.json b/fern/apis/v1/openapi/openapi.json index a153013..251089e 100644 --- a/fern/apis/v1/openapi/openapi.json +++ b/fern/apis/v1/openapi/openapi.json @@ -1336,6 +1336,167 @@ } } }, + "/agentthreads/{agentthreadId}/files/{fileId}": { + "get": { + "tags": [ + "Agentthread Files" + ], + "summary": "Returns the file with the specified id of the agentthread with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByAgentthreadNameAndAgentthreadIdAndFileId", + "parameters": [ + { + "name": "agentthreadId", + "in": "path", + "description": "The id of the agentthread.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agentthreads/{agentthreadId}/files/{fileId}/download": { + "get": { + "tags": [ + "AgentthreadFiles" + ], + "summary": "Returns the content of the agentthread file with the specified id.", + "description": "Returns the content of the agentthread file. Uses the latest file version.\nIf the agentthread file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", + "operationId": "GetAgentthreadFileContent", + "parameters": [ + { + "name": "agentthreadId", + "in": "path", + "description": "The id of the agentthread.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "width", + "in": "query", + "description": "Set width to resize.", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "height", + "in": "query", + "description": "Set height to resize.", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "crop", + "in": "query", + "description": "Whether to crop the image when resizing it.", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, "/apiusers": { "get": { "tags": [ @@ -75231,6 +75392,12 @@ { "name": "AgentFiles" }, + { + "name": "Agentthread Files" + }, + { + "name": "AgentthreadFiles" + }, { "name": "Company Files" }, From c052b4ae1e921b442cf87a603ad94ae0e746f06a Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 3 Sep 2026 00:28:21 +0000 Subject: [PATCH 06/16] Update API specifications with fern api update --- fern/apis/v1/openapi/openapi.json | 290 +++++++++++++++--------------- 1 file changed, 146 insertions(+), 144 deletions(-) diff --git a/fern/apis/v1/openapi/openapi.json b/fern/apis/v1/openapi/openapi.json index 251089e..5e48a2f 100644 --- a/fern/apis/v1/openapi/openapi.json +++ b/fern/apis/v1/openapi/openapi.json @@ -1156,19 +1156,19 @@ } } }, - "/agents/{agentId}/files": { + "/agents/threads/{threadId}/files/{fileId}": { "get": { "tags": [ - "AgentFiles" + "Entity Files" ], - "summary": "Returns all files of the agent with the specified id.", - "description": "Returns all file metadata of the agent with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetAgentFiles", + "summary": "Returns a file from the specified agent thread.", + "description": "The user must have read access to the agent thread.", + "operationId": "GetAgentsThreadsFilesByThreadIdAndFileId", "parameters": [ { - "name": "agentId", + "name": "threadId", "in": "path", - "description": "The id of the agent.", + "description": "The agent thread id.", "required": true, "schema": { "type": "string", @@ -1176,16 +1176,14 @@ } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "fileId", + "in": "path", + "description": "The file id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -1194,10 +1192,27 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileInfo" - } + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -1218,54 +1233,70 @@ } } }, - "/agents/{agentId}/files/byuploadid": { - "post": { + "/agents/threads/{threadId}/files/{fileId}/download": { + "get": { "tags": [ - "FileUpload" + "EntityFiles" ], - "summary": "Creates a file from an upload id.", - "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file agent from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", - "operationId": "PostUploadByUploadId", + "summary": "Returns the content of a file from the specified agent thread.", + "description": "The user must have read access to the agent thread.", + "operationId": "GetAgentThreadFileContent", "parameters": [ { - "name": "agentId", + "name": "threadId", "in": "path", - "description": "The id of the agent to attach the file to.", + "description": "The agent thread id.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The model describing the uploaded file metadata.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UploadByUploadIdForm" - } + }, + { + "name": "fileId", + "in": "path", + "description": "The file id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "width", + "in": "query", + "description": "The optional image width.", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "height", + "in": "query", + "description": "The optional image height.", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "crop", + "in": "query", + "description": "Whether to crop the image when resizing it.", + "schema": { + "type": "boolean" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string", + "format": "binary" } } } @@ -1286,14 +1317,14 @@ } } }, - "/agents/{agentId}/files/{fileId}": { - "delete": { + "/agents/{agentId}/files": { + "get": { "tags": [ "AgentFiles" ], - "summary": "Deletes the agent file with the specified id.", - "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", - "operationId": "DeleteAgentFile", + "summary": "Returns all files of the agent with the specified id.", + "description": "Returns all file metadata of the agent with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetAgentFiles", "parameters": [ { "name": "agentId", @@ -1306,19 +1337,31 @@ } }, { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + } } }, "security": [ @@ -1336,29 +1379,19 @@ } } }, - "/agentthreads/{agentthreadId}/files/{fileId}": { - "get": { + "/agents/{agentId}/files/byuploadid": { + "post": { "tags": [ - "Agentthread Files" + "FileUpload" ], - "summary": "Returns the file with the specified id of the agentthread with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByAgentthreadNameAndAgentthreadIdAndFileId", + "summary": "Creates a file from an upload id.", + "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file agent from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostUploadByUploadId", "parameters": [ { - "name": "agentthreadId", - "in": "path", - "description": "The id of the agentthread.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "agentId", "in": "path", - "description": "The id of the file.", + "description": "The id of the agent to attach the file to.", "required": true, "schema": { "type": "string", @@ -1366,6 +1399,17 @@ } } ], + "requestBody": { + "description": "The model describing the uploaded file metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadByUploadIdForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", @@ -1377,16 +1421,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -1413,19 +1447,19 @@ } } }, - "/agentthreads/{agentthreadId}/files/{fileId}/download": { - "get": { + "/agents/{agentId}/files/{fileId}": { + "delete": { "tags": [ - "AgentthreadFiles" + "AgentFiles" ], - "summary": "Returns the content of the agentthread file with the specified id.", - "description": "Returns the content of the agentthread file. Uses the latest file version.\nIf the agentthread file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", - "operationId": "GetAgentthreadFileContent", + "summary": "Deletes the agent file with the specified id.", + "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", + "operationId": "DeleteAgentFile", "parameters": [ { - "name": "agentthreadId", + "name": "agentId", "in": "path", - "description": "The id of the agentthread.", + "description": "The id of the agent.", "required": true, "schema": { "type": "string", @@ -1441,45 +1475,11 @@ "type": "string", "format": "uuid" } - }, - { - "name": "width", - "in": "query", - "description": "Set width to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "height", - "in": "query", - "description": "Set height to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "crop", - "in": "query", - "description": "Whether to crop the image when resizing it.", - "schema": { - "type": "boolean" - } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -75392,12 +75392,6 @@ { "name": "AgentFiles" }, - { - "name": "Agentthread Files" - }, - { - "name": "AgentthreadFiles" - }, { "name": "Company Files" }, @@ -75410,6 +75404,14 @@ { "name": "DocumentFiles" }, + { + "name": "Entity Files", + "description": "Endpoints for files attached to entities." + }, + { + "name": "EntityFiles", + "description": "The entity file endpoints allow you to attach files to several entities." + }, { "name": "FileUpload", "description": "These endpoints can be used to upload files to the workspace." From 21ca885ca1be63085148447b9bd439220e34c0f1 Mon Sep 17 00:00:00 2001 From: github-actions Date: Sat, 5 Sep 2026 00:25:37 +0000 Subject: [PATCH 07/16] Update API specifications with fern api update --- fern/apis/v1/openapi/openapi.json | 29052 ++++++++++++++++++---------- 1 file changed, 19108 insertions(+), 9944 deletions(-) diff --git a/fern/apis/v1/openapi/openapi.json b/fern/apis/v1/openapi/openapi.json index 5e48a2f..a0d7576 100644 --- a/fern/apis/v1/openapi/openapi.json +++ b/fern/apis/v1/openapi/openapi.json @@ -18,6 +18,93 @@ } ], "paths": { + "/.well-known/oauth-protected-resource": { + "get": { + "tags": [ + "OAuth" + ], + "summary": "Returns the OAuth 2.0 Protected Resource metadata.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "GetOAuthProtectedResourceMetadata", + "parameters": [ + { + "name": "resource", + "in": "query", + "description": "The resource to get the metadata for.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "anonymous": "true" + } + } + }, + "/.well-known/oauth-protected-resource/{resource}": { + "get": { + "tags": [ + "OAuth" + ], + "summary": "Returns the OAuth 2.0 Protected Resource metadata.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "GetOAuthProtectedResourceMetadata2", + "parameters": [ + { + "name": "resource", + "in": "path", + "description": "The resource to get the metadata for.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "anonymous": "true" + } + } + }, "/absenceregions": { "get": { "tags": [ @@ -1156,43 +1243,180 @@ } } }, - "/agents/threads/{threadId}/files/{fileId}": { + "/agents": { "get": { "tags": [ - "Entity Files" + "AgentRuntime" ], - "summary": "Returns a file from the specified agent thread.", - "description": "The user must have read access to the agent thread.", - "operationId": "GetAgentsThreadsFilesByThreadIdAndFileId", - "parameters": [ + "summary": "Returns the custom agents visible to the requesting user.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetAgents", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentSummaryResponseModel" + } + } + } + } + } + }, + "security": [ { - "name": "threadId", - "in": "path", - "description": "The agent thread id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "AgentRuntime" + ], + "summary": "Creates a new custom agent, optionally forked from an existing agent.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostAgents", + "requestBody": { + "description": "The request payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAgentRequestModel" + } } }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentSummaryResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ { - "name": "fileId", - "in": "path", - "description": "The file id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/connectors": { + "get": { + "tags": [ + "AgentRuntime" + ], + "summary": "Lists the connectors visible to the requesting user in the current workspace.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetConnectors", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ConnectorResponseModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "AgentRuntime" + ], + "summary": "Creates a new connector in the current workspace.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostConnectors", + "requestBody": { + "description": "The connector to create.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateConnectorRequestModel" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ConnectorResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -1206,6 +1430,51 @@ } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/connectors/auth/callback": { + "get": { + "tags": [ + "AgentRuntime" + ], + "summary": "Handles an OAuth 2.0 authorization-code or provider-error callback for a connector.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "GetConnectorsAuthCallback", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, "404": { "description": "Not Found", @@ -1229,136 +1498,35 @@ "v1" ], "x-access": { - "any": "true" + "anonymous": "true" } } }, - "/agents/threads/{threadId}/files/{fileId}/download": { + "/agents/connectors/presets": { "get": { "tags": [ - "EntityFiles" - ], - "summary": "Returns the content of a file from the specified agent thread.", - "description": "The user must have read access to the agent thread.", - "operationId": "GetAgentThreadFileContent", - "parameters": [ - { - "name": "threadId", - "in": "path", - "description": "The agent thread id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The file id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "width", - "in": "query", - "description": "The optional image width.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "height", - "in": "query", - "description": "The optional image height.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "crop", - "in": "query", - "description": "Whether to crop the image when resizing it.", - "schema": { - "type": "boolean" - } - } + "AgentRuntime" ], + "summary": "Lists the predefined connector presets available to the workspace.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetConnectorsPresets", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/ConnectorPresetsResponseModel" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/agents/{agentId}/files": { - "get": { - "tags": [ - "AgentFiles" - ], - "summary": "Returns all files of the agent with the specified id.", - "description": "Returns all file metadata of the agent with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetAgentFiles", - "parameters": [ - { - "name": "agentId", - "in": "path", - "description": "The id of the agent.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "$ref": "#/components/parameters/page" }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileInfo" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -1379,19 +1547,19 @@ } } }, - "/agents/{agentId}/files/byuploadid": { - "post": { + "/agents/connectors/{connectorId}/sharing": { + "put": { "tags": [ - "FileUpload" + "AgentRuntime" ], - "summary": "Creates a file from an upload id.", - "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file agent from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", - "operationId": "PostUploadByUploadId", + "summary": "Makes a custom connector workspace-visible or private.", + "description": "The user must own the connector or be a workspace administrator.", + "operationId": "PutConnectorsSharingByConnectorId", "parameters": [ { - "name": "agentId", + "name": "connectorId", "in": "path", - "description": "The id of the agent to attach the file to.", + "description": "The connector id.", "required": true, "schema": { "type": "string", @@ -1400,11 +1568,11 @@ } ], "requestBody": { - "description": "The model describing the uploaded file metadata.", + "description": "The connector sharing configuration.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UploadByUploadIdForm" + "$ref": "#/components/schemas/ConnectorSharingRequestModel" } } }, @@ -1416,7 +1584,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ConnectorSharingModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -1447,30 +1635,28 @@ } } }, - "/agents/{agentId}/files/{fileId}": { - "delete": { + "/agents/defaults": { + "get": { "tags": [ - "AgentFiles" + "AgentRuntime" ], - "summary": "Deletes the agent file with the specified id.", - "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", - "operationId": "DeleteAgentFile", + "summary": "Gets the default agent options for a personal or custom agent.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetAgentDefaults", "parameters": [ { - "name": "agentId", - "in": "path", - "description": "The id of the agent.", + "name": "type", + "in": "query", + "description": "The agent type to resolve defaults for ('personal-agent' or 'custom-agent').", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } }, { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, + "name": "agentId", + "in": "query", + "description": "The id of the custom agent when is 'custom-agent'.", "schema": { "type": "string", "format": "uuid" @@ -1478,8 +1664,45 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentDefaultsResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -1497,24 +1720,31 @@ } } }, - "/apiusers": { + "/agents/models": { "get": { "tags": [ - "ApiUsers" + "AgentRuntime" ], - "summary": "Returns all API users.", - "description": "Returns all API users.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetApiUsers", + "summary": "Returns the AI models available to the agent runtime.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetModels", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ApiUser" - } + "$ref": "#/components/schemas/AgentRuntimeModelsResponseModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -1531,38 +1761,32 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "read" + "any": "true" } - }, - "post": { + } + }, + "/agents/models/settings/automaticenablement": { + "put": { "tags": [ - "ApiUsers" + "AgentRuntime" ], - "summary": "Creates an API user.", - "description": "Beware: API users will also be returned in the /users response when including\r\n archived users.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostApiUser", + "summary": "Updates automatic enablement for future workspace model catalog entries.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PutAgentsModelsSettingsAutomaticEnablement", "requestBody": { - "description": "The model to create the API user.", + "description": "The automatic-enablement request.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ApiUserPostForm" + "$ref": "#/components/schemas/SetModelAutoEnableRequestModel" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiUser" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -1574,8 +1798,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -1601,32 +1825,41 @@ } } }, - "/apiusers/{apiUserId}": { - "delete": { + "/agents/models/settings/disable": { + "post": { "tags": [ - "ApiUsers" + "AgentRuntime" ], - "summary": "Deletes the API user with the specified id.", + "summary": "Atomically disables a model, vendor, or region and migrates dependent configurations.", "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "DeleteApiUserById", - "parameters": [ - { - "name": "apiUserId", - "in": "path", - "description": "The id of the API user to delete.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "operationId": "PostAgentsModelsSettingsDisable", + "requestBody": { + "description": "The disable and migration command.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DisableModelsRequestModel" + } } - } - ], + }, + "required": true + }, "responses": { "204": { "description": "No Content" }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -1650,39 +1883,50 @@ "admin": "true", "workspace-manage-config": "write" } - }, - "get": { + } + }, + "/agents/models/settings/disable/preflight": { + "post": { "tags": [ - "ApiUsers" + "AgentRuntime" ], - "summary": "Returns the API user with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetApiUserById", - "parameters": [ - { - "name": "apiUserId", - "in": "path", - "description": "The id of the API user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Computes affected presets, source models, replacements, and blocked reasons.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostAgentsModelsSettingsDisablePreflight", + "requestBody": { + "description": "The disable target.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DisableModelsRequestModel" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ApiUser" + "$ref": "#/components/schemas/ModelDisablePreflightResponseModel" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -1704,49 +1948,43 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "read" + "workspace-manage-config": "write" } - }, + } + }, + "/agents/models/settings/presets/{presetKey}": { "put": { "tags": [ - "ApiUsers" + "AgentRuntime" ], - "summary": "Updates the API user with the specified id.", + "summary": "Assigns central Auto or an explicit active text model to a workspace preset.", "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PutApiUserById", + "operationId": "PutAgentsModelsSettingsPresetsByPresetKey", "parameters": [ { - "name": "apiUserId", + "name": "presetKey", "in": "path", - "description": "The id of the API user to update.", + "description": "The preset key.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "requestBody": { - "description": "The model to update the API user.", + "description": "The preset assignment.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ApiUserForm" + "$ref": "#/components/schemas/SetModelPresetRequestModel" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiUser" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -1758,8 +1996,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -1785,21 +2023,45 @@ } } }, - "/automations/catalog": { - "get": { + "/agents/models/settings/regions/{regionKey}/enable": { + "post": { "tags": [ - "Project Automations" + "AgentRuntime" + ], + "summary": "Enables one AI model serving region for the workspace.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostAgentsModelsSettingsRegionsEnableByRegionKey", + "parameters": [ + { + "name": "regionKey", + "in": "path", + "description": "The stable serving-region key.", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Returns all supported automation trigger and action types.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetAutomationsCatalog", "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AutomationCatalogModel" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -1816,33 +2078,51 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/autopilot/availablealerts": { - "get": { + "/agents/models/settings/vendors/{vendorKey}/enable": { + "post": { "tags": [ - "Autopilot" + "AgentRuntime" + ], + "summary": "Enables one AI model vendor for the workspace.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostAgentsModelsSettingsVendorsEnableByVendorKey", + "parameters": [ + { + "name": "vendorKey", + "in": "path", + "description": "The stable vendor key.", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Returns all available alerts for autopilots.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetAutopilotAvailableAlerts", "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } - }, - "example": [ - "behind_schedule", - "overdue" - ] + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } } @@ -1858,37 +2138,50 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/autopilot/{autopilotId}": { - "get": { + "/agents/models/{modelKey}/enable": { + "post": { "tags": [ - "Autopilot" + "AgentRuntime" ], - "summary": "Returns the autopilot with the specified id.", - "description": "Returns the autopilot including its alerts.\r\n To get the autopilot data the user needs to be the owner of the project or 'read' permissions\r\n of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", - "operationId": "GetAutopilotByAutopilotId", + "summary": "Enables one AI model for the workspace.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostAgentsModelsEnableByModelKey", "parameters": [ { - "name": "autopilotId", + "name": "modelKey", "in": "path", - "description": "The id of the autopilot.", + "description": "The stable, URL-safe catalog key.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Autopilot" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -1905,28 +2198,57 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/clientapplications": { - "get": { + "/agents/threads": { + "post": { "tags": [ - "Client Applications" + "AgentThreads" ], - "summary": "Returns all client applications.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetClientApplications", + "summary": "Creates an AI thread.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostAgentsThreads", + "requestBody": { + "description": "The thread creation payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AiThreadCreateRequestModel" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ClientApplication" - } + "$ref": "#/components/schemas/AiThreadCreatedResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -1943,41 +2265,43 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "read" + "any": "true" } - }, - "post": { + } + }, + "/agents/threads/{threadId}": { + "get": { "tags": [ - "Client Applications" + "AgentThreads" ], - "summary": "Registers a new client application.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostClientApplications", - "requestBody": { - "description": "The client application model.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ClientApplicationCreateForm" - } + "summary": "Retrieves an AI thread by id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetAgentsThreadsByThreadId", + "parameters": [ + { + "name": "threadId", + "in": "path", + "description": "The id of the thread to retrieve.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - }, - "required": true - }, + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ClientApplicationCreateResponse" + "$ref": "#/components/schemas/AgentThreadResponseModel" } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -1998,43 +2322,43 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } } }, - "/clientapplications/register": { + "/agents/threads/{threadId}/cancel": { "post": { "tags": [ - "Client Applications" + "AgentThreads" ], - "summary": "Dynamically registers a new OAuth 2.0 client according to RFC 7591.", - "description": "\r\n\r\nAllows unauthenticated access.", - "operationId": "PostClientApplicationsRegister", - "requestBody": { - "description": "The dynamic client registration request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DynamicClientRegistrationEndpointRequest" - } + "summary": "Cancels an active custom agent session for the specified thread.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostAgentsThreadsCancelByThreadId", + "parameters": [ + { + "name": "threadId", + "in": "path", + "description": "The thread id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - }, - "required": true - }, + } + ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DynamicClientRegistrationResponse" + "$ref": "#/components/schemas/AgentThreadResponseModel" } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -2055,35 +2379,53 @@ "v1" ], "x-access": { - "anonymous": "true" + "any": "true" } } }, - "/clientapplications/{clientId}": { - "delete": { + "/agents/threads/{threadId}/files/{fileId}": { + "get": { "tags": [ - "Client Applications" + "Entity Files" ], - "summary": "Deletes the specified client application.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "DeleteClientApplicationsByClientId", + "summary": "Returns a file from the specified agent thread.", + "description": "The user must have read access to the agent thread.", + "operationId": "GetAgentsThreadsFilesByThreadIdAndFileId", "parameters": [ { - "name": "clientId", + "name": "threadId", "in": "path", - "description": "The id of the client application.", + "description": "The agent thread id.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The file id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -2114,25 +2456,63 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } - }, + } + }, + "/agents/threads/{threadId}/files/{fileId}/download": { "get": { "tags": [ - "Client Applications" + "EntityFiles" ], - "summary": "Returns the client application with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetClientApplicationsByClientId", + "summary": "Returns the content of a file from the specified agent thread.", + "description": "The user must have read access to the agent thread.", + "operationId": "GetAgentThreadFileContent", "parameters": [ { - "name": "clientId", + "name": "threadId", "in": "path", - "description": "The id of the client application.", + "description": "The agent thread id.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The file id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "width", + "in": "query", + "description": "The optional image width.", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "height", + "in": "query", + "description": "The optional image height.", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "crop", + "in": "query", + "description": "Whether to crop the image when resizing it.", + "schema": { + "type": "boolean" } } ], @@ -2142,17 +2522,8 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ClientApplication" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string", + "format": "binary" } } } @@ -2169,56 +2540,40 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "read" + "any": "true" } - }, - "put": { + } + }, + "/agents/threads/{threadId}/messages": { + "get": { "tags": [ - "Client Applications" + "AgentThreads" ], - "summary": "Updates the client application with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PutClientApplicationsByClientId", + "summary": "Returns the messages of an AI thread.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetAgentsThreadsMessagesByThreadId", "parameters": [ { - "name": "clientId", + "name": "threadId", "in": "path", - "description": "The id of the client application.", + "description": "The thread id.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], - "requestBody": { - "description": "The client application model.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ClientApplicationUpdateForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ClientApplication" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentThreadMessageResponseModel" + } } } } @@ -2245,36 +2600,34 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } - } - }, - "/clientapplications/{clientId}/generateapikey": { + }, "post": { "tags": [ - "Client Applications" + "AgentThreads" ], - "summary": "Generates an API key for the specified client application.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "PostClientApplicationsGenerateApiKeyByClientId", + "summary": "Accepts a message for an AI thread and decides whether to start it or add it to the thread queue.", + "description": "The workspace must have remaining AI tokens and credits to process the message.\r\n The specified thread must belong to the current user.", + "operationId": "PostAgentsThreadsMessagesByThreadId", "parameters": [ { - "name": "clientId", + "name": "threadId", "in": "path", - "description": "The id of the client application.", + "description": "The id of the thread to send the message in.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "requestBody": { - "description": "The model to generate an API key.", + "description": "The model with the content to send to the AI thread.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ClientApplicationApiKeyForm" + "$ref": "#/components/schemas/AiThreadMessageRequestModel" } } }, @@ -2286,7 +2639,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TokenResponse" + "$ref": "#/components/schemas/AiThreadMessageAcceptedResponseModel" } } } @@ -2310,6 +2663,16 @@ } } } + }, + "503": { + "description": "Service Unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -2323,24 +2686,33 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "read" + "any": "true" } } }, - "/clientapplications/{clientId}/generatesecret": { - "post": { + "/agents/threads/{threadId}/messages/{clientMessageId}/status": { + "get": { "tags": [ - "Client Applications" + "AgentThreads" ], - "summary": "Generates a new secret for the specified client application.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostClientApplicationsGenerateSecretByClientId", + "summary": "Gets the processing status of a user message in the specified AI thread.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetAgentsThreadsMessagesStatusByThreadIdAndClientMessageId", "parameters": [ { - "name": "clientId", + "name": "threadId", "in": "path", - "description": "The id of the client application.", + "description": "The id of the thread that contains the message.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "clientMessageId", + "in": "path", + "description": "The client-supplied id of the message to inspect.", "required": true, "schema": { "type": "string" @@ -2353,17 +2725,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ClientApplicationGeneratePasswordResponse" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/AiThreadMessageProcessingStatusResponseModel" } } } @@ -2390,31 +2752,28 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } } }, - "/companies": { + "/agents/{agentId}": { "get": { "tags": [ - "Companies" + "AgentRuntime" ], - "summary": "Returns all companies.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", - "operationId": "GetCompanies", + "summary": "Retrieves an agent by id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetAgentsByAgentId", "parameters": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "agentId", + "in": "path", + "description": "The agent id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -2423,10 +2782,27 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Company" - } + "$ref": "#/components/schemas/AgentSummaryResponseModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -2443,23 +2819,34 @@ "v1" ], "x-access": { - "admin": "true", - "company-master-data": "read" + "any": "true" } }, - "post": { + "put": { "tags": [ - "Companies" + "AgentRuntime" + ], + "summary": "Replaces the complete editable agent form and records prompt history when the prompt changes.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PutAgentsByAgentId", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "The agent id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Creates a new company.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", - "operationId": "PostCompany", "requestBody": { - "description": "The company to create.", + "description": "The request payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CompanyForm" + "$ref": "#/components/schemas/UpdateAgentRequestModel" } } }, @@ -2471,7 +2858,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Company" + "$ref": "#/components/schemas/AgentSummaryResponseModel" } } } @@ -2485,6 +2872,26 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -2498,36 +2905,46 @@ "v1" ], "x-access": { - "admin": "true", - "company-master-data": "write" + "any": "true" } } }, - "/companies/deletetags": { - "post": { + "/agents/{agentId}/connectors/{connectorId}": { + "delete": { "tags": [ - "CompanyTags" + "AgentRuntime" ], - "summary": "Removes a tag from all companies.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", - "operationId": "PostCompaniesDeleteTags", - "requestBody": { - "description": "The model with the tag to be removed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteTagForm" - } + "summary": "Unlinks a connector from an agent.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteConnectorsByConnectorIdAndAgentId", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "The agent id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "connectorId", + "in": "path", + "description": "The connector id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "responses": { "204": { "description": "No Content" }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -2536,8 +2953,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -2558,68 +2975,65 @@ "v1" ], "x-access": { - "admin": "true", - "company-master-data": "write" + "any": "true" } - } - }, - "/companies/industries": { - "get": { + }, + "post": { "tags": [ - "Companies" + "AgentRuntime" + ], + "summary": "Links a connector to an agent.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostConnectorsByConnectorIdAndAgentId", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "The agent id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "connectorId", + "in": "path", + "description": "The connector id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Returns all company industries that are currently in use.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", - "operationId": "GetCompaniesIndustries", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/ConnectorResponseModel" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "company-master-data": "read" - } - } - }, - "/companies/tags": { - "get": { - "tags": [ - "CompanyTags" - ], - "summary": "Returns all tags that are currently in use by companies.", - "description": "Returns all tags that are currently in use by companies ordered by count.\r\n\r\nAny authenticated user.", - "operationId": "GetCompanyTags", - "responses": { - "200": { - "description": "OK", + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -2640,35 +3054,48 @@ } } }, - "/companies/updatetags": { - "post": { + "/agents/{agentId}/files": { + "get": { "tags": [ - "CompanyTags" + "AgentFiles" ], - "summary": "Updates a tag globally for all companies.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", - "operationId": "PostCompaniesUpdateTags", - "requestBody": { - "description": "The model containing the tag updates.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TagUpdateForm" - } + "summary": "Returns all files of the agent with the specified id.", + "description": "Returns all file metadata of the agent with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetAgentFiles", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "The id of the agent.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" + { + "$ref": "#/components/parameters/page" }, - "401": { - "description": "Unauthorized", + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } } } } @@ -2685,24 +3112,23 @@ "v1" ], "x-access": { - "admin": "true", - "company-master-data": "write" + "any": "true" } } }, - "/companies/{companyId}": { - "get": { + "/agents/{agentId}/files/byuploadid": { + "post": { "tags": [ - "Companies" + "FileUpload" ], - "summary": "Returns the company with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", - "operationId": "GetCompanyById", + "summary": "Creates a file from an upload id.", + "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file agent from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostUploadByUploadId", "parameters": [ { - "name": "companyId", + "name": "agentId", "in": "path", - "description": "The id of the company.", + "description": "The id of the agent to attach the file to.", "required": true, "schema": { "type": "string", @@ -2710,13 +3136,24 @@ } } ], + "requestBody": { + "description": "The model describing the uploaded file metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadByUploadIdForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Company" + "$ref": "#/components/schemas/FileInfo" } } } @@ -2743,22 +3180,33 @@ "v1" ], "x-access": { - "admin": "true", - "company-master-data": "read" + "any": "true" } - }, - "put": { + } + }, + "/agents/{agentId}/files/{fileId}": { + "delete": { "tags": [ - "Companies" + "AgentFiles" ], - "summary": "Updates the company with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", - "operationId": "PutCompanyById", + "summary": "Deletes the agent file with the specified id.", + "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", + "operationId": "DeleteAgentFile", "parameters": [ { - "name": "companyId", + "name": "agentId", "in": "path", - "description": "The id of the company to update.", + "description": "The id of the agent.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -2766,37 +3214,9 @@ } } ], - "requestBody": { - "description": "The model with updated company data.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CompanyForm" - } - } - }, - "required": true - }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Company" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -2810,24 +3230,23 @@ "v1" ], "x-access": { - "admin": "true", - "company-master-data": "write" + "any": "true" } } }, - "/companies/{companyId}/addtags": { + "/agents/{agentId}/setarchived": { "post": { "tags": [ - "CompanyTags" + "AgentRuntime" ], - "summary": "Adds a batch of new tags to the company with the specified id.", - "description": "The request fails if one of the tags is invalid (e.g. empty or duplicate).\r\n To add tags to a company the user must have `company-master-data:write` permissions on the specified company.", - "operationId": "PostCompanyAddTagsByCompanyId", + "summary": "Archives or unarchives an agent.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostAgentsSetArchivedByAgentId", "parameters": [ { - "name": "companyId", + "name": "agentId", "in": "path", - "description": "The id of the company to add tags to.", + "description": "The agent id.", "required": true, "schema": { "type": "string", @@ -2836,14 +3255,11 @@ } ], "requestBody": { - "description": "The model containing the tags to be added.", + "description": "The request payload.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TagForm" - } + "$ref": "#/components/schemas/SetAgentArchivedRequestModel" } } }, @@ -2855,10 +3271,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "$ref": "#/components/schemas/AgentSummaryResponseModel" } } } @@ -2882,6 +3295,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -2899,38 +3322,14 @@ } } }, - "/companies/{companyId}/contactinfo": { + "/apiusers": { "get": { "tags": [ - "Companies" - ], - "summary": "Returns the contact infos of the company with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", - "operationId": "GetCompanyContactInfoByCompanyId", - "parameters": [ - { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } + "ApiUsers" ], + "summary": "Returns all API users.", + "description": "Returns all API users.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "operationId": "GetApiUsers", "responses": { "200": { "description": "OK", @@ -2939,7 +3338,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ContactInfoForCompanies" + "$ref": "#/components/schemas/ApiUser" } } } @@ -2958,34 +3357,22 @@ ], "x-access": { "admin": "true", - "company-master-data": "read" + "workspace-manage-config": "read" } }, "post": { "tags": [ - "Companies" - ], - "summary": "Creates a new contact info for the company with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", - "operationId": "PostCompanyContactInfoByCompanyId", - "parameters": [ - { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "ApiUsers" ], + "summary": "Creates an API user.", + "description": "Beware: API users will also be returned in the /users response when including\r\n archived users.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostApiUser", "requestBody": { - "description": "The contact info to create.", + "description": "The model to create the API user.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContactInfoForm" + "$ref": "#/components/schemas/ApiUserPostForm" } } }, @@ -2997,7 +3384,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContactInfoForCompanies" + "$ref": "#/components/schemas/ApiUser" } } } @@ -3011,6 +3398,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -3025,33 +3422,23 @@ ], "x-access": { "admin": "true", - "company-master-data": "write" + "workspace-manage-config": "write" } } }, - "/companies/{companyId}/contactinfo/{contactInfoId}": { + "/apiusers/{apiUserId}": { "delete": { "tags": [ - "Companies" + "ApiUsers" ], - "summary": "Deletes the contact info of the company with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", - "operationId": "DeleteCompanyContactInfoByCompanyIdAndContactInfoId", + "summary": "Deletes the API user with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "DeleteApiUserById", "parameters": [ { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "contactInfoId", + "name": "apiUserId", "in": "path", - "description": "The id of the contact info.", + "description": "The id of the API user to delete.", "required": true, "schema": { "type": "string", @@ -3063,16 +3450,6 @@ "204": { "description": "No Content" }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -3096,48 +3473,26 @@ ], "x-access": { "admin": "true", - "company-master-data": "write" + "workspace-manage-config": "write" } }, "get": { "tags": [ - "Companies" + "ApiUsers" ], - "summary": "Returns the specified contact info of the company with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", - "operationId": "GetCompanyContactInfoByCompanyIdAndContactInfoId", + "summary": "Returns the API user with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "operationId": "GetApiUserById", "parameters": [ { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "contactInfoId", + "name": "apiUserId", "in": "path", - "description": "The id of the contact info.", + "description": "The id of the API user.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -3146,17 +3501,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContactInfoForCompanies" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ApiUser" } } } @@ -3184,31 +3529,21 @@ ], "x-access": { "admin": "true", - "company-master-data": "read" + "workspace-manage-config": "read" } }, "put": { "tags": [ - "Companies" + "ApiUsers" ], - "summary": "Updates the contact info for the company with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", - "operationId": "PutCompanyContactInfoByCompanyIdAndContactInfoId", + "summary": "Updates the API user with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PutApiUserById", "parameters": [ { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "contactInfoId", + "name": "apiUserId", "in": "path", - "description": "The id of the contact info.", + "description": "The id of the API user to update.", "required": true, "schema": { "type": "string", @@ -3217,11 +3552,11 @@ } ], "requestBody": { - "description": "The updated contact info data.", + "description": "The model to update the API user.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContactInfoForm" + "$ref": "#/components/schemas/ApiUserForm" } } }, @@ -3233,7 +3568,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContactInfoForCompanies" + "$ref": "#/components/schemas/ApiUser" } } } @@ -3271,72 +3606,68 @@ ], "x-access": { "admin": "true", - "company-master-data": "write" + "workspace-manage-config": "write" } } }, - "/companies/{companyId}/delete": { - "post": { + "/automations/catalog": { + "get": { "tags": [ - "Companies" - ], - "summary": "Deletes the company with the specified id.", - "description": "There are several ways to delete a company.\r\n Look into the property description of the post model to get detailed information.\r\n
If the post is executed without a model, the default process 'delete-only-company' will be executed.\r\n
For the operation 'delete-all-without-timeentries' project-master-data write permissions are required on all projects of the company.\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", - "operationId": "PostCompanyDeleteByCompanyId", - "parameters": [ - { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Project Automations" ], - "requestBody": { - "description": "The model describing how to delete the company.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CompanyDeleteForm" - } - } - }, - "required": true - }, + "summary": "Returns all supported automation trigger and action types.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetAutomationsCatalog", "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/AutomationCatalogModel" } } } - }, - "404": { - "description": "Not Found", + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/autopilot/availablealerts": { + "get": { + "tags": [ + "Autopilot" + ], + "summary": "Returns all available alerts for autopilots.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetAutopilotAvailableAlerts", + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + "behind_schedule", + "overdue" + ] } } } @@ -3352,24 +3683,23 @@ "v1" ], "x-access": { - "admin": "true", - "company-master-data": "write" + "any": "true" } } }, - "/companies/{companyId}/deletetags": { - "post": { + "/autopilot/{autopilotId}": { + "get": { "tags": [ - "CompanyTags" + "Autopilot" ], - "summary": "Removes tags from the company with the specified id.", - "description": "Removes tags from the company with the specified id.\r\n \r\n Returns 204 NoContent if all tags have been removed successfully.\r\n Returns 207 MultiStatus if at least one tag could not be removed, including the reasons.\r\n \r\n To remove tags from a company the user must have `company-master-data:write` permissions on the specified company.", - "operationId": "PostCompanyDeleteTagsByCompanyId", - "parameters": [ + "summary": "Returns the autopilot with the specified id.", + "description": "Returns the autopilot including its alerts.\r\n To get the autopilot data the user needs to be the owner of the project or 'read' permissions\r\n of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", + "operationId": "GetAutopilotByAutopilotId", + "parameters": [ { - "name": "companyId", + "name": "autopilotId", "in": "path", - "description": "The id of the company.", + "description": "The id of the autopilot.", "required": true, "schema": { "type": "string", @@ -3377,43 +3707,13 @@ } } ], - "requestBody": { - "description": "The tags to remove.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DeleteTagForm" - } - } - } - }, - "required": true - }, "responses": { - "204": { - "description": "No Content" - }, - "207": { - "description": "Multi-Status" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Autopilot" } } } @@ -3434,54 +3734,24 @@ } } }, - "/companies/{companyId}/externalfiles": { - "post": { + "/clientapplications": { + "get": { "tags": [ - "CompanyFiles" - ], - "summary": "Endpoint to batch create external files without uploading.", - "description": "Endpoint to create file infos with batch operation.\nCreated file infos don't have a version.\r\n\r\nAny authenticated user.", - "operationId": "CreateExternalFiles", - "parameters": [ - { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Client Applications" ], - "requestBody": { - "description": "List of file forms.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - }, - "application/*+json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - } - } - }, + "summary": "Returns all client applications.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "operationId": "GetClientApplications", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/ClientApplication" + } } } } @@ -3498,90 +3768,27 @@ "v1" ], "x-access": { - "any": "true" - } - } - }, - "/companies/{companyId}/files": { - "delete": { - "tags": [ - "CompanyFiles" - ], - "summary": "Deletes the files of the specified company.", - "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCompanyFiles", - "parameters": [ - { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "read" } }, "post": { "tags": [ - "CompanyFiles" - ], - "summary": "Creates a new company file for the company with the specified id..", - "description": "Uploads a new company file for the company with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateCompanyFile", - "parameters": [ - { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Client Applications" ], + "summary": "Registers a new client application.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostClientApplications", "requestBody": { + "description": "The client application model.", "content": { - "multipart/form-data": { + "application/json": { "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } + "$ref": "#/components/schemas/ClientApplicationCreateForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -3589,13 +3796,20 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ClientApplicationCreateResponse" } } } }, "400": { - "description": "Bad Request" + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -3609,52 +3823,47 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/companies/{companyId}/files/byurl": { + "/clientapplications/register": { "post": { "tags": [ - "CompanyFiles" - ], - "summary": "Uploads a new file by providing an url.", - "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", - "operationId": "CreateCompanyFileByUrl", - "parameters": [ - { - "name": "companyId", - "in": "path", - "description": "The id of the company the file is linked to.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Client Applications" ], + "summary": "Dynamically registers a new OAuth 2.0 client according to RFC 7591.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "PostClientApplicationsRegister", "requestBody": { - "description": "The url, name and description of the file.", + "description": "The dynamic client registration request.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" + "$ref": "#/components/schemas/DynamicClientRegistrationEndpointRequest" } } - } + }, + "required": true }, "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/DynamicClientRegistrationResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -3671,43 +3880,52 @@ "v1" ], "x-access": { - "any": "true" + "anonymous": "true" } } }, - "/companies/{companyId}/files/{fileId}": { + "/clientapplications/{clientId}": { "delete": { "tags": [ - "CompanyFiles" + "Client Applications" ], - "summary": "Deletes the company file with the specified id.", - "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCompanyFile", + "summary": "Deletes the specified client application.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "DeleteClientApplicationsByClientId", "parameters": [ { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "clientId", "in": "path", - "description": "The id of the file.", + "description": "The id of the client application.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "responses": { "204": { "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -3721,35 +3939,25 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } }, "get": { "tags": [ - "Company Files" + "Client Applications" ], - "summary": "Returns the file with the specified id of the company with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByCompanyNameAndCompanyIdAndFileId", + "summary": "Returns the client application with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "operationId": "GetClientApplicationsByClientId", "parameters": [ { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "clientId", "in": "path", - "description": "The id of the file.", + "description": "The id of the client application.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -3759,17 +3967,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ClientApplication" } } } @@ -3796,52 +3994,38 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "read" } }, "put": { "tags": [ - "CompanyFiles" + "Client Applications" ], - "summary": "Updates the metadata of the company file with the specified id.", - "description": "Updates the metadata of the company file with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "UpdateCompanyFile", + "summary": "Updates the client application with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PutClientApplicationsByClientId", "parameters": [ { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "clientId", "in": "path", - "description": "The id of the file.", + "description": "The id of the client application.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "requestBody": { - "description": "The model to update the file with the specified id.", + "description": "The client application model.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" + "$ref": "#/components/schemas/ClientApplicationUpdateForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -3849,7 +4033,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ClientApplication" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -3866,54 +4070,40 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/companies/{companyId}/files/{fileId}/changeentity": { + "/clientapplications/{clientId}/generateapikey": { "post": { "tags": [ - "CompanyFiles" + "Client Applications" ], - "summary": "Changes the company this file belongs to.", - "description": "Changes the company this file belongs to.\nSwitch to the specified company or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", - "operationId": "ChangeCompany", + "summary": "Generates an API key for the specified client application.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "operationId": "PostClientApplicationsGenerateApiKeyByClientId", "parameters": [ { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "clientId", "in": "path", - "description": "The id of the file.", + "description": "The id of the client application.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "requestBody": { - "description": "The model to change the entity information of the file.", + "description": "The model to generate an API key.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" + "$ref": "#/components/schemas/ClientApplicationApiKeyForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -3921,7 +4111,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/TokenResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -3938,136 +4148,98 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "read" } } }, - "/companies/{companyId}/files/{fileId}/copy": { + "/clientapplications/{clientId}/generatesecret": { "post": { "tags": [ - "CompanyFiles" + "Client Applications" ], - "summary": "Copies the file to a new company.", - "description": "Copies the file to a new company (meta and content).\r\n\r\nAny authenticated user.", - "operationId": "CopyToCompany", + "summary": "Generates a new secret for the specified client application.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostClientApplicationsGenerateSecretByClientId", "parameters": [ { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "clientId", "in": "path", - "description": "The id of the file.", + "description": "The id of the client application.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], - "requestBody": { - "description": "The model to change the entity information of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - } - } - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ClientApplicationGeneratePasswordResponse" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] } ], "x-api-versions": [ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/companies/{companyId}/files/{fileId}/download": { + "/companies": { "get": { "tags": [ - "CompanyFiles" + "Companies" ], - "summary": "Returns the content of the company file with the specified id.", - "description": "Returns the content of the company file. Uses the latest file version.\nIf the company file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", - "operationId": "GetCompanyFileContent", + "summary": "Returns all companies.", + "description": "\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", + "operationId": "GetCompanies", "parameters": [ { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" }, { - "name": "width", - "in": "query", - "description": "Set width to resize.", - "schema": { - "type": "number", - "format": "double" - } + "$ref": "#/components/parameters/pageSize" }, { - "name": "height", - "in": "query", - "description": "Set height to resize.", - "schema": { - "type": "number", - "format": "double" - } + "$ref": "#/components/parameters/orderby" }, { - "name": "crop", - "in": "query", - "description": "Whether to crop the image when resizing it.", - "schema": { - "type": "boolean" - } + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -4076,8 +4248,10 @@ "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "type": "array", + "items": { + "$ref": "#/components/schemas/Company" + } } } } @@ -4094,57 +4268,45 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "company-master-data": "read" } - } - }, - "/companies/{companyId}/files/{fileId}/pdf": { - "get": { + }, + "post": { "tags": [ - "CompanyFiles" + "Companies" ], - "summary": "Returns the content of the file with the specified id as pdf.\ntype or conversion not possible.", - "description": "Returns the content of the company file. Uses the latest file version.\r\n\r\nAny authenticated user.", - "operationId": "GetCompanyFileContent", - "parameters": [ - { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Creates a new company.", + "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", + "operationId": "PostCompany", + "requestBody": { + "description": "The company to create.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CompanyForm" + } } }, - { - "name": "inline", - "in": "query", - "description": "If inline is false, content-disposition header is attachment.", - "schema": { - "type": "boolean", - "default": false - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/Company" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -4161,47 +4323,89 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "company-master-data": "write" } } }, - "/companies/{companyId}/files/{fileId}/shareurl": { - "get": { + "/companies/deletetags": { + "post": { "tags": [ - "CompanyFiles" + "CompanyTags" ], - "summary": "Returns an url to share the file.", - "description": "Returns a url to share the file.\r\n\r\nAny authenticated user.", - "operationId": "GetPublicToken", - "parameters": [ - { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Removes a tag from all companies.", + "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", + "operationId": "PostCompaniesDeleteTags", + "requestBody": { + "description": "The model with the tag to be removed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteTagForm" + } } }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "company-master-data": "write" + } + } + }, + "/companies/industries": { + "get": { + "tags": [ + "Companies" ], + "summary": "Returns all company industries that are currently in use.", + "description": "\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", + "operationId": "GetCompaniesIndustries", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } } } @@ -4218,52 +4422,19 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "company-master-data": "read" } } }, - "/companies/{companyId}/files/{fileId}/versions": { + "/companies/tags": { "get": { "tags": [ - "CompanyFiles" - ], - "summary": "Returns all file versions of the specified company file.", - "description": "Returns all file versions of the specified company file.\r\n\r\nAny authenticated user.", - "operationId": "GetCompanyFileVersions", - "parameters": [ - { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } + "CompanyTags" ], + "summary": "Returns all tags that are currently in use by companies.", + "description": "Returns all tags that are currently in use by companies ordered by count.\r\n\r\nAny authenticated user.", + "operationId": "GetCompanyTags", "responses": { "200": { "description": "OK", @@ -4272,7 +4443,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/BaseTagModel" } } } @@ -4292,72 +4463,40 @@ "x-access": { "any": "true" } - }, + } + }, + "/companies/updatetags": { "post": { "tags": [ - "CompanyFiles" - ], - "summary": "Uploads a new version of the company file with the specified id.", - "description": "Uploads a new version of an company file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateCompanyFileVersion", - "parameters": [ - { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "CompanyTags" ], + "summary": "Updates a tag globally for all companies.", + "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", + "operationId": "PostCompaniesUpdateTags", "requestBody": { + "description": "The model containing the tag updates.", "content": { - "multipart/form-data": { + "application/json": { "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } + "$ref": "#/components/schemas/TagUpdateForm" } } - } + }, + "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/ErrorResponse" } } } - }, - "400": { - "description": "Bad Request" } }, "security": [ @@ -4371,18 +4510,19 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "company-master-data": "write" } } }, - "/companies/{companyId}/files/{fileId}/versions/{versionId}": { + "/companies/{companyId}": { "get": { "tags": [ - "Company Files" + "Companies" ], - "summary": "Returns the company file version with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByCompanyNameAndCompanyIdAndFileIdAndVersionId", + "summary": "Returns the company with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", + "operationId": "GetCompanyById", "parameters": [ { "name": "companyId", @@ -4393,26 +4533,6 @@ "type": "string", "format": "uuid" } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "responses": { @@ -4421,17 +4541,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Company" } } } @@ -4458,43 +4568,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "company-master-data": "read" } - } - }, - "/companies/{companyId}/files/{fileId}/versions/{versionId}/download": { - "get": { + }, + "put": { "tags": [ - "CompanyFiles" + "Companies" ], - "summary": "Returns the content of the company file version with the specified id.", - "description": "Returns the content of the company file version with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetCompanyFileVersionContent", + "summary": "Updates the company with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", + "operationId": "PutCompanyById", "parameters": [ { "name": "companyId", "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", + "description": "The id of the company to update.", "required": true, "schema": { "type": "string", @@ -4502,14 +4591,34 @@ } } ], + "requestBody": { + "description": "The model with updated company data.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CompanyForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/Company" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -4526,23 +4635,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "company-master-data": "write" } } }, - "/companies/{companyId}/tags": { - "get": { + "/companies/{companyId}/addtags": { + "post": { "tags": [ "CompanyTags" ], - "summary": "Returns the tags of the company with the specified id.", - "description": "Returns the tags of the company with the specified id ordered by name.\r\n To read tags of a company the user must have `company-master-data:read` permissions on the specified company.", - "operationId": "GetCompanyTagsByCompanyId", + "summary": "Adds a batch of new tags to the company with the specified id.", + "description": "The request fails if one of the tags is invalid (e.g. empty or duplicate).\r\n To add tags to a company the user must have `company-master-data:write` permissions on the specified company.", + "operationId": "PostCompanyAddTagsByCompanyId", "parameters": [ { "name": "companyId", "in": "path", - "description": "The id of the company.", + "description": "The id of the company to add tags to.", "required": true, "schema": { "type": "string", @@ -4550,6 +4660,20 @@ } } ], + "requestBody": { + "description": "The model containing the tags to be added.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TagForm" + } + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", @@ -4564,6 +4688,16 @@ } } }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "401": { "description": "Unauthorized", "content": { @@ -4590,23 +4724,36 @@ } } }, - "/customfielddefinitions": { + "/companies/{companyId}/contactinfo": { "get": { "tags": [ - "CustomFields" + "Companies" ], - "summary": "Returns all custom field definitions.", - "description": "The 'linkedProjectIds' are the project Ids that are linked to the custom field definition.\r\n The 'linkedProjectIds' property will only be included when the 'includeLinkedProjectIds' parameter is set to 'true'.\r\n\r\nAny authenticated user.", - "operationId": "GetCustomFieldDefinitions", + "summary": "Returns the contact infos of the company with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", + "operationId": "GetCompanyContactInfoByCompanyId", "parameters": [ { - "name": "includeLinkedProjectIds", - "in": "query", - "description": "Whether to include linked project Ids in the response.", + "name": "companyId", + "in": "path", + "description": "The id of the company.", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -4617,7 +4764,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptionsAndLinkedProjectIds" + "$ref": "#/components/schemas/ContactInfoForCompanies" } } } @@ -4635,22 +4782,35 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "company-master-data": "read" } }, "post": { "tags": [ - "CustomFields" + "Companies" + ], + "summary": "Creates a new contact info for the company with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", + "operationId": "PostCompanyContactInfoByCompanyId", + "parameters": [ + { + "name": "companyId", + "in": "path", + "description": "The id of the company.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Creates a new custom field definition.", - "description": "Creates a new custom field definition. This custom field definition can then be linked to project templates and to tasks.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostCustomFieldDefinition", "requestBody": { - "description": "The model containing the details for creating a new custom field definition.", + "description": "The contact info to create.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldDefinitionPostForm" + "$ref": "#/components/schemas/ContactInfoForm" } } }, @@ -4662,7 +4822,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" + "$ref": "#/components/schemas/ContactInfoForCompanies" } } } @@ -4690,23 +4850,33 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "company-master-data": "write" } } }, - "/customfielddefinitions/{customFieldDefinitionId}": { + "/companies/{companyId}/contactinfo/{contactInfoId}": { "delete": { "tags": [ - "CustomFields" + "Companies" ], - "summary": "Deletes the custom field definition with the specified Id.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "DeleteCustomFieldDefinitionById", + "summary": "Deletes the contact info of the company with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", + "operationId": "DeleteCompanyContactInfoByCompanyIdAndContactInfoId", "parameters": [ { - "name": "customFieldDefinitionId", + "name": "companyId", "in": "path", - "description": "The id of the custom field definition to delete.", + "description": "The id of the company.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "contactInfoId", + "in": "path", + "description": "The id of the contact info.", "required": true, "schema": { "type": "string", @@ -4718,6 +4888,16 @@ "204": { "description": "No Content" }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -4741,46 +4921,57 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "company-master-data": "write" } }, - "put": { + "get": { "tags": [ - "CustomFields" + "Companies" ], - "summary": "Updates the custom field definition with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutCustomFieldDefinitionById", + "summary": "Returns the specified contact info of the company with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", + "operationId": "GetCompanyContactInfoByCompanyIdAndContactInfoId", "parameters": [ { - "name": "customFieldDefinitionId", + "name": "companyId", "in": "path", - "description": "The id of the custom field definition to update.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The model to change the custom field definition.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomFieldDefinitionPutForm" - } + }, + { + "name": "contactInfoId", + "in": "path", + "description": "The id of the contact info.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldDefinition" + "$ref": "#/components/schemas/ContactInfoForCompanies" } } } @@ -4818,23 +5009,31 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "company-master-data": "read" } - } - }, - "/customfielddefinitions/{customFieldDefinitionId}/selectionoptions": { - "post": { + }, + "put": { "tags": [ - "CustomFields" + "Companies" ], - "summary": "Creates a custom field selection option for an existing custom field definition.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostCustomFieldDefinitionSelectionOptionsByCustomFieldDefinitionId", + "summary": "Updates the contact info for the company with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", + "operationId": "PutCompanyContactInfoByCompanyIdAndContactInfoId", "parameters": [ { - "name": "customFieldDefinitionId", + "name": "companyId", "in": "path", - "description": "The id of the custom field definition to add a selection option to.", + "description": "The id of the company.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "contactInfoId", + "in": "path", + "description": "The id of the contact info.", "required": true, "schema": { "type": "string", @@ -4843,11 +5042,11 @@ } ], "requestBody": { - "description": "The model describing the selection option to create.", + "description": "The updated contact info data.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldSelectionOptionsForm" + "$ref": "#/components/schemas/ContactInfoForm" } } }, @@ -4859,7 +5058,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldSelectionOption" + "$ref": "#/components/schemas/ContactInfoForCompanies" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -4887,33 +5096,23 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "company-master-data": "write" } } }, - "/customfielddefinitions/{customFieldDefinitionId}/selectionoptions/{selectionOptionId}": { - "delete": { + "/companies/{companyId}/delete": { + "post": { "tags": [ - "CustomFields" + "Companies" ], - "summary": "Deletes a custom field selection option for an existing custom field definition.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "DeleteCustomFieldDefinitionSelectionOptionByCustomFieldDefinitionIdAndSelectionOptionId", + "summary": "Deletes the company with the specified id.", + "description": "There are several ways to delete a company.\r\n Look into the property description of the post model to get detailed information.\r\n
If the post is executed without a model, the default process 'delete-only-company' will be executed.\r\n
For the operation 'delete-all-without-timeentries' project-master-data write permissions are required on all projects of the company.\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", + "operationId": "PostCompanyDeleteByCompanyId", "parameters": [ { - "name": "customFieldDefinitionId", - "in": "path", - "description": "The id of the custom field definition containing the selection option.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "selectionOptionId", + "name": "companyId", "in": "path", - "description": "The id of the selection option to delete.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -4921,10 +5120,41 @@ } } ], + "requestBody": { + "description": "The model describing how to delete the company.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CompanyDeleteForm" + } + } + }, + "required": true + }, "responses": { "204": { "description": "No Content" }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -4948,31 +5178,23 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "company-master-data": "write" } - }, - "put": { + } + }, + "/companies/{companyId}/deletetags": { + "post": { "tags": [ - "CustomFields" + "CompanyTags" ], - "summary": "Updates a custom field selection option for an existing custom field definition.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutCustomFieldDefinitionSelectionOptionByCustomFieldDefinitionIdAndSelectionOptionId", + "summary": "Removes tags from the company with the specified id.", + "description": "Removes tags from the company with the specified id.\r\n \r\n Returns 204 NoContent if all tags have been removed successfully.\r\n Returns 207 MultiStatus if at least one tag could not be removed, including the reasons.\r\n \r\n To remove tags from a company the user must have `company-master-data:write` permissions on the specified company.", + "operationId": "PostCompanyDeleteTagsByCompanyId", "parameters": [ { - "name": "customFieldDefinitionId", - "in": "path", - "description": "The id of the custom field definition containing the selection option.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "selectionOptionId", + "name": "companyId", "in": "path", - "description": "The id of the selection option to update.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -4981,29 +5203,38 @@ } ], "requestBody": { - "description": "The model describing the updated selection option.", + "description": "The tags to remove.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldSelectionOptionsForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/DeleteTagForm" + } } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "207": { + "description": "Multi-Status" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldSelectionOption" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -5024,52 +5255,58 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/documents": { - "get": { + "/companies/{companyId}/externalfiles": { + "post": { "tags": [ - "Documents" + "CompanyFiles" ], - "summary": "Returns all documents.", - "description": "The user must have at least `read` permissions to see a document.", - "operationId": "GetDocuments", + "summary": "Endpoint to batch create external files without uploading.", + "description": "Endpoint to create file infos with batch operation.\nCreated file infos don't have a version.\r\n\r\nAny authenticated user.", + "operationId": "CreateExternalFiles", "parameters": [ { - "name": "includeTrashedDocuments", - "in": "query", - "description": "Whether to include trashed documents in the result.", + "name": "companyId", + "in": "path", + "description": "The id of the company.", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], + "requestBody": { + "description": "List of file forms.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" + } + } + }, + "application/*+json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" + } + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "$ref": "#/components/schemas/FileInfo" } } } @@ -5088,19 +5325,85 @@ "x-access": { "any": "true" } + } + }, + "/companies/{companyId}/files": { + "delete": { + "tags": [ + "CompanyFiles" + ], + "summary": "Deletes the files of the specified company.", + "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", + "operationId": "DeleteCompanyFiles", + "parameters": [ + { + "name": "companyId", + "in": "path", + "description": "The id of the company.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } }, "post": { "tags": [ - "Documents" + "CompanyFiles" + ], + "summary": "Creates a new company file for the company with the specified id..", + "description": "Uploads a new company file for the company with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", + "operationId": "CreateCompanyFile", + "parameters": [ + { + "name": "companyId", + "in": "path", + "description": "The id of the company.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Creates a new document with optional HTML or Markdown content.", - "description": "When content is provided, set `contentFormat` to `html` or `markdown`. HTML is the default. Canonical awork Markdown preserves safe editor structures during re-import.\r\n\r\nAny authenticated user.", - "operationId": "PostDocument", "requestBody": { "content": { "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/DocumentPostForm" + "required": [ + "File" + ], + "type": "object", + "properties": { + "File": { + "type": "string", + "format": "binary" + } + } + }, + "encoding": { + "File": { + "style": "form" + } } } } @@ -5111,10 +5414,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentModel" + "$ref": "#/components/schemas/FileInfo" } } } + }, + "400": { + "description": "Bad Request" } }, "security": [ @@ -5132,45 +5438,48 @@ } } }, - "/documents/trash/{documentId}/restore": { + "/companies/{companyId}/files/byurl": { "post": { "tags": [ - "Documents" + "CompanyFiles" ], - "summary": "Restores the document with the specified id from the trash.", - "description": "Please note that restoring a document using this method will asynchronously and eventually update or recreate the document and the related entities such as document versions or its content.\r\n This operation is idempotent, if applied to an already restored document, it will return a NoContent result.\r\n \r\n The user must have at least `write` permissions for the specified document.", - "operationId": "PostDocumentsTrashRestoreByDocumentId", + "summary": "Uploads a new file by providing an url.", + "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", + "operationId": "CreateCompanyFileByUrl", "parameters": [ { - "name": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document to restore.", + "description": "The id of the company the file is linked to.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "name": "alsoRestoreChildren", - "in": "query", - "description": "Whether to also restore children documents.", - "schema": { - "type": "boolean", - "default": true - } } ], + "requestBody": { + "description": "The url, name and description of the file.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FilePostForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FilePostForm" + } + } + } + }, "responses": { - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -5191,19 +5500,19 @@ } } }, - "/documents/{documentId}": { + "/companies/{companyId}/files/{fileId}": { "delete": { "tags": [ - "Documents" + "CompanyFiles" ], - "summary": "Deletes the document with the specified id.", - "description": "This operation moves the document to the trash.\r\n The document itself is moved to the trash synchronously, while its children and related entities will be moved to the trash asynchronously.\r\n \r\n The user must have at least `manage` permissions for the specified document.", - "operationId": "DeleteDocumentById", + "summary": "Deletes the company file with the specified id.", + "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", + "operationId": "DeleteCompanyFile", "parameters": [ { - "name": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document to delete.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -5211,38 +5520,19 @@ } }, { - "name": "alsoDeleteChildren", - "in": "query", - "description": "Whether to also delete children documents. If false, the children's parent references are updated to point to the deleted document's parent.", + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, "schema": { - "type": "boolean", - "default": true + "type": "string", + "format": "uuid" } } ], "responses": { "204": { "description": "No Content" - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -5261,16 +5551,26 @@ }, "get": { "tags": [ - "Documents" + "Company Files" ], - "summary": "Returns the document with the specified id.", - "description": "The user must have at least `read` permissions for the specified document.", - "operationId": "GetDocumentById", + "summary": "Returns the file with the specified id of the company with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByCompanyNameAndCompanyIdAndFileId", "parameters": [ { - "name": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document to retrieve.", + "description": "The id of the company.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -5284,7 +5584,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentModel" + "$ref": "#/components/schemas/FileInfo" } } } @@ -5326,16 +5626,26 @@ }, "put": { "tags": [ - "Documents" + "CompanyFiles" ], - "summary": "Updates the document with the specified id.", - "description": "The user must have at least `write` permissions for the specified document.", - "operationId": "PutDocumentById", + "summary": "Updates the metadata of the company file with the specified id.", + "description": "Updates the metadata of the company file with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "UpdateCompanyFile", "parameters": [ { - "name": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document to update.", + "description": "The id of the company.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -5344,15 +5654,19 @@ } ], "requestBody": { - "description": "The document form data with the updated information.", + "description": "The model to update the file with the specified id.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentForm" + "$ref": "#/components/schemas/FileInfoUpdateForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileInfoUpdateForm" } } - }, - "required": true + } }, "responses": { "200": { @@ -5360,37 +5674,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -5411,19 +5695,29 @@ } } }, - "/documents/{documentId}/comments": { - "delete": { + "/companies/{companyId}/files/{fileId}/changeentity": { + "post": { "tags": [ - "DocumentComments" + "CompanyFiles" ], - "summary": "Deletes all comments of the specified document.", - "description": "Deletes all comments of the specified document.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCommentsByDocumentNameAndDocumentId", + "summary": "Changes the company this file belongs to.", + "description": "Changes the company this file belongs to.\nSwitch to the specified company or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", + "operationId": "ChangeCompany", "parameters": [ { - "name": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document.", + "description": "The id of the company.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -5431,16 +5725,28 @@ } } ], + "requestBody": { + "description": "The model to change the entity information of the file.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileEntityForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileEntityForm" + } + } + } + }, "responses": { - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -5459,19 +5765,21 @@ "x-access": { "any": "true" } - }, - "get": { + } + }, + "/companies/{companyId}/files/{fileId}/copy": { + "post": { "tags": [ - "DocumentComments" + "CompanyFiles" ], - "summary": "Returns all comments of the document with the specified id.", - "description": "Returns all comments of the document with the specified id. The user needs read permissions on the document.\r\n\r\nAny authenticated user.", - "operationId": "GetCommentsByDocumentNameAndDocumentId", + "summary": "Copies the file to a new company.", + "description": "Copies the file to a new company (meta and content).\r\n\r\nAny authenticated user.", + "operationId": "CopyToCompany", "parameters": [ { - "name": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -5479,48 +5787,38 @@ } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Comment" - } - } + "requestBody": { + "description": "The model to change the entity information of the file.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileCopyForm" } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileCopyForm" } } - }, - "401": { - "description": "Unauthorized", + } + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -5539,74 +5837,72 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/companies/{companyId}/files/{fileId}/download": { + "get": { "tags": [ - "DocumentComments" + "CompanyFiles" ], - "summary": "Creates a new comment on the document with the specified id.", - "description": "Creates a new comment on the document with the specified id.\r\n A user can only create a comment for him/herself, except for admins and api users.\r\n \r\n To create a comment the user must have at least `read` permissions on the specified document.", - "operationId": "PostCommentsByDocumentNameAndDocumentId", + "summary": "Returns the content of the company file with the specified id.", + "description": "Returns the content of the company file. Uses the latest file version.\nIf the company file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", + "operationId": "GetCompanyFileContent", "parameters": [ { - "name": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document to create the comment for.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The model to create the comment.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CommentForm" - } - } }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Comment" - } - } + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "width", + "in": "query", + "description": "Set width to resize.", + "schema": { + "type": "number", + "format": "double" } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "height", + "in": "query", + "description": "Set height to resize.", + "schema": { + "type": "number", + "format": "double" } }, - "404": { - "description": "Not Found", + { + "name": "crop", + "in": "query", + "description": "Whether to crop the image when resizing it.", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string", + "format": "binary" } } } @@ -5627,19 +5923,19 @@ } } }, - "/documents/{documentId}/comments/{commentId}": { - "delete": { + "/companies/{companyId}/files/{fileId}/pdf": { + "get": { "tags": [ - "DocumentComments" + "CompanyFiles" ], - "summary": "Deletes the comment with the specified id on the document with the specified id.", - "description": "Deletes the comment with the specified id on the document with the specified id.\r\n The delete includes the reactions of the comment.\r\n If there are any replies to the comment, they will be deleted as well.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCommentByDocumentNameAndDocumentIdAndCommentId", + "summary": "Returns the content of the file with the specified id as pdf.\ntype or conversion not possible.", + "description": "Returns the content of the company file. Uses the latest file version.\r\n\r\nAny authenticated user.", + "operationId": "GetCompanyFileContent", "parameters": [ { - "name": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -5647,36 +5943,33 @@ } }, { - "name": "commentId", + "name": "fileId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "inline", + "in": "query", + "description": "If inline is false, content-disposition header is attachment.", + "schema": { + "type": "boolean", + "default": false + } } ], "responses": { - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string", + "format": "binary" } } } @@ -5695,19 +5988,21 @@ "x-access": { "any": "true" } - }, + } + }, + "/companies/{companyId}/files/{fileId}/shareurl": { "get": { "tags": [ - "DocumentComments" + "CompanyFiles" ], - "summary": "Returns the comment with the specified id of the document with the specified id.", - "description": "Returns the comment with the specified id of the document with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetCommentByDocumentNameAndDocumentIdAndCommentId", + "summary": "Returns an url to share the file.", + "description": "Returns a url to share the file.\r\n\r\nAny authenticated user.", + "operationId": "GetPublicToken", "parameters": [ { - "name": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -5715,9 +6010,9 @@ } }, { - "name": "commentId", + "name": "fileId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -5731,17 +6026,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string" } } } @@ -5760,19 +6045,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/companies/{companyId}/files/{fileId}/versions": { + "get": { "tags": [ - "DocumentComments" + "CompanyFiles" ], - "summary": "Updates the comment with the specified id on the document with the specified id.", - "description": "To update a comment the user must either have at least `read` permissions on the specified document, be the creator of the comment or be admin.", - "operationId": "PutCommentByDocumentNameAndDocumentIdAndCommentId", + "summary": "Returns all file versions of the specified company file.", + "description": "Returns all file versions of the specified company file.\r\n\r\nAny authenticated user.", + "operationId": "GetCompanyFileVersions", "parameters": [ { - "name": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -5780,54 +6067,38 @@ } }, { - "name": "commentId", + "name": "fileId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The model with the updated comment information.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CommentPutForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileVersion" + } } } } @@ -5846,21 +6117,19 @@ "x-access": { "any": "true" } - } - }, - "/documents/{documentId}/comments/{commentId}/react": { + }, "post": { "tags": [ - "DocumentComments" + "CompanyFiles" ], - "summary": "Updates the reactions of the comment with the specified id on the document with the specified id.", - "description": "To update a reaction of a comment the user must have at least `read` permissions on the specified document.", - "operationId": "PostCommentReactByDocumentNameAndDocumentIdAndCommentId", + "summary": "Uploads a new version of the company file with the specified id.", + "description": "Uploads a new version of an company file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", + "operationId": "CreateCompanyFileVersion", "parameters": [ { - "name": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -5868,9 +6137,9 @@ } }, { - "name": "commentId", + "name": "fileId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -5879,39 +6148,41 @@ } ], "requestBody": { - "description": "The model used to update the reactions of the comment with the specified id.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/ReactionForm" + "required": [ + "File" + ], + "type": "object", + "properties": { + "File": { + "type": "string", + "format": "binary" + } + } + }, + "encoding": { + "File": { + "style": "form" + } } } - }, - "required": true + } }, "responses": { - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileVersion" } } } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "400": { + "description": "Bad Request" } }, "security": [ @@ -5929,19 +6200,19 @@ } } }, - "/documents/{documentId}/comments/{commentId}/setresolved": { - "post": { + "/companies/{companyId}/files/{fileId}/versions/{versionId}": { + "get": { "tags": [ - "DocumentComments" + "Company Files" ], - "summary": "Sets the resolved status of a comment.", - "description": "Sets the resolved status of a comment. Users need write permissions on the document to resolve/unresolve comments.\r\n Currently, the IsResolved property is only available for document comments.\r\n\r\nAny authenticated user.", - "operationId": "PostCommentSetResolvedByDocumentNameAndDocumentIdAndCommentId", + "summary": "Returns the company file version with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByCompanyNameAndCompanyIdAndFileIdAndVersionId", "parameters": [ { - "name": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -5949,9 +6220,19 @@ } }, { - "name": "commentId", + "name": "fileId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "versionId", + "in": "path", + "description": "The id of the file version.", "required": true, "schema": { "type": "string", @@ -5959,24 +6240,13 @@ } } ], - "requestBody": { - "description": "The resolved status.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SetResolvedForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/FileVersion" } } } @@ -6017,19 +6287,19 @@ } } }, - "/documents/{documentId}/content": { + "/companies/{companyId}/files/{fileId}/versions/{versionId}/download": { "get": { "tags": [ - "Documents" + "CompanyFiles" ], - "summary": "Returns the content of the current version of the document with the specified id.", - "description": "The user must have at least `read` permissions for the specified document.", - "operationId": "GetDocumentContentByDocumentId", + "summary": "Returns the content of the company file version with the specified id.", + "description": "Returns the content of the company file version with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetCompanyFileVersionContent", "parameters": [ { - "name": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -6037,21 +6307,23 @@ } }, { - "name": "streamAsFile", - "in": "query", - "description": "Whether to stream the content as a file. By default, the document's content is returned in a model containing a property `Content` holding the content as a string.", + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } }, { - "name": "format", - "in": "query", - "description": "The response format. Supported values are `html` and `markdown`.", + "name": "versionId", + "in": "path", + "description": "The id of the file version.", + "required": true, "schema": { "type": "string", - "default": "html" + "format": "uuid" } } ], @@ -6061,40 +6333,8 @@ "content": { "application/json": { "schema": { - "type": "string" - } - } - } - }, - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string", + "format": "binary" } } } @@ -6113,19 +6353,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/companies/{companyId}/tags": { + "get": { "tags": [ - "Documents" + "CompanyTags" ], - "summary": "Updates document content using UTF-8 HTML or Markdown.", - "description": "Set `contentFormat` to `html` or `markdown`. HTML is the default. Canonical awork Markdown preserves safe editor structures during re-import.\r\n \r\n The user must have at least `write` permissions for the specified document.", - "operationId": "PutDocumentContentByDocumentId", + "summary": "Returns the tags of the company with the specified id.", + "description": "Returns the tags of the company with the specified id ordered by name.\r\n To read tags of a company the user must have `company-master-data:read` permissions on the specified company.", + "operationId": "GetCompanyTagsByCompanyId", "parameters": [ { - "name": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document to update.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -6133,28 +6375,22 @@ } } ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/DocumentContentForm" - } - } - } - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentModel" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -6179,40 +6415,25 @@ } } }, - "/documents/{documentId}/contributors": { - "post": { + "/customfielddefinitions": { + "get": { "tags": [ - "Documents" + "CustomFields" ], - "summary": "Adds a list of document contributors to the document with the specified id.", - "description": "Adding document contributors will grant them access to the document.\r\n There will be a recalculation of permissions for related entities considering the updated document contributor.\r\n \r\n The user must have at least `write` permissions for this document.", - "operationId": "PostDocumentContributorsByDocumentId", + "summary": "Returns all custom field definitions.", + "description": "The 'linkedProjectIds' are the project Ids that are linked to the custom field definition.\r\n The 'linkedProjectIds' property will only be included when the 'includeLinkedProjectIds' parameter is set to 'true'.\r\n\r\nAny authenticated user.", + "operationId": "GetCustomFieldDefinitions", "parameters": [ { - "name": "documentId", - "in": "path", - "description": "The id of the document to add contributors to.", - "required": true, + "name": "includeLinkedProjectIds", + "in": "query", + "description": "Whether to include linked project Ids in the response.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } } ], - "requestBody": { - "description": "The model used to add the document contributors.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ContributorPostForm" - } - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", @@ -6221,34 +6442,58 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/MinimalContributorModel" + "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptionsAndLinkedProjectIds" } } } } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "CustomFields" + ], + "summary": "Creates a new custom field definition.", + "description": "Creates a new custom field definition. This custom field definition can then be linked to project templates and to tasks.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostCustomFieldDefinition", + "requestBody": { + "description": "The model containing the details for creating a new custom field definition.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFieldDefinitionPostForm" } } }, - "401": { - "description": "Unauthorized", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -6269,33 +6514,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/documents/{documentId}/contributors/{documentContributorId}": { + "/customfielddefinitions/{customFieldDefinitionId}": { "delete": { "tags": [ - "Documents" + "CustomFields" ], - "summary": "Deletes the document contributor with the specified id from a document.", - "description": "This operation cannot be performed on inherited document contributors, only explicit ones.\r\n There will be recalculation of permissions for related entities considering the deleted document contributor.\r\n \r\n The user must have at least `write` permissions for the specified document.", - "operationId": "DeleteDocumentContributorByDocumentIdAndDocumentContributorId", + "summary": "Deletes the custom field definition with the specified Id.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "DeleteCustomFieldDefinitionById", "parameters": [ { - "name": "documentId", - "in": "path", - "description": "The id of the document to delete the contributor from.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "documentContributorId", + "name": "customFieldDefinitionId", "in": "path", - "description": "The id of the document contributor to delete.", + "description": "The id of the custom field definition to delete.", "required": true, "schema": { "type": "string", @@ -6307,26 +6543,6 @@ "204": { "description": "No Content" }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -6349,31 +6565,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } }, "put": { "tags": [ - "Documents" + "CustomFields" ], - "summary": "Updates the access of a document contributor with the specified id to a document.", - "description": "Updating a document contributor will affect their access to the document.\r\n There will be a recalculation of permissions for related entities considering the updated document contributor.\r\n \r\n The user must have at least `write` permissions for the specified document.", - "operationId": "PutDocumentContributorByDocumentIdAndDocumentContributorId", + "summary": "Updates the custom field definition with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutCustomFieldDefinitionById", "parameters": [ { - "name": "documentId", - "in": "path", - "description": "The id of the document to update.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "documentContributorId", + "name": "customFieldDefinitionId", "in": "path", - "description": "The id of the document contributor to update.", + "description": "The id of the custom field definition to update.", "required": true, "schema": { "type": "string", @@ -6382,11 +6589,11 @@ } ], "requestBody": { - "description": "The model used to update the document contributor's access.", + "description": "The model to change the custom field definition.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContributorForm" + "$ref": "#/components/schemas/CustomFieldDefinitionPutForm" } } }, @@ -6398,7 +6605,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalContributorModel" + "$ref": "#/components/schemas/CustomFieldDefinition" } } } @@ -6413,16 +6620,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -6445,23 +6642,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/documents/{documentId}/duplicate": { + "/customfielddefinitions/{customFieldDefinitionId}/selectionoptions": { "post": { "tags": [ - "Documents" + "CustomFields" ], - "summary": "Duplicates the document with the specified id.", - "description": "Duplicates the document content, permissions and children documents.\r\n \r\n The user has at least `read` permissions for the specified document.", - "operationId": "PostDocumentDuplicateByDocumentId", + "summary": "Creates a custom field selection option for an existing custom field definition.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostCustomFieldDefinitionSelectionOptionsByCustomFieldDefinitionId", "parameters": [ { - "name": "documentId", + "name": "customFieldDefinitionId", "in": "path", - "description": "The id of the document to duplicate.", + "description": "The id of the custom field definition to add a selection option to.", "required": true, "schema": { "type": "string", @@ -6469,33 +6667,24 @@ } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DocumentModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "requestBody": { + "description": "The model describing the selection option to create.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFieldSelectionOptionsForm" } } }, - "401": { - "description": "Unauthorized", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/CustomFieldSelectionOption" } } } @@ -6522,58 +6711,51 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/documents/{documentId}/externalfiles": { - "post": { + "/customfielddefinitions/{customFieldDefinitionId}/selectionoptions/{selectionOptionId}": { + "delete": { "tags": [ - "DocumentFiles" + "CustomFields" ], - "summary": "Endpoint to batch create external files without uploading.", - "description": "Endpoint to create file infos with batch operation.\nCreated file infos don't have a version.\r\n\r\nAny authenticated user.", - "operationId": "CreateExternalFiles", + "summary": "Deletes a custom field selection option for an existing custom field definition.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "DeleteCustomFieldDefinitionSelectionOptionByCustomFieldDefinitionIdAndSelectionOptionId", "parameters": [ { - "name": "documentId", + "name": "customFieldDefinitionId", "in": "path", - "description": "The id of the document.", + "description": "The id of the custom field definition containing the selection option.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "List of file forms.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - }, - "application/*+json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } + }, + { + "name": "selectionOptionId", + "in": "path", + "description": "The id of the selection option to delete.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } - }, + ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -6590,23 +6772,32 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } - } - }, - "/documents/{documentId}/files": { - "delete": { + }, + "put": { "tags": [ - "DocumentFiles" + "CustomFields" ], - "summary": "Deletes the files of the specified document.", - "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", - "operationId": "DeleteDocumentFiles", + "summary": "Updates a custom field selection option for an existing custom field definition.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutCustomFieldDefinitionSelectionOptionByCustomFieldDefinitionIdAndSelectionOptionId", "parameters": [ { - "name": "documentId", + "name": "customFieldDefinitionId", "in": "path", - "description": "The id of the document.", + "description": "The id of the custom field definition containing the selection option.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "selectionOptionId", + "in": "path", + "description": "The id of the selection option to update.", "required": true, "schema": { "type": "string", @@ -6614,9 +6805,37 @@ } } ], - "responses": { - "204": { - "description": "No Content" + "requestBody": { + "description": "The model describing the updated selection option.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFieldSelectionOptionsForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFieldSelectionOption" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -6630,25 +6849,27 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } - }, + } + }, + "/documents": { "get": { "tags": [ - "DocumentFiles" + "Documents" ], - "summary": "Returns all files of the document with the specified id.", - "description": "Returns all file metadata of the document with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetDocumentFiles", + "summary": "Returns all documents.", + "description": "The user must have at least `read` permissions to see a document.", + "operationId": "GetDocuments", "parameters": [ { - "name": "documentId", - "in": "path", - "description": "The id of the document.", - "required": true, + "name": "includeTrashedDocuments", + "in": "query", + "description": "Whether to include trashed documents in the result.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } }, { @@ -6672,7 +6893,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/DocumentModel" } } } @@ -6695,42 +6916,16 @@ }, "post": { "tags": [ - "DocumentFiles" - ], - "summary": "Creates a new document file for the document with the specified id..", - "description": "Uploads a new document file for the document with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateDocumentFile", - "parameters": [ - { - "name": "documentId", - "in": "path", - "description": "The id of the document.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Documents" ], + "summary": "Creates a new document with optional HTML or Markdown content.", + "description": "When content is provided, set `contentFormat` to `html` or `markdown`. HTML is the default. Canonical awork Markdown preserves safe editor structures during re-import.\r\n\r\nAny authenticated user.", + "operationId": "PostDocument", "requestBody": { "content": { "multipart/form-data": { "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } + "$ref": "#/components/schemas/DocumentPostForm" } } } @@ -6741,13 +6936,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/DocumentModel" } } } - }, - "400": { - "description": "Bad Request" } }, "security": [ @@ -6765,44 +6957,169 @@ } } }, - "/documents/{documentId}/files/byuploadid": { + "/documents/trash/{documentId}/restore": { "post": { "tags": [ - "FileUpload" + "Documents" ], - "summary": "Creates a file from an upload id.", - "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file document from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", - "operationId": "PostUploadByUploadId", + "summary": "Restores the document with the specified id from the trash.", + "description": "Please note that restoring a document using this method will asynchronously and eventually update or recreate the document and the related entities such as document versions or its content.\r\n This operation is idempotent, if applied to an already restored document, it will return a NoContent result.\r\n \r\n The user must have at least `write` permissions for the specified document.", + "operationId": "PostDocumentsTrashRestoreByDocumentId", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document to attach the file to.", + "description": "The id of the document to restore.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "alsoRestoreChildren", + "in": "query", + "description": "Whether to also restore children documents.", + "schema": { + "type": "boolean", + "default": true + } } ], - "requestBody": { - "description": "The model describing the uploaded file metadata.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UploadByUploadIdForm" + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/documents/{documentId}": { + "delete": { + "tags": [ + "Documents" + ], + "summary": "Deletes the document with the specified id.", + "description": "This operation moves the document to the trash.\r\n The document itself is moved to the trash synchronously, while its children and related entities will be moved to the trash asynchronously.\r\n \r\n The user must have at least `manage` permissions for the specified document.", + "operationId": "DeleteDocumentById", + "parameters": [ + { + "name": "documentId", + "in": "path", + "description": "The id of the document to delete.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, - "required": true + { + "name": "alsoDeleteChildren", + "in": "query", + "description": "Whether to also delete children documents. If false, the children's parent references are updated to point to the deleted document's parent.", + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "get": { + "tags": [ + "Documents" + ], + "summary": "Returns the document with the specified id.", + "description": "The user must have at least `read` permissions for the specified document.", + "operationId": "GetDocumentById", + "parameters": [ + { + "name": "documentId", + "in": "path", + "description": "The id of the document to retrieve.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/DocumentModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -6831,21 +7148,19 @@ "x-access": { "any": "true" } - } - }, - "/documents/{documentId}/files/byurl": { - "post": { + }, + "put": { "tags": [ - "DocumentFiles" + "Documents" ], - "summary": "Uploads a new file by providing an url.", - "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", - "operationId": "CreateDocumentFileByUrl", + "summary": "Updates the document with the specified id.", + "description": "The user must have at least `write` permissions for the specified document.", + "operationId": "PutDocumentById", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document the file is linked to.", + "description": "The id of the document to update.", "required": true, "schema": { "type": "string", @@ -6854,19 +7169,15 @@ } ], "requestBody": { - "description": "The url, name and description of the file.", + "description": "The document form data with the updated information.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" + "$ref": "#/components/schemas/DocumentForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -6874,7 +7185,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/DocumentModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -6895,14 +7236,14 @@ } } }, - "/documents/{documentId}/files/{fileId}": { + "/documents/{documentId}/comments": { "delete": { "tags": [ - "DocumentFiles" + "DocumentComments" ], - "summary": "Deletes the document file with the specified id.", - "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", - "operationId": "DeleteDocumentFile", + "summary": "Deletes all comments of the specified document.", + "description": "Deletes all comments of the specified document.\r\n\r\nAny authenticated user.", + "operationId": "DeleteCommentsByDocumentNameAndDocumentId", "parameters": [ { "name": "documentId", @@ -6913,21 +7254,21 @@ "type": "string", "format": "uuid" } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "responses": { "204": { "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -6946,11 +7287,11 @@ }, "get": { "tags": [ - "Document Files" + "DocumentComments" ], - "summary": "Returns the file with the specified id of the document with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByDocumentNameAndDocumentIdAndFileId", + "summary": "Returns all comments of the document with the specified id.", + "description": "Returns all comments of the document with the specified id. The user needs read permissions on the document.\r\n\r\nAny authenticated user.", + "operationId": "GetCommentsByDocumentNameAndDocumentId", "parameters": [ { "name": "documentId", @@ -6963,14 +7304,16 @@ } }, { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -6979,13 +7322,16 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/Comment" + } } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -6994,8 +7340,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -7019,28 +7365,18 @@ "any": "true" } }, - "put": { + "post": { "tags": [ - "DocumentFiles" + "DocumentComments" ], - "summary": "Updates the metadata of the document file with the specified id.", - "description": "Updates the metadata of the document file with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "UpdateDocumentFile", + "summary": "Creates a new comment on the document with the specified id.", + "description": "Creates a new comment on the document with the specified id.\r\n A user can only create a comment for him/herself, except for admins and api users.\r\n \r\n To create a comment the user must have at least `read` permissions on the specified document.", + "operationId": "PostCommentsByDocumentNameAndDocumentId", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", + "description": "The id of the document to create the comment for.", "required": true, "schema": { "type": "string", @@ -7049,19 +7385,15 @@ } ], "requestBody": { - "description": "The model to update the file with the specified id.", + "description": "The model to create the comment.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" + "$ref": "#/components/schemas/CommentForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -7069,7 +7401,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/Comment" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -7090,14 +7452,14 @@ } } }, - "/documents/{documentId}/files/{fileId}/copy": { - "post": { + "/documents/{documentId}/comments/{commentId}": { + "delete": { "tags": [ - "DocumentFiles" + "DocumentComments" ], - "summary": "Copies the file to a new document.", - "description": "Copies the file to a new document (meta and content).\r\n\r\nAny authenticated user.", - "operationId": "CopyToDocument", + "summary": "Deletes the comment with the specified id on the document with the specified id.", + "description": "Deletes the comment with the specified id on the document with the specified id.\r\n The delete includes the reactions of the comment.\r\n If there are any replies to the comment, they will be deleted as well.\r\n\r\nAny authenticated user.", + "operationId": "DeleteCommentByDocumentNameAndDocumentIdAndCommentId", "parameters": [ { "name": "documentId", @@ -7110,9 +7472,9 @@ } }, { - "name": "fileId", + "name": "commentId", "in": "path", - "description": "The id of the file.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -7120,28 +7482,26 @@ } } ], - "requestBody": { - "description": "The model to change the entity information of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } - } - }, - "responses": { - "200": { - "description": "OK", + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -7160,16 +7520,14 @@ "x-access": { "any": "true" } - } - }, - "/documents/{documentId}/files/{fileId}/download": { + }, "get": { "tags": [ - "DocumentFiles" + "DocumentComments" ], - "summary": "Returns the content of the document file with the specified id.", - "description": "Returns the content of the document file. Uses the latest file version.\nIf the document file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", - "operationId": "GetDocumentFileContent", + "summary": "Returns the comment with the specified id of the document with the specified id.", + "description": "Returns the comment with the specified id of the document with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetCommentByDocumentNameAndDocumentIdAndCommentId", "parameters": [ { "name": "documentId", @@ -7182,40 +7540,14 @@ } }, { - "name": "fileId", + "name": "commentId", "in": "path", - "description": "The id of the file.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "name": "width", - "in": "query", - "description": "Set width to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "height", - "in": "query", - "description": "Set height to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "crop", - "in": "query", - "description": "Whether to crop the image when resizing it.", - "schema": { - "type": "boolean" - } } ], "responses": { @@ -7224,8 +7556,17 @@ "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/Comment" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -7244,16 +7585,14 @@ "x-access": { "any": "true" } - } - }, - "/documents/{documentId}/files/{fileId}/shareurl": { - "get": { + }, + "put": { "tags": [ - "DocumentFiles" + "DocumentComments" ], - "summary": "Returns an url to share the file.", - "description": "Returns a url to share the file.\r\n\r\nAny authenticated user.", - "operationId": "GetPublicToken", + "summary": "Updates the comment with the specified id on the document with the specified id.", + "description": "To update a comment the user must either have at least `read` permissions on the specified document, be the creator of the comment or be admin.", + "operationId": "PutCommentByDocumentNameAndDocumentIdAndCommentId", "parameters": [ { "name": "documentId", @@ -7266,9 +7605,9 @@ } }, { - "name": "fileId", + "name": "commentId", "in": "path", - "description": "The id of the file.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -7276,13 +7615,44 @@ } } ], + "requestBody": { + "description": "The model with the updated comment information.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentPutForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/Comment" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -7303,14 +7673,14 @@ } } }, - "/documents/{documentId}/files/{fileId}/versions": { - "get": { + "/documents/{documentId}/comments/{commentId}/react": { + "post": { "tags": [ - "DocumentFiles" + "DocumentComments" ], - "summary": "Returns all file versions of the specified document file.", - "description": "Returns all file versions of the specified document file.\r\n\r\nAny authenticated user.", - "operationId": "GetDocumentFileVersions", + "summary": "Updates the reactions of the comment with the specified id on the document with the specified id.", + "description": "To update a reaction of a comment the user must have at least `read` permissions on the specified document.", + "operationId": "PostCommentReactByDocumentNameAndDocumentIdAndCommentId", "parameters": [ { "name": "documentId", @@ -7323,38 +7693,47 @@ } }, { - "name": "fileId", + "name": "commentId", "in": "path", - "description": "The id of the file.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], + "requestBody": { + "description": "The model used to update the reactions of the comment with the specified id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReactionForm" + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileVersion" - } + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -7373,14 +7752,16 @@ "x-access": { "any": "true" } - }, + } + }, + "/documents/{documentId}/comments/{commentId}/setresolved": { "post": { "tags": [ - "DocumentFiles" + "DocumentComments" ], - "summary": "Uploads a new version of the document file with the specified id.", - "description": "Uploads a new version of an document file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateDocumentFileVersion", + "summary": "Sets the resolved status of a comment.", + "description": "Sets the resolved status of a comment. Users need write permissions on the document to resolve/unresolve comments.\r\n Currently, the IsResolved property is only available for document comments.\r\n\r\nAny authenticated user.", + "operationId": "PostCommentSetResolvedByDocumentNameAndDocumentIdAndCommentId", "parameters": [ { "name": "documentId", @@ -7393,9 +7774,9 @@ } }, { - "name": "fileId", + "name": "commentId", "in": "path", - "description": "The id of the file.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -7404,27 +7785,15 @@ } ], "requestBody": { + "description": "The resolved status.", "content": { - "multipart/form-data": { + "application/json": { "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } + "$ref": "#/components/schemas/SetResolvedForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -7432,13 +7801,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/Comment" } } } }, - "400": { - "description": "Bad Request" + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -7456,14 +7842,14 @@ } } }, - "/documents/{documentId}/files/{fileId}/versions/{versionId}": { + "/documents/{documentId}/content": { "get": { "tags": [ - "Document Files" + "Documents" ], - "summary": "Returns the document file version with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByDocumentNameAndDocumentIdAndFileIdAndVersionId", + "summary": "Returns the content of the current version of the document with the specified id.", + "description": "The user must have at least `read` permissions for the specified document.", + "operationId": "GetDocumentContentByDocumentId", "parameters": [ { "name": "documentId", @@ -7476,23 +7862,21 @@ } }, { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, + "name": "streamAsFile", + "in": "query", + "description": "Whether to stream the content as a file. By default, the document's content is returned in a model containing a property `Content` holding the content as a string.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } }, { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, + "name": "format", + "in": "query", + "description": "The response format. Supported values are `html` and `markdown`.", "schema": { "type": "string", - "format": "uuid" + "default": "html" } } ], @@ -7502,7 +7886,20 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "type": "string" + } + } + } + }, + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -7541,41 +7938,19 @@ "x-access": { "any": "true" } - } - }, - "/documents/{documentId}/files/{fileId}/versions/{versionId}/download": { - "get": { + }, + "put": { "tags": [ - "DocumentFiles" + "Documents" ], - "summary": "Returns the content of the document file version with the specified id.", - "description": "Returns the content of the document file version with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetDocumentFileVersionContent", + "summary": "Updates document content using UTF-8 HTML or Markdown.", + "description": "Set `contentFormat` to `html` or `markdown`. HTML is the default. Canonical awork Markdown preserves safe editor structures during re-import.\r\n \r\n The user must have at least `write` permissions for the specified document.", + "operationId": "PutDocumentContentByDocumentId", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", + "description": "The id of the document to update.", "required": true, "schema": { "type": "string", @@ -7583,14 +7958,32 @@ } } ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/DocumentContentForm" + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/DocumentModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -7611,19 +8004,19 @@ } } }, - "/documents/{documentId}/teams": { + "/documents/{documentId}/contributors": { "post": { "tags": [ "Documents" ], - "summary": "Adds a list of document teams to a document with the specified id.", - "description": "Adding document teams will affect their access to the document.\r\n Recalculation of permissions for related entities considering the new document teams\r\n will be done in the background asynchronously.\r\n \r\n The user must have at least `write` permissions for the specified document.", - "operationId": "PostDocumentTeamsByDocumentId", + "summary": "Adds a list of document contributors to the document with the specified id.", + "description": "Adding document contributors will grant them access to the document.\r\n There will be a recalculation of permissions for related entities considering the updated document contributor.\r\n \r\n The user must have at least `write` permissions for this document.", + "operationId": "PostDocumentContributorsByDocumentId", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document.", + "description": "The id of the document to add contributors to.", "required": true, "schema": { "type": "string", @@ -7632,13 +8025,13 @@ } ], "requestBody": { - "description": "The model used to add document teams to the document.", + "description": "The model used to add the document contributors.", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/EntityToTeamPostForm" + "$ref": "#/components/schemas/ContributorPostForm" } } } @@ -7653,7 +8046,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/MinimalEntityToTeamModel" + "$ref": "#/components/schemas/MinimalContributorModel" } } } @@ -7705,19 +8098,19 @@ } } }, - "/documents/{documentId}/teams/{documentToTeamId}": { + "/documents/{documentId}/contributors/{documentContributorId}": { "delete": { "tags": [ "Documents" ], - "summary": "Deletes the document team with the specified id from a document.", - "description": "Deletes the specific document team from a document. Deleting a document team will affect their access to the document.\r\n This operation cannot be performed on inherited document teams, only explicit ones.\r\n There will be recalculation of permissions for related entities considering the deleted document team.\r\n \r\n The user must have at least `write` permissions for the specified document.", - "operationId": "DeleteDocumentTeamByDocumentIdAndDocumentToTeamId", + "summary": "Deletes the document contributor with the specified id from a document.", + "description": "This operation cannot be performed on inherited document contributors, only explicit ones.\r\n There will be recalculation of permissions for related entities considering the deleted document contributor.\r\n \r\n The user must have at least `write` permissions for the specified document.", + "operationId": "DeleteDocumentContributorByDocumentIdAndDocumentContributorId", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document to delete the team from.", + "description": "The id of the document to delete the contributor from.", "required": true, "schema": { "type": "string", @@ -7725,9 +8118,9 @@ } }, { - "name": "documentToTeamId", + "name": "documentContributorId", "in": "path", - "description": "The id of the document to team connection.", + "description": "The id of the document contributor to delete.", "required": true, "schema": { "type": "string", @@ -7788,14 +8181,14 @@ "tags": [ "Documents" ], - "summary": "Updates the document team with the specified id.", - "description": "Updates the specific document team of a document. Updating a document team will affect their access to the document.\r\n There will be recalculation of permissions for related entities considering the updated document team.\r\n \r\n The user must have at least `write` permissions for this document.", - "operationId": "PutDocumentTeamByDocumentIdAndDocumentToTeamId", + "summary": "Updates the access of a document contributor with the specified id to a document.", + "description": "Updating a document contributor will affect their access to the document.\r\n There will be a recalculation of permissions for related entities considering the updated document contributor.\r\n \r\n The user must have at least `write` permissions for the specified document.", + "operationId": "PutDocumentContributorByDocumentIdAndDocumentContributorId", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document.", + "description": "The id of the document to update.", "required": true, "schema": { "type": "string", @@ -7803,9 +8196,9 @@ } }, { - "name": "documentToTeamId", + "name": "documentContributorId", "in": "path", - "description": "The id of the document to team connection to update.", + "description": "The id of the document contributor to update.", "required": true, "schema": { "type": "string", @@ -7814,11 +8207,11 @@ } ], "requestBody": { - "description": "The model used to update document teams of a document.", + "description": "The model used to update the document contributor's access.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityToTeamForm" + "$ref": "#/components/schemas/ContributorForm" } } }, @@ -7830,7 +8223,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalEntityToTeamModel" + "$ref": "#/components/schemas/MinimalContributorModel" } } } @@ -7881,26 +8274,24 @@ } } }, - "/documentspaces": { - "get": { + "/documents/{documentId}/duplicate": { + "post": { "tags": [ - "DocumentSpaces" + "Documents" ], - "summary": "Returns all document spaces.", - "description": "The user must have at least `read` permissions to see a document space.", - "operationId": "GetDocumentSpaces", + "summary": "Duplicates the document with the specified id.", + "description": "Duplicates the document content, permissions and children documents.\r\n \r\n The user has at least `read` permissions for the specified document.", + "operationId": "PostDocumentDuplicateByDocumentId", "parameters": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "documentId", + "in": "path", + "description": "The id of the document to duplicate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -7909,60 +8300,23 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentSpaceModel" - } + "$ref": "#/components/schemas/DocumentModel" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "DocumentSpaces" - ], - "summary": "Creates a new document space.", - "description": "\r\n\r\nThe user must be an admin.", - "operationId": "PostDocumentSpace", - "requestBody": { - "description": "The model used to create the document space.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DocumentSpaceForm" - } - } }, - "required": true - }, - "responses": { - "200": { - "description": "OK", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentSpaceModel" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -7971,8 +8325,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -7993,23 +8347,23 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/documentspaces/{documentSpaceId}": { - "delete": { + "/documents/{documentId}/externalfiles": { + "post": { "tags": [ - "DocumentSpaces" + "DocumentFiles" ], - "summary": "Deletes the document space with the specified id.", - "description": "The documents in this space and their related entities (comments, etc.) will be unrecoverably deleted in the background asynchronously.\r\n\r\nThe user must be an admin.", - "operationId": "DeleteDocumentSpaceById", + "summary": "Endpoint to batch create external files without uploading.", + "description": "Endpoint to create file infos with batch operation.\nCreated file infos don't have a version.\r\n\r\nAny authenticated user.", + "operationId": "CreateExternalFiles", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space to delete.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -8017,26 +8371,34 @@ } } ], - "responses": { - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "requestBody": { + "description": "List of file forms.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" + } + } + }, + "application/*+json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" } } } - }, - "404": { - "description": "Not Found", + } + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -8053,26 +8415,78 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } - }, - "get": { + } + }, + "/documents/{documentId}/files": { + "delete": { "tags": [ - "DocumentSpaces" + "DocumentFiles" ], - "summary": "Returns the document space with the specified id.", - "description": "The user must have at least `read` permissions for the specified document space.", - "operationId": "GetDocumentSpaceById", + "summary": "Deletes the files of the specified document.", + "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", + "operationId": "DeleteDocumentFiles", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space to retrieve.", + "description": "The id of the document.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "get": { + "tags": [ + "DocumentFiles" + ], + "summary": "Returns all files of the document with the specified id.", + "description": "Returns all file metadata of the document with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetDocumentFiles", + "parameters": [ + { + "name": "documentId", + "in": "path", + "description": "The id of the document.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -8081,30 +8495,84 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentModel" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } } } } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "DocumentFiles" + ], + "summary": "Creates a new document file for the document with the specified id..", + "description": "Uploads a new document file for the document with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", + "operationId": "CreateDocumentFile", + "parameters": [ + { + "name": "documentId", + "in": "path", + "description": "The id of the document.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "required": [ + "File" + ], + "type": "object", + "properties": { + "File": { + "type": "string", + "format": "binary" + } + } + }, + "encoding": { + "File": { + "style": "form" } } } - }, - "404": { - "description": "Not Found", + } + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } + }, + "400": { + "description": "Bad Request" } }, "security": [ @@ -8120,19 +8588,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/documents/{documentId}/files/byuploadid": { + "post": { "tags": [ - "DocumentSpaces" + "FileUpload" ], - "summary": "Updates the document space with the specified id.", - "description": "\r\n\r\nThe user must be an admin.", - "operationId": "PutDocumentSpaceById", + "summary": "Creates a file from an upload id.", + "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file document from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostUploadByUploadId", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space.", + "description": "The id of the document to attach the file to.", "required": true, "schema": { "type": "string", @@ -8141,11 +8611,11 @@ } ], "requestBody": { - "description": "The model used to update the document space.", + "description": "The model describing the uploaded file metadata.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentSpaceForm" + "$ref": "#/components/schemas/UploadByUploadIdForm" } } }, @@ -8157,17 +8627,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentSpaceModel" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -8194,23 +8654,23 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/documentspaces/{documentSpaceId}/contributors": { + "/documents/{documentId}/files/byurl": { "post": { "tags": [ - "DocumentSpaces" + "DocumentFiles" ], - "summary": "Adds a list of document space contributors to a document space.", - "description": "Adding document space contributors will affect their access to the document space and documents within that space.\r\n\r\nThe user must be an admin.", - "operationId": "PostDocumentSpaceContributorsByDocumentSpaceId", + "summary": "Uploads a new file by providing an url.", + "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", + "operationId": "CreateDocumentFileByUrl", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space.", + "description": "The id of the document the file is linked to.", "required": true, "schema": { "type": "string", @@ -8219,18 +8679,19 @@ } ], "requestBody": { - "description": "The model with the list of contributors to add.", + "description": "The url, name and description of the file.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ContributorPostForm" - } + "$ref": "#/components/schemas/FilePostForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FilePostForm" } } - }, - "required": true + } }, "responses": { "200": { @@ -8238,37 +8699,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalContributorModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -8285,23 +8716,23 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/documentspaces/{documentSpaceId}/contributors/{documentSpaceContributorId}": { + "/documents/{documentId}/files/{fileId}": { "delete": { "tags": [ - "DocumentSpaces" + "DocumentFiles" ], - "summary": "Deletes the document space contributor with the specified id from a document space.", - "description": "Deletes the specified document space contributor from a document space.\r\n Deleting a document space contributor will affect their access to the document space and the documents within that space.\r\n\r\nThe user must be an admin.", - "operationId": "DeleteDocumentSpaceContributorByDocumentSpaceIdAndDocumentSpaceContributorId", + "summary": "Deletes the document file with the specified id.", + "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", + "operationId": "DeleteDocumentFile", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -8309,9 +8740,9 @@ } }, { - "name": "documentSpaceContributorId", + "name": "fileId", "in": "path", - "description": "The id of the document space contributor to delete.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -8322,13 +8753,58 @@ "responses": { "204": { "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "get": { + "tags": [ + "Document Files" + ], + "summary": "Returns the file with the specified id of the document with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByDocumentNameAndDocumentIdAndFileId", + "parameters": [ + { + "name": "documentId", + "in": "path", + "description": "The id of the document.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, - "400": { - "description": "Bad Request", + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -8365,21 +8841,21 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } }, "put": { "tags": [ - "DocumentSpaces" + "DocumentFiles" ], - "summary": "Updates the access of a document space contributor to the document space with the specified id.", - "description": "Updates the access of the specified document space contributor to the specified document space.\r\n Updating a document space contributor will affect their access to the document space and documents within that space.\r\n\r\nThe user must be an admin.", - "operationId": "PutDocumentSpaceContributorByDocumentSpaceIdAndDocumentSpaceContributorId", + "summary": "Updates the metadata of the document file with the specified id.", + "description": "Updates the metadata of the document file with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "UpdateDocumentFile", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -8387,9 +8863,9 @@ } }, { - "name": "documentSpaceContributorId", + "name": "fileId", "in": "path", - "description": "The id of the document space contributor.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -8398,15 +8874,19 @@ } ], "requestBody": { - "description": "The model with the updated contributor data.", + "description": "The model to update the file with the specified id.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContributorForm" + "$ref": "#/components/schemas/FileInfoUpdateForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileInfoUpdateForm" } } - }, - "required": true + } }, "responses": { "200": { @@ -8414,37 +8894,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalContributorModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -8461,23 +8911,23 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/documentspaces/{documentSpaceId}/documents": { - "get": { + "/documents/{documentId}/files/{fileId}/copy": { + "post": { "tags": [ - "Documents" + "DocumentFiles" ], - "summary": "Returns all documents that belong to the document space with the specified id.", - "description": "The user must have at least `read` permissions for the specified document space.", - "operationId": "GetDocumentSpaceDocumentsByDocumentSpaceId", + "summary": "Copies the file to a new document.", + "description": "Copies the file to a new document (meta and content).\r\n\r\nAny authenticated user.", + "operationId": "CopyToDocument", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space to retrieve documents from.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -8485,28 +8935,38 @@ } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], + "requestBody": { + "description": "The model to change the entity information of the file.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileCopyForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileCopyForm" + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "$ref": "#/components/schemas/FileInfo" } } } @@ -8527,19 +8987,19 @@ } } }, - "/documentspaces/{documentSpaceId}/documents/trash": { + "/documents/{documentId}/files/{fileId}/download": { "get": { "tags": [ - "Documents" + "DocumentFiles" ], - "summary": "Returns all deleted documents of the document space with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetDocumentSpaceDocumentsTrashByDocumentSpaceId", + "summary": "Returns the content of the document file with the specified id.", + "description": "Returns the content of the document file. Uses the latest file version.\nIf the document file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", + "operationId": "GetDocumentFileContent", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space to retrieve trashed documents from.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -8547,16 +9007,40 @@ } }, { - "$ref": "#/components/parameters/page" + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, { - "$ref": "#/components/parameters/pageSize" + "name": "width", + "in": "query", + "description": "Set width to resize.", + "schema": { + "type": "number", + "format": "double" + } }, { - "$ref": "#/components/parameters/orderby" + "name": "height", + "in": "query", + "description": "Set height to resize.", + "schema": { + "type": "number", + "format": "double" + } }, { - "$ref": "#/components/parameters/filterby" + "name": "crop", + "in": "query", + "description": "Whether to crop the image when resizing it.", + "schema": { + "type": "boolean" + } } ], "responses": { @@ -8565,10 +9049,8 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "type": "string", + "format": "binary" } } } @@ -8589,19 +9071,29 @@ } } }, - "/documentspaces/{documentSpaceId}/teams": { - "post": { + "/documents/{documentId}/files/{fileId}/shareurl": { + "get": { "tags": [ - "DocumentSpaces" + "DocumentFiles" ], - "summary": "Adds teams to the document space with the specified id.", - "description": "Adding teams to a document space will affect their access to the document space and documents within that space.\r\n\r\nThe user must be an admin.", - "operationId": "PostDocumentSpaceTeamsByDocumentSpaceId", + "summary": "Returns an url to share the file.", + "description": "Returns a url to share the file.\r\n\r\nAny authenticated user.", + "operationId": "GetPublicToken", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space.", + "description": "The id of the document.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -8609,57 +9101,13 @@ } } ], - "requestBody": { - "description": "The model with the list of teams to add.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityToTeamPostForm" - } - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalEntityToTeamModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string" } } } @@ -8676,23 +9124,23 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/documentspaces/{documentSpaceId}/teams/{documentSpaceToTeamId}": { - "delete": { + "/documents/{documentId}/files/{fileId}/versions": { + "get": { "tags": [ - "DocumentSpaces" + "DocumentFiles" ], - "summary": "Deletes the team with the specified id from a document space.", - "description": "Deletes the specified team from a document space.\r\n Deleting a team from a document space will affect their access to the document space and the documents within that space.\r\n\r\nThe user must be an admin.", - "operationId": "DeleteDocumentSpaceTeamByDocumentSpaceIdAndDocumentSpaceToTeamId", + "summary": "Returns all file versions of the specified document file.", + "description": "Returns all file versions of the specified document file.\r\n\r\nAny authenticated user.", + "operationId": "GetDocumentFileVersions", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -8700,46 +9148,38 @@ } }, { - "name": "documentSpaceToTeamId", + "name": "fileId", "in": "path", - "description": "The id of the document space to team connection.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "responses": { - "204": { - "description": "No Content" }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + { + "$ref": "#/components/parameters/page" }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + { + "$ref": "#/components/parameters/pageSize" }, - "404": { - "description": "Not Found", + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileVersion" + } } } } @@ -8756,21 +9196,21 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } }, - "put": { + "post": { "tags": [ - "DocumentSpaces" + "DocumentFiles" ], - "summary": "Updates the access of a team to the document space with the specified id.", - "description": "Updates the specified document space to team connection of a document space.\r\n Updating a document space team will affect their access to the document space and documents within that space.\r\n\r\nThe user must be an admin.", - "operationId": "PutDocumentSpaceTeamByDocumentSpaceIdAndDocumentSpaceToTeamId", + "summary": "Uploads a new version of the document file with the specified id.", + "description": "Uploads a new version of an document file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", + "operationId": "CreateDocumentFileVersion", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -8778,9 +9218,9 @@ } }, { - "name": "documentSpaceToTeamId", + "name": "fileId", "in": "path", - "description": "The id of the document space to team connection.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -8789,91 +9229,41 @@ } ], "requestBody": { - "description": "The model with the updated team access.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/EntityToTeamForm" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MinimalEntityToTeamModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "required": [ + "File" + ], + "type": "object", + "properties": { + "File": { + "type": "string", + "format": "binary" + } } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + }, + "encoding": { + "File": { + "style": "form" } } } } }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true" - } - } - }, - "/files/generateuploadurl": { - "post": { - "tags": [ - "FileUpload" - ], - "summary": "Generates a URL to upload a file to.", - "description": "Generates a URL that can be used to upload a file. Use the returned upload id to create a file entry. See for more information.\r\n\r\nAny authenticated user.", - "operationId": "PostGenerateUploadURL", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GenerateUploadUrlResponseModel" + "$ref": "#/components/schemas/FileVersion" } } } + }, + "400": { + "description": "Bad Request" } }, "security": [ @@ -8891,27 +9281,39 @@ } } }, - "/files/images/{entityName}/{entityId}": { - "delete": { + "/documents/{documentId}/files/{fileId}/versions/{versionId}": { + "get": { "tags": [ - "Images" + "Document Files" ], - "summary": "Deletes the profile image of the entity with the specified id.", + "summary": "Returns the document file version with the specified id.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "DeleteFilesImagesByEntityNameAndEntityId", + "operationId": "GetFilesVersionsByDocumentNameAndDocumentIdAndFileIdAndVersionId", "parameters": [ { - "name": "entityName", + "name": "documentId", "in": "path", + "description": "The id of the document.", "required": true, "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" + "type": "string", + "format": "uuid" } }, { - "name": "entityId", + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "versionId", "in": "path", + "description": "The id of the file version.", "required": true, "schema": { "type": "string", @@ -8920,8 +9322,15 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileVersion" + } + } + } }, "401": { "description": "Unauthorized", @@ -8957,27 +9366,31 @@ "x-access": { "any": "true" } - }, + } + }, + "/documents/{documentId}/files/{fileId}/versions/{versionId}/download": { "get": { "tags": [ - "Images" + "DocumentFiles" ], - "summary": "Returns the image of the entity with the specified id.", - "description": "\r\n\r\nAllows unauthenticated access.", - "operationId": "GetFilesImagesByEntityNameAndEntityId", + "summary": "Returns the content of the document file version with the specified id.", + "description": "Returns the content of the document file version with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetDocumentFileVersionContent", "parameters": [ { - "name": "entityName", + "name": "documentId", "in": "path", + "description": "The id of the document.", "required": true, "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" + "type": "string", + "format": "uuid" } }, { - "name": "entityId", + "name": "fileId", "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -8985,26 +9398,13 @@ } }, { - "name": "width", - "in": "query", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "height", - "in": "query", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "crop", - "in": "query", + "name": "versionId", + "in": "path", + "description": "The id of the file version.", + "required": true, "schema": { - "type": "boolean" + "type": "string", + "format": "uuid" } } ], @@ -9019,13 +9419,67 @@ } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/documents/{documentId}/teams": { + "post": { + "tags": [ + "Documents" + ], + "summary": "Adds a list of document teams to a document with the specified id.", + "description": "Adding document teams will affect their access to the document.\r\n Recalculation of permissions for related entities considering the new document teams\r\n will be done in the background asynchronously.\r\n \r\n The user must have at least `write` permissions for the specified document.", + "operationId": "PostDocumentTeamsByDocumentId", + "parameters": [ + { + "name": "documentId", + "in": "path", + "description": "The id of the document.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model used to add document teams to the document.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityToTeamPostForm" + } + } + } }, - "304": { - "description": "Not Modified", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/MinimalEntityToTeamModel" + } } } } @@ -9072,29 +9526,33 @@ "v1" ], "x-access": { - "anonymous": "true" + "any": "true" } - }, - "post": { + } + }, + "/documents/{documentId}/teams/{documentToTeamId}": { + "delete": { "tags": [ - "Images" + "Documents" ], - "summary": "Uploads a new profile image.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostFilesImagesByEntityNameAndEntityId", + "summary": "Deletes the document team with the specified id from a document.", + "description": "Deletes the specific document team from a document. Deleting a document team will affect their access to the document.\r\n This operation cannot be performed on inherited document teams, only explicit ones.\r\n There will be recalculation of permissions for related entities considering the deleted document team.\r\n \r\n The user must have at least `write` permissions for the specified document.", + "operationId": "DeleteDocumentTeamByDocumentIdAndDocumentToTeamId", "parameters": [ { - "name": "entityName", + "name": "documentId", "in": "path", + "description": "The id of the document to delete the team from.", "required": true, "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" + "type": "string", + "format": "uuid" } }, { - "name": "entityId", + "name": "documentToTeamId", "in": "path", + "description": "The id of the document to team connection.", "required": true, "schema": { "type": "string", @@ -9102,28 +9560,22 @@ } } ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/FileUploadModel" - } - } - } - }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -9132,8 +9584,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -9156,29 +9608,29 @@ "x-access": { "any": "true" } - } - }, - "/files/images/{entityName}/{entityId}/byuploadid": { - "post": { + }, + "put": { "tags": [ - "Images" + "Documents" ], - "summary": "Sets a profile image from a previously uploaded file.", - "description": "After an image has been uploaded to an upload URL generated by the /files/generateuploadurl endpoint, this endpoint sets the uploaded image as the profile image of the entity by providing the upload id.\r\n\r\nAny authenticated user.", - "operationId": "PostFilesImagesByUploadIdByEntityNameAndEntityId", + "summary": "Updates the document team with the specified id.", + "description": "Updates the specific document team of a document. Updating a document team will affect their access to the document.\r\n There will be recalculation of permissions for related entities considering the updated document team.\r\n \r\n The user must have at least `write` permissions for this document.", + "operationId": "PutDocumentTeamByDocumentIdAndDocumentToTeamId", "parameters": [ { - "name": "entityName", + "name": "documentId", "in": "path", + "description": "The id of the document.", "required": true, "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" + "type": "string", + "format": "uuid" } }, { - "name": "entityId", + "name": "documentToTeamId", "in": "path", + "description": "The id of the document to team connection to update.", "required": true, "schema": { "type": "string", @@ -9187,10 +9639,11 @@ } ], "requestBody": { + "description": "The model used to update document teams of a document.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UploadByUploadIdForm" + "$ref": "#/components/schemas/EntityToTeamForm" } } }, @@ -9202,7 +9655,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/MinimalEntityToTeamModel" } } } @@ -9226,6 +9679,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -9243,54 +9706,38 @@ } } }, - "/files/images/{entityType}": { + "/documentspaces": { "get": { "tags": [ - "SharedFiles" + "DocumentSpaces" ], - "summary": "Returns the public profile image.", - "description": "\r\n\r\nAllows unauthenticated access.", - "operationId": "GetFilesImagesByEntityType", + "summary": "Returns all document spaces.", + "description": "The user must have at least `read` permissions to see a document space.", + "operationId": "GetDocumentSpaces", "parameters": [ { - "name": "entityType", - "in": "path", - "description": "The entity type for which we are requesting the image.", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/page" }, { - "name": "token", - "in": "query", - "description": "The token to allow access.", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { "200": { - "description": "OK" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentSpaceModel" + } } } } @@ -9307,139 +9754,54 @@ "v1" ], "x-access": { - "anonymous": "true" + "any": "true" } - } - }, - "/files/{fileId}/download": { - "get": { + }, + "post": { "tags": [ - "Files" + "DocumentSpaces" ], - "summary": "Returns the content of the file with the specified id.", - "description": "Returns the content of the latest file version.\nIf the file is an image and the width and height are set,\nthe image will resized before it is returned.\nThe get the content it is necessary to have the 'read' permissions on the\nentity the file is related to.\r\n\r\nAny authenticated user.", - "operationId": "GetFile", - "parameters": [ - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "width", - "in": "query", - "description": "Set width to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "height", - "in": "query", - "description": "Set height to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "crop", - "in": "query", - "description": "Whether to crop the image when resizing it.", - "schema": { - "type": "boolean" - } - }, - { - "name": "enlarge", - "in": "query", - "description": "Whether to enlarge the image if the width/height are bigger than the original image.", - "schema": { - "type": "boolean", - "default": true + "summary": "Creates a new document space.", + "description": "\r\n\r\nThe user must be an admin.", + "operationId": "PostDocumentSpace", + "requestBody": { + "description": "The model used to create the document space.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentSpaceForm" + } } }, - { - "name": "inline", - "in": "query", - "description": "If inline is true, content-disposition header is inline, else it is attachment.", - "schema": { - "type": "boolean", - "default": false - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/DocumentSpaceModel" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/files/{fileId}/pdf": { - "get": { - "tags": [ - "Files" - ], - "summary": "Returns the content of the file with the specified id as pdf.", - "description": "Returns the content of the latest file version as pdf.\nAll kinds of MS Office document types are supported.\nTo get the content you must have the 'read' permissions on the\nentity the file is related to.\r\n\r\nAny authenticated user.", - "operationId": "GetPdf", - "parameters": [ - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } }, - { - "name": "inline", - "in": "query", - "description": "If inline is true, content-disposition header is inline, else it is attachment.", - "schema": { - "type": "boolean", - "default": false + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } - } - ], - "responses": { - "200": { - "description": "OK", + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -9456,42 +9818,40 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/filters": { - "get": { + "/documentspaces/{documentSpaceId}": { + "delete": { "tags": [ - "Filters" + "DocumentSpaces" ], - "summary": "Returns the current user's filters.", - "description": "Returns the union of filters owned by the requesting user and filters explicitly shared with the requesting user.\r\n Use the specialized created-by-me and shared-with-me endpoints when only one category is needed.\r\n\r\nAny authenticated user.", - "operationId": "GetFilters", + "summary": "Deletes the document space with the specified id.", + "description": "The documents in this space and their related entities (comments, etc.) will be unrecoverably deleted in the background asynchronously.\r\n\r\nThe user must be an admin.", + "operationId": "DeleteDocumentSpaceById", "parameters": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "documentSpaceId", + "in": "path", + "description": "The id of the document space to delete.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Filter" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -9518,39 +9878,26 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } - } - }, - "/filters/{entityType}": { + }, "get": { "tags": [ - "Filters" + "DocumentSpaces" ], - "summary": "Returns the current user's filters for the specified user type.", - "description": "Returns the union of filters owned by the requesting user and filters explicitly shared with the requesting user\r\n for the requested user type.\r\n Use the specialized created-by-me and shared-with-me endpoints when only one category is needed.\r\n\r\nAny authenticated user.", - "operationId": "GetFiltersByUserType", + "summary": "Returns the document space with the specified id.", + "description": "The user must have at least `read` permissions for the specified document space.", + "operationId": "GetDocumentSpaceById", "parameters": [ { - "name": "entityType", + "name": "documentSpaceId", "in": "path", - "description": "The entity type route value.", + "description": "The id of the document space to retrieve.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -9559,10 +9906,17 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Filter" - } + "$ref": "#/components/schemas/DocumentModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -9591,33 +9945,32 @@ "x-access": { "any": "true" } - } - }, - "/filters/{entityType}/evaluate": { - "post": { + }, + "put": { "tags": [ - "Filters" + "DocumentSpaces" ], - "summary": "Evaluates a filter definition against the specified user type and returns the filtered results without saving the filter.\n This endpoint is designed for quick filters where the frontend builds a FilterDefinition dynamically\n and needs to evaluate it immediately without persisting it to the database.\n Supports standard paging, ordering, and additional query constraints from query parameters.", - "description": "Evaluates an ad-hoc filter without persisting it. Useful for testing filters before saving or for temporary filtering needs.\r\n\r\nAny authenticated user.", - "operationId": "PostFilterEvaluateByUserType", + "summary": "Updates the document space with the specified id.", + "description": "\r\n\r\nThe user must be an admin.", + "operationId": "PutDocumentSpaceById", "parameters": [ { - "name": "entityType", + "name": "documentSpaceId", "in": "path", - "description": "The entity type name (tasks, projects, companies, users).", + "description": "The id of the document space.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "requestBody": { - "description": "The filter application form containing the FilterDefinition to evaluate.", + "description": "The model used to update the document space.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ApplyFilterForm" + "$ref": "#/components/schemas/DocumentSpaceForm" } } }, @@ -9629,13 +9982,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ObjectPagedResult" + "$ref": "#/components/schemas/DocumentSpaceModel" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -9666,23 +10019,23 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/filters/{filterId}/contributors": { + "/documentspaces/{documentSpaceId}/contributors": { "post": { "tags": [ - "Filters" + "DocumentSpaces" ], - "summary": "Adds explicit contributors to the specified filter.", - "description": "Adding filter contributors grants explicit access to the filter with the specified access levels.\r\n Existing explicit contributors are ignored and therefore not recreated.\r\n The filter creator cannot be added as an explicit contributor because ownership is handled implicitly.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "PostFilterContributorsByFilterId", + "summary": "Adds a list of document space contributors to a document space.", + "description": "Adding document space contributors will affect their access to the document space and documents within that space.\r\n\r\nThe user must be an admin.", + "operationId": "PostDocumentSpaceContributorsByDocumentSpaceId", "parameters": [ { - "name": "filterId", + "name": "documentSpaceId", "in": "path", - "description": "The filter that should receive explicit contributors.", + "description": "The id of the document space.", "required": true, "schema": { "type": "string", @@ -9691,7 +10044,7 @@ } ], "requestBody": { - "description": "The contributor permissions to add.", + "description": "The model with the list of contributors to add.", "content": { "application/json": { "schema": { @@ -9710,10 +10063,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MinimalContributorModel" - } + "$ref": "#/components/schemas/MinimalContributorModel" } } } @@ -9760,23 +10110,23 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/filters/{filterId}/contributors/{filterContributorId}": { + "/documentspaces/{documentSpaceId}/contributors/{documentSpaceContributorId}": { "delete": { "tags": [ - "Filters" + "DocumentSpaces" ], - "summary": "Removes an explicit contributor from the specified filter.", - "description": "Removing a filter contributor revokes that contributor's explicit access to the filter.\r\n The contributor entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "DeleteFilterContributorByFilterIdAndFilterContributorId", + "summary": "Deletes the document space contributor with the specified id from a document space.", + "description": "Deletes the specified document space contributor from a document space.\r\n Deleting a document space contributor will affect their access to the document space and the documents within that space.\r\n\r\nThe user must be an admin.", + "operationId": "DeleteDocumentSpaceContributorByDocumentSpaceIdAndDocumentSpaceContributorId", "parameters": [ { - "name": "filterId", + "name": "documentSpaceId", "in": "path", - "description": "The filter that owns the contributor entry.", + "description": "The id of the document space.", "required": true, "schema": { "type": "string", @@ -9784,9 +10134,9 @@ } }, { - "name": "filterContributorId", + "name": "documentSpaceContributorId", "in": "path", - "description": "The contributor entry to delete.", + "description": "The id of the document space contributor to delete.", "required": true, "schema": { "type": "string", @@ -9798,6 +10148,16 @@ "204": { "description": "No Content" }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "401": { "description": "Unauthorized", "content": { @@ -9830,21 +10190,21 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } }, "put": { "tags": [ - "Filters" + "DocumentSpaces" ], - "summary": "Updates the access level of an explicit filter contributor.", - "description": "Updating a filter contributor changes that contributor's explicit access level for the filter.\r\n The contributor entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "PutFilterContributorByFilterIdAndFilterContributorId", + "summary": "Updates the access of a document space contributor to the document space with the specified id.", + "description": "Updates the access of the specified document space contributor to the specified document space.\r\n Updating a document space contributor will affect their access to the document space and documents within that space.\r\n\r\nThe user must be an admin.", + "operationId": "PutDocumentSpaceContributorByDocumentSpaceIdAndDocumentSpaceContributorId", "parameters": [ { - "name": "filterId", + "name": "documentSpaceId", "in": "path", - "description": "The filter that owns the contributor entry.", + "description": "The id of the document space.", "required": true, "schema": { "type": "string", @@ -9852,9 +10212,9 @@ } }, { - "name": "filterContributorId", + "name": "documentSpaceContributorId", "in": "path", - "description": "The contributor entry to update.", + "description": "The id of the document space contributor.", "required": true, "schema": { "type": "string", @@ -9863,7 +10223,7 @@ } ], "requestBody": { - "description": "The new contributor permission payload.", + "description": "The model with the updated contributor data.", "content": { "application/json": { "schema": { @@ -9926,44 +10286,42 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/filters/{filterId}/teams": { - "post": { + "/documentspaces/{documentSpaceId}/documents": { + "get": { "tags": [ - "Filters" + "Documents" ], - "summary": "Adds explicit team permissions to the specified filter.", - "description": "Adding filter teams grants explicit access to the filter for all members of the specified teams.\r\n Existing explicit team permissions are ignored and therefore not recreated.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "PostFilterTeamsByFilterId", + "summary": "Returns all documents that belong to the document space with the specified id.", + "description": "The user must have at least `read` permissions for the specified document space.", + "operationId": "GetDocumentSpaceDocumentsByDocumentSpaceId", "parameters": [ { - "name": "filterId", + "name": "documentSpaceId", "in": "path", - "description": "The filter that should receive explicit team permissions.", + "description": "The id of the document space to retrieve documents from.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The team permissions to add.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityToTeamPostForm" - } - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", @@ -9972,41 +10330,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/MinimalEntityToTeamModel" + "$ref": "#/components/schemas/DocumentModel" } } } } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -10024,19 +10352,19 @@ } } }, - "/filters/{filterId}/teams/{filterToTeamId}": { - "delete": { + "/documentspaces/{documentSpaceId}/documents/trash": { + "get": { "tags": [ - "Filters" + "Documents" ], - "summary": "Removes an explicit team permission from the specified filter.", - "description": "Removing a filter team permission revokes that team's explicit access to the filter.\r\n The team permission entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "DeleteFilterTeamByFilterIdAndFilterToTeamId", + "summary": "Returns all deleted documents of the document space with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetDocumentSpaceDocumentsTrashByDocumentSpaceId", "parameters": [ { - "name": "filterId", + "name": "documentSpaceId", "in": "path", - "description": "The filter that owns the team permission entry.", + "description": "The id of the document space to retrieve trashed documents from.", "required": true, "schema": { "type": "string", @@ -10044,36 +10372,28 @@ } }, { - "name": "filterToTeamId", - "in": "path", - "description": "The team permission entry to delete.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentModel" + } } } } @@ -10092,29 +10412,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/documentspaces/{documentSpaceId}/teams": { + "post": { "tags": [ - "Filters" + "DocumentSpaces" ], - "summary": "Updates the access level of an explicit team permission on the specified filter.", - "description": "Updating a filter team permission changes the explicit access level of the referenced team for the filter.\r\n The team permission entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "PutFilterTeamByFilterIdAndFilterToTeamId", + "summary": "Adds teams to the document space with the specified id.", + "description": "Adding teams to a document space will affect their access to the document space and documents within that space.\r\n\r\nThe user must be an admin.", + "operationId": "PostDocumentSpaceTeamsByDocumentSpaceId", "parameters": [ { - "name": "filterId", - "in": "path", - "description": "The filter that owns the team permission entry.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "filterToTeamId", + "name": "documentSpaceId", "in": "path", - "description": "The team permission entry to update.", + "description": "The id of the document space.", "required": true, "schema": { "type": "string", @@ -10123,11 +10435,14 @@ } ], "requestBody": { - "description": "The new team permission payload.", + "description": "The model with the list of teams to add.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityToTeamForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityToTeamPostForm" + } } } }, @@ -10186,105 +10501,56 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/invitations": { - "get": { + "/documentspaces/{documentSpaceId}/teams/{documentSpaceToTeamId}": { + "delete": { "tags": [ - "Invitations" + "DocumentSpaces" ], - "summary": "Prevents GET requests to the invitations route from throwing errors.", - "description": "\r\n\r\nAllows unauthenticated access.", - "operationId": "GetInvitations", - "responses": { - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ + "summary": "Deletes the team with the specified id from a document space.", + "description": "Deletes the specified team from a document space.\r\n Deleting a team from a document space will affect their access to the document space and the documents within that space.\r\n\r\nThe user must be an admin.", + "operationId": "DeleteDocumentSpaceTeamByDocumentSpaceIdAndDocumentSpaceToTeamId", + "parameters": [ { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "anonymous": "true" - } - } - }, - "/invitations/accept": { - "post": { - "tags": [ - "Invitations" - ], - "summary": "Accepts the invitation with the invitation code.", - "operationId": "Accept", - "requestBody": { - "description": "The invitation code received when creating the invitation.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AcceptInvitation" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/AcceptInvitation" - } + "name": "documentSpaceId", + "in": "path", + "description": "The id of the document space.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - } - }, - "responses": { - "200": { - "description": "OK" - } - }, - "security": [ + }, { - "oauth2": [ - "full_access" - ] + "name": "documentSpaceToTeamId", + "in": "path", + "description": "The id of the document space to team connection.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], - "x-api-versions": [ - "v1" - ] - } - }, - "/me": { - "get": { - "tags": [ - "Users" - ], - "summary": "Returns the currently logged-in user and workspace.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMe", "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserAndWorkspace" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -10292,55 +10558,13 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/allavailabletasks": { - "get": { - "tags": [ - "AssignedTasks" - ], - "summary": "Returns all tasks the current user is allowed to see.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMeAllAvailableTasks", - "parameters": [ - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -10357,69 +10581,56 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } - } - }, - "/me/assignedtasks": { - "get": { + }, + "put": { "tags": [ - "AssignedTasks" + "DocumentSpaces" ], - "summary": "Returns all tasks assigned to the current user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMeAssignedTasks", + "summary": "Updates the access of a team to the document space with the specified id.", + "description": "Updates the specified document space to team connection of a document space.\r\n Updating a document space team will affect their access to the document space and documents within that space.\r\n\r\nThe user must be an admin.", + "operationId": "PutDocumentSpaceTeamByDocumentSpaceIdAndDocumentSpaceToTeamId", "parameters": [ { - "name": "inProgress", - "in": "query", - "description": "Whether to return only assigned project tasks of running projects. Defaults to true.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "assignedOnFrom", - "in": "query", - "description": "The start date for filtering by assignment date. If set, tasks are returned only when the assignment date is greater or equal than this value.", + "name": "documentSpaceId", + "in": "path", + "description": "The id of the document space.", + "required": true, "schema": { "type": "string", - "format": "date-time" + "format": "uuid" } }, { - "name": "assignedOnTo", - "in": "query", - "description": "The end date for filtering by assignment date. If set, tasks are returned only when the assignment date is less or equal than this value.", + "name": "documentSpaceToTeamId", + "in": "path", + "description": "The id of the document space to team connection.", + "required": true, "schema": { "type": "string", - "format": "date-time" + "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], + "requestBody": { + "description": "The model with the updated team access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityToTeamForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } + "$ref": "#/components/schemas/MinimalEntityToTeamModel" } } } @@ -10433,50 +10644,13 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/assignedtasks/{taskId}": { - "get": { - "tags": [ - "AssignedTasks" - ], - "summary": "Returns the assigned task with the specified id of the current user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMeAssignedTaskByTaskId", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task to return.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskModel" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -10503,39 +10677,25 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/me/dashboards": { - "get": { + "/files/generateuploadurl": { + "post": { "tags": [ - "Dashboards" - ], - "summary": "Returns the dashboards of the current user.", - "description": "Returns the dashboards of the current user.\r\n\r\nThe user must be the creator.", - "operationId": "GetMeDashboards", - "parameters": [ - { - "name": "includeWidgets", - "in": "query", - "description": "Include widgets.", - "schema": { - "type": "boolean", - "default": false - } - } + "FileUpload" ], + "summary": "Generates a URL to upload a file to.", + "description": "Generates a URL that can be used to upload a file. Use the returned upload id to create a file entry. See for more information.\r\n\r\nAny authenticated user.", + "operationId": "PostGenerateUploadURL", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Dashboard" - } + "$ref": "#/components/schemas/GenerateUploadUrlResponseModel" } } } @@ -10552,42 +10712,48 @@ "v1" ], "x-access": { - "owner": "true" + "any": "true" } } }, - "/me/filters": { - "get": { + "/files/images/{entityName}/{entityId}": { + "delete": { "tags": [ - "Filters" + "Images" ], - "summary": "Returns the filters created by the current user.", - "description": "Returns filters that were created by and are owned by the requesting user.\r\n Shared filters are excluded, even if the requesting user also has explicit access through contributor, team, or workspace permissions.\r\n\r\nAny authenticated user.", - "operationId": "GetMeFilters", + "summary": "Deletes the profile image of the entity with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesImagesByEntityNameAndEntityId", "parameters": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" + "name": "entityName", + "in": "path", + "required": true, + "schema": { + "pattern": "^[A-Za-z]*$", + "type": "string" + } }, { - "$ref": "#/components/parameters/filterby" + "name": "entityId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Filter" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -10616,37 +10782,55 @@ "x-access": { "any": "true" } - } - }, - "/me/filters/{entityType}": { + }, "get": { "tags": [ - "Filters" + "Images" ], - "summary": "Returns the filters created by the current user for the specified user type.", - "description": "Returns filters that were created by and are owned by the requesting user and match the requested user type.\r\n Shared filters are excluded, even if the requesting user also has explicit access through contributor, team, or workspace permissions.\r\n\r\nAny authenticated user.", - "operationId": "GetMeFiltersByUserType", + "summary": "Returns the image of the entity with the specified id.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "GetFilesImagesByEntityNameAndEntityId", "parameters": [ { - "name": "entityType", + "name": "entityName", "in": "path", - "description": "The entity type route value.", "required": true, "schema": { + "pattern": "^[A-Za-z]*$", "type": "string" } }, { - "$ref": "#/components/parameters/page" + "name": "entityId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, { - "$ref": "#/components/parameters/pageSize" + "name": "width", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } }, { - "$ref": "#/components/parameters/orderby" + "name": "height", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } }, { - "$ref": "#/components/parameters/filterby" + "name": "crop", + "in": "query", + "schema": { + "type": "boolean" + } } ], "responses": { @@ -10655,10 +10839,38 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Filter" - } + "type": "string", + "format": "binary" + } + } + } + }, + "304": { + "description": "Not Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -10685,37 +10897,44 @@ "v1" ], "x-access": { - "any": "true" + "anonymous": "true" } }, "post": { "tags": [ - "Filters" + "Images" ], - "summary": "Creates a persisted filter definition for the specified user type.", - "description": "Creates a new filter owned by the current user.\r\n\r\nAny authenticated user.", - "operationId": "PostMeFilterByUserType", + "summary": "Uploads a new profile image.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesImagesByEntityNameAndEntityId", "parameters": [ { - "name": "entityType", + "name": "entityName", "in": "path", - "description": "Route segment identifying the entity type (tasks, projects, companies, users).", "required": true, "schema": { + "pattern": "^[A-Za-z]*$", "type": "string" } + }, + { + "name": "entityId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "requestBody": { - "description": "The filter definition payload supplied by the caller.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/FilterForm" + "$ref": "#/components/schemas/FileUploadModel" } } - }, - "required": true + } }, "responses": { "200": { @@ -10723,7 +10942,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Filter" + "$ref": "#/components/schemas/FileInfo" } } } @@ -10738,8 +10957,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -10764,31 +10983,39 @@ } } }, - "/me/filters/{entityType}/fromquery": { + "/files/images/{entityName}/{entityId}/byuploadid": { "post": { "tags": [ - "Filters" + "Images" ], - "summary": "Creates a persisted filter from an OData query string.\n Convenience endpoint for external API consumers who want to create filters using familiar OData syntax.", - "description": "Creates a filter from an OData filterby query string.\r\n\r\nAny authenticated user.", - "operationId": "PostMeFilterFromQueryByUserType", + "summary": "Sets a profile image from a previously uploaded file.", + "description": "After an image has been uploaded to an upload URL generated by the /files/generateuploadurl endpoint, this endpoint sets the uploaded image as the profile image of the entity by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostFilesImagesByUploadIdByEntityNameAndEntityId", "parameters": [ { - "name": "entityType", + "name": "entityName", "in": "path", - "description": "Route segment identifying the entity type (tasks, projects, companies, users).", "required": true, "schema": { + "pattern": "^[A-Za-z]*$", "type": "string" } + }, + { + "name": "entityId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "requestBody": { - "description": "The filter query payload containing the filter name, sharing settings, and query string.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FilterFromQueryForm" + "$ref": "#/components/schemas/UploadByUploadIdForm" } } }, @@ -10800,7 +11027,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Filter" + "$ref": "#/components/schemas/FileInfo" } } } @@ -10815,8 +11042,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -10841,33 +11068,41 @@ } } }, - "/me/filters/{filterId}": { - "delete": { + "/files/images/{entityType}": { + "get": { "tags": [ - "Filters" + "SharedFiles" ], - "summary": "Deletes a filter.", - "description": "Deletes the filter when the current user has manage access.\r\n\r\nAny authenticated user.", - "operationId": "DeleteMeFilterById", + "summary": "Returns the public profile image.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "GetFilesImagesByEntityType", "parameters": [ { - "name": "filterId", + "name": "entityType", "in": "path", - "description": "Identifier of the filter to delete.", + "description": "The entity type for which we are requesting the image.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } - } - ], - "responses": { - "204": { - "description": "No Content" }, - "401": { - "description": "Unauthorized", - "content": { + { + "name": "token", + "in": "query", + "description": "The token to allow access.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "400": { + "description": "Bad Request", + "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" @@ -10897,26 +11132,72 @@ "v1" ], "x-access": { - "any": "true" + "anonymous": "true" } - }, + } + }, + "/files/{fileId}/download": { "get": { "tags": [ - "Filters" + "Files" ], - "summary": "Returns a single filter by its identifier for the current user.", - "description": "Returns the filter if the current user has read access.\r\n\r\nAny authenticated user.", - "operationId": "GetMeFilterById", + "summary": "Returns the content of the file with the specified id.", + "description": "Returns the content of the latest file version.\nIf the file is an image and the width and height are set,\nthe image will resized before it is returned.\nThe get the content it is necessary to have the 'read' permissions on the\nentity the file is related to.\r\n\r\nAny authenticated user.", + "operationId": "GetFile", "parameters": [ { - "name": "filterId", + "name": "fileId", "in": "path", - "description": "The filter identifier.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "width", + "in": "query", + "description": "Set width to resize.", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "height", + "in": "query", + "description": "Set height to resize.", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "crop", + "in": "query", + "description": "Whether to crop the image when resizing it.", + "schema": { + "type": "boolean" + } + }, + { + "name": "enlarge", + "in": "query", + "description": "Whether to enlarge the image if the width/height are bigger than the original image.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "inline", + "in": "query", + "description": "If inline is true, content-disposition header is inline, else it is attachment.", + "schema": { + "type": "boolean", + "default": false + } } ], "responses": { @@ -10925,27 +11206,8 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Filter" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string", + "format": "binary" } } } @@ -10964,64 +11226,97 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/files/{fileId}/pdf": { + "get": { "tags": [ - "Filters" + "Files" ], - "summary": "Updates an existing filter definition.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PutMeFilterById", + "summary": "Returns the content of the file with the specified id as pdf.", + "description": "Returns the content of the latest file version as pdf.\nAll kinds of MS Office document types are supported.\nTo get the content you must have the 'read' permissions on the\nentity the file is related to.\r\n\r\nAny authenticated user.", + "operationId": "GetPdf", "parameters": [ { - "name": "filterId", + "name": "fileId", "in": "path", - "description": "Identifier of the filter to update.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "inline", + "in": "query", + "description": "If inline is true, content-disposition header is inline, else it is attachment.", + "schema": { + "type": "boolean", + "default": false + } } ], - "requestBody": { - "description": "The updated filter definition supplied by the caller.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FilterForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Filter" + "type": "string", + "format": "binary" } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/filters": { + "get": { + "tags": [ + "Filters" + ], + "summary": "Returns the current user's filters.", + "description": "Returns the union of filters owned by the requesting user and filters explicitly shared with the requesting user.\r\n Use the specialized created-by-me and shared-with-me endpoints when only one category is needed.\r\n\r\nAny authenticated user.", + "operationId": "GetFilters", + "parameters": [ + { + "$ref": "#/components/parameters/page" }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + { + "$ref": "#/components/parameters/pageSize" }, - "401": { - "description": "Unauthorized", + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/Filter" + } } } } @@ -11052,24 +11347,35 @@ } } }, - "/me/filters/{filterId}/copy": { - "post": { + "/filters/{entityType}": { + "get": { "tags": [ "Filters" ], - "summary": "Creates a copy of an existing filter.", - "description": "Copies the filter definition and query.\r\n The copied filter will be owned only by the requesting user.\r\n The name of the copied filter will be \"{original name} (Copy)\" or \"{original name} (Kopie)\" for German users.\r\n\r\nAny authenticated user.", - "operationId": "PostMeFilterCopyByFilterId", + "summary": "Returns the current user's filters for the specified user type.", + "description": "Returns the union of filters owned by the requesting user and filters explicitly shared with the requesting user\r\n for the requested user type.\r\n Use the specialized created-by-me and shared-with-me endpoints when only one category is needed.\r\n\r\nAny authenticated user.", + "operationId": "GetFiltersByUserType", "parameters": [ { - "name": "filterId", + "name": "entityType", "in": "path", - "description": "The identifier of the filter to copy.", + "description": "The entity type route value.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -11078,27 +11384,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Filter" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/Filter" + } } } } @@ -11129,25 +11418,15 @@ } } }, - "/me/filters/{filterId}/{entityType}": { - "get": { + "/filters/{entityType}/evaluate": { + "post": { "tags": [ "Filters" ], - "summary": "Evaluates a filter by applying it to the specified target user type and returning the filtered results.\n Supports standard paging, ordering, and additional query constraints from query parameters.", - "description": "Retrieves and evaluates a saved filter to return matching entities.\r\n\r\nAny authenticated user.", - "operationId": "GetMeFilterByFilterIdAndUserType", + "summary": "Evaluates a filter definition against the specified user type and returns the filtered results without saving the filter.\n This endpoint is designed for quick filters where the frontend builds a FilterDefinition dynamically\n and needs to evaluate it immediately without persisting it to the database.\n Supports standard paging, ordering, and additional query constraints from query parameters.", + "description": "Evaluates an ad-hoc filter without persisting it. Useful for testing filters before saving or for temporary filtering needs.\r\n\r\nAny authenticated user.", + "operationId": "PostFilterEvaluateByUserType", "parameters": [ - { - "name": "filterId", - "in": "path", - "description": "The identifier of the filter to evaluate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, { "name": "entityType", "in": "path", @@ -11158,6 +11437,17 @@ } } ], + "requestBody": { + "description": "The filter application form containing the FilterDefinition to evaluate.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApplyFilterForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", @@ -11179,16 +11469,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -11215,28 +11495,40 @@ } } }, - "/me/otherprivatetasks": { - "get": { + "/filters/{filterId}/contributors": { + "post": { "tags": [ - "PrivateTasks" + "Filters" ], - "summary": "Returns all private tasks that the current user created and assigned to someone else.", - "description": "Private tasks are always created for the current user but can be reassigned to other users afterwards.\r\n This endpoint returns all private tasks that were originally created by the user but were reassigned to someone else.\r\n\r\nAny authenticated user.", - "operationId": "GetMeOtherPrivateTasks", + "summary": "Adds explicit contributors to the specified filter.", + "description": "Adding filter contributors grants explicit access to the filter with the specified access levels.\r\n Existing explicit contributors are ignored and therefore not recreated.\r\n The filter creator cannot be added as an explicit contributor because ownership is handled implicitly.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", + "operationId": "PostFilterContributorsByFilterId", "parameters": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "filterId", + "in": "path", + "description": "The filter that should receive explicit contributors.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], + "requestBody": { + "description": "The contributor permissions to add.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContributorPostForm" + } + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", @@ -11245,12 +11537,22 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TaskModel" + "$ref": "#/components/schemas/MinimalContributorModel" } } } } }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "401": { "description": "Unauthorized", "content": { @@ -11287,19 +11589,29 @@ } } }, - "/me/otherprivatetasks/{taskId}": { - "get": { + "/filters/{filterId}/contributors/{filterContributorId}": { + "delete": { "tags": [ - "PrivateTasks" + "Filters" ], - "summary": "Returns a private task that the current user created and assigned to someone else.", - "description": "Private tasks are always created for the current user but can be reassigned to other users afterwards.\r\n This endpoint returns a private task that was originally created by the user but was reassigned to someone else.\r\n\r\nAny authenticated user.", - "operationId": "GetMeOtherPrivateTaskByTaskId", + "summary": "Removes an explicit contributor from the specified filter.", + "description": "Removing a filter contributor revokes that contributor's explicit access to the filter.\r\n The contributor entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", + "operationId": "DeleteFilterContributorByFilterIdAndFilterContributorId", "parameters": [ { - "name": "taskId", + "name": "filterId", "in": "path", - "description": "The id of the task.", + "description": "The filter that owns the contributor entry.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "filterContributorId", + "in": "path", + "description": "The contributor entry to delete.", "required": true, "schema": { "type": "string", @@ -11308,15 +11620,8 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskModel" - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", @@ -11352,30 +11657,29 @@ "x-access": { "any": "true" } - } - }, - "/me/otherprivatetasks/{taskId}/checklistitems": { - "get": { + }, + "put": { "tags": [ - "ChecklistItems" + "Filters" ], - "summary": "Returns the checklist items for a private task with the specified id.", - "description": "The user must be the creator of the task.", - "operationId": "GetMyOtherPrivateTaskChecklistItemsByUserIdAndTaskId", + "summary": "Updates the access level of an explicit filter contributor.", + "description": "Updating a filter contributor changes that contributor's explicit access level for the filter.\r\n The contributor entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", + "operationId": "PutFilterContributorByFilterIdAndFilterContributorId", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", + "name": "filterId", + "in": "path", + "description": "The filter that owns the contributor entry.", + "required": true, "schema": { "type": "string", "format": "uuid" } }, { - "name": "taskId", + "name": "filterContributorId", "in": "path", - "description": "The id of the task.", + "description": "The contributor entry to update.", "required": true, "schema": { "type": "string", @@ -11383,16 +11687,34 @@ } } ], + "requestBody": { + "description": "The new contributor permission payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContributorForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChecklistItem" - } + "$ref": "#/components/schemas/MinimalContributorModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -11433,38 +11755,19 @@ } } }, - "/me/otherprivatetasks/{taskId}/checklistitems/{checklistItemId}": { - "get": { + "/filters/{filterId}/teams": { + "post": { "tags": [ - "ChecklistItems" + "Filters" ], - "summary": "Returns a checklist item for a private task with the specified id.", - "description": "The user must be the creator of the task.", - "operationId": "GetMyOtherPrivateTaskChecklistItemByUserIdAndTaskIdAndChecklistItemId", + "summary": "Adds explicit team permissions to the specified filter.", + "description": "Adding filter teams grants explicit access to the filter for all members of the specified teams.\r\n Existing explicit team permissions are ignored and therefore not recreated.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", + "operationId": "PostFilterTeamsByFilterId", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "checklistItemId", + "name": "filterId", "in": "path", - "description": "The id of the checklist item.", + "description": "The filter that should receive explicit team permissions.", "required": true, "schema": { "type": "string", @@ -11472,13 +11775,40 @@ } } ], + "requestBody": { + "description": "The team permissions to add.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityToTeamPostForm" + } + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItem" + "type": "array", + "items": { + "$ref": "#/components/schemas/MinimalEntityToTeamModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -11519,27 +11849,52 @@ } } }, - "/me/permissions": { - "get": { + "/filters/{filterId}/teams/{filterToTeamId}": { + "delete": { "tags": [ - "Permissions" + "Filters" ], - "summary": "Returns the permissions of the currently logged-in user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMePermissions", - "responses": { - "200": { - "description": "OK", + "summary": "Removes an explicit team permission from the specified filter.", + "description": "Removing a filter team permission revokes that team's explicit access to the filter.\r\n The team permission entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", + "operationId": "DeleteFilterTeamByFilterIdAndFilterToTeamId", + "parameters": [ + { + "name": "filterId", + "in": "path", + "description": "The filter that owns the team permission entry.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "filterToTeamId", + "in": "path", + "description": "The team permission entry to delete.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserPermissionInfoExternal" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -11562,92 +11917,84 @@ "x-access": { "any": "true" } - } - }, - "/me/privatedocuments": { - "get": { + }, + "put": { "tags": [ - "Documents" + "Filters" ], - "summary": "Returns the requesting user's private documents.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMePrivateDocuments", + "summary": "Updates the access level of an explicit team permission on the specified filter.", + "description": "Updating a filter team permission changes the explicit access level of the referenced team for the filter.\r\n The team permission entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", + "operationId": "PutFilterTeamByFilterIdAndFilterToTeamId", "parameters": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" + "name": "filterId", + "in": "path", + "description": "The filter that owns the team permission entry.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, { - "$ref": "#/components/parameters/filterby" + "name": "filterToTeamId", + "in": "path", + "description": "The team permission entry to update.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], + "requestBody": { + "description": "The new team permission payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityToTeamForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "$ref": "#/components/schemas/MinimalEntityToTeamModel" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/privatedocuments/trash": { - "get": { - "tags": [ - "Documents" - ], - "summary": "Returns the requesting user's private trashed documents.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMePrivateDocumentsTrash", - "parameters": [ - { - "$ref": "#/components/parameters/page" }, - { - "$ref": "#/components/parameters/pageSize" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - { - "$ref": "#/components/parameters/orderby" + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -11668,52 +12015,15 @@ } } }, - "/me/privatetasks": { + "/invitations": { "get": { "tags": [ - "PrivateTasks" - ], - "summary": "Returns all private tasks of the current user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMePrivateTasks", - "parameters": [ - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } + "Invitations" ], + "summary": "Prevents GET requests to the invitations route from throwing errors.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "GetInvitations", "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -11736,45 +12046,70 @@ "v1" ], "x-access": { - "any": "true" + "anonymous": "true" } } }, - "/me/privatetasks/deletetags": { + "/invitations/accept": { "post": { "tags": [ - "TaskTags" + "Invitations" ], - "summary": "Removes a tag from all private tasks.", - "description": "Removes a tag from all private tasks of the current user.\r\n\r\nAny authenticated user.", - "operationId": "PostMePrivateTasksDeleteTags", + "summary": "Accepts the invitation with the invitation code.", + "operationId": "Accept", "requestBody": { - "description": "The model to remove the tag from all private tasks.", + "description": "The invitation code received when creating the invitation.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteTagForm" + "$ref": "#/components/schemas/AcceptInvitation" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/AcceptInvitation" } } - }, - "required": true + } }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ] + } + }, + "/me": { + "get": { + "tags": [ + "Users" + ], + "summary": "Returns the currently logged-in user and workspace.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetMe", + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/UserAndWorkspace" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -11799,14 +12134,28 @@ } } }, - "/me/privatetasks/tags": { + "/me/allavailabletasks": { "get": { "tags": [ - "TaskTags" + "AssignedTasks" ], - "summary": "Returns all tags of the private tasks of the current user.", + "summary": "Returns all tasks the current user is allowed to see.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMePrivateTasksTags", + "operationId": "GetMeAllAvailableTasks", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], "responses": { "200": { "description": "OK", @@ -11815,7 +12164,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/BaseTagModelWithCount" + "$ref": "#/components/schemas/TaskModel" } } } @@ -11837,22 +12186,40 @@ } } }, - "/me/privatetasks/taskstatuses": { + "/me/assignedtasks": { "get": { "tags": [ - "PrivateTasks" + "AssignedTasks" ], - "summary": "Returns the task statuses for private tasks for the specified user.", + "summary": "Returns all tasks assigned to the current user.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMyPrivateTaskStatuses", + "operationId": "GetMeAssignedTasks", "parameters": [ { - "name": "userId", + "name": "inProgress", "in": "query", - "description": "The id of the user.", + "description": "Whether to return only assigned project tasks of running projects. Defaults to true.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "assignedOnFrom", + "in": "query", + "description": "The start date for filtering by assignment date. If set, tasks are returned only when the assignment date is greater or equal than this value.", "schema": { "type": "string", - "format": "uuid" + "format": "date-time" + } + }, + { + "name": "assignedOnTo", + "in": "query", + "description": "The end date for filtering by assignment date. If set, tasks are returned only when the assignment date is less or equal than this value.", + "schema": { + "type": "string", + "format": "date-time" } }, { @@ -11876,53 +12243,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TaskStatus" + "$ref": "#/components/schemas/TaskModel" } } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/privatetasks/updatetags": { - "post": { - "tags": [ - "TaskTags" - ], - "summary": "Updates a tag for all private tasks.", - "description": "Updates a tag for all private tasks of the current user.\r\n\r\nAny authenticated user.", - "operationId": "PostMePrivateTasksUpdateTags", - "requestBody": { - "description": "The model to update the tag including the old and new tag names.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TagUpdateForm" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, - "207": { - "description": "Multi-Status" }, "400": { "description": "Bad Request", @@ -11950,19 +12275,19 @@ } } }, - "/me/privatetasks/{taskId}": { + "/me/assignedtasks/{taskId}": { "get": { "tags": [ - "PrivateTasks" + "AssignedTasks" ], - "summary": "Returns the private task with the specified id for the current user.", + "summary": "Returns the assigned task with the specified id of the current user.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMePrivateTaskByTaskId", + "operationId": "GetMeAssignedTaskByTaskId", "parameters": [ { "name": "taskId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task to return.", "required": true, "schema": { "type": "string", @@ -11981,16 +12306,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -12017,32 +12332,22 @@ } } }, - "/me/privatetasks/{taskId}/checklistitems": { + "/me/dashboards": { "get": { "tags": [ - "ChecklistItems" + "Dashboards" ], - "summary": "Returns the checklist for a private task with the specified id.", - "description": "The user must be be assigned to the task.", - "operationId": "GetMyPrivateTaskChecklistItemsByUserIdAndTaskId", + "summary": "Returns the dashboards of the current user.", + "description": "Returns the dashboards of the current user.\r\n\r\nThe user must be the creator.", + "operationId": "GetMeDashboards", "parameters": [ { - "name": "userId", + "name": "includeWidgets", "in": "query", - "description": "The id of the user.", - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, + "description": "Include widgets.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } } ], @@ -12054,31 +12359,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ChecklistItem" + "$ref": "#/components/schemas/Dashboard" } } } } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -12092,47 +12377,30 @@ "v1" ], "x-access": { - "any": "true" + "owner": "true" } } }, - "/me/privatetasks/{taskId}/checklistitems/{checklistItemId}": { + "/me/filters": { "get": { "tags": [ - "ChecklistItems" + "Filters" ], - "summary": "Retrieves a checklist item from a private task.", - "description": "The user must be assigned to the task.", - "operationId": "GetMyPrivateTaskChecklistItemByUserIdAndTaskIdAndChecklistItemId", + "summary": "Returns the filters created by the current user.", + "description": "Returns filters that were created by and are owned by the requesting user.\r\n Shared filters are excluded, even if the requesting user also has explicit access through contributor, team, or workspace permissions.\r\n\r\nAny authenticated user.", + "operationId": "GetMeFilters", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" }, { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/pageSize" }, { - "name": "checklistItemId", - "in": "path", - "description": "The id of the checklist item to retrieve.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -12141,17 +12409,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItem" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/Filter" + } } } } @@ -12182,15 +12443,24 @@ } } }, - "/me/projecttasks": { + "/me/filters/{entityType}": { "get": { "tags": [ - "ProjectTasks" + "Filters" ], - "summary": "Returns all project tasks that the current user can see.", - "description": "The user must have `project-planning-data:read` permissions, otherwise only assigned tasks will be returned.", - "operationId": "GetMeProjectTasks", + "summary": "Returns the filters created by the current user for the specified user type.", + "description": "Returns filters that were created by and are owned by the requesting user and match the requested user type.\r\n Shared filters are excluded, even if the requesting user also has explicit access through contributor, team, or workspace permissions.\r\n\r\nAny authenticated user.", + "operationId": "GetMeFiltersByUserType", "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "The entity type route value.", + "required": true, + "schema": { + "type": "string" + } + }, { "$ref": "#/components/parameters/page" }, @@ -12212,11 +12482,21 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TaskModel" + "$ref": "#/components/schemas/Filter" } } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -12232,40 +12512,63 @@ "x-access": { "any": "true" } - } - }, - "/me/shareddocuments": { - "get": { + }, + "post": { "tags": [ - "Documents" + "Filters" ], - "summary": "Returns all documents that were shared with the requesting user.", - "description": "Returns documents where the user has been explicitly granted document-level permissions\r\n (direct user permissions, team permissions, or workspace permissions on the document).\r\n Excludes the user's own private documents.\r\n Note: Also includes documents the user can access through their project or space memberships.\r\n\r\nAny authenticated user.", - "operationId": "GetMeSharedDocuments", + "summary": "Creates a persisted filter definition for the specified user type.", + "description": "Creates a new filter owned by the current user.\r\n\r\nAny authenticated user.", + "operationId": "PostMeFilterByUserType", "parameters": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "entityType", + "in": "path", + "description": "Route segment identifying the entity type (tasks, projects, companies, users).", + "required": true, + "schema": { + "type": "string" + } } ], + "requestBody": { + "description": "The filter definition payload supplied by the caller.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FilterForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "$ref": "#/components/schemas/Filter" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -12286,38 +12589,53 @@ } } }, - "/me/sharedfilters": { - "get": { + "/me/filters/{entityType}/fromquery": { + "post": { "tags": [ "Filters" ], - "summary": "Returns filters explicitly shared with the current user.", - "description": "Returns filters where the requesting user has been granted explicit access through user permissions,\r\n team permissions, or workspace-wide filter permissions.\r\n Excludes filters owned by the requesting user.\r\n\r\nAny authenticated user.", - "operationId": "GetMeSharedFilters", + "summary": "Creates a persisted filter from an OData query string.\n Convenience endpoint for external API consumers who want to create filters using familiar OData syntax.", + "description": "Creates a filter from an OData filterby query string.\r\n\r\nAny authenticated user.", + "operationId": "PostMeFilterFromQueryByUserType", "parameters": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "entityType", + "in": "path", + "description": "Route segment identifying the entity type (tasks, projects, companies, users).", + "required": true, + "schema": { + "type": "string" + } } ], + "requestBody": { + "description": "The filter query payload containing the filter name, sharing settings, and query string.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FilterFromQueryForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Filter" - } + "$ref": "#/components/schemas/Filter" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -12348,47 +12666,36 @@ } } }, - "/me/sharedfilters/{entityType}": { - "get": { + "/me/filters/{filterId}": { + "delete": { "tags": [ "Filters" ], - "summary": "Returns filters explicitly shared with the current user for the specified user type.", - "description": "Returns filters where the requesting user has been granted explicit access through user permissions,\r\n team permissions, or workspace-wide filter permissions and that match the requested user type.\r\n Excludes filters owned by the requesting user.\r\n\r\nAny authenticated user.", - "operationId": "GetMeSharedFiltersByUserType", + "summary": "Deletes a filter.", + "description": "Deletes the filter when the current user has manage access.\r\n\r\nAny authenticated user.", + "operationId": "DeleteMeFilterById", "parameters": [ { - "name": "entityType", + "name": "filterId", "in": "path", - "description": "The entity type route value.", + "description": "Identifier of the filter to delete.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Filter" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -12417,26 +12724,53 @@ "x-access": { "any": "true" } - } - }, - "/me/tasks/tags": { + }, "get": { "tags": [ - "AssignedTasks" + "Filters" + ], + "summary": "Returns a single filter by its identifier for the current user.", + "description": "Returns the filter if the current user has read access.\r\n\r\nAny authenticated user.", + "operationId": "GetMeFilterById", + "parameters": [ + { + "name": "filterId", + "in": "path", + "description": "The filter identifier.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Returns all task tags the current user is allowed to see.", - "description": "The tags can be filtered by the properties of the task model.\r\n\r\nAny authenticated user.", - "operationId": "GetMeTasksTags", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "$ref": "#/components/schemas/Filter" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -12455,40 +12789,77 @@ "x-access": { "any": "true" } - } - }, - "/me/timeentries/last": { - "get": { + }, + "put": { "tags": [ - "TimeEntries" + "Filters" ], - "summary": "Returns the last time entry of a specified user.", - "description": "The last time entry is always the last one that was started.\r\n Time entries which are started in the future are ignored.\r\n If a time entry does not have a start time, 12.00 am is automatically assumed as the start time\r\n for comparison with other time entries from the same day.\r\n\r\nThe user must be an admin or the creator.", - "operationId": "GetMyLastTimeEntries", + "summary": "Updates an existing filter definition.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PutMeFilterById", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", + "name": "filterId", + "in": "path", + "description": "Identifier of the filter to update.", + "required": true, "schema": { "type": "string", "format": "uuid" } } ], + "requestBody": { + "description": "The updated filter definition supplied by the caller.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FilterForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "$ref": "#/components/schemas/Filter" } } } }, - "204": { - "description": "No Content" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -12502,24 +12873,24 @@ "v1" ], "x-access": { - "admin": "true", - "owner": "true" + "any": "true" } } }, - "/me/timetracking/pause": { + "/me/filters/{filterId}/copy": { "post": { "tags": [ - "TimeTracking" + "Filters" ], - "summary": "Pauses a running time tracking for a user.", - "description": "If there is already a paused time tracking nothing happens. If there is no running time tracking, returns NoContent.\r\n\r\nThe user must be the creator.", - "operationId": "PostPauseMyTimeTracking", + "summary": "Creates a copy of an existing filter.", + "description": "Copies the filter definition and query.\r\n The copied filter will be owned only by the requesting user.\r\n The name of the copied filter will be \"{original name} (Copy)\" or \"{original name} (Kopie)\" for German users.\r\n\r\nAny authenticated user.", + "operationId": "PostMeFilterCopyByFilterId", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", + "name": "filterId", + "in": "path", + "description": "The identifier of the filter to copy.", + "required": true, "schema": { "type": "string", "format": "uuid" @@ -12532,13 +12903,40 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "$ref": "#/components/schemas/Filter" } } } }, - "204": { - "description": "No Content" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -12552,27 +12950,37 @@ "v1" ], "x-access": { - "owner": "true" + "any": "true" } } }, - "/me/timetracking/resume": { - "post": { + "/me/filters/{filterId}/{entityType}": { + "get": { "tags": [ - "TimeTracking" + "Filters" ], - "summary": "Resumes a paused time tracking for a user.", - "description": "If there is already a running time tracking nothing happens. If there is no running time tracking, returns NoContent.\r\n\r\nThe user must be the creator.", - "operationId": "PostResumeMyTimeTracking", + "summary": "Evaluates a filter by applying it to the specified target user type and returning the filtered results.\n Supports standard paging, ordering, and additional query constraints from query parameters.", + "description": "Retrieves and evaluates a saved filter to return matching entities.\r\n\r\nAny authenticated user.", + "operationId": "GetMeFilterByFilterIdAndUserType", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", + "name": "filterId", + "in": "path", + "description": "The identifier of the filter to evaluate.", + "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "entityType", + "in": "path", + "description": "The entity type name (tasks, projects, companies, users).", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { @@ -12581,13 +12989,40 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "$ref": "#/components/schemas/ObjectPagedResult" } } } }, - "204": { - "description": "No Content" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -12601,47 +13036,62 @@ "v1" ], "x-access": { - "owner": "true" + "any": "true" } } }, - "/me/timetracking/start": { - "post": { + "/me/otherprivatetasks": { + "get": { "tags": [ - "TimeTracking" + "PrivateTasks" ], - "summary": "Starts a new time tracking for a user.", - "description": "If there is already a running/paused time tracking it will be stopped automatically in order to start the new one.\r\n\r\nThe user must be an admin or the creator.", - "operationId": "PostStartMyTimeTracking", + "summary": "Returns all private tasks that the current user created and assigned to someone else.", + "description": "Private tasks are always created for the current user but can be reassigned to other users afterwards.\r\n This endpoint returns all private tasks that were originally created by the user but were reassigned to someone else.\r\n\r\nAny authenticated user.", + "operationId": "GetMeOtherPrivateTasks", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The model describing the time tracking to start.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StartTimeTrackingForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -12658,78 +13108,106 @@ "v1" ], "x-access": { - "admin": "true", - "owner": "true" + "any": "true" } } }, - "/me/timetracking/stop": { - "post": { + "/me/otherprivatetasks/{taskId}": { + "get": { "tags": [ - "TimeTracking" + "PrivateTasks" ], - "summary": "Stops the currently running time tracking of the specified user.", - "description": "The request body is optional. You can provide a stopReason to indicate how the tracking was stopped.\r\n For external API clients, the stopReason is automatically set to \"external-api\" regardless of what is provided.\r\n For this operation to work there must be a running time tracking for the user.\r\n\r\nThe user must be an admin or the creator.", - "operationId": "PostStopMyTimeTracking", + "summary": "Returns a private task that the current user created and assigned to someone else.", + "description": "Private tasks are always created for the current user but can be reassigned to other users afterwards.\r\n This endpoint returns a private task that was originally created by the user but was reassigned to someone else.\r\n\r\nAny authenticated user.", + "operationId": "GetMeOtherPrivateTaskByTaskId", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, "schema": { "type": "string", "format": "uuid" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StopTimeTrackingForm" - } - } - } - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "$ref": "#/components/schemas/TaskModel" } } } }, - "204": { - "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], "x-api-versions": [ "v1" ], "x-access": { - "admin": "true", - "owner": "true" + "any": "true" } } }, - "/permissions/features": { + "/me/otherprivatetasks/{taskId}/checklistitems": { "get": { "tags": [ - "Permissions" + "ChecklistItems" + ], + "summary": "Returns the checklist items for a private task with the specified id.", + "description": "The user must be the creator of the task.", + "operationId": "GetMyOtherPrivateTaskChecklistItemsByUserIdAndTaskId", + "parameters": [ + { + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Returns all available features.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetPermissionsFeatures", "responses": { "200": { "description": "OK", @@ -12738,12 +13216,29 @@ "schema": { "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/ChecklistItem" } - }, - "example": [ - "https://www.awork.com" - ] + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } } @@ -12763,28 +13258,118 @@ } } }, - "/permissions/projectfeatures": { + "/me/otherprivatetasks/{taskId}/checklistitems/{checklistItemId}": { + "get": { + "tags": [ + "ChecklistItems" + ], + "summary": "Returns a checklist item for a private task with the specified id.", + "description": "The user must be the creator of the task.", + "operationId": "GetMyOtherPrivateTaskChecklistItemByUserIdAndTaskIdAndChecklistItemId", + "parameters": [ + { + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "checklistItemId", + "in": "path", + "description": "The id of the checklist item.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChecklistItem" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/permissions": { "get": { "tags": [ "Permissions" ], - "summary": "Returns all available project features.", + "summary": "Returns the permissions of the currently logged-in user.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetPermissionsProjectFeatures", + "operationId": "GetMePermissions", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } - }, - "example": [ - "https://www.awork.com" - ] + "$ref": "#/components/schemas/UserPermissionInfoExternal" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } } @@ -12804,14 +13389,14 @@ } } }, - "/projectmilestones": { + "/me/privatedocuments": { "get": { "tags": [ - "ProjectMilestones" + "Documents" ], - "summary": "Retrieves all project milestones.", + "summary": "Returns the requesting user's private documents.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectMilestones", + "operationId": "GetMePrivateDocuments", "parameters": [ { "$ref": "#/components/parameters/page" @@ -12834,7 +13419,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ProjectMilestone" + "$ref": "#/components/schemas/DocumentModel" } } } @@ -12854,42 +13439,40 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/me/privatedocuments/trash": { + "get": { "tags": [ - "ProjectMilestones" + "Documents" ], - "summary": "Creates a new project milestone.", - "description": "The user must either be admin, have 'project-planning-data:write' permissions on the project or be the creator.", - "operationId": "PostProjectMilestone", - "requestBody": { - "description": "The model containing milestone details.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectMilestonePostForm" - } - } + "summary": "Returns the requesting user's private trashed documents.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetMePrivateDocumentsTrash", + "parameters": [ + { + "$ref": "#/components/parameters/page" }, - "required": true - }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestone" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentModel" + } } } } @@ -12910,24 +13493,26 @@ } } }, - "/projectmilestones/{milestoneId}": { + "/me/privatetasks": { "get": { "tags": [ - "ProjectMilestones" + "PrivateTasks" ], - "summary": "Returns the specified project milestone.", + "summary": "Returns all private tasks of the current user.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectMilestoneByMilestoneId", + "operationId": "GetMePrivateTasks", "parameters": [ { - "name": "milestoneId", - "in": "path", - "description": "The id of the milestone.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -12936,7 +13521,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestone" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskModel" + } } } } @@ -12977,26 +13565,25 @@ } } }, - "/projectmilestones/{projectMilestoneId}": { - "delete": { + "/me/privatetasks/deletetags": { + "post": { "tags": [ - "ProjectMilestones" + "TaskTags" ], - "summary": "Deletes a project milestone.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "DeleteProjectMilestoneById", - "parameters": [ - { - "name": "projectMilestoneId", - "in": "path", - "description": "The id of the project milestone to delete.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Removes a tag from all private tasks.", + "description": "Removes a tag from all private tasks of the current user.\r\n\r\nAny authenticated user.", + "operationId": "PostMePrivateTasksDeleteTags", + "requestBody": { + "description": "The model to remove the tag from all private tasks.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteTagForm" + } } - } - ], + }, + "required": true + }, "responses": { "204": { "description": "No Content" @@ -13011,8 +13598,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -13035,64 +13622,26 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/me/privatetasks/tags": { + "get": { "tags": [ - "ProjectMilestones" + "TaskTags" ], - "summary": "Updates an existing project milestone.", + "summary": "Returns all tags of the private tasks of the current user.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "PutProjectMilestoneById", - "parameters": [ - { - "name": "projectMilestoneId", - "in": "path", - "description": "The id of the project milestone.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model containing milestone details.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectMilestonePutForm" - } - } - }, - "required": true - }, + "operationId": "GetMePrivateTasksTags", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestone" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModelWithCount" + } } } } @@ -13113,22 +13662,22 @@ } } }, - "/projectroles": { + "/me/privatetasks/taskstatuses": { "get": { "tags": [ - "ProjectRoles" + "PrivateTasks" ], - "summary": "Returns all project roles.", + "summary": "Returns the task statuses for private tasks for the specified user.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectRoles", + "operationId": "GetMyPrivateTaskStatuses", "parameters": [ { - "name": "includeMembers", + "name": "userId", "in": "query", - "description": "Whether to include the members of each project role in the response.", + "description": "The id of the user.", "schema": { - "type": "boolean", - "default": true + "type": "string", + "format": "uuid" } }, { @@ -13152,7 +13701,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ProjectRole" + "$ref": "#/components/schemas/TaskStatus" } } } @@ -13172,35 +13721,33 @@ "x-access": { "any": "true" } - }, + } + }, + "/me/privatetasks/updatetags": { "post": { "tags": [ - "ProjectRoles" + "TaskTags" ], - "summary": "Creates a new project role.", - "description": "\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostProjectRole", + "summary": "Updates a tag for all private tasks.", + "description": "Updates a tag for all private tasks of the current user.\r\n\r\nAny authenticated user.", + "operationId": "PostMePrivateTasksUpdateTags", "requestBody": { - "description": "The model to create the project role.", + "description": "The model to update the tag including the old and new tag names.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectRoleForm" + "$ref": "#/components/schemas/TagUpdateForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectRole" - } - } - } + "204": { + "description": "No Content" + }, + "207": { + "description": "Multi-Status" }, "400": { "description": "Bad Request", @@ -13224,27 +13771,23 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" - }, - "x-subscriptionlevel": { - "minimumPlan": "standard" + "any": "true" } } }, - "/projectroles/byuserid/{userId}": { + "/me/privatetasks/{taskId}": { "get": { "tags": [ - "ProjectRoles" + "PrivateTasks" ], - "summary": "Returns all project roles assigned to the specified user.", + "summary": "Returns the private task with the specified id for the current user.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectRolesByUserIdByUserId", + "operationId": "GetMePrivateTaskByTaskId", "parameters": [ { - "name": "userId", + "name": "taskId", "in": "path", - "description": "The id of the user.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -13258,10 +13801,17 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectRole" - } + "$ref": "#/components/schemas/TaskModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -13292,19 +13842,28 @@ } } }, - "/projectroles/{projectRoleId}": { + "/me/privatetasks/{taskId}/checklistitems": { "get": { "tags": [ - "ProjectRoles" + "ChecklistItems" ], - "summary": "Returns a project role by its id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectRoleById", + "summary": "Returns the checklist for a private task with the specified id.", + "description": "The user must be be assigned to the task.", + "operationId": "GetMyPrivateTaskChecklistItemsByUserIdAndTaskId", "parameters": [ { - "name": "projectRoleId", + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskId", "in": "path", - "description": "The id of the project role.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -13318,7 +13877,20 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectRole" + "type": "array", + "items": { + "$ref": "#/components/schemas/ChecklistItem" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -13347,19 +13919,40 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/me/privatetasks/{taskId}/checklistitems/{checklistItemId}": { + "get": { "tags": [ - "ProjectRoles" + "ChecklistItems" ], - "summary": "Updates an existing project role.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PutProjectRoleById", + "summary": "Retrieves a checklist item from a private task.", + "description": "The user must be assigned to the task.", + "operationId": "GetMyPrivateTaskChecklistItemByUserIdAndTaskIdAndChecklistItemId", "parameters": [ { - "name": "projectRoleId", + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskId", "in": "path", - "description": "The id of the project role.", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "checklistItemId", + "in": "path", + "description": "The id of the checklist item to retrieve.", "required": true, "schema": { "type": "string", @@ -13367,30 +13960,19 @@ } } ], - "requestBody": { - "description": "The model to update the project role.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectRoleForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectRole" + "$ref": "#/components/schemas/ChecklistItem" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -13421,62 +14003,42 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } } }, - "/projectroles/{projectRoleId}/delete": { - "post": { + "/me/projecttasks": { + "get": { "tags": [ - "ProjectRoles" + "ProjectTasks" ], - "summary": "Deletes a project role and migrates its members to a new role.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostProjectRoleDeleteByProjectRoleId", + "summary": "Returns all project tasks that the current user can see.", + "description": "The user must have `project-planning-data:read` permissions, otherwise only assigned tasks will be returned.", + "operationId": "GetMeProjectTasks", "parameters": [ { - "name": "projectRoleId", - "in": "path", - "description": "The id of the project role.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The model to delete the project role.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectRoleDeleteForm" - } - } - }, - "required": true - }, "responses": { "200": { - "description": "OK" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskModel" + } } } } @@ -13493,30 +14055,19 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } } }, - "/projectroles/{projectRoleId}/permissions": { + "/me/shareddocuments": { "get": { "tags": [ - "ProjectRoles" + "Documents" ], - "summary": "Returns all permissions assigned to a project role.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectRolePermissionsByProjectRoleId", + "summary": "Returns all documents that were shared with the requesting user.", + "description": "Returns documents where the user has been explicitly granted document-level permissions\r\n (direct user permissions, team permissions, or workspace permissions on the document).\r\n Excludes the user's own private documents.\r\n Note: Also includes documents the user can access through their project or space memberships.\r\n\r\nAny authenticated user.", + "operationId": "GetMeSharedDocuments", "parameters": [ - { - "name": "projectRoleId", - "in": "path", - "description": "The id of the project role.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, { "$ref": "#/components/parameters/page" }, @@ -13538,21 +14089,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/PermissionOfProjectRole" + "$ref": "#/components/schemas/DocumentModel" } } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -13568,54 +14109,40 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/me/sharedfilters": { + "get": { "tags": [ - "ProjectRoles" + "Filters" ], - "summary": "Creates or updates a permission for a project role.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectRolePermissionsByProjectRoleId", + "summary": "Returns filters explicitly shared with the current user.", + "description": "Returns filters where the requesting user has been granted explicit access through user permissions,\r\n team permissions, or workspace-wide filter permissions.\r\n Excludes filters owned by the requesting user.\r\n\r\nAny authenticated user.", + "operationId": "GetMeSharedFilters", "parameters": [ { - "name": "projectRoleId", - "in": "path", - "description": "The id of the project role.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The model to create or update the project role permission.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PermissionOfProjectRoleForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PermissionOfProjectRole" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/Filter" + } } } } @@ -13642,20 +14169,28 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projects": { + "/me/sharedfilters/{entityType}": { "get": { "tags": [ - "Projects" + "Filters" ], - "summary": "Returns all projects.", - "description": "Returns all projects the user has `read` permissions for.", - "operationId": "GetProjects", + "summary": "Returns filters explicitly shared with the current user for the specified user type.", + "description": "Returns filters where the requesting user has been granted explicit access through user permissions,\r\n team permissions, or workspace-wide filter permissions and that match the requested user type.\r\n Excludes filters owned by the requesting user.\r\n\r\nAny authenticated user.", + "operationId": "GetMeSharedFiltersByUserType", "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "The entity type route value.", + "required": true, + "schema": { + "type": "string" + } + }, { "$ref": "#/components/parameters/page" }, @@ -13677,11 +14212,21 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Project" + "$ref": "#/components/schemas/Filter" } } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -13697,42 +14242,26 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/me/tasks/tags": { + "get": { "tags": [ - "Projects" + "AssignedTasks" ], - "summary": "Creates a new project.", - "description": "Creates a new project.\r\n\r\nThe user must be an admin or have `project-create:write` permissions.", - "operationId": "PostProject", - "requestBody": { - "description": "The model to create the project.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExtendedProjectForm" - } - } - }, - "required": true - }, + "summary": "Returns all task tags the current user is allowed to see.", + "description": "The tags can be filtered by the properties of the task model.\r\n\r\nAny authenticated user.", + "operationId": "GetMeTasksTags", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } } } } @@ -13749,71 +14278,42 @@ "v1" ], "x-access": { - "admin": "true", - "project-create": "write" + "any": "true" } } }, - "/projects/batch/{operation}": { - "post": { + "/me/timeentries/last": { + "get": { "tags": [ - "Projects" + "TimeEntries" ], - "summary": "Edits multiple projects using the specified operation.", - "description": "Returns MultiStatus including the list of successful and failed projects.\r\n \r\n Supported operations:\r\n
    \r\n
  • changeprojectstatus: changes the status of all selected projects.
  • \r\n
  • changeprojecttype: changes the type of all selected projects.
  • \r\n
  • linkworkflow: links a workflow to all selected projects.
  • \r\n
  • setclient: sets the client for all selected projects.
  • \r\n
  • setprojectlead: changes the responsible project member for all selected projects.
  • \r\n
  • addteams: adds teams to all selected projects.
  • \r\n
  • removeteams: removes teams from all selected projects.
  • \r\n
  • setdates: sets or removes project start and due dates.
  • \r\n
  • adjustdates: offsets project start and due dates by the specified amount of days.
  • \r\n
  • addtags: adds tags to all selected projects.
  • \r\n
  • removetags: removes tags from all selected projects.
  • \r\n
  • delete: deletes all selected projects.
  • \r\n
The user must have `write` permissions on all projects as well as related entities modified by the operation.", - "operationId": "PostProjectsBatchByOperation", + "summary": "Returns the last time entry of a specified user.", + "description": "The last time entry is always the last one that was started.\r\n Time entries which are started in the future are ignored.\r\n If a time entry does not have a start time, 12.00 am is automatically assumed as the start time\r\n for comparison with other time entries from the same day.\r\n\r\nThe user must be an admin or the creator.", + "operationId": "GetMyLastTimeEntries", "parameters": [ { - "name": "operation", - "in": "path", - "description": "Batch operation route key.", - "required": true, + "name": "userId", + "in": "query", + "description": "The id of the user.", "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], - "requestBody": { - "description": "Validated request body for the selected operation.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectBatchOperationForm" - } - } - }, - "required": true - }, "responses": { - "207": { - "description": "Multi-Status", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MultiStatusResult" - } - } - } - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TimeTracking" } } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -13827,52 +14327,43 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "owner": "true" } } }, - "/projects/deletetags": { + "/me/timetracking/pause": { "post": { "tags": [ - "ProjectTags" + "TimeTracking" ], - "summary": "Removes a tag from all projects.", - "description": "\r\n\r\nThe user must be an admin or have `project-master-data:write` permissions.", - "operationId": "PostProjectsDeleteTags", - "requestBody": { - "description": "The model to remove the tag from all projects.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteTagForm" - } + "summary": "Pauses a running time tracking for a user.", + "description": "If there is already a paused time tracking nothing happens. If there is no running time tracking, returns NoContent.\r\n\r\nThe user must be the creator.", + "operationId": "PostPauseMyTimeTracking", + "parameters": [ + { + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" } - }, - "required": true - }, + } + ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TimeTracking" } } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -13886,27 +14377,26 @@ "v1" ], "x-access": { - "admin": "true", - "project-master-data": "write" + "owner": "true" } } }, - "/projects/key/{projectKey}": { - "get": { + "/me/timetracking/resume": { + "post": { "tags": [ - "Projects" + "TimeTracking" ], - "summary": "Returns the project with the specified key.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectsKeyByProjectKey", + "summary": "Resumes a paused time tracking for a user.", + "description": "If there is already a running time tracking nothing happens. If there is no running time tracking, returns NoContent.\r\n\r\nThe user must be the creator.", + "operationId": "PostResumeMyTimeTracking", "parameters": [ { - "name": "projectKey", - "in": "path", - "description": "The project key to lookup.", - "required": true, + "name": "userId", + "in": "query", + "description": "The id of the user.", "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], @@ -13916,40 +14406,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TimeTracking" } } } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -13963,39 +14426,47 @@ "v1" ], "x-access": { - "any": "true" + "owner": "true" } } }, - "/projects/projecttasks/tags": { - "get": { + "/me/timetracking/start": { + "post": { "tags": [ - "ProjectTasks" + "TimeTracking" ], - "summary": "Returns all tags of the project tasks.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectsProjectTasksTags", + "summary": "Starts a new time tracking for a user.", + "description": "If there is already a running/paused time tracking it will be stopped automatically in order to start the new one.\r\n\r\nThe user must be an admin or the creator.", + "operationId": "PostStartMyTimeTracking", "parameters": [ { - "name": "projectId", + "name": "userId", "in": "query", - "description": "The id of the project to filter tags by. Returns tags of all projects if not provided.", + "description": "The id of the user.", "schema": { "type": "string", "format": "uuid" } } ], + "requestBody": { + "description": "The model describing the time tracking to start.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StartTimeTrackingForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "$ref": "#/components/schemas/TimeTracking" } } } @@ -14012,49 +14483,92 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "owner": "true" } } }, - "/projects/tags": { - "get": { + "/me/timetracking/stop": { + "post": { "tags": [ - "ProjectTags" + "TimeTracking" ], - "summary": "Returns all tags currently in use by projects.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectsTags", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModelWithCount" - } - } + "summary": "Stops the currently running time tracking of the specified user.", + "description": "The request body is optional. You can provide a stopReason to indicate how the tracking was stopped.\r\n For external API clients, the stopReason is automatically set to \"external-api\" regardless of what is provided.\r\n For this operation to work there must be a running time tracking for the user.\r\n\r\nThe user must be an admin or the creator.", + "operationId": "PostStopMyTimeTracking", + "parameters": [ + { + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StopTimeTrackingForm" } } - }, - "400": { - "description": "Bad Request", + } + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TimeTracking" } } } }, - "401": { - "description": "Unauthorized", + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "owner": "true" + } + } + }, + "/permissions/features": { + "get": { + "tags": [ + "Permissions" + ], + "summary": "Returns all available features.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetPermissionsFeatures", + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + "https://www.awork.com" + ] } } } @@ -14074,46 +14588,28 @@ } } }, - "/projects/updatetags": { - "post": { + "/permissions/projectfeatures": { + "get": { "tags": [ - "ProjectTags" + "Permissions" ], - "summary": "Updates a tag globally for all projects.", - "description": "\r\n\r\nThe user must be an admin or have `project-master-data:write` permissions.", - "operationId": "PostProjectsUpdateTags", - "requestBody": { - "description": "The model containing the tag updates.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TagUpdateForm" - } - } - }, - "required": true - }, + "summary": "Returns all available project features.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetPermissionsProjectFeatures", "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + "https://www.awork.com" + ] } } } @@ -14129,29 +14625,30 @@ "v1" ], "x-access": { - "admin": "true", - "project-master-data": "write" + "any": "true" } } }, - "/projects/{projectId}": { + "/projectmilestones": { "get": { "tags": [ - "Projects" + "ProjectMilestones" ], - "summary": "Returns the project with the specified id.", - "description": "The user must either be admin, have `project-master-data:read` permissions or be the creator of the project.", - "operationId": "GetProjectById", + "summary": "Retrieves all project milestones.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectMilestones", "parameters": [ { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -14160,27 +14657,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectMilestone" + } } } } @@ -14200,31 +14680,19 @@ "any": "true" } }, - "put": { + "post": { "tags": [ - "Projects" - ], - "summary": "Updates the project with the specified id.", - "description": "Updates the project with the specified id.\r\n Special handling for retainer projects:\r\n If the project has at least one Retainer, the IsRetainer flag is automatically set to true.\r\n For retainer projects, the TimeBudget cannot be set. Instead the TimeBudget is the sum of all retainer budgets.\r\n \r\n The user has to be the creator of the project or needs `write` permissions of the feature `project-master-data`.", - "operationId": "PutProjectById", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "ProjectMilestones" ], + "summary": "Creates a new project milestone.", + "description": "The user must either be admin, have 'project-planning-data:write' permissions on the project or be the creator.", + "operationId": "PostProjectMilestone", "requestBody": { - "description": "The model containing the new project details.", + "description": "The model containing milestone details.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectPutForm" + "$ref": "#/components/schemas/ProjectMilestonePostForm" } } }, @@ -14236,7 +14704,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" + "$ref": "#/components/schemas/ProjectMilestone" } } } @@ -14250,26 +14718,6 @@ } } } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -14287,36 +14735,24 @@ } } }, - "/projects/{projectId}/activities": { + "/projectmilestones/{milestoneId}": { "get": { "tags": [ - "Project Activities" + "ProjectMilestones" ], - "summary": "Returns all activities of the project with the specified id.", - "description": "The activities contain information about the type of the activity, which property was changed and by whom.\r\n This contains changes to first-level properties of the project, like name, description, status, etc., as well as several related entities, such as tags, assignments, etc.\r\n This does not include activities of sub-entities, like tasks of a project or comments on a task.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectActivities", + "summary": "Returns the specified project milestone.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectMilestoneByMilestoneId", "parameters": [ { - "name": "projectId", + "name": "milestoneId", "in": "path", - "description": "The id of the project.", + "description": "The id of the milestone.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -14325,20 +14761,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ActivityModel" - } - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectMilestone" } } } @@ -14379,19 +14802,19 @@ } } }, - "/projects/{projectId}/addprojectmember": { - "post": { + "/projectmilestones/{projectMilestoneId}": { + "delete": { "tags": [ - "ProjectMembers" + "ProjectMilestones" ], - "summary": "Adds a project member to the project with the specified id.", - "description": "Adds a project member to the project with the specified id.\r\n The new project member can also be set as a responsible project member, but only if no other member of this project is responsible.\r\n It is necessary that the project role is available in this project, otherwise the member cannot be added.\r\n A project role is available when they are connected to the specified project type of the project.\r\n A user can only be added to the project once.\r\n \r\n The user has to be the creator or needs `project-master-data:manage` permissions on the project.", - "operationId": "PostProjectAddProjectMemberByProjectId", + "summary": "Deletes a project milestone.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteProjectMilestoneById", "parameters": [ { - "name": "projectId", + "name": "projectMilestoneId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project milestone to delete.", "required": true, "schema": { "type": "string", @@ -14399,24 +14822,26 @@ } } ], - "requestBody": { - "description": "The model containing project member details.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectMemberForm" + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } }, - "required": true - }, - "responses": { - "200": { - "description": "OK", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMember" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -14435,21 +14860,19 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/addtags": { - "post": { + }, + "put": { "tags": [ - "ProjectTags" + "ProjectMilestones" ], - "summary": "Adds a batch of tags to the project with the specified id.", - "description": "To add tags to a project the user must have `project-master-data:write` permissions on the specified project.", - "operationId": "PostProjectAddTagsByProjectId", + "summary": "Updates an existing project milestone.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PutProjectMilestoneById", "parameters": [ { - "name": "projectId", + "name": "projectMilestoneId", "in": "path", - "description": "The id of the project to add tags for.", + "description": "The id of the project milestone.", "required": true, "schema": { "type": "string", @@ -14458,14 +14881,11 @@ } ], "requestBody": { - "description": "The model containing the tags to add.", + "description": "The model containing milestone details.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TagForm" - } + "$ref": "#/components/schemas/ProjectMilestonePutForm" } } }, @@ -14477,10 +14897,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "$ref": "#/components/schemas/ProjectMilestone" } } } @@ -14495,16 +14912,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -14531,63 +14938,97 @@ } } }, - "/projects/{projectId}/addtaskbundle": { - "post": { + "/projectroles": { + "get": { "tags": [ - "TaskBundles" + "ProjectRoles" ], - "summary": "Adds a task bundle to a project.", + "summary": "Returns all project roles.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostProjectAddTaskBundleByProjectId", + "operationId": "GetProjectRoles", "parameters": [ { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, + "name": "includeMembers", + "in": "query", + "description": "Whether to include the members of each project role in the response.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": true + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectRole" + } + } + } } } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "ProjectRoles" ], + "summary": "Creates a new project role.", + "description": "\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostProjectRole", "requestBody": { - "description": "The add Task Bundle form payload.", + "description": "The model to create the project role.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AddTaskBundleForm" + "$ref": "#/components/schemas/ProjectRoleForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectRole" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -14608,40 +15049,32 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" + }, + "x-subscriptionlevel": { + "minimumPlan": "standard" } } }, - "/projects/{projectId}/allfiles": { + "/projectroles/byuserid/{userId}": { "get": { "tags": [ - "ProjectFiles" + "ProjectRoles" ], - "summary": "Returns all files of the project with the specified id.", - "description": "Returns all files of the project including the ones of tasks linked to that project, with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetAllProjectFiles", + "summary": "Returns all project roles assigned to the specified user.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectRolesByUserIdByUserId", "parameters": [ { - "name": "projectId", + "name": "userId", "in": "path", - "description": "The id of the entity.", + "description": "The id of the user.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -14652,11 +15085,21 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ProjectRole" } } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -14674,19 +15117,19 @@ } } }, - "/projects/{projectId}/automations": { + "/projectroles/{projectRoleId}": { "get": { "tags": [ - "Project Automations" + "ProjectRoles" ], - "summary": "Returns all automations of the specified project.", - "description": "The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", - "operationId": "GetProjectAutomations", + "summary": "Returns a project role by its id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectRoleById", "parameters": [ { - "name": "projectId", + "name": "projectRoleId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project role.", "required": true, "schema": { "type": "string", @@ -14700,15 +15143,22 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Automation" - } + "$ref": "#/components/schemas/ProjectRole" } } } - } - }, + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, "security": [ { "oauth2": [ @@ -14723,18 +15173,18 @@ "any": "true" } }, - "post": { + "put": { "tags": [ - "Project Automations" + "ProjectRoles" ], - "summary": "Creates a new automation for the specified project.", - "description": "Creates a new automation for the project with the specified id.\r\n The user needs to be the owner of the project or have 'write' permissions of\r\n the feature 'project-master-data' globally or in the project.\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nAny authenticated user.", - "operationId": "PostProjectAutomation", + "summary": "Updates an existing project role.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PutProjectRoleById", "parameters": [ { - "name": "projectId", + "name": "projectRoleId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project role.", "required": true, "schema": { "type": "string", @@ -14743,11 +15193,11 @@ } ], "requestBody": { - "description": "The model to create the automation.", + "description": "The model to update the project role.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AutomationTriggerForm" + "$ref": "#/components/schemas/ProjectRoleForm" } } }, @@ -14759,7 +15209,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" + "$ref": "#/components/schemas/ProjectRole" } } } @@ -14773,6 +15223,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -14786,36 +15246,24 @@ "v1" ], "x-access": { - "any": "true" - }, - "x-subscriptionlevel": { - "minimumPlan": "standard" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/projects/{projectId}/automations/{automationId}": { - "delete": { + "/projectroles/{projectRoleId}/delete": { + "post": { "tags": [ - "Project Automations" + "ProjectRoles" ], - "summary": "Deletes the specified automation for a given project.", - "description": "Deletes the specified automation for a given project.\r\n Also deletes all actions connected to the automation.\r\n The user needs to be the owner of the project or have 'write' permissions of\r\n the feature 'project-master-data' globally or in the project.\r\n Automations created from a workflow cannot be deleted via this endpoint.\r\n\r\nAny authenticated user.", - "operationId": "DeleteProjectAutomation", + "summary": "Deletes a project role and migrates its members to a new role.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostProjectRoleDeleteByProjectRoleId", "parameters": [ { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "projectId", + "name": "projectRoleId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project role.", "required": true, "schema": { "type": "string", @@ -14823,9 +15271,20 @@ } } ], + "requestBody": { + "description": "The model to delete the project role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectRoleDeleteForm" + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK" }, "400": { "description": "Bad Request", @@ -14836,6 +15295,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -14849,21 +15318,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } - }, + } + }, + "/projectroles/{projectRoleId}/permissions": { "get": { "tags": [ - "Project Automations" + "ProjectRoles" ], - "summary": "Returns a specific automation from a project.", - "description": "Returns a specific automation of the project with the specified id.\r\n Returns NotFound if the automation doesnt exist.\r\n To get the the automation data the user needs to be the owner of the project or\r\n have 'read' permissions of the feature 'project-master-data' globally or in his project role.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectAutomation", + "summary": "Returns all permissions assigned to a project role.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectRolePermissionsByProjectRoleId", "parameters": [ { - "name": "automationId", + "name": "projectRoleId", "in": "path", - "description": "The id of the automation.", + "description": "The id of the project role.", "required": true, "schema": { "type": "string", @@ -14871,14 +15343,16 @@ } }, { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -14887,7 +15361,20 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" + "type": "array", + "items": { + "$ref": "#/components/schemas/PermissionOfProjectRole" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -14907,28 +15394,18 @@ "any": "true" } }, - "put": { + "post": { "tags": [ - "Project Automations" + "ProjectRoles" ], - "summary": "Updates the automation with the specified id.", - "description": "Updates the automation with the specified id.\r\n The user needs to be the owner of the project or have 'write' permissions of\r\n the feature 'project-master-data' globally or in the project.\r\n If the automation was created from a workflow, only the Enabled flag can be changed.\r\n\r\nAny authenticated user.", - "operationId": "PutProjectAutomation", + "summary": "Creates or updates a permission for a project role.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectRolePermissionsByProjectRoleId", "parameters": [ { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "projectId", + "name": "projectRoleId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project role.", "required": true, "schema": { "type": "string", @@ -14937,11 +15414,11 @@ } ], "requestBody": { - "description": "The model to update the automation.", + "description": "The model to create or update the project role permission.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AutomationPutForm" + "$ref": "#/components/schemas/PermissionOfProjectRoleForm" } } }, @@ -14953,7 +15430,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" + "$ref": "#/components/schemas/PermissionOfProjectRole" } } } @@ -14967,6 +15444,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -14980,38 +15467,31 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/automations/{automationId}/actions": { + "/projects": { "get": { "tags": [ - "Project Automations" + "Projects" ], - "summary": "Gets the actions of a project automation.", - "description": "Gets all actions including their values of an automation.\r\n The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", - "operationId": "GetProjectAutomationActions", + "summary": "Returns all projects.", + "description": "Returns all projects the user has `read` permissions for.", + "operationId": "GetProjects", "parameters": [ { - "name": "projectId", - "in": "path", - "description": "The id of the project of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" }, { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -15022,7 +15502,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Action" + "$ref": "#/components/schemas/Project" } } } @@ -15045,39 +15525,17 @@ }, "post": { "tags": [ - "Project Automations" - ], - "summary": "Creates a new action for an automation.", - "description": "Creates a new action including its values for an automation. Actions cannot be added to automations created from a workflow.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", - "operationId": "PostProjectAutomationAction", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Projects" ], + "summary": "Creates a new project.", + "description": "Creates a new project.\r\n\r\nThe user must be an admin or have `project-create:write` permissions.", + "operationId": "PostProject", "requestBody": { - "description": "The model to create an action.", + "description": "The model to create the project.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ActionForm" + "$ref": "#/components/schemas/ExtendedProjectForm" } } }, @@ -15089,7 +15547,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" + "$ref": "#/components/schemas/Project" } } } @@ -15116,53 +15574,51 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-create": "write" } } }, - "/projects/{projectId}/automations/{automationId}/actions/{actionId}": { - "delete": { + "/projects/batch/{operation}": { + "post": { "tags": [ - "Project Automations" + "Projects" ], - "summary": "Deletes an action for a project automation.", - "description": "Deletes an action for an automation including all its values. Actions of automations created from a workflow cannot be deleted.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", - "operationId": "DeleteProjectAutomationAction", + "summary": "Edits multiple projects using the specified operation.", + "description": "Returns MultiStatus including the list of successful and failed projects.\r\n \r\n Supported operations:\r\n
    \r\n
  • changeprojectstatus: changes the status of all selected projects.
  • \r\n
  • changeprojecttype: changes the type of all selected projects.
  • \r\n
  • linkworkflow: links a workflow to all selected projects.
  • \r\n
  • setclient: sets the client for all selected projects.
  • \r\n
  • setprojectlead: changes the responsible project member for all selected projects.
  • \r\n
  • addteams: adds teams to all selected projects.
  • \r\n
  • removeteams: removes teams from all selected projects.
  • \r\n
  • setdates: sets or removes project start and due dates.
  • \r\n
  • adjustdates: offsets project start and due dates by the specified amount of days.
  • \r\n
  • addtags: adds tags to all selected projects.
  • \r\n
  • removetags: removes tags from all selected projects.
  • \r\n
  • delete: deletes all selected projects.
  • \r\n
The user must have `write` permissions on all projects as well as related entities modified by the operation.", + "operationId": "PostProjectsBatchByOperation", "parameters": [ { - "name": "projectId", - "in": "path", - "description": "The id of the project of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "actionId", + "name": "operation", "in": "path", - "description": "The id of the action.", + "description": "Batch operation route key.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], + "requestBody": { + "description": "Validated request body for the selected operation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectBatchOperationForm" + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "207": { + "description": "Multi-Status", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MultiStatusResult" + } + } + } }, "400": { "description": "Bad Request", @@ -15173,6 +15629,16 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -15188,53 +15654,47 @@ "x-access": { "any": "true" } - }, - "get": { + } + }, + "/projects/deletetags": { + "post": { "tags": [ - "Project Automations" + "ProjectTags" ], - "summary": "Gets a specific action for a project automation.", - "description": "The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", - "operationId": "GetProjectAutomationAction", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Removes a tag from all projects.", + "description": "\r\n\r\nThe user must be an admin or have `project-master-data:write` permissions.", + "operationId": "PostProjectsDeleteTags", + "requestBody": { + "description": "The model to remove the tag from all projects.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteTagForm" + } } }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "required": true + }, + "responses": { + "204": { + "description": "No Content" }, - { - "name": "actionId", - "in": "path", - "description": "The id of the action.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } - } - ], - "responses": { - "200": { - "description": "OK", + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -15251,66 +15711,37 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-master-data": "write" } - }, - "put": { + } + }, + "/projects/key/{projectKey}": { + "get": { "tags": [ - "Project Automations" + "Projects" ], - "summary": "Updates a specifc action of a project automation.", - "description": "Updates an exsting action including its values for an automation. Actions of automations created from a workflow cannot be modified.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", - "operationId": "PutProjectAutomationAction", + "summary": "Returns the project with the specified key.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectsKeyByProjectKey", "parameters": [ { - "name": "projectId", - "in": "path", - "description": "The id of the project of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "actionId", + "name": "projectKey", "in": "path", - "description": "The id of the action.", + "description": "The project key to lookup.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], - "requestBody": { - "description": "The model to update an action.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ActionForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" + "$ref": "#/components/schemas/Project" } } } @@ -15324,6 +15755,26 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -15341,60 +15792,76 @@ } } }, - "/projects/{projectId}/automations/{automationId}/actions/{actionId}/updateorder": { - "post": { + "/projects/projecttasks/tags": { + "get": { "tags": [ - "Project Automations" + "ProjectTasks" ], - "summary": "Updates the order of a given action of a project automation.", - "description": "Updates the order of a given action in the list of actions of the specific project automation. Actions of automations created from a workflow cannot be modified.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", - "operationId": "PostUpdateProjectAutomationActionOrder", + "summary": "Returns all tags of the project tasks.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectsProjectTasksTags", "parameters": [ { "name": "projectId", - "in": "path", - "description": "The id of the project of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "actionId", - "in": "path", - "description": "The id of the action.", - "required": true, + "in": "query", + "description": "The id of the project to filter tags by. Returns tags of all projects if not provided.", "schema": { "type": "string", "format": "uuid" } } ], - "requestBody": { - "description": "The model to update the order.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateOrderForm" + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } + } } } - }, - "required": true + } }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/tags": { + "get": { + "tags": [ + "ProjectTags" + ], + "summary": "Returns all tags currently in use by projects.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectsTags", "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModelWithCount" + } + } + } + } }, "400": { "description": "Bad Request", @@ -15405,6 +15872,16 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -15422,47 +15899,28 @@ } } }, - "/projects/{projectId}/automations/{automationId}/execute": { + "/projects/updatetags": { "post": { "tags": [ - "Project Automations" - ], - "summary": "Executes a manual automation for a task.", - "description": "Can be used to trigger an automation that uses a manual trigger for a specific task.\r\n The calling user becomes the initiator of the automation execution.\r\n The user must have write permissions on the specified task.", - "operationId": "PostExecuteProjectAutomation", - "parameters": [ - { - "name": "projectId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "ProjectTags" ], + "summary": "Updates a tag globally for all projects.", + "description": "\r\n\r\nThe user must be an admin or have `project-master-data:write` permissions.", + "operationId": "PostProjectsUpdateTags", "requestBody": { + "description": "The model containing the tag updates.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AutomationExecuteForm" + "$ref": "#/components/schemas/TagUpdateForm" } } }, "required": true }, "responses": { - "202": { - "description": "Accepted" + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -15483,16 +15941,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -15506,18 +15954,19 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-master-data": "write" } } }, - "/projects/{projectId}/autopilot": { - "delete": { + "/projects/{projectId}": { + "get": { "tags": [ - "Autopilot" + "Projects" ], - "summary": "Deletes the autopilot of the project with the specified id.", - "description": "Deletes the autopilot of the project with the specified id.\r\n To access and modify the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", - "operationId": "DeleteProjectsAutopilotByProjectId", + "summary": "Returns the project with the specified id.", + "description": "The user must either be admin, have `project-master-data:read` permissions or be the creator of the project.", + "operationId": "GetProjectById", "parameters": [ { "name": "projectId", @@ -15531,8 +15980,35 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -15549,13 +16025,13 @@ "any": "true" } }, - "get": { + "put": { "tags": [ - "Autopilot" + "Projects" ], - "summary": "Returns the autopilot of the project with the specified id.", - "description": "Returns NoContent if the project does not have an autopilot setup.\r\n To get the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectsAutopilotByProjectId", + "summary": "Updates the project with the specified id.", + "description": "Updates the project with the specified id.\r\n Special handling for retainer projects:\r\n If the project has at least one Retainer, the IsRetainer flag is automatically set to true.\r\n For retainer projects, the TimeBudget cannot be set. Instead the TimeBudget is the sum of all retainer budgets.\r\n \r\n The user has to be the creator of the project or needs `write` permissions of the feature `project-master-data`.", + "operationId": "PutProjectById", "parameters": [ { "name": "projectId", @@ -15568,19 +16044,57 @@ } } ], + "requestBody": { + "description": "The model containing the new project details.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectPutForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Autopilot" + "$ref": "#/components/schemas/Project" } } } }, - "204": { - "description": "No Content" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -15596,14 +16110,16 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/projects/{projectId}/activities": { + "get": { "tags": [ - "Autopilot" + "Project Activities" ], - "summary": "Creates a new autopilot for the project with the specified id.", - "description": "Creates a new autopilot for the project with the specified id.\r\n Also creates and enables all alerts for the new autopilot.\r\n For this action, the user needs to be the owner of the project or must have 'read' permissions\r\n of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", - "operationId": "PostProjectsAutopilotByProjectId", + "summary": "Returns all activities of the project with the specified id.", + "description": "The activities contain information about the type of the activity, which property was changed and by whom.\r\n This contains changes to first-level properties of the project, like name, description, status, etc., as well as several related entities, such as tags, assignments, etc.\r\n This does not include activities of sub-entities, like tasks of a project or comments on a task.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectActivities", "parameters": [ { "name": "projectId", @@ -15614,26 +16130,60 @@ "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The model used to create the autopilot.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AutopilotPostForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Autopilot" + "type": "array", + "items": { + "$ref": "#/components/schemas/ActivityModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -15652,14 +16202,16 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projects/{projectId}/addprojectmember": { + "post": { "tags": [ - "Autopilot" + "ProjectMembers" ], - "summary": "Updates the autopilot of the project with the specified id.", - "description": "Updates the autopilot of the project with the specified id.\r\n To access and modify the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", - "operationId": "PutProjectsAutopilotByProjectId", + "summary": "Adds a project member to the project with the specified id.", + "description": "Adds a project member to the project with the specified id.\r\n The new project member can also be set as a responsible project member, but only if no other member of this project is responsible.\r\n It is necessary that the project role is available in this project, otherwise the member cannot be added.\r\n A project role is available when they are connected to the specified project type of the project.\r\n A user can only be added to the project once.\r\n \r\n The user has to be the creator or needs `project-master-data:manage` permissions on the project.", + "operationId": "PostProjectAddProjectMemberByProjectId", "parameters": [ { "name": "projectId", @@ -15673,11 +16225,11 @@ } ], "requestBody": { - "description": "The model used to update the autopilot.", + "description": "The model containing project member details.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AutopilotPutForm" + "$ref": "#/components/schemas/ProjectMemberForm" } } }, @@ -15689,7 +16241,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Autopilot" + "$ref": "#/components/schemas/ProjectMember" } } } @@ -15710,19 +16262,19 @@ } } }, - "/projects/{projectId}/changeprojecttype": { + "/projects/{projectId}/addtags": { "post": { "tags": [ - "Projects" + "ProjectTags" ], - "summary": "Changes the project type of the project with the specified id.", - "description": "Changes the project type of the project with the specified id.\r\n \r\n The user has to be the creator of the project or needs `write` permissions of the feature `project-master-data`.", - "operationId": "PostProjectChangeProjectTypeByProjectId", + "summary": "Adds a batch of tags to the project with the specified id.", + "description": "To add tags to a project the user must have `project-master-data:write` permissions on the specified project.", + "operationId": "PostProjectAddTagsByProjectId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project to add tags for.", "required": true, "schema": { "type": "string", @@ -15731,19 +16283,32 @@ } ], "requestBody": { - "description": "The model to change the project type.", + "description": "The model containing the tags to add.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChangeProjectTypeForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/TagForm" + } } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } + } + } + } }, "400": { "description": "Bad Request", @@ -15791,14 +16356,14 @@ } } }, - "/projects/{projectId}/changestatus": { + "/projects/{projectId}/addtaskbundle": { "post": { "tags": [ - "Projects" + "TaskBundles" ], - "summary": "Changes the status of the project with the specified id.", - "description": "Changes the status of the project with the specified id.\r\n The project status must be associated with the project type used by the project.\r\n This potentially adds task bundles to the project and informs the project members about the status change.\r\n If the project is already in the specified status, nothing happens.\r\n \r\n The user has to be the creator of the project or needs `write` permissions of the feature `project-master-data`.", - "operationId": "PostProjectChangeStatusByProjectId", + "summary": "Adds a task bundle to a project.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostProjectAddTaskBundleByProjectId", "parameters": [ { "name": "projectId", @@ -15812,11 +16377,11 @@ } ], "requestBody": { - "description": "The model to change the project status.", + "description": "The add Task Bundle form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChangeProjectStatusForm" + "$ref": "#/components/schemas/AddTaskBundleForm" } } }, @@ -15836,6 +16401,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -15862,36 +16437,48 @@ } } }, - "/projects/{projectId}/comments": { - "delete": { + "/projects/{projectId}/allfiles": { + "get": { "tags": [ - "ProjectComments" + "ProjectFiles" ], - "summary": "Deletes all comments of the specified project.", - "description": "Deletes all comments of the specified project.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCommentsByProjectNameAndProjectId", + "summary": "Returns all files of the project with the specified id.", + "description": "Returns all files of the project including the ones of tasks linked to that project, with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetAllProjectFiles", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", + "description": "The id of the entity.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } } } } @@ -15910,14 +16497,16 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/automations": { "get": { "tags": [ - "ProjectComments" + "Project Automations" ], - "summary": "Returns all comments of the project with the specified id.", - "description": "Returns all comments of the project with the specified id. The user needs read permissions on the project.\r\n\r\nAny authenticated user.", - "operationId": "GetCommentsByProjectNameAndProjectId", + "summary": "Returns all automations of the specified project.", + "description": "The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", + "operationId": "GetProjectAutomations", "parameters": [ { "name": "projectId", @@ -15928,18 +16517,6 @@ "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -15950,31 +16527,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/Automation" } } } } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -15993,16 +16550,16 @@ }, "post": { "tags": [ - "ProjectComments" + "Project Automations" ], - "summary": "Creates a new comment on the project with the specified id.", - "description": "Creates a new comment on the project with the specified id.\r\n A user can only create a comment for him/herself, except for admins and api users.\r\n \r\n To create a comment the user must have at least `read` permissions on the specified project.", - "operationId": "PostCommentsByProjectNameAndProjectId", + "summary": "Creates a new automation for the specified project.", + "description": "Creates a new automation for the project with the specified id.\r\n The user needs to be the owner of the project or have 'write' permissions of\r\n the feature 'project-master-data' globally or in the project.\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nAny authenticated user.", + "operationId": "PostProjectAutomation", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project to create the comment for.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -16011,11 +16568,11 @@ } ], "requestBody": { - "description": "The model to create the comment.", + "description": "The model to create the automation.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CommentForm" + "$ref": "#/components/schemas/AutomationTriggerForm" } } }, @@ -16027,7 +16584,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/Automation" } } } @@ -16041,26 +16598,6 @@ } } } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -16075,22 +16612,25 @@ ], "x-access": { "any": "true" + }, + "x-subscriptionlevel": { + "minimumPlan": "standard" } } }, - "/projects/{projectId}/comments/{commentId}": { + "/projects/{projectId}/automations/{automationId}": { "delete": { "tags": [ - "ProjectComments" + "Project Automations" ], - "summary": "Deletes the comment with the specified id on the project with the specified id.", - "description": "Deletes the comment with the specified id on the project with the specified id.\r\n The delete includes the reactions of the comment.\r\n If there are any replies to the comment, they will be deleted as well.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCommentByProjectNameAndProjectIdAndCommentId", + "summary": "Deletes the specified automation for a given project.", + "description": "Deletes the specified automation for a given project.\r\n Also deletes all actions connected to the automation.\r\n The user needs to be the owner of the project or have 'write' permissions of\r\n the feature 'project-master-data' globally or in the project.\r\n Automations created from a workflow cannot be deleted via this endpoint.\r\n\r\nAny authenticated user.", + "operationId": "DeleteProjectAutomation", "parameters": [ { - "name": "projectId", + "name": "automationId", "in": "path", - "description": "The id of the project.", + "description": "The id of the automation.", "required": true, "schema": { "type": "string", @@ -16098,9 +16638,9 @@ } }, { - "name": "commentId", + "name": "projectId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -16112,18 +16652,8 @@ "204": { "description": "No Content" }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -16149,16 +16679,16 @@ }, "get": { "tags": [ - "ProjectComments" + "Project Automations" ], - "summary": "Returns the comment with the specified id of the project with the specified id.", - "description": "Returns the comment with the specified id of the project with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetCommentByProjectNameAndProjectIdAndCommentId", + "summary": "Returns a specific automation from a project.", + "description": "Returns a specific automation of the project with the specified id.\r\n Returns NotFound if the automation doesnt exist.\r\n To get the the automation data the user needs to be the owner of the project or\r\n have 'read' permissions of the feature 'project-master-data' globally or in his project role.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectAutomation", "parameters": [ { - "name": "projectId", + "name": "automationId", "in": "path", - "description": "The id of the project.", + "description": "The id of the automation.", "required": true, "schema": { "type": "string", @@ -16166,9 +16696,9 @@ } }, { - "name": "commentId", + "name": "projectId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -16182,17 +16712,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Automation" } } } @@ -16214,16 +16734,16 @@ }, "put": { "tags": [ - "ProjectComments" + "Project Automations" ], - "summary": "Updates the comment with the specified id on the project with the specified id.", - "description": "To update a comment the user must either have at least `read` permissions on the specified project, be the creator of the comment or be admin.", - "operationId": "PutCommentByProjectNameAndProjectIdAndCommentId", + "summary": "Updates the automation with the specified id.", + "description": "Updates the automation with the specified id.\r\n The user needs to be the owner of the project or have 'write' permissions of\r\n the feature 'project-master-data' globally or in the project.\r\n If the automation was created from a workflow, only the Enabled flag can be changed.\r\n\r\nAny authenticated user.", + "operationId": "PutProjectAutomation", "parameters": [ { - "name": "projectId", + "name": "automationId", "in": "path", - "description": "The id of the project.", + "description": "The id of the automation.", "required": true, "schema": { "type": "string", @@ -16231,9 +16751,9 @@ } }, { - "name": "commentId", + "name": "projectId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -16242,11 +16762,11 @@ } ], "requestBody": { - "description": "The model with the updated comment information.", + "description": "The model to update the automation.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CommentPutForm" + "$ref": "#/components/schemas/AutomationPutForm" } } }, @@ -16258,13 +16778,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/Automation" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -16272,13 +16792,63 @@ } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/automations/{automationId}/actions": { + "get": { + "tags": [ + "Project Automations" + ], + "summary": "Gets the actions of a project automation.", + "description": "Gets all actions including their values of an automation.\r\n The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", + "operationId": "GetProjectAutomationActions", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, - "404": { - "description": "Not Found", + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/Action" + } } } } @@ -16297,21 +16867,19 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/comments/{commentId}/react": { + }, "post": { "tags": [ - "ProjectComments" + "Project Automations" ], - "summary": "Updates the reactions of the comment with the specified id on the project with the specified id.", - "description": "To update a reaction of a comment the user must have at least `read` permissions on the specified project.", - "operationId": "PostCommentReactByProjectNameAndProjectIdAndCommentId", + "summary": "Creates a new action for an automation.", + "description": "Creates a new action including its values for an automation. Actions cannot be added to automations created from a workflow.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", + "operationId": "PostProjectAutomationAction", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project of the automation.", "required": true, "schema": { "type": "string", @@ -16319,9 +16887,9 @@ } }, { - "name": "commentId", + "name": "automationId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the automation.", "required": true, "schema": { "type": "string", @@ -16330,32 +16898,29 @@ } ], "requestBody": { - "description": "The model used to update the reactions of the comment with the specified id.", + "description": "The model to create an action.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ReactionForm" + "$ref": "#/components/schemas/ActionForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Action" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -16380,19 +16945,39 @@ } } }, - "/projects/{projectId}/customfielddefinitions": { - "get": { + "/projects/{projectId}/automations/{automationId}/actions/{actionId}": { + "delete": { "tags": [ - "CustomFields" + "Project Automations" ], - "summary": "Returns all custom field definitions linked to the specified project, including definitions linked via a workflow.", - "description": "The user must have either `project-master-data:read` permissions or access to at least one task in the project.", - "operationId": "GetProjectCustomFieldDefinitionsByProjectId", + "summary": "Deletes an action for a project automation.", + "description": "Deletes an action for an automation including all its values. Actions of automations created from a workflow cannot be deleted.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", + "operationId": "DeleteProjectAutomationAction", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "description": "The id of the action.", "required": true, "schema": { "type": "string", @@ -16401,21 +16986,11 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" - } - } - } - } + "204": { + "description": "No Content" }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -16423,13 +16998,68 @@ } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "get": { + "tags": [ + "Project Automations" + ], + "summary": "Gets a specific action for a project automation.", + "description": "The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", + "operationId": "GetProjectAutomationAction", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, - "404": { - "description": "Not Found", + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "description": "The id of the action.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Action" } } } @@ -16448,21 +17078,19 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/customfielddefinitions/{customFieldDefinitionId}": { + }, "put": { "tags": [ - "CustomFields" + "Project Automations" ], - "summary": "Updates the order of a custom field definition linked to the specified project.", - "description": "The user must have `project-master-data:write` permissions or `write` permissions on the specified project.", - "operationId": "PutProjectCustomFieldDefinitionByProjectIdAndCustomFieldDefinitionId", + "summary": "Updates a specifc action of a project automation.", + "description": "Updates an exsting action including its values for an automation. Actions of automations created from a workflow cannot be modified.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", + "operationId": "PutProjectAutomationAction", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project of the automation.", "required": true, "schema": { "type": "string", @@ -16470,9 +17098,19 @@ } }, { - "name": "customFieldDefinitionId", + "name": "automationId", "in": "path", - "description": "The id of the custom field definition.", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "description": "The id of the action.", "required": true, "schema": { "type": "string", @@ -16481,11 +17119,11 @@ } ], "requestBody": { - "description": "The model used to update the order of the custom field definition.", + "description": "The model to update an action.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldOrderPutForm" + "$ref": "#/components/schemas/ActionForm" } } }, @@ -16497,23 +17135,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldOrderForm" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Action" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -16538,19 +17166,39 @@ } } }, - "/projects/{projectId}/delete": { + "/projects/{projectId}/automations/{automationId}/actions/{actionId}/updateorder": { "post": { "tags": [ - "Projects" + "Project Automations" ], - "summary": "Deletes the project with the specified id.", - "description": "Deletes the project with the specified id.\r\n In the default case the related tasks of this project will also be deleted and the related time entries of this project and all tasks loose the relation to the deleted project and tasks.\r\n To delete the time entries as well, you can set the `deleteTimeTrackings` property of the request to `true`.\r\n \r\n The user has to be the creator of the project or needs `write` permissions of the feature `project-master-data`.", - "operationId": "PostProjectDeleteByProjectId", + "summary": "Updates the order of a given action of a project automation.", + "description": "Updates the order of a given action in the list of actions of the specific project automation. Actions of automations created from a workflow cannot be modified.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", + "operationId": "PostUpdateProjectAutomationActionOrder", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "description": "The id of the action.", "required": true, "schema": { "type": "string", @@ -16559,11 +17207,11 @@ } ], "requestBody": { - "description": "The model containing deletion options.", + "description": "The model to update the order.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectDeleteForm" + "$ref": "#/components/schemas/UpdateOrderForm" } } }, @@ -16573,18 +17221,8 @@ "204": { "description": "No Content" }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -16609,19 +17247,27 @@ } } }, - "/projects/{projectId}/deletetags": { + "/projects/{projectId}/automations/{automationId}/execute": { "post": { "tags": [ - "ProjectTags" + "Project Automations" ], - "summary": "Removes tags from the project with the specified id.", - "description": "To remove tags from a project the user must have `project-master-data:write` permissions on the specified project.", - "operationId": "PostProjectDeleteTagsByProjectId", + "summary": "Executes a manual automation for a task.", + "description": "Can be used to trigger an automation that uses a manual trigger for a specific task.\r\n The calling user becomes the initiator of the automation execution.\r\n The user must have write permissions on the specified task.", + "operationId": "PostExecuteProjectAutomation", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project to remove tags from.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", "required": true, "schema": { "type": "string", @@ -16630,25 +17276,18 @@ } ], "requestBody": { - "description": "The model containing the tags to remove.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DeleteTagForm" - } + "$ref": "#/components/schemas/AutomationExecuteForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "207": { - "description": "Multi-Status" + "202": { + "description": "Accepted" }, "400": { "description": "Bad Request", @@ -16696,14 +17335,14 @@ } } }, - "/projects/{projectId}/documents": { - "get": { + "/projects/{projectId}/autopilot": { + "delete": { "tags": [ - "Documents" + "Autopilot" ], - "summary": "Retrieves all documents for a project.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectDocumentsByProjectId", + "summary": "Deletes the autopilot of the project with the specified id.", + "description": "Deletes the autopilot of the project with the specified id.\r\n To access and modify the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", + "operationId": "DeleteProjectsAutopilotByProjectId", "parameters": [ { "name": "projectId", @@ -16714,33 +17353,11 @@ "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -16756,16 +17373,14 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/documents/trash": { + }, "get": { "tags": [ - "Documents" + "Autopilot" ], - "summary": "Retrieves all trashed documents for a project.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectDocumentsTrashByProjectId", + "summary": "Returns the autopilot of the project with the specified id.", + "description": "Returns NoContent if the project does not have an autopilot setup.\r\n To get the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectsAutopilotByProjectId", "parameters": [ { "name": "projectId", @@ -16776,18 +17391,6 @@ "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -16796,13 +17399,13 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "$ref": "#/components/schemas/Autopilot" } } } + }, + "204": { + "description": "No Content" } }, "security": [ @@ -16818,16 +17421,14 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/externalfiles": { + }, "post": { "tags": [ - "ProjectFiles" + "Autopilot" ], - "summary": "Endpoint to batch create external files without uploading.", - "description": "Endpoint to create file infos with batch operation.\nCreated file infos don't have a version.\r\n\r\nAny authenticated user.", - "operationId": "CreateExternalFiles", + "summary": "Creates a new autopilot for the project with the specified id.", + "description": "Creates a new autopilot for the project with the specified id.\r\n Also creates and enables all alerts for the new autopilot.\r\n For this action, the user needs to be the owner of the project or must have 'read' permissions\r\n of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", + "operationId": "PostProjectsAutopilotByProjectId", "parameters": [ { "name": "projectId", @@ -16841,25 +17442,15 @@ } ], "requestBody": { - "description": "List of file forms.", + "description": "The model used to create the autopilot.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - }, - "application/*+json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } + "$ref": "#/components/schemas/AutopilotPostForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -16867,7 +17458,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/Autopilot" } } } @@ -16886,16 +17477,14 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/files": { - "delete": { + }, + "put": { "tags": [ - "ProjectFiles" + "Autopilot" ], - "summary": "Deletes the files of the specified project.", - "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", - "operationId": "DeleteProjectFiles", + "summary": "Updates the autopilot of the project with the specified id.", + "description": "Updates the autopilot of the project with the specified id.\r\n To access and modify the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", + "operationId": "PutProjectsAutopilotByProjectId", "parameters": [ { "name": "projectId", @@ -16908,9 +17497,27 @@ } } ], + "requestBody": { + "description": "The model used to update the autopilot.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutopilotPutForm" + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Autopilot" + } + } + } } }, "security": [ @@ -16926,14 +17533,16 @@ "x-access": { "any": "true" } - }, - "get": { + } + }, + "/projects/{projectId}/changeprojecttype": { + "post": { "tags": [ - "ProjectFiles" + "Projects" ], - "summary": "Returns all files of the project with the specified id.", - "description": "Returns all file metadata of the project with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectFiles", + "summary": "Changes the project type of the project with the specified id.", + "description": "Changes the project type of the project with the specified id.\r\n \r\n The user has to be the creator of the project or needs `write` permissions of the feature `project-master-data`.", + "operationId": "PostProjectChangeProjectTypeByProjectId", "parameters": [ { "name": "projectId", @@ -16944,30 +17553,49 @@ "type": "string", "format": "uuid" } + } + ], + "requestBody": { + "description": "The model to change the project type.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChangeProjectTypeForm" + } + } }, - { - "$ref": "#/components/parameters/page" + "required": true + }, + "responses": { + "204": { + "description": "No Content" }, - { - "$ref": "#/components/parameters/pageSize" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - { - "$ref": "#/components/parameters/orderby" + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileInfo" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -16986,14 +17614,16 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/changestatus": { "post": { "tags": [ - "ProjectFiles" + "Projects" ], - "summary": "Creates a new project file for the project with the specified id..", - "description": "Uploads a new project file for the project with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateProjectFile", + "summary": "Changes the status of the project with the specified id.", + "description": "Changes the status of the project with the specified id.\r\n The project status must be associated with the project type used by the project.\r\n This potentially adds task bundles to the project and informs the project members about the status change.\r\n If the project is already in the specified status, nothing happens.\r\n \r\n The user has to be the creator of the project or needs `write` permissions of the feature `project-master-data`.", + "operationId": "PostProjectChangeStatusByProjectId", "parameters": [ { "name": "projectId", @@ -17007,41 +17637,39 @@ } ], "requestBody": { + "description": "The model to change the project status.", "content": { - "multipart/form-data": { + "application/json": { "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } + "$ref": "#/components/schemas/ChangeProjectStatusForm" } } - } + }, + "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -17059,19 +17687,19 @@ } } }, - "/projects/{projectId}/files/byuploadid": { - "post": { + "/projects/{projectId}/comments": { + "delete": { "tags": [ - "FileUpload" + "ProjectComments" ], - "summary": "Creates a file from an upload id.", - "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file project from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", - "operationId": "PostUploadByUploadId", + "summary": "Deletes all comments of the specified project.", + "description": "Deletes all comments of the specified project.\r\n\r\nAny authenticated user.", + "operationId": "DeleteCommentsByProjectNameAndProjectId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project to attach the file to.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -17079,30 +17707,92 @@ } } ], - "requestBody": { - "description": "The model describing the uploaded file metadata.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UploadByUploadIdForm" + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } - }, - "required": true + } }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "get": { + "tags": [ + "ProjectComments" + ], + "summary": "Returns all comments of the project with the specified id.", + "description": "Returns all comments of the project with the specified id. The user needs read permissions on the project.\r\n\r\nAny authenticated user.", + "operationId": "GetCommentsByProjectNameAndProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/Comment" + } } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -17125,21 +17815,19 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/files/byurl": { + }, "post": { "tags": [ - "ProjectFiles" + "ProjectComments" ], - "summary": "Uploads a new file by providing an url.", - "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", - "operationId": "CreateProjectFileByUrl", + "summary": "Creates a new comment on the project with the specified id.", + "description": "Creates a new comment on the project with the specified id.\r\n A user can only create a comment for him/herself, except for admins and api users.\r\n \r\n To create a comment the user must have at least `read` permissions on the specified project.", + "operationId": "PostCommentsByProjectNameAndProjectId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project the file is linked to.", + "description": "The id of the project to create the comment for.", "required": true, "schema": { "type": "string", @@ -17148,19 +17836,15 @@ } ], "requestBody": { - "description": "The url, name and description of the file.", + "description": "The model to create the comment.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" + "$ref": "#/components/schemas/CommentForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -17168,7 +17852,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/Comment" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -17189,14 +17903,14 @@ } } }, - "/projects/{projectId}/files/{fileId}": { + "/projects/{projectId}/comments/{commentId}": { "delete": { "tags": [ - "ProjectFiles" + "ProjectComments" ], - "summary": "Deletes the project file with the specified id.", - "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", - "operationId": "DeleteProjectFile", + "summary": "Deletes the comment with the specified id on the project with the specified id.", + "description": "Deletes the comment with the specified id on the project with the specified id.\r\n The delete includes the reactions of the comment.\r\n If there are any replies to the comment, they will be deleted as well.\r\n\r\nAny authenticated user.", + "operationId": "DeleteCommentByProjectNameAndProjectIdAndCommentId", "parameters": [ { "name": "projectId", @@ -17209,9 +17923,9 @@ } }, { - "name": "fileId", + "name": "commentId", "in": "path", - "description": "The id of the file.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -17222,6 +17936,26 @@ "responses": { "204": { "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -17240,11 +17974,11 @@ }, "get": { "tags": [ - "Project Files" + "ProjectComments" ], - "summary": "Returns the file with the specified id of the project with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByProjectNameAndProjectIdAndFileId", + "summary": "Returns the comment with the specified id of the project with the specified id.", + "description": "Returns the comment with the specified id of the project with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetCommentByProjectNameAndProjectIdAndCommentId", "parameters": [ { "name": "projectId", @@ -17257,9 +17991,9 @@ } }, { - "name": "fileId", + "name": "commentId", "in": "path", - "description": "The id of the file.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -17273,7 +18007,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/Comment" } } } @@ -17287,16 +18021,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -17315,11 +18039,11 @@ }, "put": { "tags": [ - "ProjectFiles" + "ProjectComments" ], - "summary": "Updates the metadata of the project file with the specified id.", - "description": "Updates the metadata of the project file with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "UpdateProjectFile", + "summary": "Updates the comment with the specified id on the project with the specified id.", + "description": "To update a comment the user must either have at least `read` permissions on the specified project, be the creator of the comment or be admin.", + "operationId": "PutCommentByProjectNameAndProjectIdAndCommentId", "parameters": [ { "name": "projectId", @@ -17332,9 +18056,9 @@ } }, { - "name": "fileId", + "name": "commentId", "in": "path", - "description": "The id of the file.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -17343,19 +18067,15 @@ } ], "requestBody": { - "description": "The model to update the file with the specified id.", + "description": "The model with the updated comment information.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" + "$ref": "#/components/schemas/CommentPutForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -17363,7 +18083,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/Comment" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -17384,14 +18124,14 @@ } } }, - "/projects/{projectId}/files/{fileId}/changeentity": { + "/projects/{projectId}/comments/{commentId}/react": { "post": { "tags": [ - "ProjectFiles" + "ProjectComments" ], - "summary": "Changes the project this file belongs to.", - "description": "Changes the project this file belongs to.\nSwitch to the specified project or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", - "operationId": "ChangeProject", + "summary": "Updates the reactions of the comment with the specified id on the project with the specified id.", + "description": "To update a reaction of a comment the user must have at least `read` permissions on the specified project.", + "operationId": "PostCommentReactByProjectNameAndProjectIdAndCommentId", "parameters": [ { "name": "projectId", @@ -17404,9 +18144,9 @@ } }, { - "name": "fileId", + "name": "commentId", "in": "path", - "description": "The id of the file.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -17415,27 +18155,36 @@ } ], "requestBody": { - "description": "The model to change the entity information of the file.", + "description": "The model used to update the reactions of the comment with the specified id.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" + "$ref": "#/components/schemas/ReactionForm" } } - } + }, + "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -17456,14 +18205,14 @@ } } }, - "/projects/{projectId}/files/{fileId}/copy": { - "post": { + "/projects/{projectId}/customfielddefinitions": { + "get": { "tags": [ - "ProjectFiles" + "CustomFields" ], - "summary": "Copies the file to a new project.", - "description": "Copies the file to a new project (meta and content).\r\n\r\nAny authenticated user.", - "operationId": "CopyToProject", + "summary": "Returns all custom field definitions linked to the specified project, including definitions linked via a workflow.", + "description": "The user must have either `project-master-data:read` permissions or access to at least one task in the project.", + "operationId": "GetProjectCustomFieldDefinitionsByProjectId", "parameters": [ { "name": "projectId", @@ -17474,68 +18223,66 @@ "type": "string", "format": "uuid" } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], - "requestBody": { - "description": "The model to change the entity information of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - } - } - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" + } } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" ], "x-access": { "any": "true" } } }, - "/projects/{projectId}/files/{fileId}/download": { - "get": { + "/projects/{projectId}/customfielddefinitions/{customFieldDefinitionId}": { + "put": { "tags": [ - "ProjectFiles" + "CustomFields" ], - "summary": "Returns the content of the project file with the specified id.", - "description": "Returns the content of the project file. Uses the latest file version.\nIf the project file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectFileContent", + "summary": "Updates the order of a custom field definition linked to the specified project.", + "description": "The user must have `project-master-data:write` permissions or `write` permissions on the specified project.", + "operationId": "PutProjectCustomFieldDefinitionByProjectIdAndCustomFieldDefinitionId", "parameters": [ { "name": "projectId", @@ -17548,50 +18295,54 @@ } }, { - "name": "fileId", + "name": "customFieldDefinitionId", "in": "path", - "description": "The id of the file.", + "description": "The id of the custom field definition.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "name": "width", - "in": "query", - "description": "Set width to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "height", - "in": "query", - "description": "Set height to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "crop", - "in": "query", - "description": "Whether to crop the image when resizing it.", - "schema": { - "type": "boolean" - } } ], + "requestBody": { + "description": "The model used to update the order of the custom field definition.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFieldOrderPutForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/CustomFieldOrderForm" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -17612,14 +18363,14 @@ } } }, - "/projects/{projectId}/files/{fileId}/pdf": { - "get": { + "/projects/{projectId}/delete": { + "post": { "tags": [ - "ProjectFiles" + "Projects" ], - "summary": "Returns the content of the file with the specified id as pdf.\ntype or conversion not possible.", - "description": "Returns the content of the project file. Uses the latest file version.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectFileContent", + "summary": "Deletes the project with the specified id.", + "description": "Deletes the project with the specified id.\r\n In the default case the related tasks of this project will also be deleted and the related time entries of this project and all tasks loose the relation to the deleted project and tasks.\r\n To delete the time entries as well, you can set the `deleteTimeTrackings` property of the request to `true`.\r\n \r\n The user has to be the creator of the project or needs `write` permissions of the feature `project-master-data`.", + "operationId": "PostProjectDeleteByProjectId", "parameters": [ { "name": "projectId", @@ -17630,35 +18381,126 @@ "type": "string", "format": "uuid" } + } + ], + "requestBody": { + "description": "The model containing deletion options.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectDeleteForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ { - "name": "fileId", + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/deletetags": { + "post": { + "tags": [ + "ProjectTags" + ], + "summary": "Removes tags from the project with the specified id.", + "description": "To remove tags from a project the user must have `project-master-data:write` permissions on the specified project.", + "operationId": "PostProjectDeleteTagsByProjectId", + "parameters": [ + { + "name": "projectId", "in": "path", - "description": "The id of the file.", + "description": "The id of the project to remove tags from.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "name": "inline", - "in": "query", - "description": "If inline is false, content-disposition header is attachment.", - "schema": { - "type": "boolean", - "default": false - } } ], + "requestBody": { + "description": "The model containing the tags to remove.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DeleteTagForm" + } + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "207": { + "description": "Multi-Status" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -17679,14 +18521,14 @@ } } }, - "/projects/{projectId}/files/{fileId}/shareurl": { + "/projects/{projectId}/documents": { "get": { "tags": [ - "ProjectFiles" + "Documents" ], - "summary": "Returns an url to share the file.", - "description": "Returns a url to share the file.\r\n\r\nAny authenticated user.", - "operationId": "GetPublicToken", + "summary": "Retrieves all documents for a project.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectDocumentsByProjectId", "parameters": [ { "name": "projectId", @@ -17699,14 +18541,16 @@ } }, { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -17715,7 +18559,10 @@ "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentModel" + } } } } @@ -17736,14 +18583,14 @@ } } }, - "/projects/{projectId}/files/{fileId}/versions": { + "/projects/{projectId}/documents/trash": { "get": { "tags": [ - "ProjectFiles" + "Documents" ], - "summary": "Returns all file versions of the specified project file.", - "description": "Returns all file versions of the specified project file.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectFileVersions", + "summary": "Retrieves all trashed documents for a project.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectDocumentsTrashByProjectId", "parameters": [ { "name": "projectId", @@ -17755,16 +18602,6 @@ "format": "uuid" } }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, { "$ref": "#/components/parameters/page" }, @@ -17786,7 +18623,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/DocumentModel" } } } @@ -17806,14 +18643,16 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/externalfiles": { "post": { "tags": [ "ProjectFiles" ], - "summary": "Uploads a new version of the project file with the specified id.", - "description": "Uploads a new version of an project file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateProjectFileVersion", + "summary": "Endpoint to batch create external files without uploading.", + "description": "Endpoint to create file infos with batch operation.\nCreated file infos don't have a version.\r\n\r\nAny authenticated user.", + "operationId": "CreateExternalFiles", "parameters": [ { "name": "projectId", @@ -17824,36 +18663,24 @@ "type": "string", "format": "uuid" } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "requestBody": { + "description": "List of file forms.", "content": { - "multipart/form-data": { + "application/json": { "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" } - }, - "encoding": { - "File": { - "style": "form" + } + }, + "application/*+json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" } } } @@ -17865,13 +18692,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/FileInfo" } } } - }, - "400": { - "description": "Bad Request" } }, "security": [ @@ -17889,14 +18713,14 @@ } } }, - "/projects/{projectId}/files/{fileId}/versions/{versionId}": { - "get": { + "/projects/{projectId}/files": { + "delete": { "tags": [ - "Project Files" + "ProjectFiles" ], - "summary": "Returns the project file version with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByProjectNameAndProjectIdAndFileIdAndVersionId", + "summary": "Deletes the files of the specified project.", + "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", + "operationId": "DeleteProjectFiles", "parameters": [ { "name": "projectId", @@ -17907,11 +18731,39 @@ "type": "string", "format": "uuid" } - }, + } + ], + "responses": { + "204": { + "description": "No Content" + } + }, + "security": [ { - "name": "fileId", + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "get": { + "tags": [ + "ProjectFiles" + ], + "summary": "Returns all files of the project with the specified id.", + "description": "Returns all file metadata of the project with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectFiles", + "parameters": [ + { + "name": "projectId", "in": "path", - "description": "The id of the file.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -17919,14 +18771,16 @@ } }, { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -17935,27 +18789,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } } } } @@ -17974,16 +18811,14 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/files/{fileId}/versions/{versionId}/download": { - "get": { + }, + "post": { "tags": [ "ProjectFiles" ], - "summary": "Returns the content of the project file version with the specified id.", - "description": "Returns the content of the project file version with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectFileVersionContent", + "summary": "Creates a new project file for the project with the specified id..", + "description": "Uploads a new project file for the project with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", + "operationId": "CreateProjectFile", "parameters": [ { "name": "projectId", @@ -17994,39 +18829,44 @@ "type": "string", "format": "uuid" } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "required": [ + "File" + ], + "type": "object", + "properties": { + "File": { + "type": "string", + "format": "binary" + } + } + }, + "encoding": { + "File": { + "style": "form" + } + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/FileInfo" } } } + }, + "400": { + "description": "Bad Request" } }, "security": [ @@ -18044,19 +18884,19 @@ } } }, - "/projects/{projectId}/linkcustomfielddefinition": { + "/projects/{projectId}/files/byuploadid": { "post": { "tags": [ - "CustomFields" + "FileUpload" ], - "summary": "Links a custom field definition to the specified project.", - "description": "The user must have `project-master-data:write` permissions or `write` permissions on the specified project.", - "operationId": "PostProjectLinkCustomFieldDefinitionByProjectId", + "summary": "Creates a file from an upload id.", + "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file project from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostUploadByUploadId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project to attach the file to.", "required": true, "schema": { "type": "string", @@ -18065,36 +18905,23 @@ } ], "requestBody": { - "description": "The model used to link the custom field definition.", + "description": "The model describing the uploaded file metadata.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LinkCustomFieldDefinitionForm" + "$ref": "#/components/schemas/UploadByUploadIdForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -18125,19 +18952,19 @@ } } }, - "/projects/{projectId}/linkworkflow": { + "/projects/{projectId}/files/byurl": { "post": { "tags": [ - "Workflows" + "ProjectFiles" ], - "summary": "Links a workflow to a project.", - "description": "Links the specified workflow to the project, migrating existing statuses\r\n using the provided mapping. If the project has no existing statuses,\r\n workflow statuses are automatically assigned.\r\n If the project is already linked to a workflow, switching to a new workflow\r\n is supported when proper status mappings are provided.\r\n To link a workflow to a project the user must have `project-master-data:write` permissions on the specified project or be the project creator.", - "operationId": "PostProjectLinkWorkflowByProjectId", + "summary": "Uploads a new file by providing an url.", + "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", + "operationId": "CreateProjectFileByUrl", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project the file is linked to.", "required": true, "schema": { "type": "string", @@ -18146,15 +18973,19 @@ } ], "requestBody": { - "description": "The link workflow form.", + "description": "The url, name and description of the file.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LinkWorkflowForm" + "$ref": "#/components/schemas/FilePostForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FilePostForm" } } - }, - "required": true + } }, "responses": { "200": { @@ -18162,41 +18993,61 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/files/{fileId}": { + "delete": { + "tags": [ + "ProjectFiles" + ], + "summary": "Deletes the project file with the specified id.", + "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", + "operationId": "DeleteProjectFile", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } + ], + "responses": { + "204": { + "description": "No Content" + } }, "security": [ { @@ -18211,16 +19062,14 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/members": { + }, "get": { "tags": [ - "Projects" + "Project Files" ], - "summary": "Returns the project members of the project with the specified id.", - "description": "Returns the project members of the project with the specified id.\r\n \r\n The user has to be the creator of the project or needs `read` permissions of the feature `project-master-data`.", - "operationId": "GetProjectMembersByProjectId", + "summary": "Returns the file with the specified id of the project with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByProjectNameAndProjectIdAndFileId", "parameters": [ { "name": "projectId", @@ -18231,6 +19080,16 @@ "type": "string", "format": "uuid" } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -18239,10 +19098,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectMember" - } + "$ref": "#/components/schemas/FileInfo" } } } @@ -18281,16 +19137,14 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/milestones": { - "get": { + }, + "put": { "tags": [ - "ProjectMilestones" + "ProjectFiles" ], - "summary": "Returns all project milestones of the specified project.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectMilestonesByProjectId", + "summary": "Updates the metadata of the project file with the specified id.", + "description": "Updates the metadata of the project file with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "UpdateProjectFile", "parameters": [ { "name": "projectId", @@ -18301,28 +19155,40 @@ "type": "string", "format": "uuid" } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], + "requestBody": { + "description": "The model to update the file with the specified id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfoUpdateForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileInfoUpdateForm" + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectMilestone" - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -18343,18 +19209,19 @@ } } }, - "/projects/{projectId}/projectstatuses": { - "get": { + "/projects/{projectId}/files/{fileId}/changeentity": { + "post": { "tags": [ - "ProjectStatuses" + "ProjectFiles" ], - "summary": "Returns all project statuses of the project with the specified id.", - "description": "Returns all project statuses relevant to the project with the specified id. If the project is linked to a workflow, the workflow's project statuses are returned.\r\n The user must either be admin, have `project-master-data:read` permissions or be the creator of the project.", - "operationId": "GetProjectProjectStatusesByProjectId", + "summary": "Changes the project this file belongs to.", + "description": "Changes the project this file belongs to.\nSwitch to the specified project or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", + "operationId": "ChangeProject", "parameters": [ { "name": "projectId", "in": "path", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -18362,48 +19229,38 @@ } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectStatus" - } - } + "requestBody": { + "description": "The model to change the entity information of the file.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileEntityForm" } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileEntityForm" } } - }, - "404": { - "description": "Not Found", + } + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -18422,14 +19279,16 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/files/{fileId}/copy": { "post": { "tags": [ - "ProjectStatuses" + "ProjectFiles" ], - "summary": "Creates a project status for a project.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostProjectProjectStatusesByProjectId", + "summary": "Copies the file to a new project.", + "description": "Copies the file to a new project (meta and content).\r\n\r\nAny authenticated user.", + "operationId": "CopyToProject", "parameters": [ { "name": "projectId", @@ -18440,18 +19299,32 @@ "type": "string", "format": "uuid" } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "requestBody": { - "description": "The model to create the project status.", + "description": "The model to change the entity information of the file.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectStatusForm" + "$ref": "#/components/schemas/FileCopyForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileCopyForm" } } - }, - "required": true + } }, "responses": { "200": { @@ -18459,37 +19332,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectStatus" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -18510,14 +19353,14 @@ } } }, - "/projects/{projectId}/projecttasks": { + "/projects/{projectId}/files/{fileId}/download": { "get": { "tags": [ - "ProjectTasks" + "ProjectFiles" ], - "summary": "Returns all project tasks of the project with the specified id.", - "description": "The user must have `project-planning-data:read` permissions, otherwise only assigned tasks will be returned.", - "operationId": "GetProjectProjectTasksByProjectId", + "summary": "Returns the content of the project file with the specified id.", + "description": "Returns the content of the project file. Uses the latest file version.\nIf the project file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectFileContent", "parameters": [ { "name": "projectId", @@ -18530,16 +19373,40 @@ } }, { - "$ref": "#/components/parameters/page" + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, { - "$ref": "#/components/parameters/pageSize" + "name": "width", + "in": "query", + "description": "Set width to resize.", + "schema": { + "type": "number", + "format": "double" + } }, { - "$ref": "#/components/parameters/orderby" + "name": "height", + "in": "query", + "description": "Set height to resize.", + "schema": { + "type": "number", + "format": "double" + } }, { - "$ref": "#/components/parameters/filterby" + "name": "crop", + "in": "query", + "description": "Whether to crop the image when resizing it.", + "schema": { + "type": "boolean" + } } ], "responses": { @@ -18548,20 +19415,8 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string", + "format": "binary" } } } @@ -18582,14 +19437,14 @@ } } }, - "/projects/{projectId}/projecttasks/{taskId}": { + "/projects/{projectId}/files/{fileId}/pdf": { "get": { "tags": [ - "ProjectTasks" + "ProjectFiles" ], - "summary": "Returns the project task with the specified id.", - "description": "The user must have either `project-planning-data:read` permissions or be assigned to the project task.", - "operationId": "GetProjectProjectTaskByProjectIdAndTaskId", + "summary": "Returns the content of the file with the specified id as pdf.\ntype or conversion not possible.", + "description": "Returns the content of the project file. Uses the latest file version.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectFileContent", "parameters": [ { "name": "projectId", @@ -18602,14 +19457,23 @@ } }, { - "name": "taskId", + "name": "fileId", "in": "path", - "description": "The id of the task.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "inline", + "in": "query", + "description": "If inline is false, content-disposition header is attachment.", + "schema": { + "type": "boolean", + "default": false + } } ], "responses": { @@ -18618,27 +19482,8 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskModel" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string", + "format": "binary" } } } @@ -18659,14 +19504,14 @@ } } }, - "/projects/{projectId}/projecttasks/{taskId}/changeproject": { - "post": { + "/projects/{projectId}/files/{fileId}/shareurl": { + "get": { "tags": [ - "ProjectTasks" + "ProjectFiles" ], - "summary": "Changes the project of the task with the specified id.", - "description": "Changes the project of the task with the specified id.\r\n This call also moves all subtasks of the task to the new project.\r\n This also changes the tracked time sum of the new project and the previous project.\r\n The related time entries of this task will also be moved to the new project.\r\n The user must have `project-planning-data:write` permissions on both projects.", - "operationId": "PostProjectProjectTaskChangeProjectByProjectIdAndTaskId", + "summary": "Returns an url to share the file.", + "description": "Returns a url to share the file.\r\n\r\nAny authenticated user.", + "operationId": "GetPublicToken", "parameters": [ { "name": "projectId", @@ -18679,9 +19524,9 @@ } }, { - "name": "taskId", + "name": "fileId", "in": "path", - "description": "The id of the task.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -18689,47 +19534,13 @@ } } ], - "requestBody": { - "description": "The model to change the project of the task.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChangeProjectForm" - } - } - }, - "required": true - }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string" } } } @@ -18750,14 +19561,14 @@ } } }, - "/projects/{projectId}/projecttasks/{taskId}/checklistitems": { + "/projects/{projectId}/files/{fileId}/versions": { "get": { "tags": [ - "ChecklistItems" + "ProjectFiles" ], - "summary": "Returns the checklist items for a project task with the specified id.", - "description": "The user must have either `project-planning-data:read` permissions or be assigned to the project task.", - "operationId": "GetProjectProjectTaskChecklistItemsByProjectIdAndTaskId", + "summary": "Returns all file versions of the specified project file.", + "description": "Returns all file versions of the specified project file.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectFileVersions", "parameters": [ { "name": "projectId", @@ -18770,15 +19581,27 @@ } }, { - "name": "taskId", + "name": "fileId", "in": "path", - "description": "The id of the task.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", "format": "uuid" } - } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } ], "responses": { "200": { @@ -18788,31 +19611,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ChecklistItem" + "$ref": "#/components/schemas/FileVersion" } } } } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -18828,16 +19631,14 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/projecttasks/{taskId}/checklistitems/{checklistItemId}": { - "get": { + }, + "post": { "tags": [ - "ChecklistItems" + "ProjectFiles" ], - "summary": "Retrieves a checklist item from a project task.", - "description": "The user must have either `project-planning-data:read` permissions or be assigned to the project task.", - "operationId": "GetProjectProjectTaskChecklistItemByProjectIdAndTaskIdAndChecklistItemId", + "summary": "Uploads a new version of the project file with the specified id.", + "description": "Uploads a new version of an project file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", + "operationId": "CreateProjectFileVersion", "parameters": [ { "name": "projectId", @@ -18850,19 +19651,9 @@ } }, { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "checklistItemId", + "name": "fileId", "in": "path", - "description": "The id of the checklist item.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -18870,36 +19661,42 @@ } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChecklistItem" + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "required": [ + "File" + ], + "type": "object", + "properties": { + "File": { + "type": "string", + "format": "binary" + } } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + }, + "encoding": { + "File": { + "style": "form" } } } - }, - "404": { - "description": "Not Found", + } + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileVersion" } } } + }, + "400": { + "description": "Bad Request" } }, "security": [ @@ -18917,14 +19714,14 @@ } } }, - "/projects/{projectId}/removeprojectmember": { - "post": { + "/projects/{projectId}/files/{fileId}/versions/{versionId}": { + "get": { "tags": [ - "Projects" + "Project Files" ], - "summary": "Removes a project member from the project with the specified id.", - "description": "Removes a project member from the project with the specified id.\r\n \r\n The user has to be the creator of the project or needs `manage` permissions of the feature `project-master-data`.", - "operationId": "PostProjectRemoveProjectMemberByProjectId", + "summary": "Returns the project file version with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByProjectNameAndProjectIdAndFileIdAndVersionId", "parameters": [ { "name": "projectId", @@ -18935,29 +19732,35 @@ "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The model to remove the project member.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectMemberRemoveForm" - } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "versionId", + "in": "path", + "description": "The id of the file version.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileVersion" } } } @@ -18998,14 +19801,14 @@ } } }, - "/projects/{projectId}/retainers": { + "/projects/{projectId}/files/{fileId}/versions/{versionId}/download": { "get": { "tags": [ - "Retainers" + "ProjectFiles" ], - "summary": "Endpoint to get all retainers for a project.", - "description": "The user must have the ProjectMasterData read permission for the project to access this endpoint.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectRetainersByProjectId", + "summary": "Returns the content of the project file version with the specified id.", + "description": "Returns the content of the project file version with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectFileVersionContent", "parameters": [ { "name": "projectId", @@ -19018,16 +19821,24 @@ } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, { - "$ref": "#/components/parameters/filterby" + "name": "versionId", + "in": "path", + "description": "The id of the file version.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -19036,10 +19847,8 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Retainer" - } + "type": "string", + "format": "binary" } } } @@ -19058,19 +19867,21 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/linkcustomfielddefinition": { "post": { "tags": [ - "Retainers" + "CustomFields" ], - "summary": "Endpoint to create a new retainer for a project.", - "description": "As soon as a retainer is created for a project, the project will be marked as a retainer project.\r\n Based on the Start and End dates of the retainer, the retainer budgets will be created automatically.\r\n Retainers cannot overlap. There can only be one active retainer per project at a time (no end date and/or including the current date).\r\n \r\n The user needs to have the ProjectMasterData write permission for the project to access this endpoint.\r\n\r\nAny authenticated user.", - "operationId": "PostProjectRetainersByProjectId", + "summary": "Links a custom field definition to the specified project.", + "description": "The user must have `project-master-data:write` permissions or `write` permissions on the specified project.", + "operationId": "PostProjectLinkCustomFieldDefinitionByProjectId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project to create a retainer for.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -19079,29 +19890,32 @@ } ], "requestBody": { - "description": "The model to create a retainer.", + "description": "The model used to link the custom field definition.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RetainerForm" + "$ref": "#/components/schemas/LinkCustomFieldDefinitionForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Retainer" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -19136,14 +19950,14 @@ } } }, - "/projects/{projectId}/retainers/{retainerId}": { - "delete": { + "/projects/{projectId}/linkworkflow": { + "post": { "tags": [ - "Retainers" + "Workflows" ], - "summary": "Endpoint to delete a retainer for a project. Deletes all related retainer budgets.", - "description": "The user must have the ProjectMasterData write permission for the project to access this endpoint.\r\n\r\nAny authenticated user.", - "operationId": "DeleteProjectRetainerByProjectIdAndRetainerId", + "summary": "Links a workflow to a project.", + "description": "Links the specified workflow to the project, migrating existing statuses\r\n using the provided mapping. If the project has no existing statuses,\r\n workflow statuses are automatically assigned.\r\n If the project is already linked to a workflow, switching to a new workflow\r\n is supported when proper status mappings are provided.\r\n To link a workflow to a project the user must have `project-master-data:write` permissions on the specified project or be the project creator.", + "operationId": "PostProjectLinkWorkflowByProjectId", "parameters": [ { "name": "projectId", @@ -19154,21 +19968,29 @@ "type": "string", "format": "uuid" } - }, - { - "name": "retainerId", - "in": "path", - "description": "The id of the retainer.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], + "requestBody": { + "description": "The link workflow form.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LinkWorkflowForm" + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + } }, "400": { "description": "Bad Request", @@ -19180,6 +20002,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -19204,14 +20036,16 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/members": { "get": { "tags": [ - "Retainers" + "Projects" ], - "summary": "Endpoint to get a retainer for a project by id.", - "description": "The user must have the ProjectMasterData read permission for the project to access this endpoint.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectRetainerByProjectIdAndRetainerId", + "summary": "Returns the project members of the project with the specified id.", + "description": "Returns the project members of the project with the specified id.\r\n \r\n The user has to be the creator of the project or needs `read` permissions of the feature `project-master-data`.", + "operationId": "GetProjectMembersByProjectId", "parameters": [ { "name": "projectId", @@ -19222,16 +20056,6 @@ "type": "string", "format": "uuid" } - }, - { - "name": "retainerId", - "in": "path", - "description": "The id of the retainer.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "responses": { @@ -19240,7 +20064,20 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Retainer" + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectMember" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -19269,29 +20106,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projects/{projectId}/milestones": { + "get": { "tags": [ - "Retainers" + "ProjectMilestones" ], - "summary": "Endpoint to update the retainer for a project.", - "description": "Date changes must not overlap another retainer for the project. The retainer period cannot be changed.\r\n \r\n The user needs to have the ProjectMasterData write permission for the project to access this endpoint.\r\n\r\nAny authenticated user.", - "operationId": "PutProjectRetainerByProjectIdAndRetainerId", + "summary": "Returns all project milestones of the specified project.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectMilestonesByProjectId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project to update the retainer for.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "retainerId", - "in": "path", - "description": "The id of the retainer.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -19299,40 +20128,22 @@ } } ], - "requestBody": { - "description": "The model to update the retainer.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RetainerForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Retainer" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectMilestone" + } } } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -19357,50 +20168,47 @@ } } }, - "/projects/{projectId}/setcustomfields": { - "post": { + "/projects/{projectId}/projectstatuses": { + "get": { "tags": [ - "CustomFields" + "ProjectStatuses" ], - "summary": "Sets custom field values for a project.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostProjectSetCustomFieldsByProjectId", + "summary": "Returns all project statuses of the project with the specified id.", + "description": "Returns all project statuses relevant to the project with the specified id. If the project is linked to a workflow, the workflow's project statuses are returned.\r\n The user must either be admin, have `project-master-data:read` permissions or be the creator of the project.", + "operationId": "GetProjectProjectStatusesByProjectId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The list of custom field values to set.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomFieldPostForm" - } - } - } - }, - "required": true - }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectStatus" + } } } } @@ -19439,16 +20247,14 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/setprojectkey": { + }, "post": { "tags": [ - "Projects" + "ProjectStatuses" ], - "summary": "Updates the project key for the specified project and all associated task identifiers.", - "description": "The project key must be unique within the workspace and follow these rules:\r\n - Only uppercase letters (A-Z), numbers (0-9), and dashes (-)\r\n - Between 1 and 32 characters\r\n - Not already in use by another active project in the workspace\r\n \r\n This operation will also update all task identifiers for tasks in this project\r\n (e.g., OLDKEY-123 becomes NEWKEY-123). Task identifiers are updated in batches\r\n to ensure audit logs and websocket events are triggered properly.\r\n \r\n Note: The project key update is now transactional with automatic retry on race conditions.\r\n If multiple concurrent requests try to update the same project key, the service will\r\n retry with exponential backoff (100ms, 200ms, 400ms) for up to 3 attempts.\r\n Task identifier updates are processed in batches as a background operation.\r\n \r\n Note: User-provided keys are not subject to profanity filtering. Users can set any key they choose.\r\n\r\nThe user must be an admin or have `project-master-data:write` permissions.", - "operationId": "PostProjectSetProjectKeyByProjectId", + "summary": "Creates a project status for a project.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostProjectProjectStatusesByProjectId", "parameters": [ { "name": "projectId", @@ -19462,10 +20268,11 @@ } ], "requestBody": { + "description": "The model to create the project status.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateProjectKeyForm" + "$ref": "#/components/schemas/ProjectStatusForm" } } }, @@ -19477,7 +20284,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" + "$ref": "#/components/schemas/ProjectStatus" } } } @@ -19492,6 +20299,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -19514,24 +20331,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-master-data": "write" + "any": "true" } } }, - "/projects/{projectId}/tags": { + "/projects/{projectId}/projecttasks": { "get": { "tags": [ - "ProjectTags" + "ProjectTasks" ], - "summary": "Returns the tags of the project with the specified id.", - "description": "To get the tags of a project the user must have `project-master-data:read` permissions on the specified project.", - "operationId": "GetProjectTagsByProjectId", + "summary": "Returns all project tasks of the project with the specified id.", + "description": "The user must have `project-planning-data:read` permissions, otherwise only assigned tasks will be returned.", + "operationId": "GetProjectProjectTasksByProjectId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project to get tags for.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -19559,32 +20375,12 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/BaseTagModel" + "$ref": "#/components/schemas/TaskModel" } } } } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -19611,14 +20407,14 @@ } } }, - "/projects/{projectId}/taskdependencies": { + "/projects/{projectId}/projecttasks/{taskId}": { "get": { "tags": [ - "TaskDependencies" + "ProjectTasks" ], - "summary": "Returns all task dependencies for a specific project.", - "description": "To get all dependencies of a project, the user needs project planning permissions on that project.", - "operationId": "GetProjectTaskdependenciesByProjectId", + "summary": "Returns the project task with the specified id.", + "description": "The user must have either `project-planning-data:read` permissions or be assigned to the project task.", + "operationId": "GetProjectProjectTaskByProjectIdAndTaskId", "parameters": [ { "name": "projectId", @@ -19629,87 +20425,16 @@ "type": "string", "format": "uuid" } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskDependency" - } - } - } - } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/projects/{projectId}/tasklists": { - "get": { - "tags": [ - "TaskLists" - ], - "summary": "Returns all task lists of the project with the specified id.", - "description": "The permission check in this function is dynamically based on the entity name.\r\n In the cases where the user tries to get the project task lists,\r\n the user needs read permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTaskListsByProjectId", - "parameters": [ { - "name": "projectId", + "name": "taskId", "in": "path", - "description": "The id of the project.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "name": "showArchived", - "in": "query", - "description": "The show Archived.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -19718,10 +20443,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskList" - } + "$ref": "#/components/schemas/TaskModel" } } } @@ -19735,6 +20457,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -19750,14 +20482,16 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/projecttasks/{taskId}/changeproject": { "post": { "tags": [ - "TaskLists" + "ProjectTasks" ], - "summary": "Creates a new task list.", - "description": "To create a new project task list, the user needs manage permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", - "operationId": "PostProjectTaskListsByProjectId", + "summary": "Changes the project of the task with the specified id.", + "description": "Changes the project of the task with the specified id.\r\n This call also moves all subtasks of the task to the new project.\r\n This also changes the tracked time sum of the new project and the previous project.\r\n The related time entries of this task will also be moved to the new project.\r\n The user must have `project-planning-data:write` permissions on both projects.", + "operationId": "PostProjectProjectTaskChangeProjectByProjectIdAndTaskId", "parameters": [ { "name": "projectId", @@ -19768,29 +20502,32 @@ "type": "string", "format": "uuid" } + }, + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "requestBody": { - "description": "The task List form.", + "description": "The model to change the project of the task.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskListForm" + "$ref": "#/components/schemas/ChangeProjectForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskList" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -19838,14 +20575,14 @@ } } }, - "/projects/{projectId}/tasklists/{taskListId}": { + "/projects/{projectId}/projecttasks/{taskId}/checklistitems": { "get": { "tags": [ - "TaskLists" + "ChecklistItems" ], - "summary": "Returns the task list with the specified id.", - "description": "The permission check in this function is dynamically based on the entity name.\r\n In the cases where the user tries to get the project task lists,\r\n the user needs read permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTaskListByProjectIdAndTaskListId", + "summary": "Returns the checklist items for a project task with the specified id.", + "description": "The user must have either `project-planning-data:read` permissions or be assigned to the project task.", + "operationId": "GetProjectProjectTaskChecklistItemsByProjectIdAndTaskId", "parameters": [ { "name": "projectId", @@ -19858,9 +20595,9 @@ } }, { - "name": "taskListId", + "name": "taskId", "in": "path", - "description": "The id of the task list.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -19874,7 +20611,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskList" + "type": "array", + "items": { + "$ref": "#/components/schemas/ChecklistItem" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -19893,14 +20653,16 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projects/{projectId}/projecttasks/{taskId}/checklistitems/{checklistItemId}": { + "get": { "tags": [ - "TaskLists" + "ChecklistItems" ], - "summary": "Updates the task list with the specified id.", - "description": "To update a project task list, the user needs manage permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", - "operationId": "PutProjectTaskListByProjectIdAndTaskListId", + "summary": "Retrieves a checklist item from a project task.", + "description": "The user must have either `project-planning-data:read` permissions or be assigned to the project task.", + "operationId": "GetProjectProjectTaskChecklistItemByProjectIdAndTaskIdAndChecklistItemId", "parameters": [ { "name": "projectId", @@ -19913,9 +20675,19 @@ } }, { - "name": "taskListId", + "name": "taskId", "in": "path", - "description": "The id of the task list.", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "checklistItemId", + "in": "path", + "description": "The id of the checklist item.", "required": true, "schema": { "type": "string", @@ -19923,30 +20695,19 @@ } } ], - "requestBody": { - "description": "The task List Put form.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskListPutForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskList" + "$ref": "#/components/schemas/ChecklistItem" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -19955,8 +20716,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -19981,14 +20742,14 @@ } } }, - "/projects/{projectId}/tasklists/{taskListId}/addtasks": { + "/projects/{projectId}/removeprojectmember": { "post": { "tags": [ - "TaskLists" + "Projects" ], - "summary": "Adds the tasks to the task list with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostProjectTaskListAddTasksByProjectIdAndTaskListId", + "summary": "Removes a project member from the project with the specified id.", + "description": "Removes a project member from the project with the specified id.\r\n \r\n The user has to be the creator of the project or needs `manage` permissions of the feature `project-master-data`.", + "operationId": "PostProjectRemoveProjectMemberByProjectId", "parameters": [ { "name": "projectId", @@ -19999,48 +20760,45 @@ "type": "string", "format": "uuid" } - }, - { - "name": "taskListId", - "in": "path", - "description": "The id of the task list.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "requestBody": { - "description": "The task To Task List list.", + "description": "The model to remove the project member.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskToTaskList" - } + "$ref": "#/components/schemas/ProjectMemberRemoveForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ReorderingResult" - } + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -20065,14 +20823,14 @@ } } }, - "/projects/{projectId}/tasklists/{taskListId}/changeproject": { - "post": { + "/projects/{projectId}/retainers": { + "get": { "tags": [ - "TaskLists" + "Retainers" ], - "summary": "Changes the project of the task list with the specified id.", - "description": "This endpoint also moves all tasks and time entries to the new project.\r\n This will also change the tracked time sum of the old and new projects.\r\n The task status mapping will move all tasks of a certain status to the new provided status on the mapping.\r\n\r\nAny authenticated user.", - "operationId": "PostProjectTaskListChangeProjectByProjectIdAndTaskListId", + "summary": "Endpoint to get all retainers for a project.", + "description": "The user must have the ProjectMasterData read permission for the project to access this endpoint.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectRetainersByProjectId", "parameters": [ { "name": "projectId", @@ -20085,30 +20843,31 @@ } }, { - "name": "taskListId", - "in": "path", - "description": "The id of the task list.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The change Project form For Task Lists.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChangeProjectFormForTaskLists" + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Retainer" + } + } } } - }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" } }, "security": [ @@ -20124,31 +20883,19 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/tasklists/{taskListId}/copy": { + }, "post": { "tags": [ - "TaskLists" + "Retainers" ], - "summary": "Creates a copy of the task list.", - "description": "A new task list will be created with the same name as the original one.\r\n All tasks and subtasks will also be copied in this operation.\r\n Comments, files and activity logs are not copied.\r\n To copy a task list, the user needs to have 'ProjectPlanning'\r\n permissions in general or in the project the task list belongs to.\r\n\r\nAny authenticated user.", - "operationId": "PostProjectTaskListCopyByProjectIdAndTaskListId", + "summary": "Endpoint to create a new retainer for a project.", + "description": "As soon as a retainer is created for a project, the project will be marked as a retainer project.\r\n Based on the Start and End dates of the retainer, the retainer budgets will be created automatically.\r\n Retainers cannot overlap. There can only be one active retainer per project at a time (no end date and/or including the current date).\r\n \r\n The user needs to have the ProjectMasterData write permission for the project to access this endpoint.\r\n\r\nAny authenticated user.", + "operationId": "PostProjectRetainersByProjectId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListId", - "in": "path", - "description": "The id of the task list.", + "description": "The id of the project to create a retainer for.", "required": true, "schema": { "type": "string", @@ -20156,19 +20903,30 @@ } } ], + "requestBody": { + "description": "The model to create a retainer.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RetainerForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskList" + "$ref": "#/components/schemas/Retainer" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -20203,14 +20961,14 @@ } } }, - "/projects/{projectId}/tasklists/{taskListId}/delete": { - "post": { + "/projects/{projectId}/retainers/{retainerId}": { + "delete": { "tags": [ - "TaskLists" + "Retainers" ], - "summary": "Deletes the task list with the specified id.", - "description": "To delete project task list, the user needs manage permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", - "operationId": "PostProjectTaskListDeleteByProjectIdAndTaskListId", + "summary": "Endpoint to delete a retainer for a project. Deletes all related retainer budgets.", + "description": "The user must have the ProjectMasterData write permission for the project to access this endpoint.\r\n\r\nAny authenticated user.", + "operationId": "DeleteProjectRetainerByProjectIdAndRetainerId", "parameters": [ { "name": "projectId", @@ -20223,9 +20981,9 @@ } }, { - "name": "taskListId", + "name": "retainerId", "in": "path", - "description": "The id of the task list.", + "description": "The id of the retainer.", "required": true, "schema": { "type": "string", @@ -20233,23 +20991,12 @@ } } ], - "requestBody": { - "description": "The task List Delete form.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskListDeleteForm" - } - } - }, - "required": true - }, "responses": { "204": { "description": "No Content" }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -20282,16 +21029,14 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/tasklists/{taskListId}/removetasks": { - "post": { + }, + "get": { "tags": [ - "TaskLists" + "Retainers" ], - "summary": "Removes the tasks from the task list with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostProjectTaskListRemoveTasksByProjectIdAndTaskListId", + "summary": "Endpoint to get a retainer for a project by id.", + "description": "The user must have the ProjectMasterData read permission for the project to access this endpoint.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectRetainerByProjectIdAndRetainerId", "parameters": [ { "name": "projectId", @@ -20304,9 +21049,9 @@ } }, { - "name": "taskListId", + "name": "retainerId", "in": "path", - "description": "The id of the task list.", + "description": "The id of the retainer.", "required": true, "schema": { "type": "string", @@ -20314,24 +21059,26 @@ } } ], - "requestBody": { - "description": "The id of the tasks.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Retainer" } } } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -20347,21 +21094,19 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/tasklists/{taskListId}/setarchived": { - "post": { + }, + "put": { "tags": [ - "TaskLists" + "Retainers" ], - "summary": "Archives or unarchives the task list with the specified id.", - "description": "Archives or unarchives the task list with the specified id.\r\n An archived task list still exists but is not editable anymore.\r\n\r\nAny authenticated user.", - "operationId": "PostProjectTaskListSetArchivedByProjectIdAndTaskListId", + "summary": "Endpoint to update the retainer for a project.", + "description": "Date changes must not overlap another retainer for the project. The retainer period cannot be changed.\r\n \r\n The user needs to have the ProjectMasterData write permission for the project to access this endpoint.\r\n\r\nAny authenticated user.", + "operationId": "PutProjectRetainerByProjectIdAndRetainerId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project to update the retainer for.", "required": true, "schema": { "type": "string", @@ -20369,9 +21114,9 @@ } }, { - "name": "taskListId", + "name": "retainerId", "in": "path", - "description": "The id of the task list.", + "description": "The id of the retainer.", "required": true, "schema": { "type": "string", @@ -20380,11 +21125,11 @@ } ], "requestBody": { - "description": "The archived Task List form.", + "description": "The model to update the retainer.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ArchivedTaskListForm" + "$ref": "#/components/schemas/RetainerForm" } } }, @@ -20396,7 +21141,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskList" + "$ref": "#/components/schemas/Retainer" } } } @@ -20411,16 +21156,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -20447,14 +21182,14 @@ } } }, - "/projects/{projectId}/tasklists/{taskListId}/tasks/{taskId}": { - "get": { + "/projects/{projectId}/setcustomfields": { + "post": { "tags": [ - "TaskLists" + "CustomFields" ], - "summary": "Returns the task with the specified id in the task list with the specified id.", - "description": "To get a task in a project task list, the user needs read permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTaskListTaskByProjectIdAndTaskListIdAndTaskId", + "summary": "Sets custom field values for a project.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostProjectSetCustomFieldsByProjectId", "parameters": [ { "name": "projectId", @@ -20465,39 +21200,26 @@ "type": "string", "format": "uuid" } - }, - { - "name": "taskListId", - "in": "path", - "description": "The id of the task list.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskModel" - } - } - } - }, + "requestBody": { + "description": "The list of custom field values to set.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFieldPostForm" + } + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, "400": { "description": "Bad Request", "content": { @@ -20544,14 +21266,14 @@ } } }, - "/projects/{projectId}/tasklists/{taskListId}/tasks/{taskId}/updateorder": { + "/projects/{projectId}/setprojectkey": { "post": { "tags": [ - "TaskLists" + "Projects" ], - "summary": "Updates the order of a task in a task list.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostProjectTaskListTaskUpdateOrderByProjectIdAndTaskListIdAndTaskId", + "summary": "Updates the project key for the specified project and all associated task identifiers.", + "description": "The project key must be unique within the workspace and follow these rules:\r\n - Only uppercase letters (A-Z), numbers (0-9), and dashes (-)\r\n - Between 1 and 32 characters\r\n - Not already in use by another active project in the workspace\r\n \r\n This operation will also update all task identifiers for tasks in this project\r\n (e.g., OLDKEY-123 becomes NEWKEY-123). Task identifiers are updated in batches\r\n to ensure audit logs and websocket events are triggered properly.\r\n \r\n Note: The project key update is now transactional with automatic retry on race conditions.\r\n If multiple concurrent requests try to update the same project key, the service will\r\n retry with exponential backoff (100ms, 200ms, 400ms) for up to 3 attempts.\r\n Task identifier updates are processed in batches as a background operation.\r\n \r\n Note: User-provided keys are not subject to profanity filtering. Users can set any key they choose.\r\n\r\nThe user must be an admin or have `project-master-data:write` permissions.", + "operationId": "PostProjectSetProjectKeyByProjectId", "parameters": [ { "name": "projectId", @@ -20562,34 +21284,13 @@ "type": "string", "format": "uuid" } - }, - { - "name": "taskListId", - "in": "path", - "description": "The id of the task list.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "requestBody": { - "description": "The task In Task List Update Order form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskInTaskListUpdateOrderForm" + "$ref": "#/components/schemas/UpdateProjectKeyForm" } } }, @@ -20601,10 +21302,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ReorderingResult" - } + "$ref": "#/components/schemas/Project" } } } @@ -20619,8 +21317,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -20641,23 +21339,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-master-data": "write" } } }, - "/projects/{projectId}/tasklists/{taskListId}/updateorder": { - "post": { + "/projects/{projectId}/tags": { + "get": { "tags": [ - "TaskLists" + "ProjectTags" ], - "summary": "Updates the order of the task list with the specified id.", - "description": "To update the order of a project task list, the user needs manage permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", - "operationId": "PostProjectTaskListUpdateOrderByProjectIdAndTaskListId", + "summary": "Returns the tags of the project with the specified id.", + "description": "To get the tags of a project the user must have `project-master-data:read` permissions on the specified project.", + "operationId": "GetProjectTagsByProjectId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project to get tags for.", "required": true, "schema": { "type": "string", @@ -20665,30 +21364,41 @@ } }, { - "name": "taskListId", - "in": "path", - "description": "The id of the task list.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The update Order form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateOrderForm" + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } + } } } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, "401": { "description": "Unauthorized", @@ -20726,14 +21436,74 @@ } } }, - "/projects/{projectId}/taskstatuses": { + "/projects/{projectId}/taskdependencies": { "get": { "tags": [ - "TaskStatuses" + "TaskDependencies" ], - "summary": "Returns all task statuses of the project with the specified id.", - "description": "Returns all task statuses relevant to the project with the specified id. If the project is linked to a workflow, the workflow's task statuses are returned.\r\n The user must have either `project-master-data:read` permissions or be assigned to a task on the specified project.", - "operationId": "GetProjectTaskStatusesByProjectId", + "summary": "Returns all task dependencies for a specific project.", + "description": "To get all dependencies of a project, the user needs project planning permissions on that project.", + "operationId": "GetProjectTaskdependenciesByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskDependency" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/tasklists": { + "get": { + "tags": [ + "TaskLists" + ], + "summary": "Returns all task lists of the project with the specified id.", + "description": "The permission check in this function is dynamically based on the entity name.\r\n In the cases where the user tries to get the project task lists,\r\n the user needs read permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTaskListsByProjectId", "parameters": [ { "name": "projectId", @@ -20745,6 +21515,15 @@ "format": "uuid" } }, + { + "name": "showArchived", + "in": "query", + "description": "The show Archived.", + "schema": { + "type": "boolean", + "default": false + } + }, { "$ref": "#/components/parameters/page" }, @@ -20766,7 +21545,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TaskStatus" + "$ref": "#/components/schemas/TaskList" } } } @@ -20781,16 +21560,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -20809,11 +21578,11 @@ }, "post": { "tags": [ - "TaskStatuses" + "TaskLists" ], - "summary": "Creates a new task status for the specified project.", - "description": "The user must either have `project-planning-data:write` permissions or be creator of the project.", - "operationId": "PostProjectTaskStatusesByProjectId", + "summary": "Creates a new task list.", + "description": "To create a new project task list, the user needs manage permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", + "operationId": "PostProjectTaskListsByProjectId", "parameters": [ { "name": "projectId", @@ -20827,11 +21596,11 @@ } ], "requestBody": { - "description": "The model used to create the task status.", + "description": "The task List form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatusForm" + "$ref": "#/components/schemas/TaskListForm" } } }, @@ -20843,7 +21612,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatus" + "$ref": "#/components/schemas/TaskList" } } } @@ -20894,14 +21663,14 @@ } } }, - "/projects/{projectId}/taskstatuses/{taskStatusId}": { + "/projects/{projectId}/tasklists/{taskListId}": { "get": { "tags": [ - "TaskStatuses" + "TaskLists" ], - "summary": "Returns the specified task status of a project.", - "description": "The user must either have 'project-master-data:write' permissions or be the owner of the project.", - "operationId": "GetProjectTaskStatusByProjectIdAndTaskStatusId", + "summary": "Returns the task list with the specified id.", + "description": "The permission check in this function is dynamically based on the entity name.\r\n In the cases where the user tries to get the project task lists,\r\n the user needs read permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTaskListByProjectIdAndTaskListId", "parameters": [ { "name": "projectId", @@ -20914,9 +21683,9 @@ } }, { - "name": "taskStatusId", + "name": "taskListId", "in": "path", - "description": "The id of the task status.", + "description": "The id of the task list.", "required": true, "schema": { "type": "string", @@ -20930,27 +21699,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatus" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TaskList" } } } @@ -20972,11 +21721,11 @@ }, "put": { "tags": [ - "TaskStatuses" + "TaskLists" ], - "summary": "Updates a task status for the specified project.", - "description": "The status type cannot be changed if it is the last status of type 'todo' or 'done'.\r\n \r\n The user must either have `project-planning-data:write` permissions or be creator of the project.", - "operationId": "PutProjectTaskStatusByProjectIdAndTaskStatusId", + "summary": "Updates the task list with the specified id.", + "description": "To update a project task list, the user needs manage permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", + "operationId": "PutProjectTaskListByProjectIdAndTaskListId", "parameters": [ { "name": "projectId", @@ -20989,9 +21738,9 @@ } }, { - "name": "taskStatusId", + "name": "taskListId", "in": "path", - "description": "The id of the task status to update.", + "description": "The id of the task list.", "required": true, "schema": { "type": "string", @@ -21000,11 +21749,11 @@ } ], "requestBody": { - "description": "The tmodel containing the task status data.", + "description": "The task List Put form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatusForm" + "$ref": "#/components/schemas/TaskListPutForm" } } }, @@ -21016,7 +21765,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatus" + "$ref": "#/components/schemas/TaskList" } } } @@ -21040,16 +21789,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -21067,14 +21806,14 @@ } } }, - "/projects/{projectId}/taskstatuses/{taskStatusId}/delete": { + "/projects/{projectId}/tasklists/{taskListId}/addtasks": { "post": { "tags": [ - "TaskStatuses" + "TaskLists" ], - "summary": "Deletes the task status with the specified id.", - "description": "If the status to delete is still used by tasks, another task status to move the tasks to must be provided.\r\n The last status of type 'todo' or 'done' cannot be deleted.\r\n The user must either have `project-planning-data:write` permissions or must be creator of the project.", - "operationId": "PostProjectTaskStatusDeleteByProjectIdAndTaskStatusId", + "summary": "Adds the tasks to the task list with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostProjectTaskListAddTasksByProjectIdAndTaskListId", "parameters": [ { "name": "projectId", @@ -21087,9 +21826,9 @@ } }, { - "name": "taskStatusId", + "name": "taskListId", "in": "path", - "description": "The id of the task status.", + "description": "The id of the task list.", "required": true, "schema": { "type": "string", @@ -21098,42 +21837,35 @@ } ], "requestBody": { - "description": "The model containing the id of the new task status to move tasks to.", + "description": "The task To Task List list.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatusDeleteForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskToTaskList" + } } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/ReorderingResult" + } } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -21158,14 +21890,14 @@ } } }, - "/projects/{projectId}/timeentries": { - "get": { + "/projects/{projectId}/tasklists/{taskListId}/changeproject": { + "post": { "tags": [ - "TimeEntries" + "TaskLists" ], - "summary": "Returns all time entries of the specified project.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTimeEntries", + "summary": "Changes the project of the task list with the specified id.", + "description": "This endpoint also moves all tasks and time entries to the new project.\r\n This will also change the tracked time sum of the old and new projects.\r\n The task status mapping will move all tasks of a certain status to the new provided status on the mapping.\r\n\r\nAny authenticated user.", + "operationId": "PostProjectTaskListChangeProjectByProjectIdAndTaskListId", "parameters": [ { "name": "projectId", @@ -21178,31 +21910,30 @@ } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "taskListId", + "in": "path", + "description": "The id of the task list.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TimeTracking" - } - } + "requestBody": { + "description": "The change Project form For Task Lists.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChangeProjectFormForTaskLists" } } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" } }, "security": [ @@ -21220,14 +21951,14 @@ } } }, - "/projects/{projectId}/typeofwork": { - "get": { + "/projects/{projectId}/tasklists/{taskListId}/copy": { + "post": { "tags": [ - "ProjectTasks" + "TaskLists" ], - "summary": "Returns the type of work for the project with the specified id.", - "description": "The project can be a connected or a workspace project.\r\n User must have at least 'read' permissions on the 'project-planning-data' feature.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTypesOfWorkByProjectId", + "summary": "Creates a copy of the task list.", + "description": "A new task list will be created with the same name as the original one.\r\n All tasks and subtasks will also be copied in this operation.\r\n Comments, files and activity logs are not copied.\r\n To copy a task list, the user needs to have 'ProjectPlanning'\r\n permissions in general or in the project the task list belongs to.\r\n\r\nAny authenticated user.", + "operationId": "PostProjectTaskListCopyByProjectIdAndTaskListId", "parameters": [ { "name": "projectId", @@ -21238,6 +21969,16 @@ "type": "string", "format": "uuid" } + }, + { + "name": "taskListId", + "in": "path", + "description": "The id of the task list.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -21246,10 +21987,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TypeOfWork" - } + "$ref": "#/components/schemas/TaskList" } } } @@ -21290,19 +22028,29 @@ } } }, - "/projects/{projectId}/unlinkcustomfielddefinition": { + "/projects/{projectId}/tasklists/{taskListId}/delete": { "post": { "tags": [ - "CustomFields" + "TaskLists" ], - "summary": "Unlinks a custom field definition from the specified project.", - "description": "When the definition is unlinked from a project, all values of the custom field will be removed from the tasks within that project.\r\n \r\n The user must have `project-master-data:write` permissions or `write` permissions on the specified project.", - "operationId": "PostProjectUnlinkCustomFieldDefinitionByProjectId", + "summary": "Deletes the task list with the specified id.", + "description": "To delete project task list, the user needs manage permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", + "operationId": "PostProjectTaskListDeleteByProjectIdAndTaskListId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project to unlink the custom field definition from.", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskListId", + "in": "path", + "description": "The id of the task list.", "required": true, "schema": { "type": "string", @@ -21311,11 +22059,11 @@ } ], "requestBody": { - "description": "The model describing the custom field definition to unlink.", + "description": "The task List Delete form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UnlinkCustomFieldDefinitionForm" + "$ref": "#/components/schemas/TaskListDeleteForm" } } }, @@ -21325,16 +22073,6 @@ "204": { "description": "No Content" }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "401": { "description": "Unauthorized", "content": { @@ -21371,14 +22109,14 @@ } } }, - "/projects/{projectId}/unlinkworkflow": { + "/projects/{projectId}/tasklists/{taskListId}/removetasks": { "post": { "tags": [ - "Workflows" + "TaskLists" ], - "summary": "Unlinks a workflow from a project.", - "description": "Unlinks the workflow from the project, cloning workflow statuses\r\n to local project-specific statuses. Custom fields and automations\r\n remain but become editable (no longer synced with workflow).\r\n To unlink a workflow from a project the user must have `project-master-data:write` permissions on the specified project or be the project creator.", - "operationId": "PostProjectUnlinkWorkflowByProjectId", + "summary": "Removes the tasks from the task list with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostProjectTaskListRemoveTasksByProjectIdAndTaskListId", "parameters": [ { "name": "projectId", @@ -21389,37 +22127,123 @@ "type": "string", "format": "uuid" } + }, + { + "name": "taskListId", + "in": "path", + "description": "The id of the task list.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "requestBody": { + "description": "The id of the tasks.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" } } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + "required": true + }, + "responses": { + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/tasklists/{taskListId}/setarchived": { + "post": { + "tags": [ + "TaskLists" + ], + "summary": "Archives or unarchives the task list with the specified id.", + "description": "Archives or unarchives the task list with the specified id.\r\n An archived task list still exists but is not editable anymore.\r\n\r\nAny authenticated user.", + "operationId": "PostProjectTaskListSetArchivedByProjectIdAndTaskListId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskListId", + "in": "path", + "description": "The id of the task list.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The archived Task List form.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ArchivedTaskListForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskList" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } }, "404": { @@ -21448,14 +22272,111 @@ } } }, - "/projects/{projectId}/updateprojectmember": { + "/projects/{projectId}/tasklists/{taskListId}/tasks/{taskId}": { + "get": { + "tags": [ + "TaskLists" + ], + "summary": "Returns the task with the specified id in the task list with the specified id.", + "description": "To get a task in a project task list, the user needs read permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTaskListTaskByProjectIdAndTaskListIdAndTaskId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskListId", + "in": "path", + "description": "The id of the task list.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/tasklists/{taskListId}/tasks/{taskId}/updateorder": { "post": { "tags": [ - "ProjectMembers" + "TaskLists" ], - "summary": "Updates the role of a project member of the project with the specified id.", - "description": "Changes the role of a project member.\r\n The project member can also be set as a responsible project member, but only if no other member of this project is\r\n responsible.\r\n It is necessary that the project role is available in this project, otherwise the member cannot be updated.\r\n A project role is available when they are connected to the specified project type of the project.\r\n \r\n The user has to be the creator or needs `project-master-data:manage` permissions on the project.", - "operationId": "PostProjectUpdateProjectMemberByProjectId", + "summary": "Updates the order of a task in a task list.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostProjectTaskListTaskUpdateOrderByProjectIdAndTaskListIdAndTaskId", "parameters": [ { "name": "projectId", @@ -21466,14 +22387,34 @@ "type": "string", "format": "uuid" } + }, + { + "name": "taskListId", + "in": "path", + "description": "The id of the task list.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "requestBody": { - "description": "The model containing updated project member details.", + "description": "The task In Task List Update Order form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMemberForm" + "$ref": "#/components/schemas/TaskInTaskListUpdateOrderForm" } } }, @@ -21485,7 +22426,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMember" + "type": "array", + "items": { + "$ref": "#/components/schemas/ReorderingResult" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -21506,14 +22470,14 @@ } } }, - "/projects/{projectId}/updateprojectstatusorder": { + "/projects/{projectId}/tasklists/{taskListId}/updateorder": { "post": { "tags": [ - "Projects" + "TaskLists" ], - "summary": "Updates the order of a project status.", - "description": "Updates the order of a project status.\r\n\r\nAny authenticated user.", - "operationId": "PostProjectUpdateProjectStatusOrderByProjectId", + "summary": "Updates the order of the task list with the specified id.", + "description": "To update the order of a project task list, the user needs manage permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", + "operationId": "PostProjectTaskListUpdateOrderByProjectIdAndTaskListId", "parameters": [ { "name": "projectId", @@ -21524,14 +22488,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "taskListId", + "in": "path", + "description": "The id of the task list.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "requestBody": { - "description": "The model to update the project status order.", + "description": "The update Order form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateProjectStatusOrderForm" + "$ref": "#/components/schemas/UpdateOrderForm" } } }, @@ -21541,8 +22515,8 @@ "204": { "description": "No Content" }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -21577,22 +22551,23 @@ } } }, - "/projectstatuses": { + "/projects/{projectId}/taskstatuses": { "get": { "tags": [ - "ProjectStatuses" + "TaskStatuses" ], - "summary": "Returns all project statuses.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectStatuses", + "summary": "Returns all task statuses of the project with the specified id.", + "description": "Returns all task statuses relevant to the project with the specified id. If the project is linked to a workflow, the workflow's task statuses are returned.\r\n The user must have either `project-master-data:read` permissions or be assigned to a task on the specified project.", + "operationId": "GetProjectTaskStatusesByProjectId", "parameters": [ { - "name": "showArchived", - "in": "query", - "description": "Whether to include archived project statuses.", + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } }, { @@ -21616,14 +22591,14 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ProjectStatus" + "$ref": "#/components/schemas/TaskStatus" } } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -21632,8 +22607,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -21656,21 +22631,19 @@ "x-access": { "any": "true" } - } - }, - "/projectstatuses/{projectStatusId}": { - "get": { + }, + "post": { "tags": [ - "ProjectStatuses" + "TaskStatuses" ], - "summary": "Returns the project status with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectStatusById", + "summary": "Creates a new task status for the specified project.", + "description": "The user must either have `project-planning-data:write` permissions or be creator of the project.", + "operationId": "PostProjectTaskStatusesByProjectId", "parameters": [ { - "name": "projectStatusId", + "name": "projectId", "in": "path", - "description": "The id of the project status.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -21678,13 +22651,24 @@ } } ], + "requestBody": { + "description": "The model used to create the task status.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskStatusForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectStatus" + "$ref": "#/components/schemas/TaskStatus" } } } @@ -21733,19 +22717,31 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projects/{projectId}/taskstatuses/{taskStatusId}": { + "get": { "tags": [ - "ProjectStatuses" + "TaskStatuses" ], - "summary": "Updates an existing project status.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PutProjectStatusById", + "summary": "Returns the specified task status of a project.", + "description": "The user must either have 'project-master-data:write' permissions or be the owner of the project.", + "operationId": "GetProjectTaskStatusByProjectIdAndTaskStatusId", "parameters": [ { - "name": "projectStatusId", + "name": "projectId", "in": "path", - "description": "The id of the project status.", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskStatusId", + "in": "path", + "description": "The id of the task status.", "required": true, "schema": { "type": "string", @@ -21753,34 +22749,13 @@ } } ], - "requestBody": { - "description": "The model to update the project status.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectStatusForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectStatus" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TaskStatus" } } } @@ -21819,21 +22794,29 @@ "x-access": { "any": "true" } - } - }, - "/projectstatuses/{projectStatusId}/delete": { - "post": { + }, + "put": { "tags": [ - "ProjectStatuses" + "TaskStatuses" ], - "summary": "Deletes a project status.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostProjectStatusDeleteByProjectStatusId", + "summary": "Updates a task status for the specified project.", + "description": "The status type cannot be changed if it is the last status of type 'todo' or 'done'.\r\n \r\n The user must either have `project-planning-data:write` permissions or be creator of the project.", + "operationId": "PutProjectTaskStatusByProjectIdAndTaskStatusId", "parameters": [ { - "name": "projectStatusId", + "name": "projectId", "in": "path", - "description": "The id of the project status to delete.", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskStatusId", + "in": "path", + "description": "The id of the task status to update.", "required": true, "schema": { "type": "string", @@ -21842,19 +22825,26 @@ } ], "requestBody": { - "description": "The model to delete the project status.", + "description": "The tmodel containing the task status data.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectStatusDeleteForm" + "$ref": "#/components/schemas/TaskStatusForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskStatus" + } + } + } }, "400": { "description": "Bad Request", @@ -21902,19 +22892,29 @@ } } }, - "/projectstatuses/{projectStatusId}/setarchived": { + "/projects/{projectId}/taskstatuses/{taskStatusId}/delete": { "post": { "tags": [ - "ProjectStatuses" + "TaskStatuses" ], - "summary": "Sets the archived flag for a project status.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostProjectStatusSetArchivedByProjectStatusId", + "summary": "Deletes the task status with the specified id.", + "description": "If the status to delete is still used by tasks, another task status to move the tasks to must be provided.\r\n The last status of type 'todo' or 'done' cannot be deleted.\r\n The user must either have `project-planning-data:write` permissions or must be creator of the project.", + "operationId": "PostProjectTaskStatusDeleteByProjectIdAndTaskStatusId", "parameters": [ { - "name": "projectStatusId", + "name": "projectId", "in": "path", - "description": "The id of the project status.", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskStatusId", + "in": "path", + "description": "The id of the task status.", "required": true, "schema": { "type": "string", @@ -21923,26 +22923,19 @@ } ], "requestBody": { - "description": "The model to set the archived flag for the project status.", + "description": "The model containing the id of the new task status to move tasks to.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ArchivedForm" + "$ref": "#/components/schemas/TaskStatusDeleteForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectStatus" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -21990,15 +22983,25 @@ } } }, - "/projecttemplates": { + "/projects/{projectId}/timeentries": { "get": { "tags": [ - "ProjectTemplates" + "TimeEntries" ], - "summary": "Retrieves all project templates.", + "summary": "Returns all time entries of the specified project.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplates", + "operationId": "GetProjectTimeEntries", "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, { "$ref": "#/components/parameters/page" }, @@ -22020,7 +23023,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ProjectTemplate" + "$ref": "#/components/schemas/TimeTracking" } } } @@ -22040,38 +23043,54 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/projects/{projectId}/typeofwork": { + "get": { "tags": [ - "ProjectTemplates" + "ProjectTasks" + ], + "summary": "Returns the type of work for the project with the specified id.", + "description": "The project can be a connected or a workspace project.\r\n User must have at least 'read' permissions on the 'project-planning-data' feature.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTypesOfWorkByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Creates a new project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplate", - "requestBody": { - "description": "The model to create the project template.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectTemplateForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectTemplate" + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeOfWork" + } } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -22092,25 +23111,36 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/deletetags": { + "/projects/{projectId}/unlinkcustomfielddefinition": { "post": { "tags": [ - "ProjectTemplateTags" + "CustomFields" + ], + "summary": "Unlinks a custom field definition from the specified project.", + "description": "When the definition is unlinked from a project, all values of the custom field will be removed from the tasks within that project.\r\n \r\n The user must have `project-master-data:write` permissions or `write` permissions on the specified project.", + "operationId": "PostProjectUnlinkCustomFieldDefinitionByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project to unlink the custom field definition from.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Removes a tag from all project templates.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplatesDeleteTags", "requestBody": { - "description": "The model to remove the tag from all project templates.", + "description": "The model describing the custom field definition to unlink.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteTagForm" + "$ref": "#/components/schemas/UnlinkCustomFieldDefinitionForm" } } }, @@ -22139,6 +23169,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -22152,29 +23192,47 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/tags": { - "get": { + "/projects/{projectId}/unlinkworkflow": { + "post": { "tags": [ - "ProjectTemplateTags" + "Workflows" + ], + "summary": "Unlinks a workflow from a project.", + "description": "Unlinks the workflow from the project, cloning workflow statuses\r\n to local project-specific statuses. Custom fields and automations\r\n remain but become editable (no longer synced with workflow).\r\n To unlink a workflow from a project the user must have `project-master-data:write` permissions on the specified project or be the project creator.", + "operationId": "PostProjectUnlinkWorkflowByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Returns all tags currently in use by project templates.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplatesTags", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "$ref": "#/components/schemas/Project" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -22188,6 +23246,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -22205,45 +23273,44 @@ } } }, - "/projecttemplates/updatetags": { + "/projects/{projectId}/updateprojectmember": { "post": { "tags": [ - "ProjectTemplateTags" + "ProjectMembers" + ], + "summary": "Updates the role of a project member of the project with the specified id.", + "description": "Changes the role of a project member.\r\n The project member can also be set as a responsible project member, but only if no other member of this project is\r\n responsible.\r\n It is necessary that the project role is available in this project, otherwise the member cannot be updated.\r\n A project role is available when they are connected to the specified project type of the project.\r\n \r\n The user has to be the creator or needs `project-master-data:manage` permissions on the project.", + "operationId": "PostProjectUpdateProjectMemberByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Updates a tag globally for all project templates.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateUpdateTags", "requestBody": { - "description": "The model containing the tag updates.", + "description": "The model containing updated project member details.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TagUpdateForm" + "$ref": "#/components/schemas/ProjectMemberForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectMember" } } } @@ -22260,24 +23327,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}": { - "delete": { + "/projects/{projectId}/updateprojectstatusorder": { + "post": { "tags": [ - "ProjectTemplates" + "Projects" ], - "summary": "Deletes a project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "DeleteProjectTemplateById", + "summary": "Updates the order of a project status.", + "description": "Updates the order of a project status.\r\n\r\nAny authenticated user.", + "operationId": "PostProjectUpdateProjectStatusOrderByProjectId", "parameters": [ { - "name": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template to delete.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -22285,9 +23351,40 @@ } } ], + "requestBody": { + "description": "The model to update the project status order.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateProjectStatusOrderForm" + } + } + }, + "required": true + }, "responses": { "204": { "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -22301,27 +23398,39 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } - }, + } + }, + "/projectstatuses": { "get": { "tags": [ - "ProjectTemplates" + "ProjectStatuses" ], - "summary": "Retrieves a specific project template.", + "summary": "Returns all project statuses.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateById", + "operationId": "GetProjectStatuses", "parameters": [ { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template to retrieve.", - "required": true, + "name": "showArchived", + "in": "query", + "description": "Whether to include archived project statuses.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -22330,13 +23439,26 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectTemplate" + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectStatus" + } } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -22359,19 +23481,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projectstatuses/{projectStatusId}": { + "get": { "tags": [ - "ProjectTemplates" + "ProjectStatuses" ], - "summary": "Updates an existing project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutProjectTemplateById", + "summary": "Returns the project status with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectStatusById", "parameters": [ { - "name": "projectTemplateId", + "name": "projectStatusId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project status.", "required": true, "schema": { "type": "string", @@ -22379,24 +23503,13 @@ } } ], - "requestBody": { - "description": "The model to update the project template.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectTemplateForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectTemplate" + "$ref": "#/components/schemas/ProjectStatus" } } } @@ -22411,6 +23524,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -22433,24 +23556,21 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } - } - }, - "/projecttemplates/{projectTemplateId}/addtags": { - "post": { + }, + "put": { "tags": [ - "ProjectTemplateTags" + "ProjectStatuses" ], - "summary": "Adds a batch of tags to the project template with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateAddTagsByProjectTemplateId", + "summary": "Updates an existing project status.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PutProjectStatusById", "parameters": [ { - "name": "projectTemplateId", + "name": "projectStatusId", "in": "path", - "description": "The id of the project template to add tags to.", + "description": "The id of the project status.", "required": true, "schema": { "type": "string", @@ -22459,14 +23579,11 @@ } ], "requestBody": { - "description": "The model containing the tags to add.", + "description": "The model to update the project status.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TagForm" - } + "$ref": "#/components/schemas/ProjectStatusForm" } } }, @@ -22478,10 +23595,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "$ref": "#/components/schemas/ProjectStatus" } } } @@ -22528,24 +23642,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}/automations": { - "get": { + "/projectstatuses/{projectStatusId}/delete": { + "post": { "tags": [ - "Project Template Automations" + "ProjectStatuses" ], - "summary": "Returns all automations for a project template.", + "summary": "Deletes a project status.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateAutomations", + "operationId": "PostProjectStatusDeleteByProjectStatusId", "parameters": [ { - "name": "projectTemplateId", + "name": "projectStatusId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project status to delete.", "required": true, "schema": { "type": "string", @@ -22553,16 +23666,47 @@ } } ], + "requestBody": { + "description": "The model to delete the project status.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectStatusDeleteForm" + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Automation" - } + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -22581,19 +23725,21 @@ "x-access": { "any": "true" } - }, + } + }, + "/projectstatuses/{projectStatusId}/setarchived": { "post": { "tags": [ - "Project Template Automations" + "ProjectStatuses" ], - "summary": "Creates a new automation for a given project template.", - "description": "Creates a new automation of the project template with the specified id.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateAutomation", + "summary": "Sets the archived flag for a project status.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostProjectStatusSetArchivedByProjectStatusId", "parameters": [ { - "name": "projectTemplateId", + "name": "projectStatusId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project status.", "required": true, "schema": { "type": "string", @@ -22602,11 +23748,11 @@ } ], "requestBody": { - "description": "The model to create the automation.", + "description": "The model to set the archived flag for the project status.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AutomationTriggerForm" + "$ref": "#/components/schemas/ArchivedForm" } } }, @@ -22618,7 +23764,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" + "$ref": "#/components/schemas/ProjectStatus" } } } @@ -22632,6 +23778,26 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -22645,60 +23811,42 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}/automations/{automationId}": { - "delete": { + "/projecttemplates": { + "get": { "tags": [ - "Project Template Automations" + "ProjectTemplates" ], - "summary": "Deletes the specified automation for a given projecttemplate.", - "description": "Deletes the specified automation with its trigger and all its values.\r\n To delete the the automation the user needs to have 'write' permissions of\r\n the feature 'project-manage-config' globally.\r\n If the 'removeFromProject' boolean is set to true, all automations in projects of that\r\n project template created from that automation template are deleted aswell.\r\n Automations created from a workflow cannot be deleted via this endpoint.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "DeleteProjectTemplateAutomation", + "summary": "Retrieves all project templates.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTemplates", "parameters": [ { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" }, { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/pageSize" }, { - "name": "removeFromProjects", - "in": "query", - "description": "Whether to delete the automation also from all projects of the projecttemplate.", - "required": true, - "schema": { - "type": "boolean" - } + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectTemplate" + } } } } @@ -22715,46 +23863,44 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } }, - "get": { + "post": { "tags": [ - "Project Template Automations" + "ProjectTemplates" ], - "summary": "Returns a specific automation for a projecttemplate.", - "description": "Returns a specific automation of the projecttemplate with the specified id.\r\n Returns NotFound if the automation doesnt exist.\r\n To get the the automation data the user needs to have 'read' permissions of\r\n the feature 'project-manage-config' globally.\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", - "operationId": "GetProjectTemplateAutomation", - "parameters": [ - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Creates a new project template.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplate", + "requestBody": { + "description": "The model to create the project template.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectTemplateForm" + } } }, - { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" + "$ref": "#/components/schemas/ProjectTemplate" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -22772,59 +23918,45 @@ ], "x-access": { "admin": "true", - "project-manage-config": "read" + "project-manage-config": "write" } - }, - "put": { + } + }, + "/projecttemplates/deletetags": { + "post": { "tags": [ - "Project Template Automations" - ], - "summary": "Updates the automation with the specified id for a given projecttemplate.", - "description": "Updates the specified automation for a specific projecttemplate.\r\n If the automation was created from a workflow, only the Enabled flag can be changed.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutProjectTemplateAutomation", - "parameters": [ - { - "name": "automationId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "projectTemplateId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "ProjectTemplateTags" ], + "summary": "Removes a tag from all project templates.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplatesDeleteTags", "requestBody": { + "description": "The model to remove the tag from all project templates.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AutomationPutForm" + "$ref": "#/components/schemas/DeleteTagForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -22850,36 +23982,14 @@ } } }, - "/projecttemplates/{projectTemplateId}/automations/{automationId}/actions": { + "/projecttemplates/tags": { "get": { "tags": [ - "Project Template Automations" - ], - "summary": "Gets the actions of an automation of a project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", - "operationId": "GetProjectTemplateAutomationActions", - "parameters": [ - { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "ProjectTemplateTags" ], + "summary": "Returns all tags currently in use by project templates.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTemplatesTags", "responses": { "200": { "description": "OK", @@ -22888,11 +23998,21 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Action" + "$ref": "#/components/schemas/BaseTagModel" } } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -22906,63 +24026,45 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "read" + "any": "true" } - }, + } + }, + "/projecttemplates/updatetags": { "post": { "tags": [ - "Project Template Automations" - ], - "summary": "Creates a new action for an automation of a project template.", - "description": "Creates an action for a specific automation of a project template including all its values. Actions cannot be added to automations created from a workflow.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateAutomationAction", - "parameters": [ - { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "ProjectTemplateTags" ], + "summary": "Updates a tag globally for all project templates.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateUpdateTags", "requestBody": { - "description": "The model to create an action.", + "description": "The model containing the tag updates.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ActionForm" + "$ref": "#/components/schemas/TagUpdateForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -22988,39 +24090,19 @@ } } }, - "/projecttemplates/{projectTemplateId}/automations/{automationId}/actions/{actionId}": { + "/projecttemplates/{projectTemplateId}": { "delete": { "tags": [ - "Project Template Automations" + "ProjectTemplates" ], - "summary": "Deletes an action for an automation of a project template.", - "description": "Deletes an action for a specific automation of a project template including all its values. Actions of automations created from a workflow cannot be deleted.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "DeleteProjectTemplateAutomationAction", + "summary": "Deletes a project template.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "DeleteProjectTemplateById", "parameters": [ { "name": "projectTemplateId", "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "actionId", - "in": "path", - "description": "The id of the action.", + "description": "The id of the project template to delete.", "required": true, "schema": { "type": "string", @@ -23031,16 +24113,6 @@ "responses": { "204": { "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -23060,36 +24132,16 @@ }, "get": { "tags": [ - "Project Template Automations" + "ProjectTemplates" ], - "summary": "Gets a specific action for an automation of a projecttemplate.", - "description": "Returns a specific action for a specific automation of a project template including all its values.\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", - "operationId": "GetProjectTemplateAutomationAction", + "summary": "Retrieves a specific project template.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTemplateById", "parameters": [ { "name": "projectTemplateId", "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "actionId", - "in": "path", - "description": "The id of the action.", + "description": "The id of the project template to retrieve.", "required": true, "schema": { "type": "string", @@ -23103,7 +24155,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" + "$ref": "#/components/schemas/ProjectTemplate" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -23120,17 +24182,16 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "read" + "any": "true" } }, "put": { "tags": [ - "Project Template Automations" + "ProjectTemplates" ], - "summary": "Updates a specifc action of an automation of a project template.", - "description": "Returns an updated action for a specific automation of a project template including all its values. Actions of automations created from a workflow cannot be modified.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutProjectTemplateAutomationAction", + "summary": "Updates an existing project template.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutProjectTemplateById", "parameters": [ { "name": "projectTemplateId", @@ -23141,34 +24202,14 @@ "type": "string", "format": "uuid" } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "actionId", - "in": "path", - "description": "The id of the action.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "requestBody": { - "description": "The model to update an action.", + "description": "The model to update the project template.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ActionForm" + "$ref": "#/components/schemas/ProjectTemplateForm" } } }, @@ -23180,7 +24221,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" + "$ref": "#/components/schemas/ProjectTemplate" } } } @@ -23194,6 +24235,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -23212,39 +24263,19 @@ } } }, - "/projecttemplates/{projectTemplateId}/automations/{automationId}/actions/{actionId}/updateorder": { + "/projecttemplates/{projectTemplateId}/addtags": { "post": { "tags": [ - "Project Template Automations" + "ProjectTemplateTags" ], - "summary": "Updates the order of a project template automation action.", - "description": "Actions of automations created from a workflow cannot be modified.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostUpdateProjectTemplateAutomationActionOrder", + "summary": "Adds a batch of tags to the project template with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateAddTagsByProjectTemplateId", "parameters": [ { "name": "projectTemplateId", "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "actionId", - "in": "path", - "description": "The id of the action.", + "description": "The id of the project template to add tags to.", "required": true, "schema": { "type": "string", @@ -23253,19 +24284,32 @@ } ], "requestBody": { - "description": "The model to update the order.", + "description": "The model containing the tags to add.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateOrderForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/TagForm" + } } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } + } + } + } }, "400": { "description": "Bad Request", @@ -23276,58 +24320,27 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "project-manage-config": "write" - } - } - }, - "/projecttemplates/{projectTemplateId}/automations/{automationId}/reapply": { - "post": { - "tags": [ - "Project Template Automations" - ], - "summary": "Reapplies the automation to all projects of this specific project template.", - "description": "Returns NotFound if the automation doesnt exist.\r\n To execute this you need to have 'write' permissions of\r\n the feature 'project-manage-config' globally.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostReapplyProjectTemplateAutomation", - "parameters": [ - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } }, - { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } } - ], - "responses": { - "204": { - "description": "No Content" - } }, "security": [ { @@ -23345,14 +24358,14 @@ } } }, - "/projecttemplates/{projectTemplateId}/customfielddefinitions": { + "/projecttemplates/{projectTemplateId}/automations": { "get": { "tags": [ - "CustomFields" + "Project Template Automations" ], - "summary": "Returns all custom field definitions linked to the specified project template, including definitions linked via a workflow.", + "summary": "Returns all automations for a project template.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateCustomFieldDefinitionsByProjectTemplateId", + "operationId": "GetProjectTemplateAutomations", "parameters": [ { "name": "projectTemplateId", @@ -23373,21 +24386,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" + "$ref": "#/components/schemas/Automation" } } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -23403,16 +24406,14 @@ "x-access": { "any": "true" } - } - }, - "/projecttemplates/{projectTemplateId}/customfielddefinitions/{customFieldDefinitionId}": { - "put": { + }, + "post": { "tags": [ - "CustomFields" + "Project Template Automations" ], - "summary": "Updates the order of a custom field definition for the specified project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutProjectTemplateCustomFieldDefinitionByProjectTemplateIdAndCustomFieldDefinitionId", + "summary": "Creates a new automation for a given project template.", + "description": "Creates a new automation of the project template with the specified id.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateAutomation", "parameters": [ { "name": "projectTemplateId", @@ -23423,24 +24424,14 @@ "type": "string", "format": "uuid" } - }, - { - "name": "customFieldDefinitionId", - "in": "path", - "description": "The id of the custom field definition.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "requestBody": { - "description": "The model used to update the order of the custom field definition.", + "description": "The model to create the automation.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldOrderPutForm" + "$ref": "#/components/schemas/AutomationTriggerForm" } } }, @@ -23452,13 +24443,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldOrderForm" + "$ref": "#/components/schemas/Automation" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -23484,47 +24475,49 @@ } } }, - "/projecttemplates/{projectTemplateId}/deletetags": { - "post": { + "/projecttemplates/{projectTemplateId}/automations/{automationId}": { + "delete": { "tags": [ - "ProjectTemplateTags" + "Project Template Automations" ], - "summary": "Removes tags from the project template with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateDeleteTagsByProjectTemplateId", + "summary": "Deletes the specified automation for a given projecttemplate.", + "description": "Deletes the specified automation with its trigger and all its values.\r\n To delete the the automation the user needs to have 'write' permissions of\r\n the feature 'project-manage-config' globally.\r\n If the 'removeFromProject' boolean is set to true, all automations in projects of that\r\n project template created from that automation template are deleted aswell.\r\n Automations created from a workflow cannot be deleted via this endpoint.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "DeleteProjectTemplateAutomation", "parameters": [ + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, { "name": "projectTemplateId", "in": "path", - "description": "The id of the project template to remove tags from.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "removeFromProjects", + "in": "query", + "description": "Whether to delete the automation also from all projects of the projecttemplate.", + "required": true, + "schema": { + "type": "boolean" + } } ], - "requestBody": { - "description": "The model containing the tags to delete.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DeleteTagForm" - } - } - } - }, - "required": true - }, "responses": { "204": { "description": "No Content" }, - "207": { - "description": "Multi-Status" - }, "400": { "description": "Bad Request", "content": { @@ -23534,23 +24527,59 @@ } } } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + }, + "get": { + "tags": [ + "Project Template Automations" + ], + "summary": "Returns a specific automation for a projecttemplate.", + "description": "Returns a specific automation of the projecttemplate with the specified id.\r\n Returns NotFound if the automation doesnt exist.\r\n To get the the automation data the user needs to have 'read' permissions of\r\n the feature 'project-manage-config' globally.\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", + "operationId": "GetProjectTemplateAutomation", + "parameters": [ + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "404": { - "description": "Not Found", + { + "name": "projectTemplateId", + "in": "path", + "description": "The id of the project template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Automation" } } } @@ -23568,23 +24597,29 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "project-manage-config": "read" } - } - }, - "/projecttemplates/{projectTemplateId}/linkcustomfielddefinition": { - "post": { + }, + "put": { "tags": [ - "CustomFields" + "Project Template Automations" ], - "summary": "Links a custom field definition to the specified project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateLinkCustomFieldDefinitionByProjectTemplateId", + "summary": "Updates the automation with the specified id for a given projecttemplate.", + "description": "Updates the specified automation for a specific projecttemplate.\r\n If the automation was created from a workflow, only the Enabled flag can be changed.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutProjectTemplateAutomation", "parameters": [ + { + "name": "automationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, { "name": "projectTemplateId", "in": "path", - "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -23593,32 +24628,28 @@ } ], "requestBody": { - "description": "The model used to link the custom field definition.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LinkCustomFieldDefinitionForm" + "$ref": "#/components/schemas/AutomationPutForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Automation" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -23644,14 +24675,14 @@ } } }, - "/projecttemplates/{projectTemplateId}/milestones": { + "/projecttemplates/{projectTemplateId}/automations/{automationId}/actions": { "get": { "tags": [ - "ProjectMilestoneTemplates" + "Project Template Automations" ], - "summary": "Returns all milestone templates of the given project template.", + "summary": "Gets the actions of an automation of a project template.", "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", - "operationId": "GetProjectTemplateMilestonesByProjectTemplateId", + "operationId": "GetProjectTemplateAutomationActions", "parameters": [ { "name": "projectTemplateId", @@ -23664,16 +24695,14 @@ } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -23684,7 +24713,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ProjectMilestoneTemplate" + "$ref": "#/components/schemas/Action" } } } @@ -23708,11 +24737,11 @@ }, "post": { "tags": [ - "ProjectMilestoneTemplates" + "Project Template Automations" ], - "summary": "Creates a new milestone template for the given project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateMilestonesByProjectTemplateId", + "summary": "Creates a new action for an automation of a project template.", + "description": "Creates an action for a specific automation of a project template including all its values. Actions cannot be added to automations created from a workflow.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateAutomationAction", "parameters": [ { "name": "projectTemplateId", @@ -23723,14 +24752,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "requestBody": { - "description": "The model containing milestone template details.", + "description": "The model to create an action.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestoneTemplateForm" + "$ref": "#/components/schemas/ActionForm" } } }, @@ -23742,7 +24781,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestoneTemplate" + "$ref": "#/components/schemas/Action" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -23764,14 +24813,14 @@ } } }, - "/projecttemplates/{projectTemplateId}/milestones/{milestoneId}": { + "/projecttemplates/{projectTemplateId}/automations/{automationId}/actions/{actionId}": { "delete": { "tags": [ - "ProjectMilestoneTemplates" + "Project Template Automations" ], - "summary": "Deletes a milestone for the given project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "DeleteProjectTemplateMilestoneByProjectTemplateIdAndMilestoneId", + "summary": "Deletes an action for an automation of a project template.", + "description": "Deletes an action for a specific automation of a project template including all its values. Actions of automations created from a workflow cannot be deleted.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "DeleteProjectTemplateAutomationAction", "parameters": [ { "name": "projectTemplateId", @@ -23784,9 +24833,19 @@ } }, { - "name": "milestoneId", + "name": "automationId", "in": "path", - "description": "The id of the milestone.", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "description": "The id of the action.", "required": true, "schema": { "type": "string", @@ -23797,6 +24856,16 @@ "responses": { "204": { "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -23816,11 +24885,11 @@ }, "get": { "tags": [ - "ProjectMilestoneTemplates" + "Project Template Automations" ], - "summary": "Returns a milestone by id for the given project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", - "operationId": "GetProjectTemplateMilestoneByProjectTemplateIdAndMilestoneId", + "summary": "Gets a specific action for an automation of a projecttemplate.", + "description": "Returns a specific action for a specific automation of a project template including all its values.\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", + "operationId": "GetProjectTemplateAutomationAction", "parameters": [ { "name": "projectTemplateId", @@ -23833,9 +24902,19 @@ } }, { - "name": "milestoneId", + "name": "automationId", "in": "path", - "description": "The id of the milestone.", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "description": "The id of the action.", "required": true, "schema": { "type": "string", @@ -23849,7 +24928,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestoneTemplate" + "$ref": "#/components/schemas/Action" } } } @@ -23872,11 +24951,11 @@ }, "put": { "tags": [ - "ProjectMilestoneTemplates" + "Project Template Automations" ], - "summary": "Updates a milestone template for the given project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutProjectTemplateMilestoneByProjectTemplateIdAndMilestoneId", + "summary": "Updates a specifc action of an automation of a project template.", + "description": "Returns an updated action for a specific automation of a project template including all its values. Actions of automations created from a workflow cannot be modified.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutProjectTemplateAutomationAction", "parameters": [ { "name": "projectTemplateId", @@ -23889,9 +24968,19 @@ } }, { - "name": "milestoneId", + "name": "automationId", "in": "path", - "description": "The id of the milestone.", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "description": "The id of the action.", "required": true, "schema": { "type": "string", @@ -23900,11 +24989,11 @@ } ], "requestBody": { - "description": "The model containing updated milestone template details.", + "description": "The model to update an action.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestoneTemplateForm" + "$ref": "#/components/schemas/ActionForm" } } }, @@ -23916,7 +25005,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestoneTemplate" + "$ref": "#/components/schemas/Action" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -23938,77 +25037,39 @@ } } }, - "/projecttemplates/{projectTemplateId}/projectstatuses": { - "get": { + "/projecttemplates/{projectTemplateId}/automations/{automationId}/actions/{actionId}/updateorder": { + "post": { "tags": [ - "ProjectTemplates" + "Project Template Automations" ], - "summary": "Retrieves all project statuses of a project template.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateProjectStatusesByProjectTemplateId", + "summary": "Updates the order of a project template automation action.", + "description": "Actions of automations created from a workflow cannot be modified.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostUpdateProjectTemplateAutomationActionOrder", "parameters": [ { "name": "projectTemplateId", "in": "path", - "description": "The id of the project template to retrieve statuses for.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectStatus" - } - } - } - } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "ProjectTemplates" - ], - "summary": "Adds a project status to a project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateProjectStatusesByProjectTemplateId", - "parameters": [ + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, { - "name": "projectTemplateId", + "name": "actionId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the action.", "required": true, "schema": { "type": "string", @@ -24017,26 +25078,19 @@ } ], "requestBody": { - "description": "The model to add the project status to the template.", + "description": "The model to update the order.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectStatusForm" + "$ref": "#/components/schemas/UpdateOrderForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectStatus" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -24047,26 +25101,6 @@ } } } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -24085,15 +25119,25 @@ } } }, - "/projecttemplates/{projectTemplateId}/setcustomfields": { + "/projecttemplates/{projectTemplateId}/automations/{automationId}/reapply": { "post": { "tags": [ - "CustomFields" + "Project Template Automations" ], - "summary": "Sets the custom fields for a project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateSetCustomFieldsByProjectTemplateId", + "summary": "Reapplies the automation to all projects of this specific project template.", + "description": "Returns NotFound if the automation doesnt exist.\r\n To execute this you need to have 'write' permissions of\r\n the feature 'project-manage-config' globally.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostReapplyProjectTemplateAutomation", "parameters": [ + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, { "name": "projectTemplateId", "in": "path", @@ -24105,20 +25149,6 @@ } } ], - "requestBody": { - "description": "The list of custom field values to set.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomFieldPostForm" - } - } - } - }, - "required": true - }, "responses": { "204": { "description": "No Content" @@ -24140,36 +25170,24 @@ } } }, - "/projecttemplates/{projectTemplateId}/tags": { + "/projecttemplates/{projectTemplateId}/customfielddefinitions": { "get": { "tags": [ - "ProjectTemplateTags" + "CustomFields" ], - "summary": "Returns the tags of the project template with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", - "operationId": "GetProjectTemplateTagsByProjectTemplateId", + "summary": "Returns all custom field definitions linked to the specified project template, including definitions linked via a workflow.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTemplateCustomFieldDefinitionsByProjectTemplateId", "parameters": [ { "name": "projectTemplateId", "in": "path", - "description": "The id of the project template to get tags for.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -24180,22 +25198,12 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/BaseTagModel" + "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" } } } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -24218,19 +25226,18 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "read" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}/taskbundle": { - "get": { + "/projecttemplates/{projectTemplateId}/customfielddefinitions/{customFieldDefinitionId}": { + "put": { "tags": [ - "ProjectTemplates" + "CustomFields" ], - "summary": "Retrieves the task bundle associated with a project template.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateTaskBundleByProjectTemplateId", + "summary": "Updates the order of a custom field definition for the specified project template.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutProjectTemplateCustomFieldDefinitionByProjectTemplateIdAndCustomFieldDefinitionId", "parameters": [ { "name": "projectTemplateId", @@ -24241,15 +25248,36 @@ "type": "string", "format": "uuid" } + }, + { + "name": "customFieldDefinitionId", + "in": "path", + "description": "The id of the custom field definition.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskBundleResult" + "requestBody": { + "description": "The model used to update the order of the custom field definition.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFieldOrderPutForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFieldOrderForm" } } } @@ -24276,52 +25304,68 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projecttemplates/{projectTemplateId}/taskstatuses": { - "get": { + "/projecttemplates/{projectTemplateId}/deletetags": { + "post": { "tags": [ - "ProjectTemplates" + "ProjectTemplateTags" ], - "summary": "Returns all task statuses of the project template with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateTaskStatusesByProjectTemplateId", + "summary": "Removes tags from the project template with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateDeleteTagsByProjectTemplateId", "parameters": [ { "name": "projectTemplateId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project template to remove tags from.", "required": true, "schema": { "type": "string", "format": "uuid" } + } + ], + "requestBody": { + "description": "The model containing the tags to delete.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DeleteTagForm" + } + } + } }, - { - "$ref": "#/components/parameters/page" + "required": true + }, + "responses": { + "204": { + "description": "No Content" }, - { - "$ref": "#/components/parameters/pageSize" + "207": { + "description": "Multi-Status" }, - { - "$ref": "#/components/parameters/orderby" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskStatus" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -24348,16 +25392,19 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } - }, + } + }, + "/projecttemplates/{projectTemplateId}/linkcustomfielddefinition": { "post": { "tags": [ - "ProjectTemplates" + "CustomFields" ], - "summary": "Creates a new task status for the specified project template.", + "summary": "Links a custom field definition to the specified project template.", "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateTaskStatusesByProjectTemplateId", + "operationId": "PostProjectTemplateLinkCustomFieldDefinitionByProjectTemplateId", "parameters": [ { "name": "projectTemplateId", @@ -24371,26 +25418,19 @@ } ], "requestBody": { - "description": "The task Status form payload.", + "description": "The model used to link the custom field definition.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatusForm" + "$ref": "#/components/schemas/LinkCustomFieldDefinitionForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskStatus" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -24429,14 +25469,14 @@ } } }, - "/projecttemplates/{projectTemplateId}/taskstatuses/{taskStatusId}": { - "delete": { + "/projecttemplates/{projectTemplateId}/milestones": { + "get": { "tags": [ - "ProjectTemplates" + "ProjectMilestoneTemplates" ], - "summary": "Deletes the task status of the project template with the specified id.", - "description": "The last status of type 'todo' or 'done' cannot be deleted.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "DeleteProjectTemplateTaskStatusByProjectTemplateIdAndTaskStatusId", + "summary": "Returns all milestone templates of the given project template.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", + "operationId": "GetProjectTemplateMilestonesByProjectTemplateId", "parameters": [ { "name": "projectTemplateId", @@ -24449,9 +25489,60 @@ } }, { - "name": "taskStatusId", + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectMilestoneTemplate" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "read" + } + }, + "post": { + "tags": [ + "ProjectMilestoneTemplates" + ], + "summary": "Creates a new milestone template for the given project template.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateMilestonesByProjectTemplateId", + "parameters": [ + { + "name": "projectTemplateId", "in": "path", - "description": "The id of the task status.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -24459,26 +25550,24 @@ } } ], - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "requestBody": { + "description": "The model containing milestone template details.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectMilestoneTemplateForm" } } }, - "404": { - "description": "Not Found", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectMilestoneTemplate" } } } @@ -24498,14 +25587,16 @@ "admin": "true", "project-manage-config": "write" } - }, - "get": { + } + }, + "/projecttemplates/{projectTemplateId}/milestones/{milestoneId}": { + "delete": { "tags": [ - "ProjectTemplates" + "ProjectMilestoneTemplates" ], - "summary": "Returns the task status of the project template with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateTaskStatusByProjectTemplateIdAndTaskStatusId", + "summary": "Deletes a milestone for the given project template.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "DeleteProjectTemplateMilestoneByProjectTemplateIdAndMilestoneId", "parameters": [ { "name": "projectTemplateId", @@ -24518,9 +25609,9 @@ } }, { - "name": "taskStatusId", + "name": "milestoneId", "in": "path", - "description": "The id of the task status.", + "description": "The id of the milestone.", "required": true, "schema": { "type": "string", @@ -24529,25 +25620,8 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskStatus" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -24561,16 +25635,17 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } }, - "put": { + "get": { "tags": [ - "ProjectTemplates" + "ProjectMilestoneTemplates" ], - "summary": "Updates a task status for the specified project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutProjectTemplateTaskStatusByProjectTemplateIdAndTaskStatusId", + "summary": "Returns a milestone by id for the given project template.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", + "operationId": "GetProjectTemplateMilestoneByProjectTemplateIdAndMilestoneId", "parameters": [ { "name": "projectTemplateId", @@ -24583,9 +25658,9 @@ } }, { - "name": "taskStatusId", + "name": "milestoneId", "in": "path", - "description": "The id of the task status to update.", + "description": "The id of the milestone.", "required": true, "schema": { "type": "string", @@ -24593,44 +25668,13 @@ } } ], - "requestBody": { - "description": "The model used to update the task status.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskStatusForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatus" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectMilestoneTemplate" } } } @@ -24648,23 +25692,31 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "project-manage-config": "read" } - } - }, - "/projecttemplates/{projectTemplateId}/unlinkcustomfielddefinition": { - "post": { + }, + "put": { "tags": [ - "CustomFields" + "ProjectMilestoneTemplates" ], - "summary": "Unlinks a custom field definition from the specified project template.", - "description": "When the definition is unlinked from a project template, all values of the custom field will be removed from the task templates within that project template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateUnlinkCustomFieldDefinitionByProjectTemplateId", + "summary": "Updates a milestone template for the given project template.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutProjectTemplateMilestoneByProjectTemplateIdAndMilestoneId", "parameters": [ { "name": "projectTemplateId", "in": "path", - "description": "The id of the project template to unlink the custom field definition from.", + "description": "The id of the project template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "milestoneId", + "in": "path", + "description": "The id of the milestone.", "required": true, "schema": { "type": "string", @@ -24673,36 +25725,23 @@ } ], "requestBody": { - "description": "The model used to unlink the custom field definition.", + "description": "The model containing updated milestone template details.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UnlinkCustomFieldDefinitionForm" + "$ref": "#/components/schemas/ProjectMilestoneTemplateForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectMilestoneTemplate" } } } @@ -24724,19 +25763,19 @@ } } }, - "/projecttemplates/{projectTemplateId}/unlinkworkflow": { - "post": { + "/projecttemplates/{projectTemplateId}/projectstatuses": { + "get": { "tags": [ - "Workflows" + "ProjectTemplates" ], - "summary": "Unlinks a workflow from a project template.", - "description": "Unlinks the workflow from the project template, cloning workflow statuses\r\n to local template-specific statuses. Custom fields and automations\r\n remain but become editable (no longer synced with workflow).\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateUnlinkWorkflowByProjectTemplateId", + "summary": "Retrieves all project statuses of a project template.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTemplateProjectStatusesByProjectTemplateId", "parameters": [ { "name": "projectTemplateId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project template to retrieve statuses for.", "required": true, "schema": { "type": "string", @@ -24750,17 +25789,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectTemplate" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectStatus" + } } } } @@ -24787,24 +25819,21 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } - } - }, - "/projecttemplates/{projectTemplateId}/updateprojectstatusorder": { + }, "post": { "tags": [ "ProjectTemplates" ], - "summary": "Updates the order of a project status within a project template.", + "summary": "Adds a project status to a project template.", "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateUpdateProjectStatusOrderByProjectTemplateId", + "operationId": "PostProjectTemplateProjectStatusesByProjectTemplateId", "parameters": [ { "name": "projectTemplateId", "in": "path", - "description": "The id of the project template to update the status order for.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -24813,19 +25842,26 @@ } ], "requestBody": { - "description": "The model to update the project template status order.", + "description": "The model to add the project status to the template.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateProjectStatusOrderForm" + "$ref": "#/components/schemas/ProjectStatusForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectStatus" + } + } + } }, "400": { "description": "Bad Request", @@ -24837,6 +25873,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -24864,19 +25910,19 @@ } } }, - "/projecttemplates/{projecttemplateId}/externalfiles": { + "/projecttemplates/{projectTemplateId}/setcustomfields": { "post": { "tags": [ - "ProjectTemplateFiles" + "CustomFields" ], - "summary": "Endpoint to batch create external files without uploading.", - "description": "Endpoint to create file infos with batch operation.\nCreated file infos don't have a version.\r\n\r\nAny authenticated user.", - "operationId": "CreateExternalFiles", + "summary": "Sets the custom fields for a project template.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateSetCustomFieldsByProjectTemplateId", "parameters": [ { - "name": "projecttemplateId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the projecttemplate.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -24885,73 +25931,19 @@ } ], "requestBody": { - "description": "List of file forms.", + "description": "The list of custom field values to set.", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - }, - "application/*+json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/CustomFieldPostForm" } } } - } + }, + "required": true }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/projecttemplates/{projecttemplateId}/files": { - "delete": { - "tags": [ - "ProjectTemplateFiles" - ], - "summary": "Deletes the files of the specified projecttemplate.", - "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", - "operationId": "DeleteProjectTemplateFiles", - "parameters": [ - { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], "responses": { "204": { "description": "No Content" @@ -24968,21 +25960,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } - }, + } + }, + "/projecttemplates/{projectTemplateId}/tags": { "get": { "tags": [ - "ProjectTemplateFiles" + "ProjectTemplateTags" ], - "summary": "Returns all files of the projecttemplate with the specified id.", - "description": "Returns all file metadata of the projecttemplate with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateFiles", + "summary": "Returns the tags of the project template with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", + "operationId": "GetProjectTemplateTagsByProjectTemplateId", "parameters": [ { - "name": "projecttemplateId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the projecttemplate.", + "description": "The id of the project template to get tags for.", "required": true, "schema": { "type": "string", @@ -25010,14 +26005,34 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/BaseTagModel" } } } } - } - }, - "security": [ + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ { "oauth2": [ "full_access" @@ -25028,21 +26043,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "read" } - }, - "post": { + } + }, + "/projecttemplates/{projectTemplateId}/taskbundle": { + "get": { "tags": [ - "ProjectTemplateFiles" + "ProjectTemplates" ], - "summary": "Creates a new projecttemplate file for the projecttemplate with the specified id..", - "description": "Uploads a new projecttemplate file for the projecttemplate with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateProjectTemplateFile", + "summary": "Retrieves the task bundle associated with a project template.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTemplateTaskBundleByProjectTemplateId", "parameters": [ { - "name": "projecttemplateId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the projecttemplate.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -25050,42 +26068,98 @@ } } ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskBundleResult" } - }, - "encoding": { - "File": { - "style": "form" + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projecttemplates/{projectTemplateId}/taskstatuses": { + "get": { + "tags": [ + "ProjectTemplates" + ], + "summary": "Returns all task statuses of the project template with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTemplateTaskStatusesByProjectTemplateId", + "parameters": [ + { + "name": "projectTemplateId", + "in": "path", + "description": "The id of the project template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskStatus" + } } } } }, - "400": { - "description": "Bad Request" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -25101,21 +26175,19 @@ "x-access": { "any": "true" } - } - }, - "/projecttemplates/{projecttemplateId}/files/byurl": { + }, "post": { "tags": [ - "ProjectTemplateFiles" + "ProjectTemplates" ], - "summary": "Uploads a new file by providing an url.", - "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", - "operationId": "CreateProjectTemplateFileByUrl", + "summary": "Creates a new task status for the specified project template.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateTaskStatusesByProjectTemplateId", "parameters": [ { - "name": "projecttemplateId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the projecttemplate the file is linked to.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -25124,19 +26196,15 @@ } ], "requestBody": { - "description": "The url, name and description of the file.", + "description": "The task Status form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" + "$ref": "#/components/schemas/TaskStatusForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -25144,7 +26212,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/TaskStatus" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -25161,23 +26249,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projecttemplates/{projecttemplateId}/files/{fileId}": { + "/projecttemplates/{projectTemplateId}/taskstatuses/{taskStatusId}": { "delete": { "tags": [ - "ProjectTemplateFiles" + "ProjectTemplates" ], - "summary": "Deletes the projecttemplate file with the specified id.", - "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", - "operationId": "DeleteProjectTemplateFile", + "summary": "Deletes the task status of the project template with the specified id.", + "description": "The last status of type 'todo' or 'done' cannot be deleted.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "DeleteProjectTemplateTaskStatusByProjectTemplateIdAndTaskStatusId", "parameters": [ { - "name": "projecttemplateId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the projecttemplate.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -25185,9 +26274,9 @@ } }, { - "name": "fileId", + "name": "taskStatusId", "in": "path", - "description": "The id of the file.", + "description": "The id of the task status.", "required": true, "schema": { "type": "string", @@ -25198,6 +26287,26 @@ "responses": { "204": { "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -25211,21 +26320,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } }, "get": { "tags": [ - "ProjectTemplate Files" + "ProjectTemplates" ], - "summary": "Returns the file with the specified id of the projecttemplate with the specified id.", + "summary": "Returns the task status of the project template with the specified id.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByProjectTemplateNameAndProjectTemplateIdAndFileId", + "operationId": "GetProjectTemplateTaskStatusByProjectTemplateIdAndTaskStatusId", "parameters": [ { - "name": "projecttemplateId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the projecttemplate.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -25233,9 +26343,9 @@ } }, { - "name": "fileId", + "name": "taskStatusId", "in": "path", - "description": "The id of the file.", + "description": "The id of the task status.", "required": true, "schema": { "type": "string", @@ -25249,17 +26359,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TaskStatus" } } } @@ -25291,16 +26391,16 @@ }, "put": { "tags": [ - "ProjectTemplateFiles" + "ProjectTemplates" ], - "summary": "Updates the metadata of the projecttemplate file with the specified id.", - "description": "Updates the metadata of the projecttemplate file with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "UpdateProjectTemplateFile", + "summary": "Updates a task status for the specified project template.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutProjectTemplateTaskStatusByProjectTemplateIdAndTaskStatusId", "parameters": [ { - "name": "projecttemplateId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the projecttemplate.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -25308,9 +26408,9 @@ } }, { - "name": "fileId", + "name": "taskStatusId", "in": "path", - "description": "The id of the file.", + "description": "The id of the task status to update.", "required": true, "schema": { "type": "string", @@ -25319,19 +26419,15 @@ } ], "requestBody": { - "description": "The model to update the file with the specified id.", + "description": "The model used to update the task status.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" + "$ref": "#/components/schemas/TaskStatusForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -25339,7 +26435,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/TaskStatus" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -25356,33 +26472,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/changeentity": { + "/projecttemplates/{projectTemplateId}/unlinkcustomfielddefinition": { "post": { "tags": [ - "ProjectTemplateFiles" + "CustomFields" ], - "summary": "Changes the projecttemplate this file belongs to.", - "description": "Changes the projecttemplate this file belongs to.\nSwitch to the specified projecttemplate or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", - "operationId": "ChangeProjectTemplate", + "summary": "Unlinks a custom field definition from the specified project template.", + "description": "When the definition is unlinked from a project template, all values of the custom field will be removed from the task templates within that project template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateUnlinkCustomFieldDefinitionByProjectTemplateId", "parameters": [ { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the file.", + "description": "The id of the project template to unlink the custom field definition from.", "required": true, "schema": { "type": "string", @@ -25391,27 +26498,36 @@ } ], "requestBody": { - "description": "The model to change the entity information of the file.", + "description": "The model used to unlink the custom field definition.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" + "$ref": "#/components/schemas/UnlinkCustomFieldDefinitionForm" } } - } + }, + "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -25428,33 +26544,92 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/copy": { + "/projecttemplates/{projectTemplateId}/unlinkworkflow": { "post": { "tags": [ - "ProjectTemplateFiles" + "Workflows" ], - "summary": "Copies the file to a new projecttemplate.", - "description": "Copies the file to a new projecttemplate (meta and content).\r\n\r\nAny authenticated user.", - "operationId": "CopyToProjectTemplate", + "summary": "Unlinks a workflow from a project template.", + "description": "Unlinks the workflow from the project template, cloning workflow statuses\r\n to local template-specific statuses. Custom fields and automations\r\n remain but become editable (no longer synced with workflow).\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateUnlinkWorkflowByProjectTemplateId", "parameters": [ { - "name": "projecttemplateId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the projecttemplate.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", "format": "uuid" } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectTemplate" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ { - "name": "fileId", + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/projecttemplates/{projectTemplateId}/updateprojectstatusorder": { + "post": { + "tags": [ + "ProjectTemplates" + ], + "summary": "Updates the order of a project status within a project template.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateUpdateProjectStatusOrderByProjectTemplateId", + "parameters": [ + { + "name": "projectTemplateId", "in": "path", - "description": "The id of the file.", + "description": "The id of the project template to update the status order for.", "required": true, "schema": { "type": "string", @@ -25463,27 +26638,36 @@ } ], "requestBody": { - "description": "The model to change the entity information of the file.", + "description": "The model to update the project template status order.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" + "$ref": "#/components/schemas/UpdateProjectStatusOrderForm" } } - } + }, + "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -25500,18 +26684,19 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/download": { - "get": { + "/projecttemplates/{projecttemplateId}/externalfiles": { + "post": { "tags": [ "ProjectTemplateFiles" ], - "summary": "Returns the content of the projecttemplate file with the specified id.", - "description": "Returns the content of the projecttemplate file. Uses the latest file version.\nIf the projecttemplate file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateFileContent", + "summary": "Endpoint to batch create external files without uploading.", + "description": "Endpoint to create file infos with batch operation.\nCreated file infos don't have a version.\r\n\r\nAny authenticated user.", + "operationId": "CreateExternalFiles", "parameters": [ { "name": "projecttemplateId", @@ -25522,119 +26707,36 @@ "type": "string", "format": "uuid" } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "width", - "in": "query", - "description": "Set width to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "height", - "in": "query", - "description": "Set height to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "crop", - "in": "query", - "description": "Whether to crop the image when resizing it.", - "schema": { - "type": "boolean" - } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" + "requestBody": { + "description": "List of file forms.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" + } + } + }, + "application/*+json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" } } } } }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/pdf": { - "get": { - "tags": [ - "ProjectTemplateFiles" - ], - "summary": "Returns the content of the file with the specified id as pdf.\ntype or conversion not possible.", - "description": "Returns the content of the projecttemplate file. Uses the latest file version.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateFileContent", - "parameters": [ - { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "inline", - "in": "query", - "description": "If inline is false, content-disposition header is attachment.", - "schema": { - "type": "boolean", - "default": false - } - } - ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/FileInfo" } } } @@ -25655,14 +26757,14 @@ } } }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/shareurl": { - "get": { + "/projecttemplates/{projecttemplateId}/files": { + "delete": { "tags": [ "ProjectTemplateFiles" ], - "summary": "Returns an url to share the file.", - "description": "Returns a url to share the file.\r\n\r\nAny authenticated user.", - "operationId": "GetPublicToken", + "summary": "Deletes the files of the specified projecttemplate.", + "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", + "operationId": "DeleteProjectTemplateFiles", "parameters": [ { "name": "projecttemplateId", @@ -25673,28 +26775,11 @@ "type": "string", "format": "uuid" } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -25710,16 +26795,14 @@ "x-access": { "any": "true" } - } - }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/versions": { + }, "get": { "tags": [ "ProjectTemplateFiles" ], - "summary": "Returns all file versions of the specified projecttemplate file.", - "description": "Returns all file versions of the specified projecttemplate file.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateFileVersions", + "summary": "Returns all files of the projecttemplate with the specified id.", + "description": "Returns all file metadata of the projecttemplate with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTemplateFiles", "parameters": [ { "name": "projecttemplateId", @@ -25731,16 +26814,6 @@ "format": "uuid" } }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, { "$ref": "#/components/parameters/page" }, @@ -25762,7 +26835,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/FileInfo" } } } @@ -25787,9 +26860,9 @@ "tags": [ "ProjectTemplateFiles" ], - "summary": "Uploads a new version of the projecttemplate file with the specified id.", - "description": "Uploads a new version of an projecttemplate file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateProjectTemplateFileVersion", + "summary": "Creates a new projecttemplate file for the projecttemplate with the specified id..", + "description": "Uploads a new projecttemplate file for the projecttemplate with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", + "operationId": "CreateProjectTemplateFile", "parameters": [ { "name": "projecttemplateId", @@ -25800,16 +26873,6 @@ "type": "string", "format": "uuid" } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "requestBody": { @@ -25841,7 +26904,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/FileInfo" } } } @@ -25865,39 +26928,19 @@ } } }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/versions/{versionId}": { - "get": { + "/projecttemplates/{projecttemplateId}/files/byurl": { + "post": { "tags": [ - "ProjectTemplate Files" + "ProjectTemplateFiles" ], - "summary": "Returns the projecttemplate file version with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByProjectTemplateNameAndProjectTemplateIdAndFileIdAndVersionId", + "summary": "Uploads a new file by providing an url.", + "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", + "operationId": "CreateProjectTemplateFileByUrl", "parameters": [ { "name": "projecttemplateId", "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", + "description": "The id of the projecttemplate the file is linked to.", "required": true, "schema": { "type": "string", @@ -25905,33 +26948,28 @@ } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileVersion" - } + "requestBody": { + "description": "The url, name and description of the file.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FilePostForm" } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FilePostForm" } } - }, - "404": { - "description": "Not Found", + } + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -25952,14 +26990,14 @@ } } }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/versions/{versionId}/download": { - "get": { + "/projecttemplates/{projecttemplateId}/files/{fileId}": { + "delete": { "tags": [ "ProjectTemplateFiles" ], - "summary": "Returns the content of the projecttemplate file version with the specified id.", - "description": "Returns the content of the projecttemplate file version with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateFileVersionContent", + "summary": "Deletes the projecttemplate file with the specified id.", + "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", + "operationId": "DeleteProjectTemplateFile", "parameters": [ { "name": "projecttemplateId", @@ -25980,29 +27018,11 @@ "type": "string", "format": "uuid" } - }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -26018,90 +27038,49 @@ "x-access": { "any": "true" } - } - }, - "/projecttimebookings": { + }, "get": { "tags": [ - "TimeBookings" + "ProjectTemplate Files" ], - "summary": "Returns a list of time bookings.", + "summary": "Returns the file with the specified id of the projecttemplate with the specified id.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTimeBookings", + "operationId": "GetFilesByProjectTemplateNameAndProjectTemplateIdAndFileId", "parameters": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" + "name": "projecttemplateId", + "in": "path", + "description": "The id of the projecttemplate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TimeBooking" - } - } - } + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "TimeBookings" ], - "summary": "Creates a new time booking for a given project and user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostProjectTimeBooking", - "requestBody": { - "description": "The model to create the time booking.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeBookingForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeBooking" + "$ref": "#/components/schemas/FileInfo" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -26110,8 +27089,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -26134,21 +27113,29 @@ "x-access": { "any": "true" } - } - }, - "/projecttimebookings/{timeBookingId}": { - "delete": { + }, + "put": { "tags": [ - "TimeBookings" + "ProjectTemplateFiles" ], - "summary": "Deletes a time booking by id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "DeleteProjectTimeBooking", + "summary": "Updates the metadata of the projecttemplate file with the specified id.", + "description": "Updates the metadata of the projecttemplate file with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "UpdateProjectTemplateFile", "parameters": [ { - "name": "timeBookingId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the time booking to delete.", + "description": "The id of the projecttemplate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -26156,26 +27143,28 @@ } } ], - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "requestBody": { + "description": "The model to update the file with the specified id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfoUpdateForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileInfoUpdateForm" } } - }, - "401": { - "description": "Unauthorized", + } + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -26194,19 +27183,31 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projecttemplates/{projecttemplateId}/files/{fileId}/changeentity": { + "post": { "tags": [ - "TimeBookings" + "ProjectTemplateFiles" ], - "summary": "Updates a given time booking.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PutProjectTimeBooking", + "summary": "Changes the projecttemplate this file belongs to.", + "description": "Changes the projecttemplate this file belongs to.\nSwitch to the specified projecttemplate or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", + "operationId": "ChangeProjectTemplate", "parameters": [ { - "name": "timeBookingId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the time booking.", + "description": "The id of the projecttemplate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -26215,15 +27216,19 @@ } ], "requestBody": { - "description": "The model to update the time booking.", + "description": "The model to change the entity information of the file.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeBookingForm" + "$ref": "#/components/schemas/FileEntityForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileEntityForm" } } - }, - "required": true + } }, "responses": { "200": { @@ -26231,27 +27236,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeBooking" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -26272,47 +27257,58 @@ } } }, - "/projecttypes": { - "get": { + "/projecttemplates/{projecttemplateId}/files/{fileId}/copy": { + "post": { "tags": [ - "ProjectTypes" + "ProjectTemplateFiles" ], - "summary": "Returns all existing project types.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTypes", + "summary": "Copies the file to a new projecttemplate.", + "description": "Copies the file to a new projecttemplate (meta and content).\r\n\r\nAny authenticated user.", + "operationId": "CopyToProjectTemplate", "parameters": [ { - "name": "showArchived", - "in": "query", - "description": "Whether to include archived project types in the results. Default is false.", + "name": "projecttemplateId", + "in": "path", + "description": "The id of the projecttemplate.", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], + "requestBody": { + "description": "The model to change the entity information of the file.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileCopyForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileCopyForm" + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectType" - } + "$ref": "#/components/schemas/FileInfo" } } } @@ -26331,31 +27327,72 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/projecttemplates/{projecttemplateId}/files/{fileId}/download": { + "get": { "tags": [ - "ProjectTypes" + "ProjectTemplateFiles" ], - "summary": "Creates a new project type.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectType", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectTypeForm" - } + "summary": "Returns the content of the projecttemplate file with the specified id.", + "description": "Returns the content of the projecttemplate file. Uses the latest file version.\nIf the projecttemplate file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTemplateFileContent", + "parameters": [ + { + "name": "projecttemplateId", + "in": "path", + "description": "The id of the projecttemplate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "width", + "in": "query", + "description": "Set width to resize.", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "height", + "in": "query", + "description": "Set height to resize.", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "crop", + "in": "query", + "description": "Whether to crop the image when resizing it.", + "schema": { + "type": "boolean" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectType" + "type": "string", + "format": "binary" } } } @@ -26372,29 +27409,57 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttypes/icons": { + "/projecttemplates/{projecttemplateId}/files/{fileId}/pdf": { "get": { "tags": [ - "ProjectTypes" + "ProjectTemplateFiles" + ], + "summary": "Returns the content of the file with the specified id as pdf.\ntype or conversion not possible.", + "description": "Returns the content of the projecttemplate file. Uses the latest file version.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTemplateFileContent", + "parameters": [ + { + "name": "projecttemplateId", + "in": "path", + "description": "The id of the projecttemplate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "inline", + "in": "query", + "description": "If inline is false, content-disposition header is attachment.", + "schema": { + "type": "boolean", + "default": false + } + } ], - "summary": "Retrieves all available project type icons.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTypesIcons", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string", + "format": "binary" } } } @@ -26415,19 +27480,29 @@ } } }, - "/projecttypes/{projectTypeId}": { + "/projecttemplates/{projecttemplateId}/files/{fileId}/shareurl": { "get": { "tags": [ - "ProjectTypes" + "ProjectTemplateFiles" ], - "summary": "Retrieves a project type by its ID.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTypeById", + "summary": "Returns an url to share the file.", + "description": "Returns a url to share the file.\r\n\r\nAny authenticated user.", + "operationId": "GetPublicToken", "parameters": [ { - "name": "projectTypeId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the project type.", + "description": "The id of the projecttemplate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -26441,17 +27516,79 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectType" + "type": "string" } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projecttemplates/{projecttemplateId}/files/{fileId}/versions": { + "get": { + "tags": [ + "ProjectTemplateFiles" + ], + "summary": "Returns all file versions of the specified projecttemplate file.", + "description": "Returns all file versions of the specified projecttemplate file.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTemplateFileVersions", + "parameters": [ + { + "name": "projecttemplateId", + "in": "path", + "description": "The id of the projecttemplate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, - "404": { - "description": "Not Found", + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileVersion" + } } } } @@ -26471,18 +27608,28 @@ "any": "true" } }, - "put": { + "post": { "tags": [ - "ProjectTypes" + "ProjectTemplateFiles" ], - "summary": "Updates an existing project type.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutProjectTypeById", + "summary": "Uploads a new version of the projecttemplate file with the specified id.", + "description": "Uploads a new version of an projecttemplate file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", + "operationId": "CreateProjectTemplateFileVersion", "parameters": [ { - "name": "projectTypeId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the project type.", + "description": "The id of the projecttemplate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -26491,15 +27638,27 @@ } ], "requestBody": { - "description": "The model to update the project type.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/ProjectTypeForm" + "required": [ + "File" + ], + "type": "object", + "properties": { + "File": { + "type": "string", + "format": "binary" + } + } + }, + "encoding": { + "File": { + "style": "form" + } } } - }, - "required": true + } }, "responses": { "200": { @@ -26507,30 +27666,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectType" + "$ref": "#/components/schemas/FileVersion" } } } }, "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "description": "Bad Request" } }, "security": [ @@ -26544,24 +27686,43 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttypes/{projectTypeId}/delete": { - "post": { + "/projecttemplates/{projecttemplateId}/files/{fileId}/versions/{versionId}": { + "get": { "tags": [ - "ProjectTypes" + "ProjectTemplate Files" ], - "summary": "Deletes a project type and reassigns related projects and templates.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTypeDeleteByProjectTypeId", + "summary": "Returns the projecttemplate file version with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByProjectTemplateNameAndProjectTemplateIdAndFileIdAndVersionId", "parameters": [ { - "name": "projectTypeId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the project type.", + "description": "The id of the projecttemplate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "versionId", + "in": "path", + "description": "The id of the file version.", "required": true, "schema": { "type": "string", @@ -26569,23 +27730,19 @@ } } ], - "requestBody": { - "description": "The model to delete the project type.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteProjectTypeForm" + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileVersion" + } } } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -26616,48 +27773,58 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttypes/{projectTypeId}/setarchived": { - "post": { + "/projecttemplates/{projecttemplateId}/files/{fileId}/versions/{versionId}/download": { + "get": { "tags": [ - "ProjectTypes" + "ProjectTemplateFiles" ], - "summary": "Archives or unarchives the project type with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTypeSetArchivedByProjectTypeId", + "summary": "Returns the content of the projecttemplate file version with the specified id.", + "description": "Returns the content of the projecttemplate file version with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTemplateFileVersionContent", "parameters": [ { - "name": "projectTypeId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the project type.", + "description": "The id of the projecttemplate.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArchivedForm" - } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "versionId", + "in": "path", + "description": "The id of the file version.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectType" + "type": "string", + "format": "binary" } } } @@ -26674,28 +27841,30 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/roles": { + "/projecttimebookings": { "get": { "tags": [ - "Roles" + "TimeBookings" ], - "summary": "Returns all roles of the workspace.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetRoles", + "summary": "Returns a list of time bookings.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTimeBookings", "parameters": [ { - "name": "showArchived", - "in": "query", - "description": "Whether to show archived roles.", - "schema": { - "type": "boolean", - "default": false - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -26706,7 +27875,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Role" + "$ref": "#/components/schemas/TimeBooking" } } } @@ -26724,23 +27893,22 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "read" + "any": "true" } }, "post": { "tags": [ - "Roles" + "TimeBookings" ], - "summary": "Creates a new role with specified permissions.", - "description": "\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostRole", + "summary": "Creates a new time booking for a given project and user.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostProjectTimeBooking", "requestBody": { - "description": "The role form payload.", + "description": "The model to create the time booking.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RoleForm" + "$ref": "#/components/schemas/TimeBookingForm" } } }, @@ -26752,7 +27920,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Role" + "$ref": "#/components/schemas/TimeBooking" } } } @@ -26766,6 +27934,16 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -26779,36 +27957,109 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" - }, - "x-subscriptionlevel": { - "minimumPlan": "standard" + "any": "true" } } }, - "/roles/moveuser": { - "post": { + "/projecttimebookings/{timeBookingId}": { + "delete": { "tags": [ - "Roles" + "TimeBookings" ], - "summary": "Moves a user from their current role to another role.", - "description": "Moves a user from their current role to another role.\r\n At least one user needs to remain in the admin role.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostRolesMoveUser", - "requestBody": { - "description": "The move user in role payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MoveUserInRole" - } - } - }, - "required": true - }, + "summary": "Deletes a time booking by id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteProjectTimeBooking", + "parameters": [ + { + "name": "timeBookingId", + "in": "path", + "description": "The id of the time booking to delete.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "TimeBookings" + ], + "summary": "Updates a given time booking.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PutProjectTimeBooking", + "parameters": [ + { + "name": "timeBookingId", + "in": "path", + "description": "The id of the time booking.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model to update the time booking.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TimeBookingForm" + } + } + }, + "required": true + }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TimeBooking" + } + } + } }, "400": { "description": "Bad Request", @@ -26820,8 +28071,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -26842,20 +28093,28 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } } }, - "/roles/users": { + "/projecttypes": { "get": { "tags": [ - "Roles" + "ProjectTypes" ], - "summary": "Returns all users in roles of the workspace.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetRolesUsers", + "summary": "Returns all existing project types.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTypes", "parameters": [ + { + "name": "showArchived", + "in": "query", + "description": "Whether to include archived project types in the results. Default is false.", + "schema": { + "type": "boolean", + "default": false + } + }, { "$ref": "#/components/parameters/page" }, @@ -26867,16 +28126,6 @@ }, { "$ref": "#/components/parameters/filterby" - }, - { - "name": "aw-internal-request", - "in": "header", - "description": "Marks this request as an internal request. Only allowed by the awork app or internally.", - "required": true, - "schema": { - "type": "string", - "default": "true" - } } ], "responses": { @@ -26887,7 +28136,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/UserInRole" + "$ref": "#/components/schemas/ProjectType" } } } @@ -26904,26 +28153,106 @@ "x-api-versions": [ "v1" ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "ProjectTypes" + ], + "summary": "Creates a new project type.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectType", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectTypeForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectType" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], "x-access": { "admin": "true", - "workspace-manage-config": "read" + "project-manage-config": "write" + } + } + }, + "/projecttypes/icons": { + "get": { + "tags": [ + "ProjectTypes" + ], + "summary": "Retrieves all available project type icons.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTypesIcons", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } }, - "x-internal": true + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } } }, - "/roles/{roleId}": { + "/projecttypes/{projectTypeId}": { "get": { "tags": [ - "Roles" + "ProjectTypes" ], - "summary": "Returns the role with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetRoleById", + "summary": "Retrieves a project type by its ID.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTypeById", "parameters": [ { - "name": "roleId", + "name": "projectTypeId", "in": "path", - "description": "The id of the role.", + "description": "The id of the project type.", "required": true, "schema": { "type": "string", @@ -26937,7 +28266,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Role" + "$ref": "#/components/schemas/ProjectType" } } } @@ -26964,22 +28293,21 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "read" + "any": "true" } }, "put": { "tags": [ - "Roles" + "ProjectTypes" ], - "summary": "Updates the role with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PutRoleById", + "summary": "Updates an existing project type.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutProjectTypeById", "parameters": [ { - "name": "roleId", + "name": "projectTypeId", "in": "path", - "description": "The id of the role.", + "description": "The id of the project type.", "required": true, "schema": { "type": "string", @@ -26988,11 +28316,11 @@ } ], "requestBody": { - "description": "The role form payload.", + "description": "The model to update the project type.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RoleForm" + "$ref": "#/components/schemas/ProjectTypeForm" } } }, @@ -27004,7 +28332,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Role" + "$ref": "#/components/schemas/ProjectType" } } } @@ -27042,23 +28370,23 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "write" + "project-manage-config": "write" } } }, - "/roles/{roleId}/adduser": { + "/projecttypes/{projectTypeId}/delete": { "post": { "tags": [ - "Roles" + "ProjectTypes" ], - "summary": "Adds the user to the role with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostRoleAddUserByRoleId", + "summary": "Deletes a project type and reassigns related projects and templates.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTypeDeleteByProjectTypeId", "parameters": [ { - "name": "roleId", + "name": "projectTypeId", "in": "path", - "description": "The id of the role.", + "description": "The id of the project type.", "required": true, "schema": { "type": "string", @@ -27067,19 +28395,19 @@ } ], "requestBody": { - "description": "The user in role form payload.", + "description": "The model to delete the project type.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserInRoleForm" + "$ref": "#/components/schemas/DeleteProjectTypeForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK" + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -27100,13 +28428,61 @@ } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/projecttypes/{projectTypeId}/setarchived": { + "post": { + "tags": [ + "ProjectTypes" + ], + "summary": "Archives or unarchives the project type with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTypeSetArchivedByProjectTypeId", + "parameters": [ + { + "name": "projectTypeId", + "in": "path", + "description": "The id of the project type.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ArchivedForm" + } + } }, - "500": { - "description": "Internal Server Error", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectType" } } } @@ -27124,27 +28500,26 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "write" + "project-manage-config": "write" } } }, - "/roles/{roleId}/deactivatedmenuitems": { + "/roles": { "get": { "tags": [ "Roles" ], - "summary": "Returns all deactivated menu items for the specified role.", + "summary": "Returns all roles of the workspace.", "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetRoleDeactivatedMenuItemsByRoleId", + "operationId": "GetRoles", "parameters": [ { - "name": "roleId", - "in": "path", - "description": "The id of the role.", - "required": true, + "name": "showArchived", + "in": "query", + "description": "Whether to show archived roles.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } } ], @@ -27156,21 +28531,8 @@ "schema": { "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/Role" } - }, - "example": [ - "https://www.awork.com" - ] - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" } } } @@ -27195,51 +28557,33 @@ "tags": [ "Roles" ], - "summary": "Creates or updates the deactivated menu items for the specified role.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostRoleDeactivatedMenuItemsByRoleId", - "parameters": [ - { - "name": "roleId", - "in": "path", - "description": "The id of the role.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], + "summary": "Creates a new role with specified permissions.", + "description": "\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostRole", "requestBody": { - "description": "The list of menu item keys.", + "description": "The role form payload.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/RoleForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Role" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -27262,43 +28606,34 @@ "x-access": { "admin": "true", "workspace-manage-config": "write" + }, + "x-subscriptionlevel": { + "minimumPlan": "standard" } } }, - "/roles/{roleId}/delete": { + "/roles/moveuser": { "post": { "tags": [ "Roles" ], - "summary": "Deletes the role with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostRoleDeleteByRoleId", - "parameters": [ - { - "name": "roleId", - "in": "path", - "description": "The id of the role.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], + "summary": "Moves a user from their current role to another role.", + "description": "Moves a user from their current role to another role.\r\n At least one user needs to remain in the admin role.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostRolesMoveUser", "requestBody": { - "description": "The delete role form payload.", + "description": "The move user in role payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteRoleForm" + "$ref": "#/components/schemas/MoveUserInRole" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK" }, "400": { "description": "Bad Request", @@ -27319,16 +28654,6 @@ } } } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -27347,25 +28672,15 @@ } } }, - "/roles/{roleId}/permissions": { + "/roles/users": { "get": { "tags": [ "Roles" ], - "summary": "Returns all permissions of the specified role.", + "summary": "Returns all users in roles of the workspace.", "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetRolePermissionsByRoleId", + "operationId": "GetRolesUsers", "parameters": [ - { - "name": "roleId", - "in": "path", - "description": "The id of the role.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, { "$ref": "#/components/parameters/page" }, @@ -27377,6 +28692,16 @@ }, { "$ref": "#/components/parameters/filterby" + }, + { + "name": "aw-internal-request", + "in": "header", + "description": "Marks this request as an internal request. Only allowed by the awork app or internally.", + "required": true, + "schema": { + "type": "string", + "default": "true" + } } ], "responses": { @@ -27387,21 +28712,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/PermissionOfGlobalRole" + "$ref": "#/components/schemas/UserInRole" } } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -27417,15 +28732,18 @@ "x-access": { "admin": "true", "workspace-manage-config": "read" - } - }, - "post": { + }, + "x-internal": true + } + }, + "/roles/{roleId}": { + "get": { "tags": [ "Roles" ], - "summary": "Creates, updates or deletes a permission of the specified role.", - "description": "Creates, updates or deletes a permission of the role.\r\n If the permission already exist, and the 'AccessLevels' property of the model is not empty,\r\n the permission will be updated. If the 'AccessLevels' property of the model is empty,\r\n the permission will be deleted.\r\n The permission will be created if it does not exist.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostRolePermissionsByRoleId", + "summary": "Returns the role with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "operationId": "GetRoleById", "parameters": [ { "name": "roleId", @@ -27438,31 +28756,84 @@ } } ], - "requestBody": { - "description": "The permission of role form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PermissionOfRoleForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PermissionOfProjectRole" + "$ref": "#/components/schemas/Role" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "workspace-manage-config": "read" + } + }, + "put": { + "tags": [ + "Roles" + ], + "summary": "Updates the role with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PutRoleById", + "parameters": [ + { + "name": "roleId", + "in": "path", + "description": "The id of the role.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The role form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Role" } } } }, - "204": { - "description": "No Content" - }, "400": { "description": "Bad Request", "content": { @@ -27473,8 +28844,8 @@ } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -27496,18 +28867,18 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "workspace-manage-config": "write" } } }, - "/roles/{roleId}/setarchived": { + "/roles/{roleId}/adduser": { "post": { "tags": [ "Roles" ], - "summary": "Archives or unarchives the role with the specified id.", - "description": "Archives or unarchives the role with the specified id.\r\n An archived role still exists for all users currently using it,\r\n but users can no longer be assigned to this role.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostRoleSetArchivedByRoleId", + "summary": "Adds the user to the role with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostRoleAddUserByRoleId", "parameters": [ { "name": "roleId", @@ -27521,11 +28892,11 @@ } ], "requestBody": { - "description": "The archived form payload.", + "description": "The user in role form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ArchivedForm" + "$ref": "#/components/schemas/UserInRoleForm" } } }, @@ -27533,17 +28904,20 @@ }, "responses": { "200": { - "description": "OK", + "description": "OK" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Role" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -27552,8 +28926,8 @@ } } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { @@ -27575,18 +28949,18 @@ ], "x-access": { "admin": "true", - "task-manage-config": "write" + "workspace-manage-config": "write" } } }, - "/roles/{roleId}/users": { + "/roles/{roleId}/deactivatedmenuitems": { "get": { "tags": [ "Roles" ], - "summary": "Returns all users of the specified role.", + "summary": "Returns all deactivated menu items for the specified role.", "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetRoleUsersByRoleId", + "operationId": "GetRoleDeactivatedMenuItemsByRoleId", "parameters": [ { "name": "roleId", @@ -27597,27 +28971,6 @@ "type": "string", "format": "uuid" } - }, - { - "name": "showArchived", - "in": "query", - "description": "Whether to show archived users.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -27628,14 +28981,17 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/UserInRole" + "type": "string" } - } + }, + "example": [ + "https://www.awork.com" + ] } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -27659,16 +29015,14 @@ "admin": "true", "workspace-manage-config": "read" } - } - }, - "/roles/{roleId}/users/{userId}/activate": { + }, "post": { "tags": [ "Roles" ], - "summary": "Activates the user with the specified id.", + "summary": "Creates or updates the deactivated menu items for the specified role.", "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostRoleUserActivateByRoleIdAndUserId", + "operationId": "PostRoleDeactivatedMenuItemsByRoleId", "parameters": [ { "name": "roleId", @@ -27679,24 +29033,28 @@ "type": "string", "format": "uuid" } - }, - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], + "requestBody": { + "description": "The list of menu item keys.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "OK" + "204": { + "description": "No Content" }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -27705,8 +29063,8 @@ } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -27732,14 +29090,14 @@ } } }, - "/roles/{roleId}/users/{userId}/deactivate": { + "/roles/{roleId}/delete": { "post": { "tags": [ "Roles" ], - "summary": "Deactivates the user with the specified id.", + "summary": "Deletes the role with the specified id.", "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostRoleUserDeactivateByRoleIdAndUserId", + "operationId": "PostRoleDeleteByRoleId", "parameters": [ { "name": "roleId", @@ -27750,21 +29108,32 @@ "type": "string", "format": "uuid" } - }, - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], + "requestBody": { + "description": "The delete role form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteRoleForm" + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "OK" + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, "404": { "description": "Not Found", @@ -27803,23 +29172,36 @@ } } }, - "/roles/{roleName}": { + "/roles/{roleId}/permissions": { "get": { "tags": [ "Roles" ], - "summary": "Returns the role with the specified name.", + "summary": "Returns all permissions of the specified role.", "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetRoleByRoleName", + "operationId": "GetRolePermissionsByRoleId", "parameters": [ { - "name": "roleName", + "name": "roleId", "in": "path", - "description": "The name of the role.", + "description": "The id of the role.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -27828,13 +29210,16 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Role" + "type": "array", + "items": { + "$ref": "#/components/schemas/PermissionOfGlobalRole" + } } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -27858,62 +29243,51 @@ "admin": "true", "workspace-manage-config": "read" } - } - }, - "/search": { - "get": { + }, + "post": { "tags": [ - "Search" + "Roles" ], - "summary": "Performs a full-text search across workspace entities.", - "description": "This endpoint enables powerful full-text search capabilities across multiple types.\r\n It returns a ranked list of matching entities based on relevance and respects user permissions.\r\n \r\n The search functionality includes:\r\n - Cross-entity search across various entity types in the workspace.\r\n - Relevance-based scoring and ranking of results.\r\n - Respecting user access permissions for all returned results.\r\n - Customizable result filtering by entity type and status.\r\n\r\nAny authenticated user.", - "operationId": "GetSearch", + "summary": "Creates, updates or deletes a permission of the specified role.", + "description": "Creates, updates or deletes a permission of the role.\r\n If the permission already exist, and the 'AccessLevels' property of the model is not empty,\r\n the permission will be updated. If the 'AccessLevels' property of the model is empty,\r\n the permission will be deleted.\r\n The permission will be created if it does not exist.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostRolePermissionsByRoleId", "parameters": [ { - "name": "searchTerm", - "in": "query", - "description": "The term to search for. Max. 50 characters. Required.", - "schema": { - "type": "string" - } - }, - { - "name": "searchTypes", - "in": "query", - "description": "Comma-separated list of types to search for, or 'all'. Supported types: task, project, user, company, comment, timeentry, timereport, file, document, tasklist, dashboardnote.", - "schema": { - "type": "string" - } - }, - { - "name": "top", - "in": "query", - "description": "Count of top results. Default: 20.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "includeClosedAndStuck", - "in": "query", - "description": "If true, the result will include entities where the status is closed, stuck and done.", + "name": "roleId", + "in": "path", + "description": "The id of the role.", + "required": true, "schema": { - "type": "boolean" + "type": "string", + "format": "uuid" } } ], + "requestBody": { + "description": "The permission of role form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PermissionOfRoleForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchResults" + "$ref": "#/components/schemas/PermissionOfProjectRole" } } } }, + "204": { + "description": "No Content" + }, "400": { "description": "Bad Request", "content": { @@ -27924,8 +29298,8 @@ } } }, - "401": { - "description": "Unauthorized", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { @@ -27946,32 +29320,52 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/sharedfiles": { - "get": { + "/roles/{roleId}/setarchived": { + "post": { "tags": [ - "SharedFiles" + "Roles" ], - "summary": "Returns a shared file.", - "description": "Returns the shared file for the provided token.\r\n\r\nAllows unauthenticated access.", - "operationId": "GetSharedFiles", + "summary": "Archives or unarchives the role with the specified id.", + "description": "Archives or unarchives the role with the specified id.\r\n An archived role still exists for all users currently using it,\r\n but users can no longer be assigned to this role.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostRoleSetArchivedByRoleId", "parameters": [ { - "name": "token", - "in": "query", - "description": "The token to allow access.", + "name": "roleId", + "in": "path", + "description": "The id of the role.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], + "requestBody": { + "description": "The archived form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ArchivedForm" + } + } + }, + "required": true + }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Role" + } + } + } }, "400": { "description": "Bad Request", @@ -28005,19 +29399,39 @@ "v1" ], "x-access": { - "anonymous": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/taskbundles": { + "/roles/{roleId}/users": { "get": { "tags": [ - "TaskBundles" + "Roles" ], - "summary": "Lists task bundles.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTaskBundles", + "summary": "Returns all users of the specified role.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "operationId": "GetRoleUsersByRoleId", "parameters": [ + { + "name": "roleId", + "in": "path", + "description": "The id of the role.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "showArchived", + "in": "query", + "description": "Whether to show archived users.", + "schema": { + "type": "boolean", + "default": false + } + }, { "$ref": "#/components/parameters/page" }, @@ -28039,58 +29453,14 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TaskBundle" + "$ref": "#/components/schemas/UserInRole" } } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "TaskBundles" - ], - "summary": "Creates a task bundle.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundle", - "requestBody": { - "description": "The task bundle form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskBundleForm" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskBundle" - } - } - } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -28112,23 +29482,33 @@ ], "x-access": { "admin": "true", - "task-manage-config": "write" + "workspace-manage-config": "read" } } }, - "/taskbundles/fromproject/{projectId}": { + "/roles/{roleId}/users/{userId}/activate": { "post": { "tags": [ - "TaskBundles" + "Roles" ], - "summary": "Creates a task bundle from a project.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundlesFromProjectByProjectId", + "summary": "Activates the user with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostRoleUserActivateByRoleIdAndUserId", "parameters": [ { - "name": "projectId", + "name": "roleId", "in": "path", - "description": "The id of the project.", + "description": "The id of the role.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -28136,30 +29516,22 @@ } } ], - "requestBody": { - "description": "The model to create a task bundle from a project.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateTaskBundleFromProjectForm" - } - } - }, - "required": true - }, "responses": { "200": { - "description": "OK", + "description": "OK" + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskBundle" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { @@ -28181,19 +29553,472 @@ ], "x-access": { "admin": "true", - "task-manage-config": "write" + "workspace-manage-config": "write" } } }, - "/taskbundles/fromtasklist/{taskListId}": { + "/roles/{roleId}/users/{userId}/deactivate": { "post": { "tags": [ - "TaskBundles" + "Roles" ], - "summary": "Creates a task bundle from a task list.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundlesFromTaskListByTaskListId", - "parameters": [ + "summary": "Deactivates the user with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostRoleUserDeactivateByRoleIdAndUserId", + "parameters": [ + { + "name": "roleId", + "in": "path", + "description": "The id of the role.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "description": "The id of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "workspace-manage-config": "write" + } + } + }, + "/roles/{roleName}": { + "get": { + "tags": [ + "Roles" + ], + "summary": "Returns the role with the specified name.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "operationId": "GetRoleByRoleName", + "parameters": [ + { + "name": "roleName", + "in": "path", + "description": "The name of the role.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Role" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "workspace-manage-config": "read" + } + } + }, + "/search": { + "get": { + "tags": [ + "Search" + ], + "summary": "Performs a full-text search across workspace entities.", + "description": "This endpoint enables powerful full-text search capabilities across multiple types.\r\n It returns a ranked list of matching entities based on relevance and respects user permissions.\r\n \r\n The search functionality includes:\r\n - Cross-entity search across various entity types in the workspace.\r\n - Relevance-based scoring and ranking of results.\r\n - Respecting user access permissions for all returned results.\r\n - Customizable result filtering by entity type and status.\r\n\r\nAny authenticated user.", + "operationId": "GetSearch", + "parameters": [ + { + "name": "searchTerm", + "in": "query", + "description": "The term to search for. Max. 50 characters. Required.", + "schema": { + "type": "string" + } + }, + { + "name": "searchTypes", + "in": "query", + "description": "Comma-separated list of types to search for, or 'all'. Supported types: task, project, user, company, comment, timeentry, timereport, file, document, tasklist, dashboardnote.", + "schema": { + "type": "string" + } + }, + { + "name": "top", + "in": "query", + "description": "Count of top results. Default: 20.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "includeClosedAndStuck", + "in": "query", + "description": "If true, the result will include entities where the status is closed, stuck and done.", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchResults" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/sharedfiles": { + "get": { + "tags": [ + "SharedFiles" + ], + "summary": "Returns a shared file.", + "description": "Returns the shared file for the provided token.\r\n\r\nAllows unauthenticated access.", + "operationId": "GetSharedFiles", + "parameters": [ + { + "name": "token", + "in": "query", + "description": "The token to allow access.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "anonymous": "true" + } + } + }, + "/taskbundles": { + "get": { + "tags": [ + "TaskBundles" + ], + "summary": "Lists task bundles.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTaskBundles", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskBundle" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "TaskBundles" + ], + "summary": "Creates a task bundle.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundle", + "requestBody": { + "description": "The task bundle form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskBundleForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskBundle" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "task-manage-config": "write" + } + } + }, + "/taskbundles/fromproject/{projectId}": { + "post": { + "tags": [ + "TaskBundles" + ], + "summary": "Creates a task bundle from a project.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundlesFromProjectByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model to create a task bundle from a project.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTaskBundleFromProjectForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskBundle" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "task-manage-config": "write" + } + } + }, + "/taskbundles/fromtasklist/{taskListId}": { + "post": { + "tags": [ + "TaskBundles" + ], + "summary": "Creates a task bundle from a task list.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundlesFromTaskListByTaskListId", + "parameters": [ { "name": "taskListId", "in": "path", @@ -48106,298 +49931,7770 @@ "format": "uuid" } }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FileVersion" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "WorkspaceFiles" + ], + "summary": "Uploads a new version of the workspace file with the specified id.", + "description": "Uploads a new version of an workspace file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", + "operationId": "CreateWorkspaceFileVersion", + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "description": "The id of the workspace.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "required": [ + "File" + ], + "type": "object", + "properties": { + "File": { + "type": "string", + "format": "binary" + } + } + }, + "encoding": { + "File": { + "style": "form" + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileVersion" + } + } + } + }, + "400": { + "description": "Bad Request" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/workspaces/{workspaceId}/files/{fileId}/versions/{versionId}": { + "get": { + "tags": [ + "Workspace Files" + ], + "summary": "Returns the workspace file version with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByWorkspaceNameAndWorkspaceIdAndFileIdAndVersionId", + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "description": "The id of the workspace.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "versionId", + "in": "path", + "description": "The id of the file version.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileVersion" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/workspaces/{workspaceId}/files/{fileId}/versions/{versionId}/download": { + "get": { + "tags": [ + "WorkspaceFiles" + ], + "summary": "Returns the content of the workspace file version with the specified id.", + "description": "Returns the content of the workspace file version with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetWorkspaceFileVersionContent", + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "description": "The id of the workspace.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "versionId", + "in": "path", + "description": "The id of the file version.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + } + }, + "components": { + "schemas": { + "AgentAccessLevelRequestModel": { + "type": "object", + "properties": { + "accessLevel": { + "type": "string", + "description": "Gets or sets the access level to grant (read or manage).", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the request payload to change the access level of an existing agent share." + }, + "AgentConnectorConfigurationRequestModel": { + "required": [ + "connectionMode" + ], + "type": "object", + "properties": { + "connectionMode": { + "maxLength": 25, + "minLength": 1, + "enum": [ + "actingUser", + "specificConnection" + ], + "type": "string", + "description": "How the agent resolves a connection for the connector." + }, + "connectionId": { + "type": "string", + "description": "The connection identifier to configure. It is the fixed connection in specific-connection mode\nand the current user's selected connection in acting-user mode.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + } + }, + "additionalProperties": false, + "description": "Configures how an agent resolves connections for a connector." + }, + "AgentConnectorUserConnectionRequestModel": { + "required": [ + "connectionId" + ], + "type": "object", + "properties": { + "connectionId": { + "type": "string", + "description": "The connection selected by the current user.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + } + }, + "additionalProperties": false, + "description": "Selects the current user's connection for an acting-user connector." + }, + "AgentContributorRequestModel": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Gets or sets the id of the user to share the agent with.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "accessLevel": { + "type": "string", + "description": "Gets or sets the access level to grant (read or manage).", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the request payload to share an agent with a user." + }, + "AgentContributorResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Gets or sets the id of the contributor entry.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "userId": { + "type": "string", + "description": "Gets or sets the id of the user the agent is shared with.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "accessLevel": { + "type": "string", + "description": "Gets or sets the access level granted to the user (read or manage).", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents a user the agent is shared with." + }, + "AgentDefaultsResponseModel": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The public agent thread type the defaults apply to.", + "nullable": true, + "example": "custom-agent" + }, + "modelProvider": { + "type": "string", + "description": "The default model provider.", + "nullable": true, + "example": "openai" + }, + "modelName": { + "type": "string", + "description": "The default model name.", + "nullable": true, + "example": "gpt-5.6-terra" + }, + "presetKey": { + "type": "string", + "description": "The stored preset identity for preset-based agents.", + "nullable": true, + "example": "balanced" + }, + "reasoningLevel": { + "type": "string", + "description": "The default reasoning level.", + "nullable": true, + "example": "medium" + }, + "toolAccess": { + "$ref": "#/components/schemas/AgentToolAccessDefaultsModel" + }, + "connectorIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The default connector ids.", + "nullable": true + }, + "skillIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The default skill ids.", + "nullable": true + }, + "availableModels": { + "$ref": "#/components/schemas/AgentRuntimeModelsResponseModel" + } + }, + "additionalProperties": false, + "description": "Represents default agent options for starting or continuing an AI thread." + }, + "AgentDelegationResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Gets or sets the id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "agentId": { + "type": "string", + "description": "Gets or sets the agent id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "delegatedAgentId": { + "type": "string", + "description": "Gets or sets the delegated agent id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "name": { + "type": "string", + "description": "Gets or sets the name.", + "nullable": true + }, + "description": { + "type": "string", + "description": "Gets or sets the description.", + "nullable": true + }, + "executionMode": { + "type": "string", + "description": "Gets or sets the execution mode.", + "nullable": true + }, + "promptOverride": { + "type": "string", + "description": "Gets or sets the prompt override.", + "nullable": true + }, + "sortOrder": { + "type": "integer", + "description": "Gets or sets the sort order.", + "format": "int32" + } + }, + "additionalProperties": false, + "description": "Represents the agent delegation response payload for the agent runtime API." + }, + "AgentMemoryResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Gets or sets the memory id assigned by Mem0.", + "nullable": true + }, + "memory": { + "type": "string", + "description": "Gets or sets the memory text inferred and stored by Mem0.", + "nullable": true + }, + "scope": { + "type": "string", + "description": "Gets or sets the memory scope.", + "nullable": true + }, + "projectId": { + "type": "string", + "description": "Gets or sets the project id when the memory is project-scoped.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "clientId": { + "type": "string", + "description": "Gets or sets the client id when the memory is client-scoped.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "score": { + "type": "number", + "description": "Gets or sets the relevance score returned by Mem0 search.", + "format": "double", + "nullable": true + }, + "createdAt": { + "type": "string", + "description": "Gets or sets the creation timestamp returned by Mem0.", + "format": "date-time", + "nullable": true + }, + "updatedAt": { + "type": "string", + "description": "Gets or sets the update timestamp returned by Mem0.", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents a stored agent memory returned by the agent runtime API." + }, + "AgentMessageConnectorConnectionRequestModel": { + "type": "object", + "properties": { + "connectorId": { + "type": "string", + "description": "The connector identifier.", + "format": "uuid", + "example": "7e376777-7834-4af6-9eb8-da065f568d30" + }, + "connectionId": { + "type": "string", + "description": "The connection identifier.", + "format": "uuid", + "example": "af18602d-c8aa-4f63-a21e-5a7f59b2412c" + } + }, + "additionalProperties": false, + "description": "Selects one connection for a connector in a single custom-agent message." + }, + "AgentOwnershipScope": { + "enum": [ + 0, + 1, + 2 + ], + "type": "integer", + "description": "Defines where an agent configuration belongs.", + "format": "int32" + }, + "AgentParticipationResponseModel": { + "type": "object", + "properties": { + "participationId": { + "type": "string", + "description": "Gets or sets the participation identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "agentId": { + "type": "string", + "description": "Gets or sets the participating agent.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "agentName": { + "type": "string", + "description": "Gets or sets the agent name captured for the audit record.", + "nullable": true + }, + "threadId": { + "type": "string", + "description": "Gets or sets the latest thread available for the agent in this context.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "responsibleUserId": { + "type": "string", + "description": "Gets or sets the responsible user of the latest run.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "firstThreadRunId": { + "type": "string", + "description": "Gets or sets the first run in the participation.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "lastThreadRunId": { + "type": "string", + "description": "Gets or sets the latest run in the participation.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "createdOn": { + "type": "string", + "description": "Gets or sets when participation was first recorded.", + "format": "date-time" + }, + "updatedOn": { + "type": "string", + "description": "Gets or sets when participation was last updated.", + "format": "date-time" + }, + "threadAvailable": { + "type": "boolean", + "description": "Gets or sets whether the thread is still available." + }, + "canReadThread": { + "type": "boolean", + "description": "Gets or sets whether the requester can open the thread." + }, + "canReadRunHistory": { + "type": "boolean", + "description": "Gets or sets whether the requester can inspect the participation's run history." + }, + "canInvokeAgent": { + "type": "boolean", + "description": "Gets or sets whether the requester can run the agent in this context." + }, + "canCancelAgent": { + "type": "boolean", + "description": "Gets or sets whether the requester can cancel the current agent run." + }, + "triggeredByUserId": { + "type": "string", + "description": "Gets or sets the user who triggered the latest recorded run.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + } + }, + "additionalProperties": false, + "description": "Represents one agent's latest participation in a task or project." + }, + "AgentParticipationRunResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Gets or sets the run identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "executingUserId": { + "type": "string", + "description": "Gets or sets the user whose permissions applied to the run.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "triggeredByUserId": { + "type": "string", + "description": "Gets or sets the user who triggered the run.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "triggerType": { + "type": "string", + "description": "Gets or sets how the run was triggered.", + "nullable": true + }, + "status": { + "type": "string", + "description": "Gets or sets the terminal or active run status.", + "nullable": true + }, + "startedOn": { + "type": "string", + "description": "Gets or sets when execution started.", + "format": "date-time", + "nullable": true + }, + "completedOn": { + "type": "string", + "description": "Gets or sets when execution completed.", + "format": "date-time", + "nullable": true + }, + "failureReason": { + "type": "string", + "description": "Gets or sets the terminal failure reason.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents one immutable run shown beneath an agent participation entry." + }, + "AgentPresetCatalogResponseModel": { + "type": "object", + "properties": { + "sourceAgentId": { + "type": "string", + "description": "Gets or sets the source agent ID used to import the selected preset.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "versionNumber": { + "type": "integer", + "description": "Gets or sets the product-facing preset version number.", + "format": "int32" + }, + "name": { + "type": "string", + "description": "Gets or sets the localized display name.", + "nullable": true + }, + "description": { + "type": "string", + "description": "Gets or sets the localized short description.", + "nullable": true + }, + "detailedDescription": { + "type": "string", + "description": "Gets or sets the localized detailed catalog description.", + "nullable": true + }, + "systemPrompt": { + "type": "string", + "description": "Gets or sets the published system instructions.", + "nullable": true + }, + "modelPresetKey": { + "type": "string", + "description": "Gets or sets the published model preset key.", + "nullable": true + }, + "modelProvider": { + "type": "string", + "description": "Gets or sets the published direct model provider.", + "nullable": true + }, + "modelName": { + "type": "string", + "description": "Gets or sets the published direct model name.", + "nullable": true + }, + "reasoningLevel": { + "type": "string", + "description": "Gets or sets the published reasoning level.", + "nullable": true + }, + "webSearchEnabled": { + "type": "boolean", + "description": "Gets or sets whether web search is enabled in the published snapshot." + }, + "aworkAccessEnabled": { + "type": "boolean", + "description": "Gets or sets whether awork access is enabled in the published snapshot." + }, + "googleGenAiAccessEnabled": { + "type": "boolean", + "description": "Gets or sets whether Google image generation is enabled in the published snapshot." + }, + "openAiImageGenerationAccessEnabled": { + "type": "boolean", + "description": "Gets or sets whether OpenAI image generation is enabled in the published snapshot." + }, + "hasAvatar": { + "type": "boolean", + "description": "Gets or sets whether the published snapshot includes an avatar." + }, + "skillNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Gets or sets the skill names included in the published snapshot.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the latest published localized preset available during agent creation." + }, + "AgentPresetDefinitionResponseModel": { + "type": "object", + "properties": { + "sourceAgentId": { + "type": "string", + "description": "Gets or sets the source agent ID, which is also the stable preset identity.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "sourceAgentName": { + "type": "string", + "description": "Gets or sets the source agent name from the published snapshot.", + "nullable": true + }, + "language": { + "type": "string", + "description": "Gets or sets the published language.", + "nullable": true + }, + "detailedDescription": { + "type": "string", + "description": "Gets or sets the detailed catalog description.", + "nullable": true + }, + "isPublished": { + "type": "boolean", + "description": "Gets or sets whether the preset is currently visible to customers." + }, + "latestPublishedVersionNumber": { + "type": "integer", + "description": "Gets or sets the latest product-facing version number.", + "format": "int32" + }, + "nextVersionNumber": { + "type": "integer", + "description": "Gets or sets the version number assigned by the next publication.", + "format": "int32" + }, + "versions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentPresetVersionSummaryResponseModel" + }, + "description": "Gets or sets the bounded product-facing release history.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents one preset in the internal authoring catalog." + }, + "AgentPresetSourceAgentResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Gets or sets the agent ID.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "name": { + "type": "string", + "description": "Gets or sets the agent name.", + "nullable": true + }, + "description": { + "type": "string", + "description": "Gets or sets the short agent description.", + "nullable": true + }, + "presetKey": { + "type": "string", + "description": "Gets or sets the stored model preset identity.", + "nullable": true + }, + "modelProvider": { + "type": "string", + "description": "Gets or sets the model provider.", + "nullable": true + }, + "modelName": { + "type": "string", + "description": "Gets or sets the model name.", + "nullable": true + }, + "reasoningLevel": { + "type": "string", + "description": "Gets or sets the reasoning level.", + "nullable": true + }, + "systemPrompt": { + "type": "string", + "description": "Gets or sets the current system prompt.", + "nullable": true + }, + "webSearchEnabled": { + "type": "boolean", + "description": "Gets or sets whether web search is enabled." + }, + "aworkAccessEnabled": { + "type": "boolean", + "description": "Gets or sets whether awork access is enabled." + }, + "googleGenAiAccessEnabled": { + "type": "boolean", + "description": "Gets or sets whether Google image generation is enabled." + }, + "openAiImageGenerationAccessEnabled": { + "type": "boolean", + "description": "Gets or sets whether OpenAI image generation is enabled." + }, + "publicationBlockers": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Gets or sets the source features that prevent preset publication.", + "nullable": true + }, + "includedSkillNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Gets or sets the skill names that will be copied into an imported preset agent.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents a normal authoring-workspace agent that can be selected as a preset source." + }, + "AgentPresetVersionSummaryResponseModel": { + "type": "object", + "properties": { + "versionNumber": { + "type": "integer", + "description": "Gets or sets the product-facing version number.", + "format": "int32" + }, + "publishedOn": { + "type": "string", + "description": "Gets or sets when this version was published.", + "format": "date-time" + }, + "isPublished": { + "type": "boolean", + "description": "Gets or sets whether this version remains published." + }, + "isActive": { + "type": "boolean", + "description": "Gets or sets whether this version is the active customer-facing version." + } + }, + "additionalProperties": false, + "description": "Represents one product release marker in UIC." + }, + "AgentRuntimeModelResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The model id used by the provider API.", + "nullable": true, + "example": "gpt-5.6-terra" + }, + "key": { + "type": "string", + "description": "The stable catalog key.", + "nullable": true, + "example": "openai:gpt-5.6-terra" + }, + "kind": { + "type": "string", + "description": "The model kind.", + "nullable": true, + "example": "text" + }, + "vendorKey": { + "type": "string", + "description": "The stable vendor key.", + "nullable": true, + "example": "openai" + }, + "vendorCountry": { + "type": "string", + "description": "The vendor country shown in the model picker.", + "nullable": true, + "example": "EU" + }, + "regionKey": { + "type": "string", + "description": "The stable serving-region key.", + "nullable": true, + "example": "europe" + }, + "displayName": { + "type": "string", + "description": "The display label.", + "nullable": true, + "example": "GPT-5.6 Terra" + }, + "status": { + "type": "string", + "description": "The lifecycle status of the model.", + "nullable": true, + "example": "active" + }, + "isNew": { + "type": "boolean", + "description": "Whether the model is newly published.", + "example": false + }, + "isWorkspaceEnabled": { + "type": "boolean", + "description": "Whether workspace policy enables the model.", + "example": true + }, + "isInUse": { + "type": "boolean", + "description": "Whether a current workspace configuration or thread uses the model.", + "example": true + }, + "isAvailable": { + "type": "boolean", + "description": "Whether provider readiness makes the model available.", + "example": true + }, + "disabledReason": { + "type": "string", + "description": "The reason the model is unavailable.", + "nullable": true, + "example": "Its vendor or region is disabled." + }, + "canToggle": { + "type": "boolean", + "description": "Whether the workspace can change this model's switch.", + "example": true + }, + "creditFactor": { + "type": "number", + "description": "The Terra-relative cost factor for the representative cached-input workload.", + "format": "double", + "nullable": true, + "example": 1 + }, + "servedFrom": { + "type": "string", + "description": "The serving region label.", + "nullable": true, + "example": "Europe" + }, + "servingFlag": { + "type": "string", + "description": "The serving region flag.", + "nullable": true, + "example": "🇪🇺" + }, + "contextWindowTokens": { + "type": "integer", + "description": "The model context window size in tokens.", + "format": "int32", + "nullable": true, + "example": 1050000 + }, + "defaultOutputReserveTokens": { + "type": "integer", + "description": "The default output reserve in tokens.", + "format": "int32", + "nullable": true, + "example": 128000 + }, + "compactionThresholdTokens": { + "type": "integer", + "description": "The configured compaction trigger threshold in tokens.", + "format": "int32", + "nullable": true, + "example": 250000 + }, + "recentHistoryKeepTokens": { + "type": "integer", + "description": "The recent verbatim history budget kept after compaction.", + "format": "int32", + "nullable": true, + "example": 8000 + }, + "supportsImageInput": { + "type": "boolean", + "description": "Whether the model accepts native image input.", + "example": true + }, + "supportedReasoningLevels": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The reasoning levels supported by this model.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents one agent runtime model exposed by the catalog." + }, + "AgentRuntimeModelsResponseModel": { + "type": "object", + "properties": { + "defaultProvider": { + "type": "string", + "description": "The default provider.", + "nullable": true, + "example": "openai" + }, + "defaultModel": { + "type": "string", + "description": "The default model.", + "nullable": true, + "example": "gpt-5.6-terra" + }, + "providers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentRuntimeProviderModelsResponseModel" + }, + "description": "The providers.", + "nullable": true + }, + "performanceLevels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentRuntimePerformanceLevelResponseModel" + }, + "description": "The predefined performance levels that resolve to available models.", + "nullable": true + }, + "workspaceSettings": { + "$ref": "#/components/schemas/AgentRuntimeWorkspaceModelSettingsResponseModel" + }, + "availableImageCapabilities": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Image capability keys available in this workspace.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the agent runtimes response payload for the agent runtime API." + }, + "AgentRuntimePerformanceLevelResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The stable identifier used by clients to present the performance level.", + "nullable": true, + "example": "balanced" + }, + "provider": { + "type": "string", + "description": "The selected model provider.", + "nullable": true, + "example": "openai" + }, + "model": { + "type": "string", + "description": "The selected model name.", + "nullable": true, + "example": "gpt-5.6-terra" + }, + "reasoningLevel": { + "type": "string", + "description": "The selected reasoning level.", + "nullable": true, + "example": "medium" + }, + "isDefault": { + "type": "boolean", + "description": "Whether this is the default performance level for new personal agent chats.", + "example": true + } + }, + "additionalProperties": false, + "description": "Represents a predefined performance level for the agent model selector." + }, + "AgentRuntimeProviderModelsResponseModel": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "The provider.", + "nullable": true, + "example": "openai" + }, + "displayName": { + "type": "string", + "description": "The display name.", + "nullable": true, + "example": "OpenAI" + }, + "defaultModel": { + "type": "string", + "description": "The default model.", + "nullable": true, + "example": "gpt-5.6-terra" + }, + "models": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The models.", + "nullable": true + }, + "modelDetails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentRuntimeModelResponseModel" + }, + "description": "Rich model metadata for model pickers.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the agent runtime providers response payload for the agent runtime API." + }, + "AgentRuntimeWorkspaceModelPresetResponseModel": { + "type": "object", + "properties": { + "presetKey": { + "type": "string", + "description": "The preset key.", + "nullable": true, + "example": "balanced" + }, + "isAuto": { + "type": "boolean", + "description": "Whether the preset uses central Auto resolution.", + "example": false + }, + "modelKey": { + "type": "string", + "description": "The explicit model key.", + "nullable": true, + "example": "openai:gpt-5.6-terra" + }, + "reasoningLevel": { + "type": "string", + "description": "The effective reasoning level.", + "nullable": true, + "example": "medium" + }, + "modelStatus": { + "type": "string", + "description": "The stored model lifecycle status.", + "nullable": true, + "example": "active" + }, + "warning": { + "type": "string", + "description": "The warning shown for a deprecated stored reference.", + "nullable": true, + "example": "This preset uses a deprecated model and remains visible for existing agents." + }, + "error": { + "type": "string", + "description": "The error shown for a removed or unavailable stored reference.", + "nullable": true, + "example": "This preset model is disabled by workspace settings." + } + }, + "additionalProperties": false, + "description": "Represents one effective workspace preset assignment." + }, + "AgentRuntimeWorkspaceModelSettingsResponseModel": { + "type": "object", + "properties": { + "autoEnableNewModels": { + "type": "boolean", + "description": "Whether new models in enabled parents are enabled automatically.", + "example": true + }, + "vendors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentRuntimeWorkspaceModelSwitchResponseModel" + }, + "description": "The effective vendor states.", + "nullable": true + }, + "regions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentRuntimeWorkspaceModelSwitchResponseModel" + }, + "description": "The effective region states.", + "nullable": true + }, + "presets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentRuntimeWorkspaceModelPresetResponseModel" + }, + "description": "Effective Fast, Balanced, and Deep preset assignments.", + "nullable": true + }, + "models": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentRuntimeModelResponseModel" + }, + "description": "The full effective catalog used by workspace model settings.", + "nullable": true + }, + "availableImageCapabilities": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Image capability keys available in this workspace.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents effective workspace AI model policy." + }, + "AgentRuntimeWorkspaceModelSwitchResponseModel": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "The stable switch key.", + "nullable": true, + "example": "openai" + }, + "displayName": { + "type": "string", + "description": "The display name.", + "nullable": true, + "example": "OpenAI" + }, + "country": { + "type": "string", + "description": "The vendor country, when this switch represents a vendor.", + "nullable": true, + "example": "US" + }, + "isEnabled": { + "type": "boolean", + "description": "Whether the switch is enabled.", + "example": true + }, + "isNew": { + "type": "boolean", + "description": "Whether this switch is newly published.", + "example": false + }, + "canToggle": { + "type": "boolean", + "description": "Whether this parent switch can be changed.", + "example": true + }, + "disabledReason": { + "type": "string", + "description": "The authoritative reason the switch or its children are unavailable.", + "nullable": true, + "example": "Its vendor or region is disabled." + } + }, + "additionalProperties": false, + "description": "Represents one effective workspace model switch." + }, + "AgentScheduleResponseModel": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Gets or sets the schedule display name.", + "nullable": true + }, + "id": { + "type": "string", + "description": "Gets or sets the schedule id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "createdOn": { + "type": "string", + "description": "Gets or sets when the schedule was created.", + "format": "date-time" + }, + "agentId": { + "type": "string", + "description": "Gets or sets the agent id that is executed by this schedule.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "ownerUserId": { + "type": "string", + "description": "Gets or sets the user id whose context is used to execute the scheduled run.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "prompt": { + "type": "string", + "description": "Gets or sets the additional prompt guidance sent as the scheduled run's initial message.", + "nullable": true + }, + "cronRule": { + "type": "string", + "description": "Gets or sets the normalized cron rule used for recurring execution.", + "nullable": true + }, + "timezone": { + "type": "string", + "description": "Gets or sets the timezone used to evaluate the cron rule.", + "nullable": true + }, + "projectId": { + "type": "string", + "description": "Gets or sets the optional project context id.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "taskId": { + "type": "string", + "description": "Gets or sets the optional task context id.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "isEnabled": { + "type": "boolean", + "description": "Gets or sets whether this schedule is active." + }, + "needsAttention": { + "type": "boolean", + "description": "Gets or sets whether the schedule needs user attention." + }, + "lastFailureReason": { + "type": "string", + "description": "Gets or sets the latest rejection reason.", + "nullable": true + }, + "consecutiveFailureCount": { + "type": "integer", + "description": "Gets or sets the number of consecutive failed scheduled executions.", + "format": "int32" + }, + "lastAttemptOn": { + "type": "string", + "description": "Gets or sets the latest occurrence time.", + "format": "date-time", + "nullable": true + }, + "lastSuccessfulRunOn": { + "type": "string", + "description": "Gets or sets the latest accepted occurrence time.", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents a scheduled agent run configuration." + }, + "AgentSessionSourceType": { + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5 + ], + "type": "integer", + "description": "Identifies the product source that created a custom-agent thread.", + "format": "int32" + }, + "AgentSkillLinkResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Gets or sets the id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "agentId": { + "type": "string", + "description": "Gets or sets the agent id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "skillId": { + "type": "string", + "description": "Gets or sets the skill id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "skillKey": { + "type": "string", + "description": "Gets or sets the skill key.", + "nullable": true + }, + "skillName": { + "type": "string", + "description": "Gets or sets the skill name.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the agent skill link response payload for the agent runtime API." + }, + "AgentSummaryResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the entity.", + "format": "uuid", + "example": "23e68187-91d6-4f7e-8d31-e3f2c60d7427" + }, + "createdOn": { + "type": "string", + "description": "The date this entity was created.", + "format": "date-time", + "example": "2022-03-11T15:33:47.100Z" + }, + "createdBy": { + "type": "string", + "description": "The id of the user who created this entity.", + "format": "uuid", + "example": "9ad63972-4396-4b0b-9e7d-40b852cdebf8" + }, + "updatedOn": { + "type": "string", + "description": "The date this entity was last modified.", + "format": "date-time", + "example": "2022-03-11T21:15:00.100Z" + }, + "updatedBy": { + "type": "string", + "description": "The id of the user who last modified this entity.", + "format": "uuid", + "example": "3d844c62-7410-4df9-a5b2-78805c0ee260" + }, + "type": { + "type": "string", + "description": "The type.", + "nullable": true, + "example": "custom-agent" + }, + "connectors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ConnectorResponseModel" + }, + "description": "The linked connectors.", + "nullable": true + }, + "name": { + "type": "string", + "description": "The name.", + "nullable": true, + "example": "Client Status Reporter" + }, + "description": { + "type": "string", + "description": "The description.", + "nullable": true, + "example": "Prepares client-ready project status reports." + }, + "currentSystemPromptVersionId": { + "type": "string", + "description": "The current system prompt version id.", + "format": "uuid", + "nullable": true, + "example": "fd077515-d4a8-4f79-9fbf-19271bd0123d" + }, + "modelProvider": { + "type": "string", + "description": "The configured model provider when no preset is selected.", + "nullable": true, + "example": "openai" + }, + "modelName": { + "type": "string", + "description": "The configured model name when no preset is selected.", + "nullable": true, + "example": "gpt-5.6-terra" + }, + "presetKey": { + "type": "string", + "description": "The configured workspace preset identity.", + "nullable": true, + "example": "balanced" + }, + "reasoningLevel": { + "type": "string", + "description": "The configured reasoning level.", + "nullable": true, + "example": "medium" + }, + "systemPrompt": { + "type": "string", + "description": "The authoritative current system prompt.", + "nullable": true, + "example": "Prepare concise client-ready project updates from awork data." + }, + "webSearchEnabled": { + "type": "boolean", + "description": "Whether web search is enabled.", + "example": true + }, + "aworkAccessEnabled": { + "type": "boolean", + "description": "Whether awork access is enabled.", + "example": true + }, + "googleGenAiAccessEnabled": { + "type": "boolean", + "description": "Whether Google image generation is enabled.", + "example": false + }, + "openAiImageGenerationAccessEnabled": { + "type": "boolean", + "description": "Whether OpenAI image generation is enabled.", + "example": false + }, + "skillIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The skill ids.", + "nullable": true + }, + "hasImage": { + "type": "boolean", + "description": "Whether the agent has a profile image.", + "example": true + }, + "isArchived": { + "type": "boolean", + "description": "Whether the agent is archived.", + "example": false + }, + "workspaceAccessLevel": { + "type": "string", + "description": "The workspace-wide access level.", + "nullable": true, + "example": "manage" + }, + "accessLevel": { + "type": "string", + "description": "The requesting user's access level.", + "nullable": true, + "example": "manage" + } + }, + "additionalProperties": false, + "description": "Represents the agent summary response payload for the agent runtime API." + }, + "AgentThreadArtifactResponseModel": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Gets or sets the path.", + "nullable": true + }, + "fileName": { + "type": "string", + "description": "Gets or sets the file name.", + "nullable": true + }, + "mimeType": { + "type": "string", + "description": "Gets or sets the mime type.", + "nullable": true + }, + "sizeBytes": { + "type": "integer", + "description": "Gets or sets the size in bytes.", + "format": "int64" + }, + "sha256": { + "type": "string", + "description": "Gets or sets the SHA-256 hash.", + "nullable": true + }, + "modifiedOn": { + "type": "string", + "description": "Gets or sets the modified on timestamp.", + "format": "date-time", + "nullable": true + }, + "createdOn": { + "type": "string", + "description": "Gets or sets the created on.", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the agent session artifact response payload for the agent runtime API." + }, + "AgentThreadEventResponseModel": { + "type": "object", + "properties": { + "sequence": { + "type": "integer", + "description": "Gets or sets the sequence.", + "format": "int64" + }, + "eventName": { + "type": "string", + "description": "Gets or sets the event name.", + "nullable": true + }, + "dataJson": { + "type": "string", + "description": "Gets or sets the data json.", + "nullable": true + }, + "traceId": { + "type": "string", + "description": "Gets or sets the trace id.", + "nullable": true + }, + "createdOn": { + "type": "string", + "description": "Gets or sets the created on.", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "description": "Gets or sets the creator ID.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "updatedOn": { + "type": "string", + "description": "Gets or sets the update timestamp.", + "format": "date-time", + "nullable": true + }, + "updatedBy": { + "type": "string", + "description": "Gets or sets the updater ID.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + } + }, + "additionalProperties": false, + "description": "Represents the agent session event response payload for the agent runtime API." + }, + "AgentThreadInvocationType": { + "enum": [ + "chat", + "task-assignment", + "project-assignment" + ], + "type": "string", + "description": "Identifies the product surface that invoked a new agent thread." + }, + "AgentThreadMessageResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the entity.", + "format": "uuid", + "example": "23e68187-91d6-4f7e-8d31-e3f2c60d7427" + }, + "createdOn": { + "type": "string", + "description": "The date this entity was created.", + "format": "date-time", + "example": "2022-03-11T15:33:47.100Z" + }, + "createdBy": { + "type": "string", + "description": "The id of the user who created this entity.", + "format": "uuid", + "example": "9ad63972-4396-4b0b-9e7d-40b852cdebf8" + }, + "updatedOn": { + "type": "string", + "description": "The date this entity was last modified.", + "format": "date-time", + "example": "2022-03-11T21:15:00.100Z" + }, + "updatedBy": { + "type": "string", + "description": "The id of the user who last modified this entity.", + "format": "uuid", + "example": "3d844c62-7410-4df9-a5b2-78805c0ee260" + }, + "threadId": { + "type": "string", + "description": "The thread id.", + "format": "uuid", + "example": "6cbb219e-839d-4d23-b273-3a78bbd842ae" + }, + "parentThreadId": { + "type": "string", + "description": "The parent thread id.", + "format": "uuid", + "nullable": true, + "example": "b5a57e4d-0eec-45b6-b55e-4b70bf0f2a18" + }, + "role": { + "type": "string", + "description": "The role.", + "nullable": true, + "example": "agent" + }, + "content": { + "type": "string", + "description": "The content.", + "nullable": true, + "example": "The Acme website project is on track for Friday, with budget approval still pending." + }, + "clientMessageId": { + "type": "string", + "description": "The client message id.", + "nullable": true, + "example": "client-status-2026-08-29" + }, + "runtimeMessageId": { + "type": "string", + "description": "The runtime message id.", + "nullable": true, + "example": "msg_01K4CLIENTSTATUS" + }, + "model": { + "type": "string", + "description": "The model.", + "nullable": true, + "example": "gpt-5.6-terra" + }, + "toolCallId": { + "type": "string", + "description": "The provider tool-call identifier associated with the message.", + "nullable": true, + "example": "call_01K4CLIENTSTATUS" + }, + "temporaryFiles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TemporaryFileReference" + }, + "description": "The temporary files attached to the message.", + "nullable": true + }, + "toolCalls": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AiToolCall" + }, + "description": "The tool calls stored with this message.", + "nullable": true + }, + "reasoning": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentThreadReasoningResponseModel" + }, + "description": "The user-visible reasoning text stored with this message.", + "nullable": true + }, + "agentId": { + "type": "string", + "description": "The agent id.", + "format": "uuid", + "nullable": true, + "example": "4d22e163-2b4a-4d47-b51c-5b2217f84f57" + }, + "messageOrder": { + "type": "integer", + "description": "The message order.", + "format": "int32", + "example": 2 + }, + "isStreaming": { + "type": "boolean", + "description": "Whether the message is still streaming.", + "example": false + }, + "streamCompleted": { + "type": "boolean", + "description": "The stream completed.", + "example": true + }, + "traceId": { + "type": "string", + "description": "The trace id.", + "nullable": true, + "example": "0af7651916cd43dd8448eb211c80319c" + }, + "modelProvider": { + "type": "string", + "description": "The model provider selected for this message.", + "nullable": true, + "example": "openai" + }, + "reasoningLevel": { + "type": "string", + "description": "The reasoning level selected for this message.", + "nullable": true, + "example": "medium" + }, + "toolAccess": { + "$ref": "#/components/schemas/AgentToolAccessPolicy" + }, + "connectorIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The connector identifiers selected for this message.", + "nullable": true + }, + "skillIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The skill identifiers selected for this message.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the agent session message response payload for the agent runtime API." + }, + "AgentThreadReasoningResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The provider reasoning item id.", + "nullable": true, + "example": "reasoning_01J8M7Q2A3B4C5D6E7F8G9H0JK" + }, + "text": { + "type": "string", + "description": "The safe reasoning summary text.", + "nullable": true, + "example": "Checked the project context before preparing the answer." + } + }, + "additionalProperties": false, + "description": "Represents user-visible reasoning text restored from a canonical chat payload." + }, + "AgentThreadResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the entity.", + "format": "uuid", + "example": "23e68187-91d6-4f7e-8d31-e3f2c60d7427" + }, + "createdOn": { + "type": "string", + "description": "The date this entity was created.", + "format": "date-time", + "example": "2022-03-11T15:33:47.100Z" + }, + "createdBy": { + "type": "string", + "description": "The id of the user who created this entity.", + "format": "uuid", + "example": "9ad63972-4396-4b0b-9e7d-40b852cdebf8" + }, + "updatedOn": { + "type": "string", + "description": "The date this entity was last modified.", + "format": "date-time", + "example": "2022-03-11T21:15:00.100Z" + }, + "updatedBy": { + "type": "string", + "description": "The id of the user who last modified this entity.", + "format": "uuid", + "example": "3d844c62-7410-4df9-a5b2-78805c0ee260" + }, + "type": { + "type": "string", + "description": "The thread type.", + "nullable": true, + "example": "custom-agent" + }, + "title": { + "type": "string", + "description": "The thread title.", + "nullable": true, + "example": "Weekly client status report" + }, + "status": { + "type": "string", + "description": "The thread status.", + "nullable": true, + "example": "completed" + }, + "isReadOnly": { + "type": "boolean", + "description": "Whether the requester may only read this thread.", + "example": false + }, + "contributors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AiThreadContributorResponseModel" + }, + "description": "The users who explicitly joined this thread.", + "nullable": true + }, + "queue": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AiThreadQueuedMessageResponseModel" + }, + "description": "The queued thread messages in dispatch order.", + "nullable": true + }, + "agentId": { + "type": "string", + "description": "The agent used for the initial execution.", + "format": "uuid", + "nullable": true, + "example": "4d22e163-2b4a-4d47-b51c-5b2217f84f57" + }, + "agentNameSnapshot": { + "type": "string", + "description": "The immutable initial agent name.", + "nullable": true, + "example": "Client Status Reporter" + }, + "executionOwnerUserId": { + "type": "string", + "description": "The user whose permissions applied to the initial execution.", + "format": "uuid", + "nullable": true, + "example": "9ad63972-4396-4b0b-9e7d-40b852cdebf8" + }, + "executionTriggeredByUserId": { + "type": "string", + "description": "The user who triggered the initial execution.", + "format": "uuid", + "nullable": true, + "example": "52c28884-c751-4e0b-820c-9abe8a524a29" + }, + "executionType": { + "type": "string", + "description": "The initial execution type.", + "nullable": true, + "example": "chat" + }, + "executionSourceId": { + "type": "string", + "description": "The entity that caused the initial execution.", + "format": "uuid", + "nullable": true, + "example": "c907b29e-f640-4639-910d-722623fd5b4a" + }, + "modelProvider": { + "type": "string", + "description": "The model provider.", + "nullable": true, + "example": "openai" + }, + "modelName": { + "type": "string", + "description": "The provider model name.", + "nullable": true, + "example": "gpt-5.6-terra" + }, + "parentThreadId": { + "type": "string", + "description": "The parent thread id.", + "format": "uuid", + "nullable": true, + "example": "b5a57e4d-0eec-45b6-b55e-4b70bf0f2a18" + }, + "projectId": { + "type": "string", + "description": "The associated project id.", + "format": "uuid", + "nullable": true, + "example": "c907b29e-f640-4639-910d-722623fd5b4a" + }, + "taskId": { + "type": "string", + "description": "The associated task id.", + "format": "uuid", + "nullable": true, + "example": "d88ef8fa-e549-4ca6-96d8-83f5be9d37a2" + }, + "clientId": { + "type": "string", + "description": "The associated client id.", + "format": "uuid", + "nullable": true, + "example": "61341e18-3e3f-4efb-b471-b781e64f69f7" + }, + "documentId": { + "type": "string", + "description": "The associated document id.", + "format": "uuid", + "nullable": true, + "example": "5a442338-8da3-49e9-a702-b45d6f829d43" + }, + "startedOn": { + "type": "string", + "description": "When execution started.", + "format": "date-time", + "nullable": true, + "example": "2026-08-29T08:00:05Z" + }, + "completedOn": { + "type": "string", + "description": "When execution completed.", + "format": "date-time", + "nullable": true, + "example": "2026-08-29T08:01:42Z" + }, + "lastActivityOn": { + "type": "string", + "description": "The latest activity timestamp.", + "format": "date-time", + "nullable": true, + "example": "2026-08-29T08:01:42Z" + }, + "lastActivityBy": { + "type": "string", + "description": "The user responsible for the latest user-message activity.", + "format": "uuid", + "nullable": true, + "example": "9ad63972-4396-4b0b-9e7d-40b852cdebf8" + }, + "failureReason": { + "type": "string", + "description": "The failure reason.", + "nullable": true, + "example": "The model provider could not complete the run." + }, + "lastSequence": { + "type": "integer", + "description": "The latest persisted event sequence.", + "format": "int64", + "example": 42 + }, + "latestThreadUpdateSequence": { + "type": "integer", + "description": "The latest event sequence that creates a thread update.", + "format": "int64", + "example": 42 + }, + "hasUpdate": { + "type": "boolean", + "description": "Whether the requester has an unseen update.", + "example": false + }, + "isArchived": { + "type": "boolean", + "description": "Whether the requester archived the thread.", + "example": false + }, + "archivedOn": { + "type": "string", + "description": "When the requester archived the thread.", + "format": "date-time", + "nullable": true, + "example": "2026-08-29T09:30:00Z" + }, + "isPinned": { + "type": "boolean", + "description": "Whether the requester pinned the thread.", + "example": false + }, + "pinnedOrder": { + "type": "number", + "description": "The requester's pinned order.", + "format": "double", + "nullable": true, + "example": 1 + }, + "isAwaitingAction": { + "type": "boolean", + "description": "Whether the thread awaits user action.", + "example": false + }, + "pendingBatchConfirmation": { + "$ref": "#/components/schemas/PendingBatchConfirmationResponseModel" + }, + "pendingUserQuestion": { + "$ref": "#/components/schemas/PendingUserQuestionResponseModel" + }, + "usedConnectors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UsedConnectorResponseModel" + }, + "description": "Connectors used successfully in this thread on detail responses.", + "nullable": true + }, + "contextWindowUsageRatio": { + "type": "number", + "description": "The context-window usage ratio on detail responses.", + "format": "double", + "nullable": true, + "example": 0.42 + }, + "rating": { + "type": "string", + "description": "The personal-thread rating on detail responses.", + "nullable": true, + "example": "positive" + } + }, + "additionalProperties": false, + "description": "Represents the shared response for an AI thread in list, detail, and live-update APIs." + }, + "AgentThreadSeenRequestModel": { + "type": "object", + "properties": { + "updateSequence": { + "maximum": 9223372036854776000, + "minimum": 1, + "type": "integer", + "description": "Gets or sets the rendered thread update sequence to mark as seen.", + "format": "int64" + } + }, + "additionalProperties": false + }, + "AgentThreadSeenResponseModel": { + "type": "object", + "properties": { + "wasUpdated": { + "type": "boolean", + "description": "Gets or sets whether the seen cursor advanced." + } + }, + "additionalProperties": false + }, + "AgentThreadUpdateCountResponseModel": { + "type": "object", + "properties": { + "updatedCount": { + "type": "integer", + "description": "Gets or sets the updated thread count.", + "format": "int32" + } + }, + "additionalProperties": false + }, + "AgentThreadWorkspaceIdModel": { + "type": "object", + "properties": { + "workspaceId": { + "type": "string", + "description": "Gets or sets the owning workspace id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + } + }, + "additionalProperties": false + }, + "AgentToTeamRequestModel": { + "type": "object", + "properties": { + "teamId": { + "type": "string", + "description": "Gets or sets the id of the team to share the agent with.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "accessLevel": { + "type": "string", + "description": "Gets or sets the access level to grant (read or manage).", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the request payload to share an agent with a team." + }, + "AgentToTeamResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Gets or sets the id of the agent to team entry.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "teamId": { + "type": "string", + "description": "Gets or sets the id of the team the agent is shared with.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "accessLevel": { + "type": "string", + "description": "Gets or sets the access level granted to the team (read or manage).", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents a team the agent is shared with." + }, + "AgentToolAccessDefaultsModel": { + "type": "object", + "properties": { + "awork": { + "type": "boolean", + "description": "A value indicating whether awork tools are enabled by default.", + "example": true + }, + "webSearch": { + "type": "boolean", + "description": "A value indicating whether web search is enabled by default.", + "example": true + }, + "googleGenAi": { + "type": "boolean", + "description": "A value indicating whether Google GenAI tools are enabled by default.", + "example": false + }, + "openAiImageGeneration": { + "type": "boolean", + "description": "A value indicating whether OpenAI image generation is enabled by default.", + "example": false + }, + "availableImageCapabilities": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Image capability keys available in the workspace.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents default agent tool access settings." + }, + "AgentToolAccessOptionsModel": { + "type": "object", + "properties": { + "awork": { + "type": "boolean", + "description": "Whether awork tools are enabled for this run.", + "example": true + }, + "webSearch": { + "type": "boolean", + "description": "Whether web search is enabled for this run.", + "example": true + }, + "googleGenAi": { + "type": "boolean", + "description": "Whether Google GenAI tools are enabled for this run.", + "example": false + }, + "openAiImageGeneration": { + "type": "boolean", + "description": "Whether OpenAI image generation is enabled for this run.", + "example": false + } + }, + "additionalProperties": false, + "description": "Per-message agent tool access options." + }, + "AgentToolAccessPolicy": { + "type": "object", + "properties": { + "webSearchEnabled": { + "type": "boolean", + "description": "Whether web search was enabled.", + "example": true + }, + "aworkAccessEnabled": { + "type": "boolean", + "description": "Whether awork access was enabled.", + "example": true + }, + "googleGenAiAccessEnabled": { + "type": "boolean", + "description": "Whether Google image generation was enabled.", + "example": false + }, + "openAiImageGenerationAccessEnabled": { + "type": "boolean", + "description": "Whether OpenAI image generation was enabled.", + "example": false + } + }, + "additionalProperties": false, + "description": "Describes the tool access used for an agent message." + }, + "AgentUsageActiveUserResponseModel": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "ID of the user attributed with the credit usage.", + "format": "uuid", + "example": "84d132c8-9499-4e55-9e8f-fb79b1d4a610" + }, + "creditsUsed": { + "type": "integer", + "description": "Credit usage for the user, rounded to an integer.", + "format": "int64", + "example": 1840 + } + }, + "additionalProperties": false, + "description": "Represents one active user and their converted credit usage." + }, + "AgentUsageActivityDayResponseModel": { + "type": "object", + "properties": { + "date": { + "type": "string", + "description": "UTC calendar date in yyyy-MM-dd format.", + "nullable": true, + "example": "2026-08-31" + }, + "activityCount": { + "type": "integer", + "description": "Number of distinct threads with cost usage on the date.", + "format": "int32", + "example": 3 + } + }, + "additionalProperties": false, + "description": "Represents agent activity for one UTC calendar day." + }, + "AgentUsageActivitySummaryResponseModel": { + "type": "object", + "properties": { + "activeUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentUsageActiveUserResponseModel" + }, + "description": "Users with positive credit usage, ordered by credit usage in descending order.", + "nullable": true, + "example": [ + { + "userId": "84d132c8-9499-4e55-9e8f-fb79b1d4a610", + "creditsUsed": 1840 + } + ] + }, + "days": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentUsageActivityDayResponseModel" + }, + "description": "Daily agent activity for the current and previous two UTC calendar months.", + "nullable": true, + "example": [ + { + "date": "2026-08-31", + "activityCount": 3 + } + ] + } + }, + "additionalProperties": false, + "description": "Contains workspace agent activity for the current and two previous calendar months." + }, + "AgentUsageCreditsDayResponseModel": { + "type": "object", + "properties": { + "date": { + "type": "string", + "description": "UTC calendar date in yyyy-MM-dd format.", + "nullable": true, + "example": "2026-08-31" + }, + "creditsUsed": { + "type": "integer", + "description": "Credits allocated to the date as an integer.", + "format": "int64", + "example": 130 + } + }, + "additionalProperties": false, + "description": "Represents converted agent credit usage for one UTC calendar day." + }, + "AgentUsageCreditsSummaryResponseModel": { + "type": "object", + "properties": { + "totalThreads": { + "type": "integer", + "description": "Number of distinct threads with cost usage in the selected date range.", + "format": "int32", + "example": 42 + }, + "totalCreditsUsed": { + "type": "integer", + "description": "Credit usage in the selected date range, rounded up to an integer.", + "format": "int64", + "example": 2760 + }, + "days": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentUsageCreditsDayResponseModel" + }, + "description": "Daily credit usage for the selected date range, including dates with zero usage.", + "nullable": true, + "example": [ + { + "date": "2026-08-31", + "creditsUsed": 130 + } + ] + } + }, + "additionalProperties": false, + "description": "Contains workspace thread and credit usage for a date range." + }, + "AgentUsageOverviewResponseModel": { + "type": "object", + "properties": { + "activity": { + "$ref": "#/components/schemas/AgentUsageActivitySummaryResponseModel" + }, + "credits": { + "$ref": "#/components/schemas/AgentUsageCreditsSummaryResponseModel" + }, + "topConsumers": { + "$ref": "#/components/schemas/AgentUsageTopConsumersResponseModel" + } + }, + "additionalProperties": false, + "description": "Contains all data for the workspace agent usage overview widgets." + }, + "AgentUsageTopConsumerResponseModel": { + "type": "object", + "properties": { + "entityId": { + "type": "string", + "description": "ID of the Agent, user, project, or client represented by this entry. The entity type is defined by the requested grouping.", + "format": "uuid", + "example": "c17b45e8-14e2-48d1-8c4f-5b443331c2d8" + }, + "agentNameSnapshot": { + "type": "string", + "description": "Agent display name captured for the initial run. This is set for agent grouping and null for other groupings.", + "nullable": true + }, + "creditsUsed": { + "type": "integer", + "description": "Credit usage for the entity, rounded to an integer.", + "format": "int64", + "example": 920 + } + }, + "additionalProperties": false, + "description": "Represents one entity with high agent credit usage." + }, + "AgentUsageTopConsumersResponseModel": { + "type": "object", + "properties": { + "groupBy": { + "type": "string", + "description": "Entity type used to group the entries.", + "nullable": true, + "example": "agent" + }, + "entries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentUsageTopConsumerResponseModel" + }, + "description": "Up to five entities with positive credit usage, ordered by credit usage in descending order.", + "nullable": true, + "example": [ + { + "entityId": "c17b45e8-14e2-48d1-8c4f-5b443331c2d8", + "creditsUsed": 920 + } + ] + } + }, + "additionalProperties": false, + "description": "Contains the five entities with the highest agent credit usage." + }, + "AgentWorkflowStepResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Gets or sets the id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "agentId": { + "type": "string", + "description": "Gets or sets the agent id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "name": { + "type": "string", + "description": "Gets or sets the name.", + "nullable": true + }, + "stepKind": { + "type": "string", + "description": "Gets or sets the step kind.", + "nullable": true + }, + "delegationId": { + "type": "string", + "description": "Gets or sets the delegation id.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "nextStepId": { + "type": "string", + "description": "Gets or sets the next step id.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "rejectStepId": { + "type": "string", + "description": "Gets or sets the reject step id.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "promptOverride": { + "type": "string", + "description": "Gets or sets the prompt override.", + "nullable": true + }, + "outputName": { + "type": "string", + "description": "Gets or sets the output name.", + "nullable": true + }, + "failureMode": { + "type": "string", + "description": "Gets or sets the failure mode.", + "nullable": true + }, + "sortOrder": { + "type": "integer", + "description": "Gets or sets the sort order.", + "format": "int32" + } + }, + "additionalProperties": false, + "description": "Represents the agent workflow step response payload for the agent runtime API." + }, + "AiExhaustedQuotaFallbackOptions": { + "type": "object", + "properties": { + "modelProvider": { + "type": "string", + "description": "Gets or sets the provider used for restricted execution.", + "nullable": true + }, + "modelName": { + "type": "string", + "description": "Gets or sets the model used for restricted execution.", + "nullable": true + }, + "reasoningEffort": { + "type": "string", + "description": "Gets or sets the reasoning effort used for restricted execution.", + "nullable": true + }, + "maxOutputTokens": { + "type": "integer", + "description": "Gets or sets the maximum output tokens generated by one restricted response.", + "format": "int32" + } + }, + "additionalProperties": false, + "description": "Defines the restricted personal-agent runtime used after the primary quota binds." + }, + "AiPlanCreditAllowanceResponseModel": { + "type": "object", + "properties": { + "plan": { + "type": "string", + "description": "Gets or sets the configured paid plan or sponsored profile name.", + "nullable": true, + "example": "Pro" + }, + "planType": { + "$ref": "#/components/schemas/AiQuotaPlanType" + }, + "creditsIncluded": { + "type": "integer", + "description": "Gets or sets the whole credits included in the primary monthly quota, or null for an unlimited profile.", + "format": "int64", + "nullable": true, + "example": 7500 + }, + "isUnlimited": { + "type": "boolean", + "description": "Gets or sets whether this item represents the unmetered sponsored profile." + } + }, + "additionalProperties": false, + "description": "Describes the customer-visible primary credit allowance for one AI plan or sponsored profile." + }, + "AiPlanStatusResponseModel": { + "type": "object", + "properties": { + "isAiPlanActive": { + "type": "boolean", + "description": "Gets or sets whether the workspace AI plan is active." + } + }, + "additionalProperties": false, + "description": "Reports whether the current workspace has an active AI plan." + }, + "AiQuotaActivationOptions": { + "type": "object", + "properties": { + "quotaPlanOverride": { + "type": "string", + "description": "The minimum quota plan applied during the activation period. A user's higher paid plan still wins, and null disables the activation boost.", + "nullable": true, + "example": "Pro" + }, + "overrideDurationInPeriods": { + "type": "integer", + "description": "Number of monthly quota periods for which the activation boost remains effective. It must be one when a boost is configured and zero when disabled.", + "format": "int32", + "example": 1 + } + }, + "additionalProperties": false, + "description": "Defines the temporary minimum quota plan granted after a workspace activates awork AI for the first time." + }, + "AiQuotaAvailabilityResponseModel": { + "type": "object", + "properties": { + "accessSource": { + "type": "string", + "description": "Whether the entitlement is paid, sponsored, or included with the base plan.", + "nullable": true + }, + "quotaMode": { + "type": "string", + "description": "Whether the quota is blocked, metered, or unlimited.", + "nullable": true + }, + "isUnlimited": { + "type": "boolean", + "description": "True when the user has unlimited AI access." + }, + "isAvailable": { + "type": "boolean", + "description": "True when awork AI is active and the user is below every configured hard limit; otherwise false.", + "example": false + }, + "executionMode": { + "type": "string", + "description": "Whether execution is full, limited by exhausted-quota fallback, or blocked.", + "nullable": true + }, + "fallbackModelProvider": { + "type": "string", + "description": "Gets or sets the model provider used for exhausted-quota fallback execution. Null outside fallback mode.", + "nullable": true + }, + "fallbackModelName": { + "type": "string", + "description": "Gets or sets the model used for exhausted-quota fallback execution. Null outside fallback mode.", + "nullable": true + }, + "fallbackReasoningEffort": { + "type": "string", + "description": "Gets or sets the reasoning effort used for exhausted-quota fallback execution. Null outside fallback mode.", + "nullable": true + }, + "unavailableReason": { + "type": "string", + "description": "Machine-readable reason for an unavailable result: `quota_exhausted` or `awork_ai_inactive`. Null when AI is available.", + "nullable": true, + "example": "quota_exhausted" + }, + "availableAgainOn": { + "type": "string", + "description": "Earliest known UTC time at which the exhausted limit releases or resets. Null when no reliable time is known.", + "format": "date-time", + "nullable": true, + "example": "2026-09-01T00:00:00Z" + }, + "plan": { + "type": "string", + "description": "Gets or sets the user's assigned entitlement plan.", + "nullable": true, + "example": "Starter" + }, + "quotaPlan": { + "type": "string", + "description": "Gets or sets the effective quota plan used for the current period.", + "nullable": true, + "example": "Pro" + }, + "activationBoostEndsOn": { + "type": "string", + "description": "Gets or sets the exclusive end of the first-activation boost. Null when no boost applies.", + "format": "date-time", + "nullable": true + }, + "creditsIncluded": { + "type": "integer", + "description": "Gets or sets the effective primary credit allowance.", + "format": "int64", + "nullable": true, + "example": 7500 + }, + "creditsUsed": { + "type": "integer", + "description": "Gets or sets the whole credits consumed in the current primary period.", + "format": "int64", + "nullable": true, + "example": 1824 + }, + "creditsAvailable": { + "type": "integer", + "description": "Gets or sets the non-negative whole credits remaining in the current primary period.", + "format": "int64", + "nullable": true, + "example": 5676 + }, + "creditsUsedPercentage": { + "type": "number", + "description": "Gets or sets the percentage of primary credits consumed, capped at 100.", + "format": "double", + "nullable": true, + "example": 24.3 + }, + "primaryPeriodEnd": { + "type": "string", + "description": "Gets or sets the exclusive end of the current primary credit period.", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Reports whether the authenticated user may start AI execution and exposes customer-safe credit usage." + }, + "AiQuotaConfigurationResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Identifier of this immutable configuration version. Clients use it for optimistic concurrency when saving a replacement.", + "format": "uuid", + "example": "7f46eb64-ae32-4ac7-af03-118c5599c684" + }, + "options": { + "$ref": "#/components/schemas/AiQuotaOptions" + }, + "createdOn": { + "type": "string", + "description": "UTC time at which this version was created.", + "format": "date-time", + "example": "2026-08-03T09:30:00Z" + }, + "createdBy": { + "type": "string", + "description": "Identifier of the authenticated internal operator who created this version.", + "format": "uuid", + "example": "b35d6f6d-fcc2-4e41-9380-1c14c2948847" + } + }, + "additionalProperties": false, + "description": "Returns one immutable AI quota configuration version together with its audit metadata." + }, + "AiQuotaLimitOptions": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "Stable identifier for this limit within its plan, used to match configuration, stored snapshots, and temporary overrides.", + "nullable": true, + "example": "monthly" + }, + "role": { + "type": "string", + "description": "Purpose of the limit shown in administrator status: `Primary` is the plan's monthly allowance, `Secondary` paces usage over a shorter period, and `ShortTerm` limits bursts.", + "nullable": true, + "example": "Primary" + }, + "amountType": { + "type": "string", + "description": "Determines how AiService.Feature.Quota.Models.AiQuotaLimitOptions.AmountValue is calculated: `AbsoluteCredits` is a fixed customer-credit amount and `PercentOfPrimary` derives an amount from the plan's primary limit.", + "nullable": true, + "example": "AbsoluteCredits" + }, + "amountValue": { + "type": "number", + "description": "Limit amount expressed either as customer credits or as a whole-number percentage of the primary limit, according to AiService.Feature.Quota.Models.AiQuotaLimitOptions.AmountType.", + "format": "double", + "example": 1750 + }, + "windowType": { + "type": "string", + "description": "Determines the evaluated time range: `Aligned` uses fixed boundaries from AiService.Feature.Quota.Models.AiQuotaLimitOptions.WindowAnchor, while `Rolling` looks back from the current check time.", + "nullable": true, + "example": "Aligned" + }, + "windowUnit": { + "type": "string", + "description": "Time unit combined with AiService.Feature.Quota.Models.AiQuotaLimitOptions.WindowLength to define the limit's evaluation period: `Month`, `Day`, or `Hour`.", + "nullable": true, + "example": "Month" + }, + "windowLength": { + "type": "integer", + "description": "Number of AiService.Feature.Quota.Models.AiQuotaLimitOptions.WindowUnit units included in one evaluation period.", + "format": "int32", + "example": 1 + }, + "windowAnchor": { + "type": "string", + "description": "Boundary from which aligned windows are calculated. `QuotaPeriodStart` ties them to the workspace's shared monthly quota period.", + "nullable": true, + "example": "QuotaPeriodStart" + }, + "enforcement": { + "type": "string", + "description": "Action taken once consumed credits reach the limit. `HardBlock` prevents new model and tool execution while allowing already-started runs to finish.", + "nullable": true, + "example": "HardBlock" + }, + "priority": { + "type": "integer", + "description": "Ordering value used to choose which exhausted limit is reported when multiple limits block the same user.", + "format": "int32", + "example": 1 + } + }, + "additionalProperties": false, + "description": "Defines one credit limit that is evaluated before AI model or tool execution begins." + }, + "AiQuotaOptions": { + "type": "object", + "properties": { + "plans": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/AiQuotaPlanOptions" + }, + "description": "Quota definitions keyed by the required logical plan names `Starter`, `Plus`, `Pro`, and `Max`.", + "nullable": true, + "example": { + "Starter": { + "creditsPerUsd": 100, + "limits": [ + { + "key": "monthly", + "role": "Primary", + "amountType": "AbsoluteCredits", + "amountValue": 1750, + "windowType": "Aligned", + "windowUnit": "Month", + "windowLength": 1, + "windowAnchor": "QuotaPeriodStart", + "enforcement": "HardBlock", + "priority": 1 + } + ] + }, + "Plus": { + "creditsPerUsd": 100, + "limits": [ + { + "key": "monthly", + "role": "Primary", + "amountType": "AbsoluteCredits", + "amountValue": 3500, + "windowType": "Aligned", + "windowUnit": "Month", + "windowLength": 1, + "windowAnchor": "QuotaPeriodStart", + "enforcement": "HardBlock", + "priority": 1 + } + ] + }, + "Pro": { + "creditsPerUsd": 100, + "limits": [ + { + "key": "monthly", + "role": "Primary", + "amountType": "AbsoluteCredits", + "amountValue": 7500, + "windowType": "Aligned", + "windowUnit": "Month", + "windowLength": 1, + "windowAnchor": "QuotaPeriodStart", + "enforcement": "HardBlock", + "priority": 1 + } + ] + }, + "Max": { + "creditsPerUsd": 105, + "limits": [ + { + "key": "monthly", + "role": "Primary", + "amountType": "AbsoluteCredits", + "amountValue": 16000, + "windowType": "Aligned", + "windowUnit": "Month", + "windowLength": 1, + "windowAnchor": "QuotaPeriodStart", + "enforcement": "HardBlock", + "priority": 1 + } + ] + } + } + }, + "internalProfiles": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/AiQuotaPlanOptions" + }, + "description": "Profile definitions for sponsored users, including the special `NoCredits` and `Unlimited` modes.", + "nullable": true + }, + "allowUnlimitedInternalProfile": { + "type": "boolean", + "description": "Gets or sets whether sponsored users can use the unmetered `Unlimited` profile." + }, + "includedPlans": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/AiQuotaPlanOptions" + }, + "description": "Included limited-access profiles keyed by normalized base-subscription plan.", + "nullable": true + }, + "exhaustedQuotaFallback": { + "$ref": "#/components/schemas/AiExhaustedQuotaFallbackOptions" + }, + "activation": { + "$ref": "#/components/schemas/AiQuotaActivationOptions" + } + }, + "additionalProperties": false, + "description": "Defines the complete global AI quota policy stored as one immutable configuration version." + }, + "AiQuotaPlanOptions": { + "type": "object", + "properties": { + "creditsPerUsd": { + "type": "number", + "description": "Gets or sets how many customer credits one USD of attributed provider cost consumes.", + "format": "double", + "example": 100 + }, + "limits": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AiQuotaLimitOptions" + }, + "description": "Limits evaluated together for the plan. The user must remain below every hard limit to begin AI execution, and exactly one limit must have the `Primary` role.", + "nullable": true, + "example": [ + { + "key": "monthly", + "role": "Primary", + "amountType": "AbsoluteCredits", + "amountValue": 1750, + "windowType": "Aligned", + "windowUnit": "Month", + "windowLength": 1, + "windowAnchor": "QuotaPeriodStart", + "enforcement": "HardBlock", + "priority": 1 + } + ] + } + }, + "additionalProperties": false, + "description": "Defines every credit limit and the internal conversion factor for one logical awork AI plan." + }, + "AiQuotaPlanType": { + "enum": [ + "Paid", + "Sponsored" + ], + "type": "string", + "description": "Identifies the entitlement family for a customer-visible AI quota plan." + }, + "AiQuotaUsageResetResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Gets or sets the reset identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "scope": { + "type": "string", + "description": "Gets or sets the reset scope.", + "nullable": true + }, + "workspaceId": { + "type": "string", + "description": "Gets or sets the affected workspace, when applicable.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "userId": { + "type": "string", + "description": "Gets or sets the affected user, when applicable.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "resetOn": { + "type": "string", + "description": "Gets or sets the inclusive time from which usage counts again.", + "format": "date-time" + }, + "reason": { + "type": "string", + "description": "Gets or sets the reset explanation.", + "nullable": true + }, + "reference": { + "type": "string", + "description": "Gets or sets the optional incident or support reference.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Reports a stored AI quota usage reset." + }, + "AiSpeechTokenResponseModel": { + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "Gets or sets the short-lived Azure Speech authorization token.", + "nullable": true + }, + "region": { + "type": "string", + "description": "Gets or sets the Azure Speech region the token belongs to.", + "nullable": true + }, + "expiresInSeconds": { + "type": "integer", + "description": "Gets or sets the number of seconds until the token expires.", + "format": "int32" + } + }, + "additionalProperties": false, + "description": "Response model containing the authorization details required to initialize Azure Speech recognition." + }, + "AiThreadAdminMetadataResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Gets or sets the thread identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "type": { + "type": "string", + "description": "Gets or sets the thread type.", + "nullable": true + }, + "title": { + "type": "string", + "description": "Gets or sets the contextual thread title. A private thread title is available only to its creator.\nContributors do not widen this: they exist only on project- or task-backed threads, whose titles are never masked.", + "nullable": true + }, + "createdBy": { + "type": "string", + "description": "Gets or sets the human creator identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "agentId": { + "type": "string", + "description": "Gets or sets the associated Agent identifier.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "agentNameSnapshot": { + "type": "string", + "description": "Gets or sets the Agent display name captured for the initial run.", + "nullable": true + }, + "executionType": { + "type": "string", + "description": "Gets or sets the initial execution trigger type: direct, task-assignment, project-assignment, mention, schedule, automation, queue, delegation, or workflow.", + "nullable": true + }, + "projectId": { + "type": "string", + "description": "Gets or sets the project context identifier.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "taskId": { + "type": "string", + "description": "Gets or sets the task context identifier.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "clientId": { + "type": "string", + "description": "Gets or sets the client context identifier.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "status": { + "type": "string", + "description": "Gets or sets the current thread status.", + "nullable": true + }, + "creditsUsed": { + "type": "integer", + "description": "Gets or sets the whole credits attributed to this thread for workspace administration.\nThis display value is independent from aggregate quota accounting.", + "format": "int64" + }, + "createdOn": { + "type": "string", + "description": "Gets or sets when the thread was created.", + "format": "date-time", + "nullable": true + }, + "lastActivityOn": { + "type": "string", + "description": "Gets or sets when the thread last had user-visible activity.", + "format": "date-time", + "nullable": true + }, + "updatedOn": { + "type": "string", + "description": "Gets or sets when the thread was last updated.", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Contains safe thread metadata for workspace AI administration." + }, + "AiThreadContributorResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The contributor identifier.", + "format": "uuid", + "example": "70c0f52e-d9af-45e7-b260-a75592a64e43" + }, + "userId": { + "type": "string", + "description": "The user identifier.", + "format": "uuid", + "example": "9ad63972-4396-4b0b-9e7d-40b852cdebf8" + }, + "accessLevel": { + "type": "string", + "description": "The contributor access level.", + "nullable": true, + "example": "manage" + } + }, + "additionalProperties": false, + "description": "Represents a user who explicitly joined an agent thread." + }, + "AiThreadCreateRequestModel": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The thread type.", + "nullable": true, + "example": "custom-agent" + }, + "agentId": { + "type": "string", + "description": "The Custom agent used by the thread or guided flow. For an agent-owned skill flow, this is the skill owner.", + "format": "uuid", + "example": "4d22e163-2b4a-4d47-b51c-5b2217f84f57" + }, + "skillId": { + "type": "string", + "description": "The skill id for a guided skill flow.", + "format": "uuid", + "example": "0d291ab9-5b6d-4dd7-a0bd-842aca19a9e2" + }, + "setupFlow": { + "type": "string", + "description": "The optional setup flow.", + "nullable": true, + "example": "skill-improvement" + }, + "initialMessage": { + "$ref": "#/components/schemas/InitialAgentSessionMessageRequestModel" + }, + "contextFiles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WorkerBootstrapContextFileModel" + }, + "description": "The context files to attach to an agent runtime thread.", + "nullable": true + }, + "title": { + "type": "string", + "description": "The thread title.", + "nullable": true, + "example": "Weekly client status report" + }, + "sourceType": { + "$ref": "#/components/schemas/AgentSessionSourceType" + }, + "invocationType": { + "$ref": "#/components/schemas/AgentThreadInvocationType" + }, + "sourceId": { + "type": "string", + "description": "The source id for an agent runtime thread.", + "nullable": true, + "example": "api-client-status-run" + }, + "projectId": { + "type": "string", + "description": "The project context id.", + "format": "uuid", + "nullable": true, + "example": "c907b29e-f640-4639-910d-722623fd5b4a" + }, + "taskId": { + "type": "string", + "description": "The task context id.", + "format": "uuid", + "nullable": true, + "example": "d88ef8fa-e549-4ca6-96d8-83f5be9d37a2" + }, + "clientId": { + "type": "string", + "description": "The client context id.", + "format": "uuid", + "nullable": true, + "example": "61341e18-3e3f-4efb-b471-b781e64f69f7" + }, + "documentId": { + "type": "string", + "description": "The document context id.", + "format": "uuid", + "nullable": true, + "example": "5a442338-8da3-49e9-a702-b45d6f829d43" + }, + "modelProvider": { + "type": "string", + "description": "The model provider selected for the initial message.", + "nullable": true, + "example": "openai" + }, + "modelName": { + "type": "string", + "description": "The model name selected for the initial message.", + "nullable": true, + "example": "gpt-5.6-terra" + }, + "reasoningLevel": { + "type": "string", + "description": "The reasoning level selected for the initial message.", + "nullable": true, + "example": "medium" + }, + "toolAccess": { + "$ref": "#/components/schemas/AgentToolAccessOptionsModel" + }, + "connectorIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The exact connector list selected for the initial message.", + "nullable": true + }, + "connectorConnections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentMessageConnectorConnectionRequestModel" + }, + "description": "Per-message connection choices for custom-agent connectors.", + "nullable": true + }, + "skillIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The exact skill list selected for the initial message.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the request payload for creating an AI thread." + }, + "AiThreadCreatedResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The thread id.", + "format": "uuid", + "example": "6cbb219e-839d-4d23-b273-3a78bbd842ae" + }, + "threadRunId": { + "type": "string", + "description": "The current run id.", + "format": "uuid", + "nullable": true, + "example": "8f934a03-8f8b-44ea-9137-3ca563bb75e8" + }, + "type": { + "type": "string", + "description": "The thread type.", + "nullable": true, + "example": "custom-agent" + }, + "title": { + "type": "string", + "description": "The thread title.", + "nullable": true, + "example": "Weekly client status report" + }, + "status": { + "type": "string", + "description": "The thread status.", + "nullable": true, + "example": "running" + }, + "createdOn": { + "type": "string", + "description": "The creation timestamp.", + "format": "date-time", + "nullable": true, + "example": "2026-08-29T08:00:00Z" + }, + "createdBy": { + "type": "string", + "description": "The id of the user who created the thread.", + "format": "uuid", + "example": "9ad63972-4396-4b0b-9e7d-40b852cdebf8" + }, + "updatedOn": { + "type": "string", + "description": "The last update timestamp.", + "format": "date-time", + "nullable": true, + "example": "2026-08-29T08:05:00Z" + }, + "updatedBy": { + "type": "string", + "description": "The id of the user who last updated the thread.", + "format": "uuid", + "example": "9ad63972-4396-4b0b-9e7d-40b852cdebf8" + }, + "agentId": { + "type": "string", + "description": "The custom agent id.", + "format": "uuid", + "nullable": true, + "example": "4d22e163-2b4a-4d47-b51c-5b2217f84f57" + }, + "projectId": { + "type": "string", + "description": "The associated project id.", + "format": "uuid", + "nullable": true, + "example": "c907b29e-f640-4639-910d-722623fd5b4a" + }, + "taskId": { + "type": "string", + "description": "The associated task id.", + "format": "uuid", + "nullable": true, + "example": "d88ef8fa-e549-4ca6-96d8-83f5be9d37a2" + }, + "clientId": { + "type": "string", + "description": "The associated client id.", + "format": "uuid", + "nullable": true, + "example": "61341e18-3e3f-4efb-b471-b781e64f69f7" + }, + "documentId": { + "type": "string", + "description": "The associated document id.", + "format": "uuid", + "nullable": true, + "example": "5a442338-8da3-49e9-a702-b45d6f829d43" + }, + "lastSequence": { + "type": "integer", + "description": "The latest persisted event sequence.", + "format": "int64", + "example": 42 + } + }, + "additionalProperties": false, + "description": "Represents a newly created AI thread regardless of its runtime type." + }, + "AiThreadMessageAcceptedResponseModel": { + "type": "object", + "properties": { + "threadId": { + "type": "string", + "description": "The thread id.", + "format": "uuid", + "example": "6cbb219e-839d-4d23-b273-3a78bbd842ae" + }, + "threadRunId": { + "type": "string", + "description": "The run id when the message started immediately.", + "format": "uuid", + "nullable": true, + "example": "8f934a03-8f8b-44ea-9137-3ca563bb75e8" + }, + "clientMessageId": { + "type": "string", + "description": "The client idempotency key.", + "nullable": true, + "example": "client-status-2026-08-29" + }, + "acceptedMessageId": { + "type": "string", + "description": "The persisted thread message id when the message started immediately.", + "format": "uuid", + "nullable": true, + "example": "66fcbdc5-2ae6-43bd-b3ab-f18ccd24909a" + }, + "queuedMessageId": { + "type": "string", + "description": "The persisted queue entry id when the message must wait.", + "format": "uuid", + "nullable": true, + "example": "1d7279ac-342c-431c-bba5-16c65f2342c3" + }, + "queueOrder": { + "type": "integer", + "description": "The message's current queue position when it must wait.", + "format": "int32", + "nullable": true, + "example": 1 + }, + "isQueued": { + "type": "boolean", + "description": "Whether the backend stored the message in the queue.", + "example": false + }, + "lastSequence": { + "type": "integer", + "description": "The last thread event sequence produced by immediate acceptance.", + "format": "int64", + "example": 42 + }, + "status": { + "type": "string", + "description": "The processing status.", + "nullable": true, + "example": "in_progress" + } + }, + "additionalProperties": false, + "description": "Represents the backend's final acceptance decision for one submitted thread message." + }, + "AiThreadMessageProcessingStatusResponseModel": { + "type": "object", + "properties": { + "clientMessageId": { + "type": "string", + "description": "The client-generated message id.", + "nullable": true, + "example": "client-status-2026-08-29" + }, + "status": { + "type": "string", + "description": "The processing status.", + "nullable": true, + "example": "completed" + }, + "hasAgentResponse": { + "type": "boolean", + "description": "Whether an agent response was persisted.", + "example": true + }, + "responseId": { + "type": "string", + "description": "The persisted agent response id.", + "nullable": true, + "example": "msg_01K4CLIENTSTATUS" + }, + "lastSequenceNumber": { + "type": "integer", + "description": "The last streamed sequence number observed for the response.", + "format": "int32", + "nullable": true, + "example": 42 + }, + "error": { + "type": "string", + "description": "The processing error, if any.", + "nullable": true, + "example": "The model provider could not complete the run." + } + }, + "additionalProperties": false, + "description": "Represents the processing status for a thread message." + }, + "AiThreadMessageRequestModel": { + "type": "object", + "properties": { + "content": { + "type": "string", + "description": "The message content.", + "nullable": true, + "example": "Add the latest budget and launch-date risks to the Acme client report." + }, + "modelProvider": { + "type": "string", + "description": "The model provider selected for this message.", + "nullable": true, + "example": "openai" + }, + "modelName": { + "type": "string", + "description": "The model name selected for this message.", + "nullable": true, + "example": "gpt-5.6-terra" + }, + "reasoningLevel": { + "type": "string", + "description": "The reasoning level selected for this message.", + "nullable": true, + "example": "medium" + }, + "toolAccess": { + "$ref": "#/components/schemas/AgentToolAccessOptionsModel" + }, + "connectorIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The exact connector list selected for this message.", + "nullable": true + }, + "connectorConnections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentMessageConnectorConnectionRequestModel" + }, + "description": "Per-message connection choices for custom-agent connectors.\nThese choices do not update personal-agent or custom-agent configuration.", + "nullable": true + }, + "skillIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The exact skill list selected for this message.", + "nullable": true + }, + "clientMessageId": { + "type": "string", + "description": "Client-generated idempotency key for the user message.", + "nullable": true, + "example": "client-status-2026-08-29" + }, + "answerToInterruptId": { + "type": "string", + "description": "The interrupt identifier of the user question this message answers.", + "nullable": true, + "example": "interrupt_01K4CLIENTSTATUS" + }, + "url": { + "type": "string", + "description": "The URL of the page where the user is when sending the message.", + "nullable": true, + "example": "https://app.awork.com/northstar/projects/acme-website" + }, + "useCompanySearch": { + "type": "boolean", + "description": "Whether the agent must search company sources for this message before answering.", + "example": false + }, + "runId": { + "type": "string", + "description": "Optional Agent-UI (AG-UI) run identifier for this streamed response.", + "nullable": true, + "example": "run_01K4CLIENTSTATUS" + }, + "temporaryFileIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "Optional temporary file identifiers uploaded by the chat client.", + "nullable": true + }, + "temporaryFiles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TemporaryFileReference" + }, + "description": "Optional display metadata for the temporary files attached to this message.", + "nullable": true + }, + "contextFiles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WorkerBootstrapContextFileModel" + }, + "description": "The context files to add to an agent runtime thread message.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the request payload for posting a message to an AI thread." + }, + "AiThreadQueueResponseModel": { + "type": "object", + "properties": { + "messages": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AiThreadQueuedMessageResponseModel" + }, + "description": "Gets or sets the ordered queued messages.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the shared queued-message state for one thread." + }, + "AiThreadQueuedMessageOrderRequestModel": { + "required": [ + "order" + ], + "type": "object", + "properties": { + "order": { + "maximum": 10, + "minimum": 1, + "type": "integer", + "description": "Gets or sets the requested one-based queue position.", + "format": "int32" + } + }, + "additionalProperties": false, + "description": "Represents a request to move one queued message." + }, + "AiThreadQueuedMessageResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the entity.", + "format": "uuid", + "example": "23e68187-91d6-4f7e-8d31-e3f2c60d7427" + }, + "createdOn": { + "type": "string", + "description": "The date this entity was created.", + "format": "date-time", + "example": "2022-03-11T15:33:47.100Z" + }, + "createdBy": { + "type": "string", + "description": "The id of the user who created this entity.", + "format": "uuid", + "example": "9ad63972-4396-4b0b-9e7d-40b852cdebf8" + }, + "updatedOn": { + "type": "string", + "description": "The date this entity was last modified.", + "format": "date-time", + "example": "2022-03-11T21:15:00.100Z" + }, + "updatedBy": { + "type": "string", + "description": "The id of the user who last modified this entity.", + "format": "uuid", + "example": "3d844c62-7410-4df9-a5b2-78805c0ee260" + }, + "threadId": { + "type": "string", + "description": "The owning thread id.", + "format": "uuid", + "example": "6cbb219e-839d-4d23-b273-3a78bbd842ae" + }, + "queueOrder": { + "type": "integer", + "description": "The position in the queue.", + "format": "int32", + "example": 1 + }, + "displayText": { + "type": "string", + "description": "The text shown in the queue.", + "nullable": true, + "example": "Add client-ready risks and next steps to the status report." + }, + "payload": { + "$ref": "#/components/schemas/AiThreadMessageRequestModel" + }, + "responsibleUserId": { + "type": "string", + "description": "The user whose permissions apply at dispatch time.", + "format": "uuid", + "example": "9ad63972-4396-4b0b-9e7d-40b852cdebf8" + }, + "blockedReason": { + "type": "string", + "description": "The stable reason that prevents automatic dispatch.", + "nullable": true, + "example": "interrupted" + } + }, + "additionalProperties": false, + "description": "Represents one message request waiting in a thread queue." + }, + "AiThreadQueuedMessageUpdateRequestModel": { + "type": "object", + "properties": { + "content": { + "type": "string", + "description": "The message content.", + "nullable": true, + "example": "Add the latest budget and launch-date risks to the Acme client report." + }, + "modelProvider": { + "type": "string", + "description": "The model provider selected for this message.", + "nullable": true, + "example": "openai" + }, + "modelName": { + "type": "string", + "description": "The model name selected for this message.", + "nullable": true, + "example": "gpt-5.6-terra" + }, + "reasoningLevel": { + "type": "string", + "description": "The reasoning level selected for this message.", + "nullable": true, + "example": "medium" + }, + "toolAccess": { + "$ref": "#/components/schemas/AgentToolAccessOptionsModel" + }, + "connectorIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The exact connector list selected for this message.", + "nullable": true + }, + "connectorConnections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentMessageConnectorConnectionRequestModel" + }, + "description": "Per-message connection choices for custom-agent connectors.\nThese choices do not update personal-agent or custom-agent configuration.", + "nullable": true + }, + "skillIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The exact skill list selected for this message.", + "nullable": true + }, + "clientMessageId": { + "type": "string", + "description": "Client-generated idempotency key for the user message.", + "nullable": true, + "example": "client-status-2026-08-29" + }, + "answerToInterruptId": { + "type": "string", + "description": "The interrupt identifier of the user question this message answers.", + "nullable": true, + "example": "interrupt_01K4CLIENTSTATUS" + }, + "url": { + "type": "string", + "description": "The URL of the page where the user is when sending the message.", + "nullable": true, + "example": "https://app.awork.com/northstar/projects/acme-website" + }, + "useCompanySearch": { + "type": "boolean", + "description": "Whether the agent must search company sources for this message before answering.", + "example": false + }, + "runId": { + "type": "string", + "description": "Optional Agent-UI (AG-UI) run identifier for this streamed response.", + "nullable": true, + "example": "run_01K4CLIENTSTATUS" + }, + "temporaryFileIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "Optional temporary file identifiers uploaded by the chat client.", + "nullable": true + }, + "temporaryFiles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TemporaryFileReference" + }, + "description": "Optional display metadata for the temporary files attached to this message.", + "nullable": true + }, + "contextFiles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WorkerBootstrapContextFileModel" + }, + "description": "The context files to add to an agent runtime thread message.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the complete replacement payload for a queued message." + }, + "AiThreadUpdateRequestModel": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "description": "Gets or sets the project to attach to a thread that has no project.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "title": { + "type": "string", + "description": "Gets or sets the thread title.", + "nullable": true + }, + "rating": { + "enum": [ + "positive", + "negative" + ], + "type": "string", + "description": "Gets or sets the user rating for the thread.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the request payload for updating AI thread metadata." + }, + "AiToolCall": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The tool call id.", + "nullable": true, + "example": "call_01K4CLIENTSTATUS" + }, + "toolName": { + "type": "string", + "description": "The tool name.", + "nullable": true, + "example": "code_mode_execute" + }, + "connectorId": { + "type": "string", + "description": "The connector id.", + "format": "uuid", + "nullable": true, + "example": "7e376777-7834-4af6-9eb8-da065f568d30" + }, + "connectionId": { + "type": "string", + "description": "The connection id.", + "format": "uuid", + "nullable": true, + "example": "af18602d-c8aa-4f63-a21e-5a7f59b2412c" + }, + "arguments": { + "type": "object", + "additionalProperties": {}, + "description": "The tool arguments.", + "nullable": true + }, + "response": { + "type": "string", + "description": "The response.", + "nullable": true, + "example": "{\"status\":\"completed\"}" + } + }, + "additionalProperties": false, + "description": "Represents a pending agent tool call." + }, + "AiUserPlanStateInternalModel": { + "type": "object", + "properties": { + "accessSource": { + "type": "string", + "description": "Whether the assignment is paid through Chargebee, sponsored by awork, or included with the base plan.", + "nullable": true + }, + "workspaceId": { + "type": "string", + "description": "Workspace whose AI entitlement owns the assignment and shared quota period.", + "format": "uuid", + "example": "0aa6f9a2-c11d-4ecf-a789-701b7c9c01aa" + }, + "userId": { + "type": "string", + "description": "Active awork user whose quota snapshot must be synchronized.", + "format": "uuid", + "example": "84d132c8-9499-4e55-9e8f-fb79b1d4a610" + }, + "plan": { + "type": "string", + "description": "Paid plan, sponsored profile, normalized included plan, or the NoAi marker of a seatless user\nin a paid workspace, confirmed by subscriptions-service.", + "nullable": true, + "example": "Plus" + }, + "fallbackQuotaPlan": { + "type": "string", + "description": "Normalized base-subscription plan that funds exhausted-quota fallback access.", + "nullable": true, + "example": "Professional" + }, + "quotaPlanOverride": { + "type": "string", + "description": "Temporary workspace minimum quota plan copied at first activation. The higher of this value and AiService.Feature.Quota.Models.AiUserPlanStateInternalModel.Plan determines the user's quota plan.", + "nullable": true, + "example": "Pro" + }, + "quotaPlanOverrideEndsOn": { + "type": "string", + "description": "Exclusive UTC end of the temporary minimum quota plan. Null when no activation boost applies.", + "format": "date-time", + "nullable": true, + "example": "2026-09-01T00:00:00Z" + }, + "primaryPeriodStart": { + "type": "string", + "description": "Inclusive UTC start of the workspace's current shared monthly quota period.", + "format": "date-time", + "example": "2026-08-01T00:00:00Z" + }, + "primaryPeriodEnd": { + "type": "string", + "description": "Exclusive UTC end of the workspace's current shared monthly quota period.", + "format": "date-time", + "example": "2026-09-01T00:00:00Z" + }, + "workspaceCreditLimit": { + "type": "integer", + "description": "Shared monthly workspace credit maximum. Present only for sponsored access.", + "format": "int64", + "nullable": true + }, + "sourceVersion": { + "type": "integer", + "description": "Monotonically increasing subscriptions-service version used by ai-service to ignore stale or replayed synchronization messages.", + "format": "int64", + "example": 42 + } + }, + "additionalProperties": false, + "description": "Transfers one user's confirmed commercial AI plan and shared quota-period state from subscriptions-service to ai-service." + }, + "AiUserQuotaOverrideResponseModel": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "User whose quota adjustment was stored.", + "format": "uuid", + "example": "84d132c8-9499-4e55-9e8f-fb79b1d4a610" + }, + "effectiveOn": { + "type": "string", + "description": "UTC time at which the adjustment starts applying.", + "format": "date-time", + "example": "2026-08-03T10:00:00Z" + }, + "endsOn": { + "type": "string", + "description": "Exclusive UTC time at which the adjustment stops applying.", + "format": "date-time", + "example": "2026-09-01T00:00:00Z" + } + }, + "additionalProperties": false, + "description": "Confirms the stored temporary support adjustment and when it is effective." + }, + "AiUserQuotaStatusResponseModel": { + "type": "object", + "properties": { + "accessSource": { + "type": "string", + "description": "Whether the entitlement is paid, sponsored, or included with the base plan.", + "nullable": true + }, + "quotaMode": { + "type": "string", + "description": "Whether the quota is blocked, metered, or unlimited.", + "nullable": true + }, + "isUnlimited": { + "type": "boolean", + "description": "True when the user has unlimited AI access." + }, + "userId": { + "type": "string", + "description": "Identifier of the active awork user whose quota was evaluated.", + "format": "uuid", + "example": "84d132c8-9499-4e55-9e8f-fb79b1d4a610" + }, + "isBlocked": { + "type": "boolean", + "description": "True when at least one configured hard limit currently prevents the user from starting AI execution.", + "example": true + }, + "executionMode": { + "type": "string", + "description": "Whether execution is full, limited by exhausted-quota fallback, or blocked.", + "nullable": true + }, + "blockingLimitRole": { + "type": "string", + "description": "Administrator-facing category of the reported exhausted limit: `Primary` for monthly allowance, `Secondary` for pacing, or `ShortTerm` for burst protection. Null when the user is not blocked.", + "nullable": true, + "example": "Primary" + }, + "availableAgainOn": { + "type": "string", + "description": "Earliest known UTC time at which the reported limit releases or resets. Null when the user is not blocked or no reliable time is known.", + "format": "date-time", + "nullable": true, + "example": "2026-09-01T00:00:00Z" + }, + "canUpgrade": { + "type": "boolean", + "description": "True when the current catalog contains a self-service AI plan above the user's confirmed paid plan.", + "example": true + }, + "plan": { + "type": "string", + "description": "Gets or sets the user's assigned entitlement plan.", + "nullable": true + }, + "quotaPlan": { + "type": "string", + "description": "Gets or sets the effective quota plan used for the current period.", + "nullable": true + }, + "activationBoostEndsOn": { + "type": "string", + "description": "Gets or sets the exclusive end of the first-activation boost. Null when no boost applies.", + "format": "date-time", + "nullable": true + }, + "creditsIncluded": { + "type": "integer", + "description": "Gets or sets the effective primary credit allowance.", + "format": "int64", + "nullable": true + }, + "creditsUsed": { + "type": "integer", + "description": "Gets or sets the whole credits consumed in the current primary period.", + "format": "int64", + "nullable": true + }, + "creditsAvailable": { + "type": "integer", + "description": "Gets or sets the non-negative whole credits remaining in the current primary period.", + "format": "int64", + "nullable": true + }, + "creditsUsedPercentage": { + "type": "number", + "description": "Gets or sets the percentage of primary credits consumed, capped at 100.", + "format": "double", + "nullable": true + }, + "primaryPeriodEnd": { + "type": "string", + "description": "Gets or sets the exclusive end of the current primary credit period.", + "format": "date-time", + "nullable": true + }, + "lastManualResetOn": { + "type": "string", + "description": "Gets or sets the latest manual quota usage reset that applies to this user.", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Reports an eligible user's current customer-safe credit state to workspace administrators." + }, + "CompanySearchAvailabilityModel": { + "type": "object", + "properties": { + "available": { + "type": "boolean" + }, + "sources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CompanySearchSourceModel" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "CompanySearchSourceModel": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "type": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "ConfirmationAction": { + "type": "object", + "properties": { + "actionDescriptionEn": { + "type": "string", + "description": "The English action description.", + "nullable": true, + "example": "Delete draft tasks" + }, + "actionDescriptionDe": { + "type": "string", + "description": "The German action description.", + "nullable": true, + "example": "Entwurfsaufgaben löschen" + }, + "itemNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The displayed affected item names.", + "nullable": true + }, + "itemCount": { + "type": "integer", + "description": "The item count.", + "format": "int32", + "example": 3 + }, + "hasMoreItems": { + "type": "boolean", + "description": "Whether more affected items exist.", + "example": false + } + }, + "additionalProperties": false, + "description": "A single action that requires confirmation with both English and German translations." + }, + "ConfirmationDetails": { + "type": "object", + "properties": { + "headerMessageEn": { + "type": "string", + "description": "The English confirmation heading.", + "nullable": true, + "example": "Delete draft tasks" + }, + "headerMessageDe": { + "type": "string", + "description": "The German confirmation heading.", + "nullable": true, + "example": "Entwurfsaufgaben löschen" + }, + "confirmationQuestionEn": { + "type": "string", + "description": "The English confirmation question.", + "nullable": true, + "example": "Delete 3 draft tasks from the Acme website project?" + }, + "confirmationQuestionDe": { + "type": "string", + "description": "The German confirmation question.", + "nullable": true, + "example": "3 Entwurfsaufgaben aus dem Acme-Website-Projekt löschen?" + }, + "confirmButtonTextEn": { + "type": "string", + "description": "The English confirm button label.", + "nullable": true, + "example": "Delete" + }, + "confirmButtonTextDe": { + "type": "string", + "description": "The German confirm button label.", + "nullable": true, + "example": "Löschen" + }, + "cancelButtonTextEn": { + "type": "string", + "description": "The English cancel button label.", + "nullable": true, + "example": "Cancel" + }, + "cancelButtonTextDe": { + "type": "string", + "description": "The German cancel button label.", + "nullable": true, + "example": "Abbrechen" + }, + "isDestructive": { + "type": "boolean", + "description": "Whether the action is destructive.", + "example": true + }, + "totalItemCount": { + "type": "integer", + "description": "The total item count.", + "format": "int32", + "example": 3 + }, + "actions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ConfirmationAction" + }, + "description": "The actions that require confirmation.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Detailed confirmation information for the UI with both English and German translations." + }, + "ConnectionAdminMetadataResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Gets or sets the connection identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "name": { + "type": "string", + "description": "Gets or sets the safe connection display name.", + "nullable": true + }, + "connectorId": { + "type": "string", + "description": "Gets or sets the connector identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "connectorName": { + "type": "string", + "description": "Gets or sets the connector display name.", + "nullable": true + }, + "ownerUserId": { + "type": "string", + "description": "Gets or sets the connection owner.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "status": { + "type": "string", + "description": "Gets or sets the authorization state.", + "nullable": true + }, + "isSharedWithWorkspace": { + "type": "boolean", + "description": "Gets or sets whether the connection is shared with the workspace." + }, + "sharedUserCount": { + "type": "integer", + "description": "Gets or sets the number of direct user shares.", + "format": "int32" + }, + "sharedTeamCount": { + "type": "integer", + "description": "Gets or sets the number of team shares.", + "format": "int32" + }, + "createdOn": { + "type": "string", + "description": "Gets or sets when the connection was created.", + "format": "date-time", + "nullable": true + }, + "updatedOn": { + "type": "string", + "description": "Gets or sets when the connection was last updated.", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Contains safe connection metadata for workspace AI administration." + }, + "ConnectionAuthorizationInitiationResponseModel": { + "type": "object", + "properties": { + "authUrl": { + "type": "string", + "description": "The URL where the user completes authorization.", + "nullable": true + }, + "error": { + "type": "string", + "description": "The machine-readable authorization error code.", + "nullable": true + }, + "errorMessage": { + "type": "string", + "description": "The human-readable authorization error message.", + "nullable": true + }, + "connection": { + "$ref": "#/components/schemas/ConnectionResponseModel" + } + }, + "additionalProperties": false + }, + "ConnectionResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The connection identifier.", + "format": "uuid", + "example": "af18602d-c8aa-4f63-a21e-5a7f59b2412c" + }, + "connectorId": { + "type": "string", + "description": "The connector identifier.", + "format": "uuid", + "example": "7e376777-7834-4af6-9eb8-da065f568d30" + }, + "ownerUserId": { + "type": "string", + "description": "User identifier of the connection owner.", + "format": "uuid", + "example": "9ad63972-4396-4b0b-9e7d-40b852cdebf8" + }, + "name": { + "type": "string", + "description": "The connection display name.", + "nullable": true, + "example": "Client CRM connection" + }, + "externalIdentity": { + "type": "string", + "description": "The external identity associated with the connection.", + "nullable": true, + "example": "account.manager@northstar.agency" + }, + "status": { + "type": "string", + "description": "The human-readable connection status.", + "nullable": true, + "example": "connected" + }, + "isSharedWithWorkspace": { + "type": "boolean", + "description": "Whether the connection is shared with the complete workspace.", + "example": true + }, + "isOwner": { + "type": "boolean", + "description": "Whether the current user owns the connection.", + "example": true + }, + "lastAuthenticatedOn": { + "type": "string", + "description": "When the connection was last authorized.", + "format": "date-time", + "nullable": true, + "example": "2026-08-29T08:00:00Z" + }, + "lastRefreshedOn": { + "type": "string", + "description": "When the connection's tools were last refreshed.", + "format": "date-time", + "nullable": true, + "example": "2026-08-29T08:05:00Z" + } + }, + "additionalProperties": false, + "description": "Represents an authenticated identity for an MCP connector." + }, + "ConnectionSharingModel": { + "type": "object", + "properties": { + "isSharedWithWorkspace": { + "type": "boolean", + "description": "Whether the connection is shared with the complete workspace." + }, + "userIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The identifiers of users with access to the connection.", + "nullable": true + }, + "teamIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The identifiers of teams with access to the connection.", + "nullable": true + } + }, + "additionalProperties": false + }, + "ConnectionSharingRequestModel": { + "required": [ + "isSharedWithWorkspace" + ], + "type": "object", + "properties": { + "isSharedWithWorkspace": { + "type": "boolean", + "description": "Whether the connection is shared with the complete workspace." + }, + "userIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The identifiers of users that should have access to the connection.", + "nullable": true + }, + "teamIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The identifiers of teams that should have access to the connection.", + "nullable": true + } + }, + "additionalProperties": false + }, + "ConnectionUpdateRequestModel": { + "required": [ + "name" + ], + "type": "object", + "properties": { + "name": { + "maxLength": 255, + "minLength": 1, + "type": "string", + "description": "The connection display name." + } + }, + "additionalProperties": false + }, + "ConnectorEndpointFieldResponseModel": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "The stable field key submitted when creating the connector.", + "nullable": true, + "example": "subdomain" + }, + "controlType": { + "type": "string", + "description": "The control type used to render the field.", + "nullable": true, + "example": "text" + }, + "labelKey": { + "type": "string", + "description": "The frontend translation key used to label the field.", + "nullable": true, + "example": "subdomain" + }, + "placeholderKey": { + "type": "string", + "description": "The optional frontend translation key used for the field placeholder.", + "nullable": true, + "example": "subdomain" + }, + "validationKind": { + "type": "string", + "description": "The optional validation kind applied to text values.", + "nullable": true, + "example": "hostLabel" + }, + "isRequired": { + "type": "boolean", + "description": "Whether the field must have a value.", + "example": true + }, + "defaultValue": { + "type": "string", + "description": "The optional default field value.", + "nullable": true, + "example": "northstar-agency" + }, + "maxLength": { + "type": "integer", + "description": "The optional maximum text length.", + "format": "int32", + "nullable": true, + "example": 63 + }, + "options": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ConnectorEndpointOptionResponseModel" + }, + "description": "The available options for select fields.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Describes one user-facing field used to configure a predefined connector endpoint." + }, + "ConnectorEndpointOptionResponseModel": { + "type": "object", + "properties": { + "value": { + "type": "string", + "description": "The stable option value submitted when creating the connector.", + "nullable": true, + "example": "eu" + }, + "labelKey": { + "type": "string", + "description": "The frontend translation key used to label the option.", + "nullable": true, + "example": "eu" + } + }, + "additionalProperties": false, + "description": "Represents one selectable connector endpoint option." + }, + "ConnectorEndpointValueResponseModel": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "The stable endpoint field key.", + "nullable": true, + "example": "region" + }, + "labelKey": { + "type": "string", + "description": "The frontend translation key used to label the field.", + "nullable": true, + "example": "dataRegion" + }, + "value": { + "type": "string", + "description": "The configured non-secret field value.", + "nullable": true, + "example": "eu" + }, + "displayLabelKey": { + "type": "string", + "description": "The optional frontend translation key used instead of the raw value.", + "nullable": true, + "example": "eu" + } + }, + "additionalProperties": false, + "description": "Represents one safely displayable configured connector endpoint value." + }, + "ConnectorPresetCompanySearchModel": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Whether the connector preset supports company search.", + "example": true + }, + "toolName": { + "type": "string", + "description": "The connector tool used for company search.", + "nullable": true, + "example": "search_companies" + }, + "queryParameterName": { + "type": "string", + "description": "The tool parameter that receives the search query.", + "nullable": true, + "example": "query" + } + }, + "additionalProperties": false + }, + "ConnectorPresetResponseModel": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "The stable connector preset key.", + "nullable": true, + "example": "hubspot" + }, + "name": { + "type": "string", + "description": "The connector preset display name.", + "nullable": true, + "example": "HubSpot" + }, + "logoPath": { + "type": "string", + "description": "The connector preset logo path.", + "nullable": true, + "example": "images/integrations/hubspot_icon.svg" + }, + "supportsDynamicClientRegistration": { + "type": "boolean", + "description": "Whether the connector supports dynamic client registration.", + "example": false + }, + "documentationUrl": { + "type": "string", + "description": "The connector documentation URL.", + "nullable": true, + "example": "https://developers.hubspot.com/docs/apps/developer-platform/build-apps/integrate-with-the-remote-hubspot-mcp-server" + }, + "isDisabled": { + "type": "boolean", + "description": "Whether the connector preset is disabled.", + "example": false + }, + "managedOAuthProviderKey": { + "type": "string", + "description": "The key of the managed OAuth provider.", + "nullable": true, + "example": "hubspot" + }, + "showOAuthCredentials": { + "type": "boolean", + "description": "Whether OAuth credential inputs should be displayed.", + "nullable": true, + "example": false + }, + "companySearch": { + "$ref": "#/components/schemas/ConnectorPresetCompanySearchModel" + }, + "endpointFields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ConnectorEndpointFieldResponseModel" + }, + "description": "The user-facing fields used to configure the connector endpoint.", + "nullable": true + } + }, + "additionalProperties": false + }, + "ConnectorPresetsResponseModel": { + "type": "object", + "properties": { + "presets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ConnectorPresetResponseModel" + }, + "description": "The predefined connector presets.", + "nullable": true + }, + "oauthCallbackUri": { + "type": "string", + "description": "The OAuth callback URI to register with OAuth providers.", + "nullable": true, + "example": "https://app.awork.com/api/v1/agents/connectors/auth/callback" + } + }, + "additionalProperties": false, + "description": "Represents the connector setup configuration available to the frontend." + }, + "ConnectorResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the entity.", + "format": "uuid", + "example": "23e68187-91d6-4f7e-8d31-e3f2c60d7427" + }, + "createdOn": { + "type": "string", + "description": "The date this entity was created.", + "format": "date-time", + "example": "2022-03-11T15:33:47.100Z" + }, + "createdBy": { + "type": "string", + "description": "The id of the user who created this entity.", + "format": "uuid", + "example": "9ad63972-4396-4b0b-9e7d-40b852cdebf8" + }, + "updatedOn": { + "type": "string", + "description": "The date this entity was last modified.", + "format": "date-time", + "example": "2022-03-11T21:15:00.100Z" + }, + "updatedBy": { + "type": "string", + "description": "The id of the user who last modified this entity.", + "format": "uuid", + "example": "3d844c62-7410-4df9-a5b2-78805c0ee260" + }, + "name": { + "type": "string", + "description": "The connector display name.", + "nullable": true, + "example": "Client CRM" + }, + "description": { + "type": "string", + "description": "The connector description.", + "nullable": true, + "example": "HubSpot CRM for lead and client account research." + }, + "url": { + "type": "string", + "description": "The custom connector URL.", + "nullable": true, + "example": null + }, + "presetKey": { + "type": "string", + "description": "The predefined connector key.", + "nullable": true, + "example": "hubspot" + }, + "endpointValues": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ConnectorEndpointValueResponseModel" + }, + "description": "The safely displayable configured endpoint values.", + "nullable": true + }, + "logoPath": { + "type": "string", + "description": "The preset logo path when this server matches a catalog preset.", + "nullable": true, + "example": "images/integrations/hubspot_icon.svg" + }, + "status": { + "type": "string", + "description": "The aggregate connection status.", + "nullable": true, + "example": "connected" + }, + "isSharedWithWorkspace": { + "type": "boolean", + "description": "Whether the connector is shared with the workspace.", + "example": true + }, + "isOwner": { + "type": "boolean", + "description": "Whether the current user owns the connector.", + "example": true + }, + "currentUserConnectionStatus": { + "type": "string", + "description": "The current user's connection status.", + "nullable": true, + "example": "connected" + }, + "lastRefreshedOn": { + "type": "string", + "description": "When the server tools were last refreshed.", + "format": "date-time", + "nullable": true, + "example": "2026-08-29T08:05:00Z" + }, + "currentUserLastAuthenticatedOn": { + "type": "string", + "description": "When the current user last authenticated this server.", + "format": "date-time", + "nullable": true, + "example": "2026-08-29T08:00:00Z" + }, + "hasOAuthClientConfiguration": { + "type": "boolean", + "description": "Whether static OAuth client credentials are configured.", + "example": true + }, + "connectionMode": { + "type": "string", + "description": "The selected connection resolution mode for an agent-linked response.", + "nullable": true, + "example": "actingUser" + }, + "connectionId": { + "type": "string", + "description": "The selected specific connection, when applicable.", + "format": "uuid", + "nullable": true, + "example": "af18602d-c8aa-4f63-a21e-5a7f59b2412c" + }, + "currentUserConnectionId": { + "type": "string", + "description": "The connection selected by the current user for acting-user resolution.", + "format": "uuid", + "nullable": true, + "example": "af18602d-c8aa-4f63-a21e-5a7f59b2412c" + }, + "connections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ConnectionResponseModel" + }, + "description": "The connections visible to the current user.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents a connector returned by the agent runtime API." + }, + "ConnectorSharingModel": { + "type": "object", + "properties": { + "isSharedWithWorkspace": { + "type": "boolean", + "description": "Whether the connector is visible to the complete workspace.", + "example": true + } + }, + "additionalProperties": false + }, + "ConnectorSharingRequestModel": { + "required": [ + "isSharedWithWorkspace" + ], + "type": "object", + "properties": { + "isSharedWithWorkspace": { + "type": "boolean", + "description": "Whether the connector should be visible to the complete workspace.", + "example": true + } + }, + "additionalProperties": false + }, + "ConnectorToolResponseModel": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The tool name.", + "nullable": true + }, + "description": { + "type": "string", + "description": "The tool description.", + "nullable": true + }, + "inputSchema": { + "description": "The JSON schema describing the tool input.", + "nullable": true + } + }, + "additionalProperties": false + }, + "CreateAgentDelegationRequestModel": { + "type": "object", + "properties": { + "delegatedAgentId": { + "type": "string", + "description": "Gets or sets the delegated agent id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "name": { + "type": "string", + "description": "Gets or sets the name.", + "nullable": true + }, + "description": { + "type": "string", + "description": "Gets or sets the description.", + "nullable": true + }, + "executionMode": { + "type": "string", + "description": "Gets or sets the execution mode.", + "nullable": true + }, + "promptOverride": { + "type": "string", + "description": "Gets or sets the prompt override.", + "nullable": true + }, + "sortOrder": { + "type": "integer", + "description": "Gets or sets the sort order.", + "format": "int32" + } + }, + "additionalProperties": false, + "description": "Represents the create agent delegation request payload for the agent runtime API." + }, + "CreateAgentMemoryRequestModel": { + "type": "object", + "properties": { + "content": { + "type": "string", + "description": "Gets or sets the content Mem0 should infer memory from.", + "nullable": true + }, + "scope": { + "type": "string", + "description": "Gets or sets the memory scope. Defaults to agent.", + "nullable": true + }, + "projectId": { + "type": "string", + "description": "Gets or sets the project id for project-scoped memory.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "clientId": { + "type": "string", + "description": "Gets or sets the client id for client-scoped memory.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + } + }, + "additionalProperties": false, + "description": "Represents a request to store a new agent memory." + }, + "CreateAgentRequestModel": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The agent name.", + "nullable": true, + "example": "Client Status Reporter" + }, + "slug": { + "type": "string", + "description": "The slug.", + "nullable": true, + "example": "client-status-reporter" + }, + "description": { + "type": "string", + "description": "The description.", + "nullable": true, + "example": "Prepares client-ready project status reports." + }, + "ownershipScope": { + "$ref": "#/components/schemas/AgentOwnershipScope" + }, + "projectId": { + "type": "string", + "description": "The project id.", + "format": "uuid", + "nullable": true, + "example": "c907b29e-f640-4639-910d-722623fd5b4a" + }, + "forkedFromAgentId": { + "type": "string", + "description": "The forked from agent id.", + "format": "uuid", + "nullable": true, + "example": "1107cc84-1750-40e1-a86c-86f68d1f05c5" + }, + "modelProvider": { + "type": "string", + "description": "The model provider.", + "nullable": true, + "example": "openai" + }, + "modelName": { + "type": "string", + "description": "The model name.", + "nullable": true, + "example": "gpt-5.6-terra" + }, + "presetKey": { + "type": "string", + "description": "The workspace preset identity.", + "nullable": true, + "example": "balanced" + }, + "reasoningLevel": { + "type": "string", + "description": "The reasoning level.", + "nullable": true, + "example": "medium" + }, + "systemPrompt": { + "type": "string", + "description": "The initial system prompt.", + "nullable": true, + "example": "Prepare concise client-ready project updates from awork data." + }, + "webSearchEnabled": { + "type": "boolean", + "description": "Whether web search is enabled.", + "nullable": true, + "example": true + }, + "aworkAccessEnabled": { + "type": "boolean", + "description": "Whether awork tools are enabled.", + "nullable": true, + "example": true + }, + "googleGenAiAccessEnabled": { + "type": "boolean", + "description": "Whether Google image generation is enabled.", + "nullable": true, + "example": false + }, + "openAiImageGenerationAccessEnabled": { + "type": "boolean", + "description": "Whether OpenAI image generation is enabled.", + "nullable": true, + "example": false + } + }, + "additionalProperties": false, + "description": "Represents the create agent request payload for the agent runtime API." + }, + "CreateAgentScheduleRequestModel": { + "required": [ + "cronRule", + "name", + "prompt" + ], + "type": "object", + "properties": { + "name": { + "maxLength": 255, + "minLength": 1, + "type": "string", + "description": "The schedule display name.", + "example": "Weekly client status report" + }, + "prompt": { + "maxLength": 25000, + "minLength": 1, + "type": "string", + "description": "The additional prompt guidance sent as the scheduled run's initial message.", + "example": "Summarize progress, risks, and next steps for the Acme website project." + }, + "cronRule": { + "maxLength": 100, + "minLength": 1, + "type": "string", + "description": "The cron rule used for recurring execution.", + "example": "0 9 * * 1" + }, + "timezone": { + "maxLength": 100, + "type": "string", + "description": "The timezone for the cron rule.", + "nullable": true, + "example": "Europe/Berlin" + }, + "projectId": { + "type": "string", + "description": "The optional project context id.", + "format": "uuid", + "nullable": true, + "example": "c907b29e-f640-4639-910d-722623fd5b4a" + }, + "taskId": { + "type": "string", + "description": "The optional task context id.", + "format": "uuid", + "nullable": true, + "example": "d88ef8fa-e549-4ca6-96d8-83f5be9d37a2" + }, + "isEnabled": { + "type": "boolean", + "description": "Whether the schedule is enabled.", + "nullable": true, + "example": true + } + }, + "additionalProperties": false, + "description": "Represents the request payload for creating a scheduled agent run." + }, + "CreateAgentWorkflowStepRequestModel": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Gets or sets the name.", + "nullable": true + }, + "stepKind": { + "type": "string", + "description": "Gets or sets the step kind.", + "nullable": true + }, + "delegationId": { + "type": "string", + "description": "Gets or sets the delegation id.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "nextStepId": { + "type": "string", + "description": "Gets or sets the next step id.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "rejectStepId": { + "type": "string", + "description": "Gets or sets the reject step id.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "promptOverride": { + "type": "string", + "description": "Gets or sets the prompt override.", + "nullable": true + }, + "outputName": { + "type": "string", + "description": "Gets or sets the output name.", + "nullable": true + }, + "failureMode": { + "type": "string", + "description": "Gets or sets the failure mode.", + "nullable": true + }, + "sortOrder": { + "type": "integer", + "description": "Gets or sets the sort order.", + "format": "int32" + } + }, + "additionalProperties": false, + "description": "Represents the create agent workflow step request payload for the agent runtime API." + }, + "CreateAiQuotaUsageResetRequestModel": { + "required": [ + "reason", + "scope" + ], + "type": "object", + "properties": { + "scope": { + "maxLength": 100, + "minLength": 1, + "type": "string", + "description": "Gets or sets whether the reset targets a user, workspace, or all users." + }, + "userId": { + "type": "string", + "description": "Gets or sets the target user for a user reset.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "reason": { + "maxLength": 1000, + "minLength": 1, + "type": "string", + "description": "Gets or sets the required explanation for the reset." + }, + "reference": { + "maxLength": 255, + "type": "string", + "description": "Gets or sets an optional incident or support reference.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Requests an auditable reset of the usage counted against an AI quota." + }, + "CreateConnectorRequestModel": { + "required": [ + "name" + ], + "type": "object", + "properties": { + "presetKey": { + "maxLength": 100, + "type": "string", + "description": "The optional backend-defined connector preset key.", + "nullable": true, + "example": "hubspot" + }, + "name": { + "maxLength": 255, + "minLength": 1, + "type": "string", + "description": "The connector display name.", + "example": "Client CRM" + }, + "description": { + "maxLength": 25000, + "type": "string", + "description": "The optional connector description.", + "nullable": true, + "example": "HubSpot CRM for lead and client account research." + }, + "url": { + "maxLength": 2048, + "type": "string", + "description": "The URL for a custom connector.", + "nullable": true, + "example": null + }, + "endpointValues": { + "type": "object", + "additionalProperties": { + "type": "string", + "nullable": true + }, + "description": "The structured endpoint values for a predefined connector preset.", + "nullable": true + }, + "oAuthClientId": { + "maxLength": 750, + "type": "string", + "description": "The optional OAuth client id.", + "nullable": true, + "example": null + }, + "oAuthClientSecret": { + "maxLength": 1000, + "type": "string", + "description": "The optional OAuth client secret.", + "nullable": true, + "example": null + }, + "isSharedWithWorkspace": { + "type": "boolean", + "description": "Whether the connector is shared with the workspace.", + "example": true + } + }, + "additionalProperties": false, + "description": "Represents a request to create a connector." + }, + "CreateSkillRequestModel": { + "required": [ + "instructions" + ], + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "Gets or sets the key.", + "nullable": true + }, + "name": { + "type": "string", + "description": "Gets or sets the name.", + "nullable": true + }, + "description": { + "type": "string", + "description": "Gets or sets the description.", + "nullable": true + }, + "instructions": { + "minLength": 1, + "type": "string", + "description": "Gets or sets the markdown instructions for the skill (SKILL.md body)." + }, + "instructionsSource": { + "type": "string", + "description": "Gets or sets the instructions source.", + "nullable": true + }, + "metadata": { + "type": "string", + "description": "Gets or sets the frontmatter metadata map as JSON.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the create skill request payload for the agent runtime API." + }, + "DisableModelsRequestModel": { + "type": "object", + "properties": { + "resourceType": { + "type": "string", + "description": "The resource type: model, vendor, or region.", + "nullable": true, + "example": "model" + }, + "resourceKey": { + "type": "string", + "description": "The resource key.", + "nullable": true, + "example": "openai:gpt-5.6-terra" + }, + "replacements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ModelReplacementRequestModel" + }, + "description": "One replacement mapping for every affected source model.", + "nullable": true + }, + "presetReplacements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ModelPresetReplacementRequestModel" + }, + "description": "One explicit replacement mapping for every affected preset.", + "nullable": true + }, + "confirmNoImageReplacement": { + "type": "boolean", + "description": "Whether disabling affected image models without a replacement was confirmed.", + "example": false + } + }, + "additionalProperties": false, + "description": "Represents one atomic workspace model disable and migration command." + }, + "ErrorResponse": { + "required": [ + "code", + "description", + "link" + ], + "type": "object", + "properties": { + "code": { + "minLength": 1, + "type": "string", + "description": "The error code.", + "example": "not-found" + }, + "description": { + "minLength": 1, + "type": "string", + "description": "The description of the error.", + "example": "There is no matching path for this URL." + }, + "link": { + "minLength": 1, + "type": "string", + "description": "The link to the API documentation page.", + "example": "https://developers.awork.com" + }, + "details": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of details describing the error.", + "nullable": true, + "example": [ + "No project with the id '123' exists." + ] + }, + "validationErrors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ValidationErrorResponse" + }, + "description": "If a validation error occurred, this contains the validation errors for each property.", + "nullable": true + }, + "traceId": { + "type": "string", + "description": "The request trace id for tracking the request.", + "nullable": true, + "example": "a65ce5745df02af216715ff06661fb3a" + } + }, + "additionalProperties": false, + "description": "The API error response." + }, + "EvaluationIngestionResponseModel": { + "type": "object", + "properties": { + "created": { + "type": "boolean", + "description": "Gets or sets whether the request created a new record." + } + }, + "additionalProperties": false, + "description": "Describes whether an idempotent evaluation write created a record." + }, + "EvaluationRunPutForm": { + "required": [ + "environment", + "expectedCaseManifestJson", + "manifestFingerprint", + "sourceRevision", + "targetBranch", + "targetServiceVersion", + "triggerType" + ], + "type": "object", + "properties": { + "environment": { + "maxLength": 64, + "minLength": 0, + "type": "string", + "description": "Gets or sets the evaluated environment." + }, + "triggerType": { + "maxLength": 32, + "minLength": 0, + "type": "string", + "description": "Gets or sets whether the run was scheduled or manually triggered." + }, + "sourceRevision": { + "maxLength": 64, + "minLength": 0, + "type": "string", + "description": "Gets or sets the evaluation-suite source revision." + }, + "targetBranch": { + "maxLength": 64, + "minLength": 0, + "type": "string", + "description": "Gets or sets the branch reported by the target AI service." + }, + "targetServiceVersion": { + "maxLength": 64, + "minLength": 0, + "type": "string", + "description": "Gets or sets the version reported by the target AI service." + }, + "workflowUrl": { + "maxLength": 1000, + "minLength": 0, + "type": "string", + "description": "Gets or sets the source workflow URL.", + "nullable": true + }, + "schemaVersion": { + "maximum": 2147483647, + "minimum": 1, + "type": "integer", + "description": "Gets or sets the result schema version.", + "format": "int32" + }, + "suiteVersion": { + "maximum": 2147483647, + "minimum": 1, + "type": "integer", + "description": "Gets or sets the expected suite version.", + "format": "int32" + }, + "manifestFingerprint": { + "maxLength": 128, + "minLength": 64, + "type": "string", + "description": "Gets or sets the SHA-256 fingerprint of the expected case manifest." + }, + "expectedCaseManifestJson": { + "maxLength": 25000, + "minLength": 0, + "type": "string", + "description": "Gets or sets the bounded expected case manifest JSON." + }, + "expectedTrialCount": { + "maximum": 1000, + "minimum": 1, + "type": "integer", + "description": "Gets or sets the number of expected trials.", + "format": "int32" + }, + "startedAt": { + "type": "string", + "description": "Gets or sets when the external run started.", + "format": "date-time" + } + }, + "additionalProperties": false, + "description": "Registers the expected scope of one external agent evaluation run." + }, + "EvaluationThreadRunUsageResponseModel": { + "type": "object", + "properties": { + "runId": { + "type": "string", + "description": "Gets or sets the run identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "clientMessageId": { + "type": "string", + "description": "Gets or sets the client message identifier of the run's trigger message, when present.", + "nullable": true + }, + "status": { + "type": "string", + "description": "Gets or sets the run status.", + "nullable": true + }, + "executionMode": { + "type": "string", + "description": "Gets or sets the quota execution mode used by the run.", + "nullable": true + }, + "modelProvider": { + "type": "string", + "description": "Gets or sets the model provider used by the run.", + "nullable": true + }, + "modelName": { + "type": "string", + "description": "Gets or sets the model name used by the run.", + "nullable": true + }, + "reasoningLevel": { + "type": "string", + "description": "Gets or sets the reasoning level snapshot of the run's trigger message, when present.", + "nullable": true + }, + "agentId": { + "type": "string", + "description": "Gets or sets the agent that performed the run, when present.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "systemPromptVersionId": { + "type": "string", + "description": "Gets or sets the immutable system-prompt version selected for the run, when one exists.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "inputTokens": { + "type": "integer", + "description": "Gets or sets the summed input tokens, or null when the run has no usage records.", + "format": "int64", + "nullable": true + }, + "outputTokens": { + "type": "integer", + "description": "Gets or sets the summed output tokens, or null when the run has no usage records.", + "format": "int64", + "nullable": true + }, + "cachedInputTokens": { + "type": "integer", + "description": "Gets or sets the summed cached input tokens, or null when the run has no usage records.", + "format": "int64", + "nullable": true + }, + "reasoningTokens": { + "type": "integer", + "description": "Gets or sets the summed reasoning tokens, or null when the run has no usage records.", + "format": "int64", + "nullable": true + }, + "costUsd": { + "type": "number", + "description": "Gets or sets the summed cost in US dollars, or null when any usage record has no cost.", + "format": "double", + "nullable": true + }, + "startedAt": { + "type": "string", + "description": "Gets or sets the time the run started.", + "format": "date-time", + "nullable": true + }, + "completedAt": { + "type": "string", + "description": "Gets or sets the time the run completed, failed, or was cancelled.", + "format": "date-time", + "nullable": true + }, + "toolCallCount": { + "type": "integer", + "description": "Gets or sets the number of tool calls recorded for the run.", + "format": "int32" + }, + "failedToolCallCount": { + "type": "integer", + "description": "Gets or sets the number of failed tool calls recorded for the run.", + "format": "int32" + } + }, + "additionalProperties": false, + "description": "Describes one persisted run of an evaluation thread with its usage and tool-call totals." + }, + "EvaluationThreadUsageResponseModel": { + "type": "object", + "properties": { + "threadId": { + "type": "string", + "description": "Gets or sets the thread identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "agentId": { + "type": "string", + "description": "Gets or sets the thread's custom agent, when present.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "sourceType": { + "type": "string", + "description": "Gets or sets the thread's persisted source type, when present.", + "nullable": true + }, + "runs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EvaluationThreadRunUsageResponseModel" + }, + "description": "Gets or sets the thread's non-deleted runs ordered by start time.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Describes the persisted runs, usage, and tool-call totals of one evaluation thread." + }, + "EvaluationTrialPutForm": { + "required": [ + "result" + ], + "type": "object", + "properties": { + "result": { + "description": "Gets or sets the normalized structured result." + } + }, + "additionalProperties": false, + "description": "Contains one normalized agent evaluation trial result." + }, + "FilterQueryGenerationResult": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "description": "Whether the filter query was successfully generated." + }, + "filter": { + "type": "string", + "description": "The generated OData filter query (e.g., \"assignees/any(a: a/id eq me.id) and dueOn lt today\").\nNull if generation failed or no filter is needed.", + "nullable": true + }, + "errorMessage": { + "type": "string", + "description": "Error message if generation failed.", + "nullable": true + }, + "errorCode": { + "type": "string", + "description": "Stable error code for programmatic handling.", + "nullable": true + }, + "reasoning": { + "type": "string", + "description": "AI's reasoning for how the prompt was converted to the filter query.\nUseful for debugging and understanding the AI's decision-making.", + "nullable": true + }, + "suggestion": { + "type": "string", + "description": "Helpful suggestion for the user if generation failed.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Result of generating an OData filter query from a natural language prompt for the Filter Feature." + }, + "FilterSuggestionGenerationItem": { + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "Short label shown to the user.", + "nullable": true + }, + "prompt": { + "type": "string", + "description": "Natural-language prompt represented by the suggestion.", + "nullable": true + }, + "filter": { + "type": "string", + "description": "Additive Filter Feature query fragment represented by the suggestion.", + "nullable": true + }, + "reasoning": { + "type": "string", + "description": "Brief explanation of why this suggestion fits the existing filter.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "A single AI-generated contextual filter suggestion." + }, + "FilterSuggestionGenerationResult": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "description": "Whether suggestions were generated successfully." + }, + "suggestions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FilterSuggestionGenerationItem" + }, + "description": "Generated contextual suggestions.", + "nullable": true + }, + "errorMessage": { + "type": "string", + "description": "Error message if generation failed.", + "nullable": true + }, + "errorCode": { + "type": "string", + "description": "Stable error code for programmatic handling.", + "nullable": true + }, + "reasoning": { + "type": "string", + "description": "AI's reasoning for the suggestion set.\nUseful for debugging and prompt evaluation.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Result of generating contextual Filter Feature suggestions." + }, + "GenerateFilterQueryModel": { + "required": [ + "entityType", + "prompt" + ], + "type": "object", + "properties": { + "prompt": { + "minLength": 1, + "type": "string", + "description": "The natural language prompt describing the desired filter.", + "example": "Show all my tasks that are overdue" + }, + "entityType": { + "minLength": 1, + "enum": [ + "tasks", + "projects", + "companies", + "users" + ], + "type": "string", + "description": "The entity type to generate the filter for.", + "example": "tasks" + }, + "languageCode": { + "type": "string", + "description": "Optional language code for localized suggestions (e.g., \"en-GB\", \"de-DE\").\nDefaults to \"en\" if not provided.", + "nullable": true, + "example": "en-GB" + }, + "existingFilterQuery": { + "type": "string", + "description": "Optional existing Filter Feature query that should be rewritten by the prompt.\nWhen supplied, the generated query must be the complete replacement query.", + "nullable": true, + "example": "assignees/any(a: a/id eq me.id)" + } + }, + "additionalProperties": false, + "description": "Model for generating a filter query from a natural language prompt." + }, + "GenerateFilterSuggestionsModel": { + "required": [ + "entityType", + "existingFilterQuery" + ], + "type": "object", + "properties": { + "entityType": { + "minLength": 1, + "enum": [ + "tasks", + "projects", + "companies", + "users" + ], + "type": "string", + "description": "The entity type to generate filter suggestions for.", + "example": "tasks" + }, + "existingFilterQuery": { + "minLength": 1, + "type": "string", + "description": "The existing Filter Feature query that should be extended by the suggestions.", + "example": "assignees/any(a: a/id eq me.id)" + }, + "languageCode": { + "type": "string", + "description": "Optional language code for localized suggestion titles and prompts.\nDefaults to \"en\" if not provided.", + "nullable": true, + "example": "en-GB" + } + }, + "additionalProperties": false, + "description": "Model for generating contextual filter suggestions from an existing filter query." + }, + "GrantAiUserQuotaCreditsRequestModel": { + "required": [ + "credits", + "reason" + ], + "type": "object", + "properties": { + "credits": { + "type": "number", + "description": "Gets or sets the positive number of credits to add to the current period.", + "format": "double", + "example": 1000 + }, + "reason": { + "maxLength": 1000, + "minLength": 1, + "type": "string", + "description": "Gets or sets the operator explanation retained with the current override.", + "example": "Temporary allowance while investigating repeated tool retries" + } + }, + "additionalProperties": false, + "description": "Grants additional primary credits until the end of a user's current quota period." + }, + "ImportAgentPresetRequestModel": { + "required": [ + "name" + ], + "type": "object", + "properties": { + "name": { + "maxLength": 255, + "minLength": 1, + "type": "string", + "description": "Gets or sets the name of the normal agent created in the workspace." + } + }, + "additionalProperties": false, + "description": "Defines the workspace-agent identity used when importing the latest preset release." + }, + "InitialAgentSessionMessageRequestModel": { + "type": "object", + "properties": { + "content": { + "type": "string", + "description": "The content.", + "nullable": true, + "example": "Summarize progress, risks, and next steps for the Acme website project." + }, + "clientMessageId": { + "type": "string", + "description": "The client message id.", + "nullable": true, + "example": "client-status-2026-08-29" + } + }, + "additionalProperties": false, + "description": "Represents the initial agent session message request payload for the agent runtime API." + }, + "ModelDisablePreflightResponseModel": { + "type": "object", + "properties": { + "resourceType": { + "type": "string", + "description": "The normalized resource type.", + "nullable": true, + "example": "model" + }, + "resourceKey": { + "type": "string", + "description": "The normalized resource key.", + "nullable": true, + "example": "openai:gpt-5.6-terra" + }, + "canDisable": { + "type": "boolean", + "description": "Whether the disable has no dependency or last-model block.", + "example": false + }, + "blockedReason": { + "type": "string", + "description": "The blocked reason, or an empty string when unblocked.", + "nullable": true, + "example": "At least one text model must remain enabled." + }, + "imageCapabilityDisableRequired": { + "type": "boolean", + "description": "Whether an affected image capability must be migrated or disabled.", + "example": false + }, + "affectedModels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ModelDisableSourceResponseModel" + }, + "description": "The distinct affected source models.", + "nullable": true + }, + "affectedPresets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ModelDisablePresetResponseModel" + }, + "description": "The affected presets.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the server-computed dependency preflight for a workspace model disable." + }, + "ModelDisablePresetResponseModel": { + "type": "object", + "properties": { + "presetKey": { + "type": "string", + "description": "The affected preset key.", + "nullable": true, + "example": "balanced" + }, + "isAuto": { + "type": "boolean", + "description": "Whether the preset currently uses central Auto resolution.", + "example": true + }, + "sourceModelKey": { + "type": "string", + "description": "The current source model key.", + "nullable": true, + "example": "openai:gpt-5.6-terra" + }, + "sourceModelDisplayName": { + "type": "string", + "description": "The current source model display name.", + "nullable": true, + "example": "GPT-5.6 Terra" + }, + "eligibleReplacements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ModelDisableReplacementResponseModel" + }, + "description": "Active text replacement models that remain enabled after the change.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Describes one affected performance preset and its explicit replacement choices." + }, + "ModelDisableReplacementResponseModel": { + "type": "object", + "properties": { + "modelKey": { + "type": "string", + "description": "The stable replacement model key.", + "nullable": true, + "example": "openai:gpt-5.6-luna" + }, + "kind": { + "type": "string", + "description": "The model capability kind.", + "nullable": true, + "example": "text" + }, + "displayName": { + "type": "string", + "description": "The model display name.", + "nullable": true, + "example": "GPT-5.6 Luna" + }, + "vendorKey": { + "type": "string", + "description": "The stable vendor key.", + "nullable": true, + "example": "openai" + }, + "regionKey": { + "type": "string", + "description": "The stable region key.", + "nullable": true, + "example": "europe" + } + }, + "additionalProperties": false, + "description": "Describes one active replacement model that remains enabled after a disable." + }, + "ModelDisableSourceResponseModel": { + "type": "object", + "properties": { + "modelKey": { + "type": "string", + "description": "The stable source model key.", + "nullable": true, + "example": "openai:gpt-5.6-terra" + }, + "kind": { + "type": "string", + "description": "The model capability kind.", + "nullable": true, + "example": "text" + }, + "displayName": { + "type": "string", + "description": "The source model display name.", + "nullable": true, + "example": "GPT-5.6 Terra" + }, + "usageCount": { + "type": "integer", + "description": "The number of persisted agent and thread configurations using the source.", + "format": "int32", + "example": 4 + }, + "isReferencedByCustomAgents": { + "type": "boolean", + "description": "Whether a custom agent uses the source.", + "example": true + }, + "requiresModelMapping": { + "type": "boolean", + "description": "Whether the disable command requires a source replacement mapping.", + "example": true + }, + "hasImageCapability": { + "type": "boolean", + "description": "Whether an image capability is enabled on a dependent version.", + "example": false + }, + "imageCapabilityNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The enabled image capability names.", + "nullable": true + }, + "eligibleReplacements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ModelDisableReplacementResponseModel" + }, + "description": "Active replacement models that remain enabled after the change.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Describes one affected source model and its dependent references." + }, + "ModelPresetReplacementRequestModel": { + "type": "object", + "properties": { + "presetKey": { + "type": "string", + "description": "The affected preset key.", + "nullable": true, + "example": "balanced" + }, + "replacementModelKey": { + "type": "string", + "description": "The replacement model key.", + "nullable": true, + "example": "openai:gpt-5.6-luna" + } + }, + "additionalProperties": false, + "description": "Maps one affected performance preset to an explicit replacement model." + }, + "ModelReplacementRequestModel": { + "type": "object", + "properties": { + "sourceModelKey": { + "type": "string", + "description": "The affected source model key.", + "nullable": true, + "example": "openai:gpt-5.6-terra" + }, + "replacementModelKey": { + "type": "string", + "description": "The replacement model key, or null for a confirmed image capability removal.", + "nullable": true, + "example": "openai:gpt-5.6-luna" + } + }, + "additionalProperties": false, + "description": "Maps one source catalog model to one replacement catalog model." + }, + "PendingBatchConfirmationResponseModel": { + "type": "object", + "properties": { + "confirmationId": { + "type": "string", + "description": "The confirmation id.", + "nullable": true, + "example": "confirm_01K4CLIENTSTATUS" + }, + "confirmationMessage": { + "type": "string", + "description": "The confirmation message.", + "nullable": true, + "example": "Delete 3 draft tasks from the Acme website project?" + }, + "affectedItemCount": { + "type": "integer", + "description": "The affected item count.", + "format": "int32", + "example": 3 + }, + "isDestructive": { + "type": "boolean", + "description": "Whether the action is destructive.", + "example": true + }, + "confirmationDetails": { + "$ref": "#/components/schemas/ConfirmationDetails" + }, + "pendingToolCalls": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AiToolCall" + }, + "description": "The tool calls awaiting confirmation.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents a pending batch confirmation for an agent thread." + }, + "PendingUserQuestionResponseModel": { + "type": "object", + "properties": { + "toolCallId": { + "type": "string", + "description": "The tool call id.", + "nullable": true, + "example": "call_01K4CLIENTSTATUS" + }, + "userQuestion": { + "$ref": "#/components/schemas/UserQuestionDetails" + } + }, + "additionalProperties": false, + "description": "Represents a pending user question for an agent thread." + }, + "PersonalAgentConfigurationRequestModel": { + "type": "object", + "properties": { + "enabledConnectorIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The connector ids enabled for the current user's personal agent.", + "nullable": true + }, + "connectorConnections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PersonalAgentConnectorConfigurationModel" + }, + "description": "The connectors with their explicit default connections.", + "nullable": true + }, + "enabledSkillIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The skill ids enabled for the current user's personal agent.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the request payload for the current user's personal-agent configuration." + }, + "PersonalAgentConfigurationResponseModel": { + "type": "object", + "properties": { + "enabledConnectorIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The connector ids enabled for the current user's personal agent.", + "nullable": true + }, + "connectorConnections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PersonalAgentConnectorConfigurationModel" + }, + "description": "The connectors with their explicit default connections.", + "nullable": true + }, + "enabledSkillIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The skill ids enabled for the current user's personal agent.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the current user's personal-agent configuration." + }, + "PersonalAgentConnectorConfigurationModel": { + "required": [ + "connectorId", + "defaultConnectionId" + ], + "type": "object", + "properties": { + "connectorId": { + "type": "string", + "description": "The configured connector identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "defaultConnectionId": { + "type": "string", + "description": "The default connection identifier for the connector.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + } + }, + "additionalProperties": false, + "description": "Represents a connector and its explicit default connection for the personal agent." + }, + "PublishAgentPresetDefinitionRequestModel": { + "required": [ + "detailedDescription", + "language" + ], + "type": "object", + "properties": { + "language": { + "minLength": 1, + "enum": [ + "en", + "de" + ], + "type": "string", + "description": "Gets or sets the published language." + }, + "detailedDescription": { + "maxLength": 25000, + "minLength": 1, + "type": "string", + "description": "Gets or sets the detailed catalog description." + } + }, + "additionalProperties": false, + "description": "Defines the preset metadata for one source agent publication." + }, + "RememberAgentSessionMessageRequestModel": { + "type": "object", + "properties": { + "scope": { + "type": "string", + "description": "Gets or sets the memory scope. Defaults to agent.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents a request to remember an existing session message." + }, + "SetAgentArchivedRequestModel": { + "type": "object", + "properties": { + "isArchived": { + "type": "boolean", + "description": "Whether the agent should be archived.", + "example": true + } + }, + "additionalProperties": false, + "description": "Represents the set agent archived request payload for the agent runtime API." + }, + "SetAgentScheduleEnabledRequestModel": { + "required": [ + "isEnabled" + ], + "type": "object", + "properties": { + "isEnabled": { + "type": "boolean", + "description": "Gets or sets whether the schedule is enabled." + } + }, + "additionalProperties": false, + "description": "Represents a request to enable or disable an agent schedule." + }, + "SetModelAutoEnableRequestModel": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Whether new models in enabled vendors and regions are enabled automatically.", + "example": true + } + }, + "additionalProperties": false, + "description": "Represents a workspace automatic-enablement change." + }, + "SetModelPresetRequestModel": { + "type": "object", + "properties": { + "isAuto": { + "type": "boolean", + "description": "Whether the preset uses the central Auto mapping.", + "example": false + }, + "modelKey": { + "type": "string", + "description": "The explicit model key when Auto is false.", + "nullable": true, + "example": "openai:gpt-5.6-terra" + }, + "reasoningLevel": { + "type": "string", + "description": "The explicit reasoning level when Auto is false.", + "nullable": true, + "example": "medium" + } + }, + "additionalProperties": false, + "description": "Represents a workspace preset assignment." + }, + "SetSkillSecretRequirementsRequestModel": { + "required": [ + "requirements" + ], + "type": "object", + "properties": { + "requirements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SkillSecretRequirementRequestModel" + }, + "description": "Gets or sets the full set of secret requirements for the skill." + } + }, + "additionalProperties": false, + "description": "Represents the request payload that replaces the secret declarations of a skill." + }, + "SetSkillSecretValueRequestModel": { + "required": [ + "envVarName", + "scope", + "value" + ], + "type": "object", + "properties": { + "envVarName": { + "minLength": 1, + "type": "string", + "description": "Gets or sets the environment variable name the value belongs to." + }, + "scope": { + "minLength": 1, + "type": "string", + "description": "Gets or sets the scope of the value (\"workspace\" or \"user\")." + }, + "value": { + "minLength": 1, + "type": "string", + "description": "Gets or sets the secret value. It is stored encrypted and never returned by the API." + } + }, + "additionalProperties": false, + "description": "Represents the request payload that sets a skill secret value." + }, + "SetThreadArchivedRequestModel": { + "required": [ + "isArchived" + ], + "type": "object", + "properties": { + "isArchived": { + "type": "boolean", + "description": "Gets or sets whether the thread should be archived." + } + }, + "additionalProperties": false, + "description": "Represents a request to change one thread's archived state for the current user." + }, + "SetThreadPinnedRequestModel": { + "required": [ + "isPinned" + ], + "type": "object", + "properties": { + "isPinned": { + "type": "boolean", + "description": "Gets or sets whether the thread should be pinned." + } + }, + "additionalProperties": false, + "description": "Represents a request to change one thread's pinned state for the current user." + }, + "SkillContributorRequestModel": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The receiving user ID.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "accessLevel": { + "type": "string", + "description": "The granted access level.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "A requested direct user access grant for a skill." + }, + "SkillContributorResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The access grant ID.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "skillId": { + "type": "string", + "description": "The shared skill ID.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "userId": { + "type": "string", + "description": "The receiving user ID.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "accessLevel": { + "type": "string", + "description": "The granted access level.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "A direct user access grant for a skill." + }, + "SkillFileResponseModel": { + "type": "object", + "properties": { + "relativePath": { + "type": "string", + "description": "Gets or sets the path of the file relative to the skill root (for example \"scripts/sync.py\").", + "nullable": true + }, + "sizeBytes": { + "type": "integer", + "description": "Gets or sets the file size in bytes.", + "format": "int64" + } + }, + "additionalProperties": false, + "description": "Represents a bundled skill file in API responses." + }, + "SkillResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Gets or sets the id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "createdBy": { + "type": "string", + "description": "Gets or sets the ID of the user who created the skill.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "createdOn": { + "type": "string", + "description": "Gets or sets when the skill was created.", + "format": "date-time" + }, + "updatedOn": { + "type": "string", + "description": "Gets or sets when the skill was last updated.", + "format": "date-time", + "nullable": true + }, + "key": { + "type": "string", + "description": "Gets or sets the key.", + "nullable": true + }, + "name": { + "type": "string", + "description": "Gets or sets the name.", + "nullable": true + }, + "description": { + "type": "string", + "description": "Gets or sets the description.", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "Gets or sets the markdown instructions for the skill (SKILL.md body).", + "nullable": true + }, + "instructionsSource": { + "type": "string", + "description": "Gets or sets the instructions source.", + "nullable": true + }, + "type": { + "type": "string", + "description": "The ownership type.", + "nullable": true + }, + "userId": { + "type": "string", + "description": "The owning user ID.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "agentId": { + "type": "string", + "description": "The owning agent ID.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "accessLevel": { + "type": "string", + "description": "The requesting user's resolved access level.", + "nullable": true + }, + "isOwner": { + "type": "boolean", + "description": "Whether the requesting user owns the skill." + }, + "workspaceAccessLevel": { + "type": "string", + "description": "The workspace-wide access level.", + "nullable": true + }, + "linkedAgentCount": { + "type": "integer", + "description": "The number of linked agents.", + "format": "int32" + }, + "metadata": { + "type": "string", + "description": "Gets or sets the frontmatter metadata map as JSON.", + "nullable": true + }, + "hasFiles": { + "type": "boolean", + "description": "Gets or sets a value indicating whether the skill has bundled files." + }, + "secretRequirements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SkillSecretRequirementResponseModel" + }, + "description": "Gets or sets the declared secret requirements of the skill.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the skill response payload for the agent runtime API." + }, + "SkillSecretRequirementRequestModel": { + "required": [ + "envVarName", + "scope" + ], + "type": "object", + "properties": { + "envVarName": { + "minLength": 1, + "type": "string", + "description": "Gets or sets the environment variable name the secret is injected as." + }, + "description": { + "type": "string", + "description": "Gets or sets the description shown to users when providing the secret.", + "nullable": true + }, + "scope": { + "minLength": 1, + "type": "string", + "description": "Gets or sets the scope (\"workspace\" or \"user\")." + }, + "isRequired": { + "type": "boolean", + "description": "Gets or sets a value indicating whether the secret is required for the skill to work." + } + }, + "additionalProperties": false, + "description": "Represents one secret requirement declaration in a set-requirements request." + }, + "SkillSecretRequirementResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Gets or sets the id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "envVarName": { + "type": "string", + "description": "Gets or sets the environment variable name the secret is injected as.", + "nullable": true + }, + "description": { + "type": "string", + "description": "Gets or sets the description shown to users when providing the secret.", + "nullable": true + }, + "scope": { + "type": "string", + "description": "Gets or sets the scope (\"workspace\" or \"user\").", + "nullable": true + }, + "isRequired": { + "type": "boolean", + "description": "Gets or sets a value indicating whether the secret is required for the skill to work." + }, + "hasValue": { + "type": "boolean", + "description": "Gets or sets a value indicating whether a value is available for the requesting user." + } + }, + "additionalProperties": false, + "description": "Represents a declared secret requirement of a skill." + }, + "SkillSecretValueStatusResponseModel": { + "type": "object", + "properties": { + "envVarName": { + "type": "string", + "description": "Gets or sets the environment variable name.", + "nullable": true + }, + "scope": { + "type": "string", + "description": "Gets or sets the scope of the stored value (\"workspace\" or \"user\").", + "nullable": true + }, + "updatedOn": { + "type": "string", + "description": "Gets or sets when the value was last updated.", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the existence metadata of a stored skill secret value. The value itself is never exposed." + }, + "SkillSharingResponseModel": { + "type": "object", + "properties": { + "workspaceAccessLevel": { + "type": "string", + "description": "The workspace-wide access level.", + "nullable": true + }, + "contributors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SkillContributorResponseModel" + }, + "description": "The direct user access grants.", + "nullable": true + }, + "teams": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SkillToTeamResponseModel" + }, + "description": "The team access grants.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "The sharing configuration of a skill." + }, + "SkillToTeamRequestModel": { + "type": "object", + "properties": { + "teamId": { + "type": "string", + "description": "The receiving team ID.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "accessLevel": { + "type": "string", + "description": "The granted access level.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "A requested team access grant for a skill." + }, + "SkillToTeamResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The access grant ID.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "skillId": { + "type": "string", + "description": "The shared skill ID.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "teamId": { + "type": "string", + "description": "The receiving team ID.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "accessLevel": { + "type": "string", + "description": "The granted access level.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "A team access grant for a skill." + }, + "SystemPromptVersionResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Gets or sets the prompt version identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "agentId": { + "type": "string", + "description": "Gets or sets the agent identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "versionNumber": { + "type": "integer", + "description": "Gets or sets the creation-order version number.", + "format": "int32" + }, + "isCurrent": { + "type": "boolean", + "description": "Gets or sets whether this row is the agent's current prompt." + }, + "systemPrompt": { + "type": "string", + "description": "Gets or sets the system prompt.", + "nullable": true + }, + "createdOn": { + "type": "string", + "description": "Gets or sets the creation time of the system prompt version.", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "description": "Gets or sets the user who created the system prompt version.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + } + }, + "additionalProperties": false, + "description": "Represents one immutable system prompt history row." + }, + "TableAuditEventModel": { + "type": "object", + "properties": { + "workspaceId": { + "type": "string", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "correlationId": { + "type": "string", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "userId": { + "type": "string", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "createdOn": { + "type": "string", + "format": "date-time" + }, + "impersonatingUserId": { + "type": "string", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "traceId": { + "type": "string", + "nullable": true + }, + "websocketConnectionId": { + "type": "string", + "nullable": true + }, + "eventType": { + "type": "string", + "nullable": true + }, + "entityType": { + "type": "string", + "nullable": true + }, + "entityId": { + "type": "string", + "nullable": true + }, + "clientId": { + "type": "string", + "nullable": true + }, + "property": { + "type": "string", + "nullable": true + }, + "old": { + "type": "string", + "nullable": true + }, + "new": { + "type": "string", + "nullable": true + }, + "callStack": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "TemporaryFileReference": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The resource id.", + "nullable": true, + "example": "temp_01K4CLIENTBRIEF" + }, + "name": { + "type": "string", + "description": "The display name.", + "nullable": true, + "example": "acme-client-brief.pdf" + }, + "mimeType": { + "type": "string", + "description": "The file media type.", + "nullable": true, + "example": "application/pdf" + }, + "sandboxPath": { + "type": "string", + "description": "The canonical sandbox path assigned after file promotion.", + "nullable": true, + "example": "context/uploads/awork-9ad6397243964b0b9e7d40b852cdebf8-acme-client-brief.pdf" + }, + "downloadUrl": { + "type": "string", + "description": "The relative file download URL.", + "nullable": true, + "example": "/api/v1/agents/threads/6cbb219e-839d-4d23-b273-3a78bbd842ae/artifacts/download?path=client-status-report.pdf" + } + }, + "additionalProperties": false, + "description": "Describes a temporary file attached to an agent message." + }, + "ThreadListStateResponseModel": { + "type": "object", + "properties": { + "threadId": { + "type": "string", + "description": "Gets or sets the thread ID.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "isArchived": { + "type": "boolean", + "description": "Gets or sets whether the thread is archived." + }, + "archivedOn": { + "type": "string", + "description": "Gets or sets when the thread was archived.", + "format": "date-time", + "nullable": true + }, + "isPinned": { + "type": "boolean", + "description": "Gets or sets whether the thread is pinned." + }, + "pinnedOrder": { + "type": "number", + "description": "Gets or sets the thread's pinned order.", + "format": "double", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents one user's organization state for a thread." + }, + "ThreadReorderingResultResponseModel": { + "type": "object", + "properties": { + "threadId": { + "type": "string", + "description": "Gets or sets the thread ID.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "order": { + "type": "number", + "description": "Gets or sets the resulting pinned order.", + "format": "double", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents an affected pinned thread after a reorder operation." + }, + "UpdateAgentDelegationRequestModel": { + "type": "object", + "properties": { + "delegatedAgentId": { + "type": "string", + "description": "Gets or sets the delegated agent id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "name": { + "type": "string", + "description": "Gets or sets the name.", + "nullable": true + }, + "description": { + "type": "string", + "description": "Gets or sets the description.", + "nullable": true + }, + "executionMode": { + "type": "string", + "description": "Gets or sets the execution mode.", + "nullable": true + }, + "promptOverride": { + "type": "string", + "description": "Gets or sets the prompt override.", + "nullable": true + }, + "sortOrder": { + "type": "integer", + "description": "Gets or sets the sort order.", + "format": "int32" + } + }, + "additionalProperties": false, + "description": "Represents the update agent delegation request payload for the agent runtime API." + }, + "UpdateAgentRequestModel": { + "required": [ + "aworkAccessEnabled", + "description", + "googleGenAiAccessEnabled", + "name", + "openAiImageGenerationAccessEnabled", + "reasoningLevel", + "systemPrompt", + "webSearchEnabled", + "workspaceAccessLevel" + ], + "type": "object", + "properties": { + "name": { + "maxLength": 255, + "minLength": 1, + "type": "string", + "description": "The agent name.", + "example": "Client Status Reporter" + }, + "description": { + "maxLength": 25000, + "type": "string", + "description": "The description.", + "example": "Prepares client-ready project status reports." + }, + "workspaceAccessLevel": { + "maxLength": 25, + "minLength": 1, + "type": "string", + "description": "The access level granted to every member of the workspace.", + "example": "manage" + }, + "modelProvider": { + "type": "string", + "description": "The model provider when no preset is selected.", + "nullable": true, + "example": "openai" + }, + "modelName": { + "type": "string", + "description": "The model name when no preset is selected.", + "nullable": true, + "example": "gpt-5.6-terra" + }, + "presetKey": { + "type": "string", + "description": "The workspace preset identity.", + "nullable": true, + "example": "balanced" + }, + "reasoningLevel": { + "minLength": 1, + "type": "string", + "description": "The reasoning level.", + "example": "medium" + }, + "systemPrompt": { + "maxLength": 25000, + "type": "string", + "description": "The authoritative system prompt.", + "example": "Prepare concise client-ready project updates from awork data." + }, + "webSearchEnabled": { + "type": "boolean", + "description": "Whether web search is enabled.", + "example": true + }, + "aworkAccessEnabled": { + "type": "boolean", + "description": "Whether awork access is enabled.", + "example": true + }, + "googleGenAiAccessEnabled": { + "type": "boolean", + "description": "Whether Google image generation is enabled.", + "example": false + }, + "openAiImageGenerationAccessEnabled": { + "type": "boolean", + "description": "Whether OpenAI image generation is enabled.", + "example": false + } + }, + "additionalProperties": false, + "description": "Represents the update agent request payload for the agent runtime API." + }, + "UpdateAgentScheduleRequestModel": { + "required": [ + "cronRule", + "name", + "prompt" + ], + "type": "object", + "properties": { + "name": { + "maxLength": 255, + "minLength": 1, + "type": "string", + "description": "The schedule display name.", + "example": "Weekly client status report" + }, + "prompt": { + "maxLength": 25000, + "minLength": 1, + "type": "string", + "description": "The additional prompt guidance sent as the scheduled run's initial message.", + "example": "Summarize progress, risks, and next steps for the Acme website project." + }, + "cronRule": { + "maxLength": 100, + "minLength": 1, + "type": "string", + "description": "The cron rule used for recurring execution.", + "example": "0 9 * * 1" + }, + "timezone": { + "maxLength": 100, + "type": "string", + "description": "The timezone for the cron rule.", + "nullable": true, + "example": "Europe/Berlin" + }, + "projectId": { + "type": "string", + "description": "The optional project context id.", + "format": "uuid", + "nullable": true, + "example": "c907b29e-f640-4639-910d-722623fd5b4a" + }, + "taskId": { + "type": "string", + "description": "The optional task context id.", + "format": "uuid", + "nullable": true, + "example": "d88ef8fa-e549-4ca6-96d8-83f5be9d37a2" + }, + "isEnabled": { + "type": "boolean", + "description": "Whether the schedule is enabled.", + "nullable": true, + "example": true + }, + "agentId": { + "type": "string", + "description": "Gets or sets the optional target agent id.\nWhen omitted, the agent from the update route is kept.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + } + }, + "additionalProperties": false, + "description": "Represents the request payload for updating a scheduled agent run." + }, + "UpdateAgentWorkflowStepRequestModel": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Gets or sets the name.", + "nullable": true + }, + "stepKind": { + "type": "string", + "description": "Gets or sets the step kind.", + "nullable": true + }, + "delegationId": { + "type": "string", + "description": "Gets or sets the delegation id.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "nextStepId": { + "type": "string", + "description": "Gets or sets the next step id.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "rejectStepId": { + "type": "string", + "description": "Gets or sets the reject step id.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "promptOverride": { + "type": "string", + "description": "Gets or sets the prompt override.", + "nullable": true + }, + "outputName": { + "type": "string", + "description": "Gets or sets the output name.", + "nullable": true + }, + "failureMode": { + "type": "string", + "description": "Gets or sets the failure mode.", + "nullable": true + }, + "sortOrder": { + "type": "integer", + "description": "Gets or sets the sort order.", + "format": "int32" + } + }, + "additionalProperties": false, + "description": "Represents the update agent workflow step request payload for the agent runtime API." + }, + "UpdateAiQuotaConfigurationRequestModel": { + "type": "object", + "properties": { + "expectedCurrentVersionId": { + "type": "string", + "description": "Identifier of the version the operator edited. The save is rejected as a conflict if another version has since become current.", + "format": "uuid", + "example": "7f46eb64-ae32-4ac7-af03-118c5599c684" + }, + "options": { + "$ref": "#/components/schemas/AiQuotaOptions" + } + }, + "additionalProperties": false, + "description": "Replaces the current global AI quota policy by creating a new immutable configuration version." + }, + "UpdateSkillRequestModel": { + "required": [ + "instructions" + ], + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "Gets or sets the key.", + "nullable": true + }, + "name": { + "type": "string", + "description": "Gets or sets the name.", + "nullable": true + }, + "description": { + "type": "string", + "description": "Gets or sets the description.", + "nullable": true + }, + "instructions": { + "minLength": 1, + "type": "string", + "description": "Gets or sets the markdown instructions for the skill (SKILL.md body)." + }, + "instructionsSource": { + "type": "string", + "description": "Gets or sets the instructions source.", + "nullable": true + }, + "metadata": { + "type": "string", + "description": "Gets or sets the frontmatter metadata map as JSON.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the update skill request payload for the agent runtime API." + }, + "UpdateSkillSharingRequestModel": { + "type": "object", + "properties": { + "workspaceAccessLevel": { + "type": "string", + "description": "The workspace-wide access level.", + "nullable": true + }, + "contributors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SkillContributorRequestModel" + }, + "description": "The direct user access grants.", + "nullable": true + }, + "teams": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SkillToTeamRequestModel" + }, + "description": "The team access grants.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "A replacement sharing configuration for a skill." + }, + "UpdateThreadPinnedOrderRequestModel": { + "required": [ + "order" + ], + "type": "object", + "properties": { + "order": { + "type": "number", + "description": "Gets or sets the target pinned order.", + "format": "double" + } + }, + "additionalProperties": false, + "description": "Represents a request to change one pinned thread's order." + }, + "UpdateWorkspaceContextRequestModel": { + "required": [ + "rawContentHtml" + ], + "type": "object", + "properties": { + "rawContentHtml": { + "maxLength": 25000, + "type": "string", + "description": "Gets or sets the complete workspace context as rich-text HTML." + } + }, + "additionalProperties": false, + "description": "Contains the workspace-authored rich text to save." + }, + "UsedConnectorResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The connector identifier.", + "format": "uuid", + "example": "7e376777-7834-4af6-9eb8-da065f568d30" + }, + "name": { + "type": "string", + "description": "The connector name captured at its latest successful use.", + "nullable": true, + "example": "Client CRM" + }, + "logoPath": { + "type": "string", + "description": "The predefined connector logo path, when available.", + "nullable": true, + "example": "images/integrations/hubspot_icon.svg" + } + }, + "additionalProperties": false, + "description": "Represents a connector used successfully in an AI thread." + }, + "UserMemoryResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Gets or sets the memory id assigned by Mem0.", + "nullable": true + }, + "fact": { + "type": "string", + "description": "Gets or sets the validated governed memory fact.", + "nullable": true + }, + "category": { + "type": "string", + "description": "Gets or sets the governed memory category.", + "nullable": true + }, + "status": { + "type": "string", + "description": "Gets or sets the governed lifecycle status.", + "nullable": true + }, + "candidateSource": { + "type": "string", + "description": "Gets or sets where the memory candidate originated.", + "nullable": true + }, + "createdAt": { + "type": "string", + "description": "Gets or sets the creation timestamp returned by Mem0.", + "format": "date-time", + "nullable": true + }, + "updatedAt": { + "type": "string", + "description": "Gets or sets the update timestamp returned by Mem0.", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents a stored user memory returned by the assistant memory API." + }, + "UserQuestionDetails": { + "type": "object", + "properties": { + "question": { + "type": "string", + "description": "The user-facing question.", + "nullable": true, + "example": "Should I send the client status report now?" + }, + "options": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The bounded selectable answers.", + "nullable": true + }, + "allowCustomText": { + "type": "boolean", + "description": "Whether a custom text answer is accepted.", + "example": false }, - { - "$ref": "#/components/parameters/page" + "interactionType": { + "type": "string", + "description": "The structured interaction type.", + "nullable": true, + "example": "mcp_connection" }, - { - "$ref": "#/components/parameters/pageSize" + "connectorId": { + "type": "string", + "description": "The connector that requires user action.", + "format": "uuid", + "nullable": true, + "example": "7e376777-7834-4af6-9eb8-da065f568d30" }, - { - "$ref": "#/components/parameters/orderby" + "connectionId": { + "type": "string", + "description": "The connection that requires reauthorization.", + "format": "uuid", + "nullable": true, + "example": "af18602d-c8aa-4f63-a21e-5a7f59b2412c" }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileVersion" - } - } - } - } + "connectorName": { + "type": "string", + "description": "The safe connector display name.", + "nullable": true, + "example": "Client CRM" + }, + "connectionAction": { + "type": "string", + "description": "The enable or reconnect action.", + "nullable": true, + "example": "reconnect" } }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } + "additionalProperties": false, + "description": "Describes a user action that must complete before an agent run can resume." }, - "post": { - "tags": [ - "WorkspaceFiles" - ], - "summary": "Uploads a new version of the workspace file with the specified id.", - "description": "Uploads a new version of an workspace file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateWorkspaceFileVersion", - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "description": "The id of the workspace.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "ValidationErrorResponse": { + "type": "object", + "properties": { + "property": { + "type": "string", + "description": "The name of the property that failed validation.", + "nullable": true, + "example": "FirstName" }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } - } - } + "message": { + "type": "string", + "description": "The reason why this property failed validation.", + "nullable": true, + "example": "FirstName is required." } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileVersion" - } - } - } + "additionalProperties": false, + "description": "The validation error response." + }, + "WorkerBootstrapContextFileModel": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "The path.", + "nullable": true, + "example": "context/uploads/acme-client-brief.md" }, - "400": { - "description": "Bad Request" + "content": { + "type": "string", + "description": "The content.", + "nullable": true, + "example": "Client: Acme. Launch target: 4 September 2026." + }, + "contentBase64": { + "type": "string", + "description": "The base64 encoded content for binary files.", + "nullable": true, + "example": "JVBERi0xLjQ=" + }, + "temporaryFileId": { + "type": "string", + "description": "The temporary file id to materialize directly into the sandbox.", + "format": "uuid", + "nullable": true, + "example": "c2e765ec-8aad-49f7-ae21-e54916a7e907" + }, + "aworkFileId": { + "type": "string", + "description": "The awork file id to materialize directly into the sandbox.", + "format": "uuid", + "nullable": true, + "example": "8f77f578-ec66-47d9-98d1-5daf2ae5c6c3" } }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/workspaces/{workspaceId}/files/{fileId}/versions/{versionId}": { - "get": { - "tags": [ - "Workspace Files" + "additionalProperties": false, + "description": "Represents the worker bootstrap context file payload for the agent runtime API." + }, + "WorkspaceContextCatalogStatus": { + "enum": [ + "Pending", + "Ready", + "Failed" ], - "summary": "Returns the workspace file version with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByWorkspaceNameAndWorkspaceIdAndFileIdAndVersionId", - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "description": "The id of the workspace.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "type": "string", + "description": "Describes the state of the derived workspace-context catalog." + }, + "WorkspaceContextResponseModel": { + "type": "object", + "properties": { + "rawContentHtml": { + "type": "string", + "description": "Gets or sets the complete workspace context as rich-text HTML.", + "nullable": true }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "catalogStatus": { + "$ref": "#/components/schemas/WorkspaceContextCatalogStatus" }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileVersion" - } - } - } + "updatedBy": { + "type": "string", + "description": "Gets or sets the id of the user who last updated the context.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "updatedOn": { + "type": "string", + "description": "Gets or sets when the context was last updated.", + "format": "date-time" }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "sections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WorkspaceContextSectionResponseModel" + }, + "description": "Gets or sets the available catalog section summaries.", + "nullable": true } }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/workspaces/{workspaceId}/files/{fileId}/versions/{versionId}/download": { - "get": { - "tags": [ - "WorkspaceFiles" - ], - "summary": "Returns the content of the workspace file version with the specified id.", - "description": "Returns the content of the workspace file version with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetWorkspaceFileVersionContent", - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "description": "The id of the workspace.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "additionalProperties": false, + "description": "Represents saved workspace context and its derived catalog state." + }, + "WorkspaceContextSectionResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Gets or sets the section id used for on-demand loading.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "heading": { + "type": "string", + "description": "Gets or sets the section heading.", + "nullable": true }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } + "whenToLoadHint": { + "type": "string", + "description": "Gets or sets the short hint that describes when to load the section.", + "nullable": true + }, + "order": { + "type": "integer", + "description": "Gets or sets the section order.", + "format": "int32" } }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - } - }, - "components": { - "schemas": { + "additionalProperties": false, + "description": "Represents one derived workspace-context catalog entry." + }, "Account": { "type": "object", "properties": { @@ -49527,61 +58824,6 @@ "additionalProperties": false, "description": "The verification email form." }, - "ErrorResponse": { - "required": [ - "code", - "description", - "link" - ], - "type": "object", - "properties": { - "code": { - "minLength": 1, - "type": "string", - "description": "The error code.", - "example": "not-found" - }, - "description": { - "minLength": 1, - "type": "string", - "description": "The description of the error.", - "example": "There is no matching path for this URL." - }, - "link": { - "minLength": 1, - "type": "string", - "description": "The link to the API documentation page.", - "example": "https://developers.awork.com" - }, - "details": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of details describing the error.", - "nullable": true, - "example": [ - "No project with the id '123' exists." - ] - }, - "validationErrors": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ValidationErrorResponse" - }, - "description": "If a validation error occurred, this contains the validation errors for each property.", - "nullable": true - }, - "traceId": { - "type": "string", - "description": "The request trace id for tracking the request.", - "nullable": true, - "example": "a65ce5745df02af216715ff06661fb3a" - } - }, - "additionalProperties": false, - "description": "The API error response." - }, "ExternalAccount": { "type": "object", "properties": { @@ -50132,77 +59374,6 @@ }, "additionalProperties": false }, - "TableAuditEventModel": { - "type": "object", - "properties": { - "workspaceId": { - "type": "string", - "format": "uuid", - "example": "123e4567-e89b-12d3-a456-426614174000" - }, - "correlationId": { - "type": "string", - "format": "uuid", - "example": "123e4567-e89b-12d3-a456-426614174000" - }, - "userId": { - "type": "string", - "format": "uuid", - "example": "123e4567-e89b-12d3-a456-426614174000" - }, - "createdOn": { - "type": "string", - "format": "date-time" - }, - "impersonatingUserId": { - "type": "string", - "format": "uuid", - "nullable": true, - "example": "123e4567-e89b-12d3-a456-426614174000" - }, - "traceId": { - "type": "string", - "nullable": true - }, - "websocketConnectionId": { - "type": "string", - "nullable": true - }, - "eventType": { - "type": "string", - "nullable": true - }, - "entityType": { - "type": "string", - "nullable": true - }, - "entityId": { - "type": "string", - "nullable": true - }, - "clientId": { - "type": "string", - "nullable": true - }, - "property": { - "type": "string", - "nullable": true - }, - "old": { - "type": "string", - "nullable": true - }, - "new": { - "type": "string", - "nullable": true - }, - "callStack": { - "type": "string", - "nullable": true - } - }, - "additionalProperties": false - }, "TokenResponse": { "type": "object", "properties": { @@ -50302,25 +59473,6 @@ "additionalProperties": false, "description": "The model to validate a password reset request." }, - "ValidationErrorResponse": { - "type": "object", - "properties": { - "property": { - "type": "string", - "description": "The name of the property that failed validation.", - "nullable": true, - "example": "FirstName" - }, - "message": { - "type": "string", - "description": "The reason why this property failed validation.", - "nullable": true, - "example": "FirstName is required." - } - }, - "additionalProperties": false, - "description": "The validation error response." - }, "VerifyEmailForm": { "type": "object", "properties": { @@ -75172,6 +84324,18 @@ } ], "tags": [ + { + "name": "AgentRuntime", + "description": "Sandbox-backed generic agent runtime endpoints." + }, + { + "name": "AgentThreads", + "description": "The AI threads feature provides endpoints to manage personal and custom agent conversations." + }, + { + "name": "OAuth", + "description": "The OAuth feature provides OAuth 2.0 discovery endpoints for authorization server and protected resource metadata." + }, { "name": "Accounts", "description": "The accounts endpoints allow you to manage the basic account details of a user." From 3796f95c95c22c2840faac1fd14f6ebe58c0376f Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 8 Sep 2026 00:27:17 +0000 Subject: [PATCH 08/16] Update API specifications with fern api update --- fern/apis/v1/openapi/openapi.json | 1304 +++++++++++++++-------------- 1 file changed, 678 insertions(+), 626 deletions(-) diff --git a/fern/apis/v1/openapi/openapi.json b/fern/apis/v1/openapi/openapi.json index a0d7576..5a970b3 100644 --- a/fern/apis/v1/openapi/openapi.json +++ b/fern/apis/v1/openapi/openapi.json @@ -1284,8 +1284,8 @@ "tags": [ "AgentRuntime" ], - "summary": "Creates a new custom agent, optionally forked from an existing agent.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Creates a new custom agent.", + "description": "Set to copy an existing agent. Otherwise, specify either a preset or a model provider and model name.\r\n\r\nAny authenticated user.", "operationId": "PostAgents", "requestBody": { "description": "The request payload.", @@ -1447,61 +1447,6 @@ } } }, - "/agents/connectors/auth/callback": { - "get": { - "tags": [ - "AgentRuntime" - ], - "summary": "Handles an OAuth 2.0 authorization-code or provider-error callback for a connector.", - "description": "\r\n\r\nAllows unauthenticated access.", - "operationId": "GetConnectorsAuthCallback", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "anonymous": "true" - } - } - }, "/agents/connectors/presets": { "get": { "tags": [ @@ -2208,7 +2153,7 @@ "tags": [ "AgentThreads" ], - "summary": "Creates an AI thread.", + "summary": "Creates an agent thread.", "description": "\r\n\r\nAny authenticated user.", "operationId": "PostAgentsThreads", "requestBody": { @@ -2274,7 +2219,7 @@ "tags": [ "AgentThreads" ], - "summary": "Retrieves an AI thread by id.", + "summary": "Gets an agent thread.", "description": "\r\n\r\nAny authenticated user.", "operationId": "GetAgentsThreadsByThreadId", "parameters": [ @@ -2331,7 +2276,7 @@ "tags": [ "AgentThreads" ], - "summary": "Cancels an active custom agent session for the specified thread.", + "summary": "Cancels a Custom agent thread.", "description": "\r\n\r\nAny authenticated user.", "operationId": "PostAgentsThreadsCancelByThreadId", "parameters": [ @@ -2386,10 +2331,10 @@ "/agents/threads/{threadId}/files/{fileId}": { "get": { "tags": [ - "Entity Files" + "Agent Thread Files" ], - "summary": "Returns a file from the specified agent thread.", - "description": "The user must have read access to the agent thread.", + "summary": "Returns a file of the specified agent thread.", + "description": "The user must have `read` access to the agent thread.", "operationId": "GetAgentsThreadsFilesByThreadIdAndFileId", "parameters": [ { @@ -2549,7 +2494,7 @@ "tags": [ "AgentThreads" ], - "summary": "Returns the messages of an AI thread.", + "summary": "Lists agent thread messages.", "description": "\r\n\r\nAny authenticated user.", "operationId": "GetAgentsThreadsMessagesByThreadId", "parameters": [ @@ -2607,7 +2552,7 @@ "tags": [ "AgentThreads" ], - "summary": "Accepts a message for an AI thread and decides whether to start it or add it to the thread queue.", + "summary": "Sends an agent thread message.", "description": "The workspace must have remaining AI tokens and credits to process the message.\r\n The specified thread must belong to the current user.", "operationId": "PostAgentsThreadsMessagesByThreadId", "parameters": [ @@ -2623,7 +2568,7 @@ } ], "requestBody": { - "description": "The model with the content to send to the AI thread.", + "description": "The model with the content to send to the agent thread.", "content": { "application/json": { "schema": { @@ -2695,7 +2640,7 @@ "tags": [ "AgentThreads" ], - "summary": "Gets the processing status of a user message in the specified AI thread.", + "summary": "Gets agent thread message status.", "description": "\r\n\r\nAny authenticated user.", "operationId": "GetAgentsThreadsMessagesStatusByThreadIdAndClientMessageId", "parameters": [ @@ -11211,6 +11156,20 @@ } } } + }, + "206": { + "description": "Partial Content", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "416": { + "description": "Range Not Satisfiable" } }, "security": [ @@ -39946,6 +39905,7 @@ { "name": "fileId", "in": "path", + "description": "The temporary file to download.", "required": true, "schema": { "type": "string", @@ -39957,6 +39917,9 @@ "200": { "description": "OK" }, + "206": { + "description": "Partial Content" + }, "404": { "description": "Not Found", "content": { @@ -39966,6 +39929,16 @@ } } } + }, + "416": { + "description": "Range Not Satisfiable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -50227,9 +50200,12 @@ "type": "object", "properties": { "accessLevel": { + "enum": [ + "read", + "manage" + ], "type": "string", - "description": "Gets or sets the access level to grant (read or manage).", - "nullable": true + "description": "The access level to grant." } }, "additionalProperties": false, @@ -50283,14 +50259,17 @@ "properties": { "userId": { "type": "string", - "description": "Gets or sets the id of the user to share the agent with.", + "description": "The user who receives access.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "accessLevel": { + "enum": [ + "read", + "manage" + ], "type": "string", - "description": "Gets or sets the access level to grant (read or manage).", - "nullable": true + "description": "The access level to grant." } }, "additionalProperties": false, @@ -50301,20 +50280,23 @@ "properties": { "id": { "type": "string", - "description": "Gets or sets the id of the contributor entry.", + "description": "The access grant identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "userId": { "type": "string", - "description": "Gets or sets the id of the user the agent is shared with.", + "description": "The user who receives access.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "accessLevel": { + "enum": [ + "read", + "manage" + ], "type": "string", - "description": "Gets or sets the access level granted to the user (read or manage).", - "nullable": true + "description": "The access level granted to the user." } }, "additionalProperties": false, @@ -50325,7 +50307,7 @@ "properties": { "type": { "type": "string", - "description": "The public agent thread type the defaults apply to.", + "description": "The matching agent thread type.", "nullable": true, "example": "custom-agent" }, @@ -50379,105 +50361,107 @@ } }, "additionalProperties": false, - "description": "Represents default agent options for starting or continuing an AI thread." + "description": "Provides agent thread defaults." }, "AgentDelegationResponseModel": { "type": "object", "properties": { "id": { "type": "string", - "description": "Gets or sets the id.", + "description": "The delegation identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "agentId": { "type": "string", - "description": "Gets or sets the agent id.", + "description": "The parent agent that owns the delegation.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "delegatedAgentId": { "type": "string", - "description": "Gets or sets the delegated agent id.", + "description": "The agent that receives the delegated work.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "name": { "type": "string", - "description": "Gets or sets the name.", + "description": "The delegation name shown in workflow settings.", "nullable": true }, "description": { "type": "string", - "description": "Gets or sets the description.", + "description": "A short explanation of the delegated work.", "nullable": true }, "executionMode": { + "enum": [ + "orchestracted" + ], "type": "string", - "description": "Gets or sets the execution mode.", - "nullable": true + "description": "How the parent agent invokes the delegated agent." }, "promptOverride": { "type": "string", - "description": "Gets or sets the prompt override.", + "description": "Additional instructions supplied to the delegated agent.", "nullable": true }, "sortOrder": { "type": "integer", - "description": "Gets or sets the sort order.", + "description": "The delegation's display order.", "format": "int32" } }, "additionalProperties": false, - "description": "Represents the agent delegation response payload for the agent runtime API." + "description": "Describes a delegation from one agent to another." }, "AgentMemoryResponseModel": { "type": "object", "properties": { "id": { "type": "string", - "description": "Gets or sets the memory id assigned by Mem0.", + "description": "The memory id assigned by Mem0.", "nullable": true }, "memory": { "type": "string", - "description": "Gets or sets the memory text inferred and stored by Mem0.", + "description": "The memory text inferred and stored by Mem0.", "nullable": true }, "scope": { "type": "string", - "description": "Gets or sets the memory scope.", + "description": "The memory scope.", "nullable": true }, "projectId": { "type": "string", - "description": "Gets or sets the project id when the memory is project-scoped.", + "description": "The project id when the memory is project-scoped.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "clientId": { "type": "string", - "description": "Gets or sets the client id when the memory is client-scoped.", + "description": "The client id when the memory is client-scoped.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "score": { "type": "number", - "description": "Gets or sets the relevance score returned by Mem0 search.", + "description": "The relevance score returned by Mem0 search.", "format": "double", "nullable": true }, "createdAt": { "type": "string", - "description": "Gets or sets the creation timestamp returned by Mem0.", + "description": "The creation timestamp returned by Mem0.", "format": "date-time", "nullable": true }, "updatedAt": { "type": "string", - "description": "Gets or sets the update timestamp returned by Mem0.", + "description": "The update timestamp returned by Mem0.", "format": "date-time", "nullable": true } @@ -50502,95 +50486,85 @@ } }, "additionalProperties": false, - "description": "Selects one connection for a connector in a single custom-agent message." - }, - "AgentOwnershipScope": { - "enum": [ - 0, - 1, - 2 - ], - "type": "integer", - "description": "Defines where an agent configuration belongs.", - "format": "int32" + "description": "Selects a connection for a Custom agent connector." }, "AgentParticipationResponseModel": { "type": "object", "properties": { "participationId": { "type": "string", - "description": "Gets or sets the participation identifier.", + "description": "The participation identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "agentId": { "type": "string", - "description": "Gets or sets the participating agent.", + "description": "The participating agent.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "agentName": { "type": "string", - "description": "Gets or sets the agent name captured for the audit record.", + "description": "The agent name captured for the audit record.", "nullable": true }, "threadId": { "type": "string", - "description": "Gets or sets the latest thread available for the agent in this context.", + "description": "The latest thread available for the agent in this context.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "responsibleUserId": { "type": "string", - "description": "Gets or sets the responsible user of the latest run.", + "description": "The responsible user of the latest run.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "firstThreadRunId": { "type": "string", - "description": "Gets or sets the first run in the participation.", + "description": "The first run in the participation.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "lastThreadRunId": { "type": "string", - "description": "Gets or sets the latest run in the participation.", + "description": "The latest run in the participation.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "createdOn": { "type": "string", - "description": "Gets or sets when participation was first recorded.", + "description": "When participation was first recorded.", "format": "date-time" }, "updatedOn": { "type": "string", - "description": "Gets or sets when participation was last updated.", + "description": "When participation was last updated.", "format": "date-time" }, "threadAvailable": { "type": "boolean", - "description": "Gets or sets whether the thread is still available." + "description": "Whether the thread is still available." }, "canReadThread": { "type": "boolean", - "description": "Gets or sets whether the requester can open the thread." + "description": "Whether the requester can open the thread." }, "canReadRunHistory": { "type": "boolean", - "description": "Gets or sets whether the requester can inspect the participation's run history." + "description": "Whether the requester can inspect the participation's run history." }, "canInvokeAgent": { "type": "boolean", - "description": "Gets or sets whether the requester can run the agent in this context." + "description": "Whether the requester can run the agent in this context." }, "canCancelAgent": { "type": "boolean", - "description": "Gets or sets whether the requester can cancel the current agent run." + "description": "Whether the requester can cancel the current agent run." }, "triggeredByUserId": { "type": "string", - "description": "Gets or sets the user who triggered the latest recorded run.", + "description": "The user who triggered the latest recorded run.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" @@ -50604,48 +50578,48 @@ "properties": { "id": { "type": "string", - "description": "Gets or sets the run identifier.", + "description": "The run identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "executingUserId": { "type": "string", - "description": "Gets or sets the user whose permissions applied to the run.", + "description": "The user whose permissions applied to the run.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "triggeredByUserId": { "type": "string", - "description": "Gets or sets the user who triggered the run.", + "description": "The user who triggered the run.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "triggerType": { "type": "string", - "description": "Gets or sets how the run was triggered.", + "description": "How the run was triggered.", "nullable": true }, "status": { "type": "string", - "description": "Gets or sets the terminal or active run status.", + "description": "The terminal or active run status.", "nullable": true }, "startedOn": { "type": "string", - "description": "Gets or sets when execution started.", + "description": "When execution started.", "format": "date-time", "nullable": true }, "completedOn": { "type": "string", - "description": "Gets or sets when execution completed.", + "description": "When execution completed.", "format": "date-time", "nullable": true }, "failureReason": { "type": "string", - "description": "Gets or sets the terminal failure reason.", + "description": "The terminal failure reason.", "nullable": true } }, @@ -50657,81 +50631,81 @@ "properties": { "sourceAgentId": { "type": "string", - "description": "Gets or sets the source agent ID used to import the selected preset.", + "description": "The source agent used to import the selected preset.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "versionNumber": { "type": "integer", - "description": "Gets or sets the product-facing preset version number.", + "description": "The product-facing preset version number.", "format": "int32" }, "name": { "type": "string", - "description": "Gets or sets the localized display name.", + "description": "The localized display name.", "nullable": true }, "description": { "type": "string", - "description": "Gets or sets the localized short description.", + "description": "The localized short description.", "nullable": true }, "detailedDescription": { "type": "string", - "description": "Gets or sets the localized detailed catalog description.", + "description": "The localized detailed catalog description.", "nullable": true }, "systemPrompt": { "type": "string", - "description": "Gets or sets the published system instructions.", + "description": "The published system instructions.", "nullable": true }, "modelPresetKey": { "type": "string", - "description": "Gets or sets the published model preset key.", + "description": "The published model preset key.", "nullable": true }, "modelProvider": { "type": "string", - "description": "Gets or sets the published direct model provider.", + "description": "The published direct model provider.", "nullable": true }, "modelName": { "type": "string", - "description": "Gets or sets the published direct model name.", + "description": "The published direct model name.", "nullable": true }, "reasoningLevel": { "type": "string", - "description": "Gets or sets the published reasoning level.", + "description": "The published reasoning level.", "nullable": true }, "webSearchEnabled": { "type": "boolean", - "description": "Gets or sets whether web search is enabled in the published snapshot." + "description": "Whether web search is enabled in the published snapshot." }, "aworkAccessEnabled": { "type": "boolean", - "description": "Gets or sets whether awork access is enabled in the published snapshot." + "description": "Whether awork access is enabled in the published snapshot." }, "googleGenAiAccessEnabled": { "type": "boolean", - "description": "Gets or sets whether Google image generation is enabled in the published snapshot." + "description": "Whether Google image generation is enabled in the published snapshot." }, "openAiImageGenerationAccessEnabled": { "type": "boolean", - "description": "Gets or sets whether OpenAI image generation is enabled in the published snapshot." + "description": "Whether OpenAI image generation is enabled in the published snapshot." }, "hasAvatar": { "type": "boolean", - "description": "Gets or sets whether the published snapshot includes an avatar." + "description": "Whether the published snapshot includes an avatar." }, "skillNames": { "type": "array", "items": { "type": "string" }, - "description": "Gets or sets the skill names included in the published snapshot.", + "description": "The skill names included in the published snapshot.", "nullable": true } }, @@ -50743,37 +50717,37 @@ "properties": { "sourceAgentId": { "type": "string", - "description": "Gets or sets the source agent ID, which is also the stable preset identity.", + "description": "The source agent, which also identifies the preset.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "sourceAgentName": { "type": "string", - "description": "Gets or sets the source agent name from the published snapshot.", + "description": "The source agent name from the published snapshot.", "nullable": true }, "language": { "type": "string", - "description": "Gets or sets the published language.", + "description": "The published language.", "nullable": true }, "detailedDescription": { "type": "string", - "description": "Gets or sets the detailed catalog description.", + "description": "The detailed catalog description.", "nullable": true }, "isPublished": { "type": "boolean", - "description": "Gets or sets whether the preset is currently visible to customers." + "description": "Whether the preset is currently visible to customers." }, "latestPublishedVersionNumber": { "type": "integer", - "description": "Gets or sets the latest product-facing version number.", + "description": "The latest product-facing version number.", "format": "int32" }, "nextVersionNumber": { "type": "integer", - "description": "Gets or sets the version number assigned by the next publication.", + "description": "The version number assigned by the next publication.", "format": "int32" }, "versions": { @@ -50781,7 +50755,7 @@ "items": { "$ref": "#/components/schemas/AgentPresetVersionSummaryResponseModel" }, - "description": "Gets or sets the bounded product-facing release history.", + "description": "The bounded product-facing release history.", "nullable": true } }, @@ -50793,67 +50767,67 @@ "properties": { "id": { "type": "string", - "description": "Gets or sets the agent ID.", + "description": "The source agent identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "name": { "type": "string", - "description": "Gets or sets the agent name.", + "description": "The agent name.", "nullable": true }, "description": { "type": "string", - "description": "Gets or sets the short agent description.", + "description": "The short agent description.", "nullable": true }, "presetKey": { "type": "string", - "description": "Gets or sets the stored model preset identity.", + "description": "The stored model preset identity.", "nullable": true }, "modelProvider": { "type": "string", - "description": "Gets or sets the model provider.", + "description": "The model provider.", "nullable": true }, "modelName": { "type": "string", - "description": "Gets or sets the model name.", + "description": "The model name.", "nullable": true }, "reasoningLevel": { "type": "string", - "description": "Gets or sets the reasoning level.", + "description": "The reasoning level.", "nullable": true }, "systemPrompt": { "type": "string", - "description": "Gets or sets the current system prompt.", + "description": "The current system prompt.", "nullable": true }, "webSearchEnabled": { "type": "boolean", - "description": "Gets or sets whether web search is enabled." + "description": "Whether web search is enabled." }, "aworkAccessEnabled": { "type": "boolean", - "description": "Gets or sets whether awork access is enabled." + "description": "Whether awork access is enabled." }, "googleGenAiAccessEnabled": { "type": "boolean", - "description": "Gets or sets whether Google image generation is enabled." + "description": "Whether Google image generation is enabled." }, "openAiImageGenerationAccessEnabled": { "type": "boolean", - "description": "Gets or sets whether OpenAI image generation is enabled." + "description": "Whether OpenAI image generation is enabled." }, "publicationBlockers": { "type": "array", "items": { "type": "string" }, - "description": "Gets or sets the source features that prevent preset publication.", + "description": "The source features that prevent preset publication.", "nullable": true }, "includedSkillNames": { @@ -50861,7 +50835,7 @@ "items": { "type": "string" }, - "description": "Gets or sets the skill names that will be copied into an imported preset agent.", + "description": "The skill names that will be copied into an imported preset agent.", "nullable": true } }, @@ -50873,21 +50847,21 @@ "properties": { "versionNumber": { "type": "integer", - "description": "Gets or sets the product-facing version number.", + "description": "The product-facing version number.", "format": "int32" }, "publishedOn": { "type": "string", - "description": "Gets or sets when this version was published.", + "description": "When this version was published.", "format": "date-time" }, "isPublished": { "type": "boolean", - "description": "Gets or sets whether this version remains published." + "description": "Whether this version remains published." }, "isActive": { "type": "boolean", - "description": "Gets or sets whether this version is the active customer-facing version." + "description": "Whether this version is the active customer-facing version." } }, "additionalProperties": false, @@ -50994,34 +50968,6 @@ "nullable": true, "example": "🇪🇺" }, - "contextWindowTokens": { - "type": "integer", - "description": "The model context window size in tokens.", - "format": "int32", - "nullable": true, - "example": 1050000 - }, - "defaultOutputReserveTokens": { - "type": "integer", - "description": "The default output reserve in tokens.", - "format": "int32", - "nullable": true, - "example": 128000 - }, - "compactionThresholdTokens": { - "type": "integer", - "description": "The configured compaction trigger threshold in tokens.", - "format": "int32", - "nullable": true, - "example": 250000 - }, - "recentHistoryKeepTokens": { - "type": "integer", - "description": "The recent verbatim history budget kept after compaction.", - "format": "int32", - "nullable": true, - "example": 8000 - }, "supportsImageInput": { "type": "boolean", "description": "Whether the model accepts native image input.", @@ -51059,7 +51005,7 @@ "items": { "$ref": "#/components/schemas/AgentRuntimeProviderModelsResponseModel" }, - "description": "The providers.", + "description": "The available providers and their models.", "nullable": true }, "performanceLevels": { @@ -51083,7 +51029,7 @@ } }, "additionalProperties": false, - "description": "Represents the agent runtimes response payload for the agent runtime API." + "description": "Describes the models available to the workspace." }, "AgentRuntimePerformanceLevelResponseModel": { "type": "object", @@ -51126,19 +51072,19 @@ "properties": { "provider": { "type": "string", - "description": "The provider.", + "description": "The stable provider key.", "nullable": true, "example": "openai" }, "displayName": { "type": "string", - "description": "The display name.", + "description": "The provider name shown to users.", "nullable": true, "example": "OpenAI" }, "defaultModel": { "type": "string", - "description": "The default model.", + "description": "The provider model selected by default.", "nullable": true, "example": "gpt-5.6-terra" }, @@ -51147,7 +51093,7 @@ "items": { "type": "string" }, - "description": "The models.", + "description": "The available provider model keys.", "nullable": true }, "modelDetails": { @@ -51160,7 +51106,7 @@ } }, "additionalProperties": false, - "description": "Represents the agent runtime providers response payload for the agent runtime API." + "description": "Describes the models available from one provider." }, "AgentRuntimeWorkspaceModelPresetResponseModel": { "type": "object", @@ -51313,88 +51259,88 @@ "properties": { "name": { "type": "string", - "description": "Gets or sets the schedule display name.", + "description": "The schedule display name.", "nullable": true }, "id": { "type": "string", - "description": "Gets or sets the schedule id.", + "description": "The schedule id.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "createdOn": { "type": "string", - "description": "Gets or sets when the schedule was created.", + "description": "When the schedule was created.", "format": "date-time" }, "agentId": { "type": "string", - "description": "Gets or sets the agent id that is executed by this schedule.", + "description": "The agent id that is executed by this schedule.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "ownerUserId": { "type": "string", - "description": "Gets or sets the user id whose context is used to execute the scheduled run.", + "description": "The user id whose context is used to execute the scheduled run.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "prompt": { "type": "string", - "description": "Gets or sets the additional prompt guidance sent as the scheduled run's initial message.", + "description": "The additional prompt guidance sent as the scheduled run's initial message.", "nullable": true }, "cronRule": { "type": "string", - "description": "Gets or sets the normalized cron rule used for recurring execution.", + "description": "The normalized cron rule used for recurring execution.", "nullable": true }, "timezone": { "type": "string", - "description": "Gets or sets the timezone used to evaluate the cron rule.", + "description": "The timezone used to evaluate the cron rule.", "nullable": true }, "projectId": { "type": "string", - "description": "Gets or sets the optional project context id.", + "description": "The optional project context id.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "taskId": { "type": "string", - "description": "Gets or sets the optional task context id.", + "description": "The optional task context id.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "isEnabled": { "type": "boolean", - "description": "Gets or sets whether this schedule is active." + "description": "Whether this schedule is active." }, "needsAttention": { "type": "boolean", - "description": "Gets or sets whether the schedule needs user attention." + "description": "Whether the schedule needs user attention." }, "lastFailureReason": { "type": "string", - "description": "Gets or sets the latest rejection reason.", + "description": "The latest rejection reason.", "nullable": true }, "consecutiveFailureCount": { "type": "integer", - "description": "Gets or sets the number of consecutive failed scheduled executions.", + "description": "The number of consecutive failed scheduled executions.", "format": "int32" }, "lastAttemptOn": { "type": "string", - "description": "Gets or sets the latest occurrence time.", + "description": "The latest occurrence time.", "format": "date-time", "nullable": true }, "lastSuccessfulRunOn": { "type": "string", - "description": "Gets or sets the latest accepted occurrence time.", + "description": "The latest accepted occurrence time.", "format": "date-time", "nullable": true } @@ -51404,51 +51350,50 @@ }, "AgentSessionSourceType": { "enum": [ - 0, - 1, - 2, - 3, - 4, - 5 + "manual", + "project", + "task", + "client", + "workflow", + "automation" ], - "type": "integer", - "description": "Identifies the product source that created a custom-agent thread.", - "format": "int32" + "type": "string", + "description": "Identifies the product source that created a custom-agent thread." }, "AgentSkillLinkResponseModel": { "type": "object", "properties": { "id": { "type": "string", - "description": "Gets or sets the id.", + "description": "The agent-skill link identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "agentId": { "type": "string", - "description": "Gets or sets the agent id.", + "description": "The agent that uses the skill.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "skillId": { "type": "string", - "description": "Gets or sets the skill id.", + "description": "The linked skill identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "skillKey": { "type": "string", - "description": "Gets or sets the skill key.", + "description": "The linked skill's stable key.", "nullable": true }, "skillName": { "type": "string", - "description": "Gets or sets the skill name.", + "description": "The linked skill's display name.", "nullable": true } }, "additionalProperties": false, - "description": "Represents the agent skill link response payload for the agent runtime API." + "description": "Describes a skill linked to an agent." }, "AgentSummaryResponseModel": { "type": "object", @@ -51485,7 +51430,7 @@ }, "type": { "type": "string", - "description": "The type.", + "description": "The public agent type.", "nullable": true, "example": "custom-agent" }, @@ -51499,19 +51444,19 @@ }, "name": { "type": "string", - "description": "The name.", + "description": "The name shown to users.", "nullable": true, "example": "Client Status Reporter" }, "description": { "type": "string", - "description": "The description.", + "description": "A short explanation of what the agent does.", "nullable": true, "example": "Prepares client-ready project status reports." }, "currentSystemPromptVersionId": { "type": "string", - "description": "The current system prompt version id.", + "description": "The current immutable system prompt version.", "format": "uuid", "nullable": true, "example": "fd077515-d4a8-4f79-9fbf-19271bd0123d" @@ -51572,7 +51517,7 @@ "type": "string", "format": "uuid" }, - "description": "The skill ids.", + "description": "The skills linked to the agent.", "nullable": true }, "hasImage": { @@ -51586,115 +51531,122 @@ "example": false }, "workspaceAccessLevel": { + "enum": [ + "read", + "manage" + ], "type": "string", "description": "The workspace-wide access level.", "nullable": true, "example": "manage" }, "accessLevel": { + "enum": [ + "read", + "manage" + ], "type": "string", "description": "The requesting user's access level.", - "nullable": true, "example": "manage" } }, "additionalProperties": false, - "description": "Represents the agent summary response payload for the agent runtime API." + "description": "Describes a custom agent and its current configuration." }, "AgentThreadArtifactResponseModel": { "type": "object", "properties": { "path": { "type": "string", - "description": "Gets or sets the path.", + "description": "The file path relative to the thread workspace.", "nullable": true }, "fileName": { "type": "string", - "description": "Gets or sets the file name.", + "description": "The final segment of the file path.", "nullable": true }, "mimeType": { "type": "string", - "description": "Gets or sets the mime type.", + "description": "The file's MIME type.", "nullable": true }, "sizeBytes": { "type": "integer", - "description": "Gets or sets the size in bytes.", + "description": "The file size in bytes.", "format": "int64" }, "sha256": { "type": "string", - "description": "Gets or sets the SHA-256 hash.", + "description": "The lowercase SHA-256 digest of the file content.", "nullable": true }, "modifiedOn": { "type": "string", - "description": "Gets or sets the modified on timestamp.", + "description": "When the file was last modified.", "format": "date-time", "nullable": true }, "createdOn": { "type": "string", - "description": "Gets or sets the created on.", + "description": "When the file was created.", "format": "date-time", "nullable": true } }, "additionalProperties": false, - "description": "Represents the agent session artifact response payload for the agent runtime API." + "description": "Describes a file produced by an agent thread." }, "AgentThreadEventResponseModel": { "type": "object", "properties": { "sequence": { "type": "integer", - "description": "Gets or sets the sequence.", + "description": "The event's durable order within the thread.", "format": "int64" }, "eventName": { "type": "string", - "description": "Gets or sets the event name.", + "description": "The runtime event type.", "nullable": true }, "dataJson": { "type": "string", - "description": "Gets or sets the data json.", + "description": "The event payload as JSON.", "nullable": true }, "traceId": { "type": "string", - "description": "Gets or sets the trace id.", + "description": "The distributed trace that produced the event.", "nullable": true }, "createdOn": { "type": "string", - "description": "Gets or sets the created on.", + "description": "When the event was created.", "format": "date-time", "nullable": true }, "createdBy": { "type": "string", - "description": "Gets or sets the creator ID.", + "description": "The user or service that created the event.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "updatedOn": { "type": "string", - "description": "Gets or sets the update timestamp.", + "description": "When the event was last updated.", "format": "date-time", "nullable": true }, "updatedBy": { "type": "string", - "description": "Gets or sets the updater ID.", + "description": "The user or service that last updated the event.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" } }, "additionalProperties": false, - "description": "Represents the agent session event response payload for the agent runtime API." + "description": "Describes a persisted agent thread event." }, "AgentThreadInvocationType": { "enum": [ @@ -51703,7 +51655,7 @@ "project-assignment" ], "type": "string", - "description": "Identifies the product surface that invoked a new agent thread." + "description": "Identifies how an agent thread starts." }, "AgentThreadMessageResponseModel": { "type": "object", @@ -51740,44 +51692,44 @@ }, "threadId": { "type": "string", - "description": "The thread id.", + "description": "The thread that owns the message.", "format": "uuid", "example": "6cbb219e-839d-4d23-b273-3a78bbd842ae" }, "parentThreadId": { "type": "string", - "description": "The parent thread id.", + "description": "The parent thread for a delegated message.", "format": "uuid", "nullable": true, "example": "b5a57e4d-0eec-45b6-b55e-4b70bf0f2a18" }, "role": { "type": "string", - "description": "The role.", + "description": "The message author's role.", "nullable": true, "example": "agent" }, "content": { "type": "string", - "description": "The content.", + "description": "The user-visible message text.", "nullable": true, "example": "The Acme website project is on track for Friday, with budget approval still pending." }, "clientMessageId": { "type": "string", - "description": "The client message id.", + "description": "The client-generated idempotency key for a user message.", "nullable": true, "example": "client-status-2026-08-29" }, "runtimeMessageId": { "type": "string", - "description": "The runtime message id.", + "description": "The stable message reference used by the runtime provider.", "nullable": true, "example": "msg_01K4CLIENTSTATUS" }, "model": { "type": "string", - "description": "The model.", + "description": "The model that produced the message.", "nullable": true, "example": "gpt-5.6-terra" }, @@ -51813,7 +51765,7 @@ }, "agentId": { "type": "string", - "description": "The agent id.", + "description": "The custom agent that produced the message, if applicable.", "format": "uuid", "nullable": true, "example": "4d22e163-2b4a-4d47-b51c-5b2217f84f57" @@ -51836,7 +51788,7 @@ }, "traceId": { "type": "string", - "description": "The trace id.", + "description": "The distributed trace that produced the message.", "nullable": true, "example": "0af7651916cd43dd8448eb211c80319c" }, @@ -51875,7 +51827,7 @@ } }, "additionalProperties": false, - "description": "Represents the agent session message response payload for the agent runtime API." + "description": "Describes a message in an agent thread." }, "AgentThreadReasoningResponseModel": { "type": "object", @@ -52164,7 +52116,7 @@ } }, "additionalProperties": false, - "description": "Represents the shared response for an AI thread in list, detail, and live-update APIs." + "description": "Describes an agent thread." }, "AgentThreadSeenRequestModel": { "type": "object", @@ -52173,7 +52125,7 @@ "maximum": 9223372036854776000, "minimum": 1, "type": "integer", - "description": "Gets or sets the rendered thread update sequence to mark as seen.", + "description": "The rendered thread update sequence to mark as seen.", "format": "int64" } }, @@ -52184,7 +52136,7 @@ "properties": { "wasUpdated": { "type": "boolean", - "description": "Gets or sets whether the seen cursor advanced." + "description": "Whether the seen cursor advanced." } }, "additionalProperties": false @@ -52194,7 +52146,7 @@ "properties": { "updatedCount": { "type": "integer", - "description": "Gets or sets the updated thread count.", + "description": "The updated thread count.", "format": "int32" } }, @@ -52205,7 +52157,7 @@ "properties": { "workspaceId": { "type": "string", - "description": "Gets or sets the owning workspace id.", + "description": "The owning workspace id.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" } @@ -52217,14 +52169,17 @@ "properties": { "teamId": { "type": "string", - "description": "Gets or sets the id of the team to share the agent with.", + "description": "The team that receives access.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "accessLevel": { + "enum": [ + "read", + "manage" + ], "type": "string", - "description": "Gets or sets the access level to grant (read or manage).", - "nullable": true + "description": "The access level to grant." } }, "additionalProperties": false, @@ -52235,20 +52190,23 @@ "properties": { "id": { "type": "string", - "description": "Gets or sets the id of the agent to team entry.", + "description": "The access grant identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "teamId": { "type": "string", - "description": "Gets or sets the id of the team the agent is shared with.", + "description": "The team that receives access.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "accessLevel": { + "enum": [ + "read", + "manage" + ], "type": "string", - "description": "Gets or sets the access level granted to the team (read or manage).", - "nullable": true + "description": "The access level granted to the team." } }, "additionalProperties": false, @@ -52540,92 +52498,100 @@ "properties": { "id": { "type": "string", - "description": "Gets or sets the id.", + "description": "The workflow step identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "agentId": { "type": "string", - "description": "Gets or sets the agent id.", + "description": "The agent that owns the workflow step.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "name": { "type": "string", - "description": "Gets or sets the name.", + "description": "The workflow step name.", "nullable": true }, "stepKind": { + "enum": [ + "task", + "verifier" + ], "type": "string", - "description": "Gets or sets the step kind.", + "description": "The behavior of the workflow step.", "nullable": true }, "delegationId": { "type": "string", - "description": "Gets or sets the delegation id.", + "description": "The delegation executed by this step, if any.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "nextStepId": { "type": "string", - "description": "Gets or sets the next step id.", + "description": "The step to run after this step succeeds.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "rejectStepId": { "type": "string", - "description": "Gets or sets the reject step id.", + "description": "The step to run when a verifier rejects the result.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "promptOverride": { "type": "string", - "description": "Gets or sets the prompt override.", + "description": "Additional instructions supplied to this step.", "nullable": true }, "outputName": { "type": "string", - "description": "Gets or sets the output name.", + "description": "The name used to store this step's output.", "nullable": true }, "failureMode": { + "enum": [ + "stop", + "continue" + ], "type": "string", - "description": "Gets or sets the failure mode.", + "description": "How the workflow handles a failed step.", "nullable": true }, "sortOrder": { "type": "integer", - "description": "Gets or sets the sort order.", + "description": "The step's display order.", "format": "int32" } }, "additionalProperties": false, - "description": "Represents the agent workflow step response payload for the agent runtime API." + "description": "Describes an agent workflow step." }, "AiExhaustedQuotaFallbackOptions": { "type": "object", "properties": { "modelProvider": { "type": "string", - "description": "Gets or sets the provider used for restricted execution.", + "description": "The provider used for restricted execution.", "nullable": true }, "modelName": { "type": "string", - "description": "Gets or sets the model used for restricted execution.", + "description": "The model used for restricted execution.", "nullable": true }, "reasoningEffort": { "type": "string", - "description": "Gets or sets the reasoning effort used for restricted execution.", + "description": "The reasoning effort used for restricted execution.", "nullable": true }, "maxOutputTokens": { "type": "integer", - "description": "Gets or sets the maximum output tokens generated by one restricted response.", + "description": "The maximum output tokens generated by one restricted response.", "format": "int32" } }, @@ -52637,7 +52603,7 @@ "properties": { "plan": { "type": "string", - "description": "Gets or sets the configured paid plan or sponsored profile name.", + "description": "The configured paid plan or sponsored profile name.", "nullable": true, "example": "Pro" }, @@ -52646,14 +52612,14 @@ }, "creditsIncluded": { "type": "integer", - "description": "Gets or sets the whole credits included in the primary monthly quota, or null for an unlimited profile.", + "description": "The whole credits included in the primary monthly quota, or null for an unlimited profile.", "format": "int64", "nullable": true, "example": 7500 }, "isUnlimited": { "type": "boolean", - "description": "Gets or sets whether this item represents the unmetered sponsored profile." + "description": "Whether this item represents the unmetered sponsored profile." } }, "additionalProperties": false, @@ -52664,7 +52630,7 @@ "properties": { "isAiPlanActive": { "type": "boolean", - "description": "Gets or sets whether the workspace AI plan is active." + "description": "Whether the workspace AI plan is active." } }, "additionalProperties": false, @@ -52718,17 +52684,17 @@ }, "fallbackModelProvider": { "type": "string", - "description": "Gets or sets the model provider used for exhausted-quota fallback execution. Null outside fallback mode.", + "description": "The model provider used for exhausted-quota fallback execution. Null outside fallback mode.", "nullable": true }, "fallbackModelName": { "type": "string", - "description": "Gets or sets the model used for exhausted-quota fallback execution. Null outside fallback mode.", + "description": "The model used for exhausted-quota fallback execution. Null outside fallback mode.", "nullable": true }, "fallbackReasoningEffort": { "type": "string", - "description": "Gets or sets the reasoning effort used for exhausted-quota fallback execution. Null outside fallback mode.", + "description": "The reasoning effort used for exhausted-quota fallback execution. Null outside fallback mode.", "nullable": true }, "unavailableReason": { @@ -52746,53 +52712,53 @@ }, "plan": { "type": "string", - "description": "Gets or sets the user's assigned entitlement plan.", + "description": "The user's assigned entitlement plan.", "nullable": true, "example": "Starter" }, "quotaPlan": { "type": "string", - "description": "Gets or sets the effective quota plan used for the current period.", + "description": "The effective quota plan used for the current period.", "nullable": true, "example": "Pro" }, "activationBoostEndsOn": { "type": "string", - "description": "Gets or sets the exclusive end of the first-activation boost. Null when no boost applies.", + "description": "The exclusive end of the first-activation boost. Null when no boost applies.", "format": "date-time", "nullable": true }, "creditsIncluded": { "type": "integer", - "description": "Gets or sets the effective primary credit allowance.", + "description": "The effective primary credit allowance.", "format": "int64", "nullable": true, "example": 7500 }, "creditsUsed": { "type": "integer", - "description": "Gets or sets the whole credits consumed in the current primary period.", + "description": "The whole credits consumed in the current primary period.", "format": "int64", "nullable": true, "example": 1824 }, "creditsAvailable": { "type": "integer", - "description": "Gets or sets the non-negative whole credits remaining in the current primary period.", + "description": "The non-negative whole credits remaining in the current primary period.", "format": "int64", "nullable": true, "example": 5676 }, "creditsUsedPercentage": { "type": "number", - "description": "Gets or sets the percentage of primary credits consumed, capped at 100.", + "description": "The percentage of primary credits consumed, capped at 100.", "format": "double", "nullable": true, "example": 24.3 }, "primaryPeriodEnd": { "type": "string", - "description": "Gets or sets the exclusive end of the current primary credit period.", + "description": "The exclusive end of the current primary credit period.", "format": "date-time", "nullable": true } @@ -52986,7 +52952,7 @@ }, "allowUnlimitedInternalProfile": { "type": "boolean", - "description": "Gets or sets whether sponsored users can use the unmetered `Unlimited` profile." + "description": "Whether sponsored users can use the unmetered `Unlimited` profile." }, "includedPlans": { "type": "object", @@ -53011,7 +52977,7 @@ "properties": { "creditsPerUsd": { "type": "number", - "description": "Gets or sets how many customer credits one USD of attributed provider cost consumes.", + "description": "How many customer credits one USD of attributed provider cost consumes.", "format": "double", "example": 100 }, @@ -53054,42 +53020,42 @@ "properties": { "id": { "type": "string", - "description": "Gets or sets the reset identifier.", + "description": "The reset identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "scope": { "type": "string", - "description": "Gets or sets the reset scope.", + "description": "The reset scope.", "nullable": true }, "workspaceId": { "type": "string", - "description": "Gets or sets the affected workspace, when applicable.", + "description": "The affected workspace, when applicable.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "userId": { "type": "string", - "description": "Gets or sets the affected user, when applicable.", + "description": "The affected user, when applicable.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "resetOn": { "type": "string", - "description": "Gets or sets the inclusive time from which usage counts again.", + "description": "The inclusive time from which usage counts again.", "format": "date-time" }, "reason": { "type": "string", - "description": "Gets or sets the reset explanation.", + "description": "The reset explanation.", "nullable": true }, "reference": { "type": "string", - "description": "Gets or sets the optional incident or support reference.", + "description": "The optional incident or support reference.", "nullable": true } }, @@ -53101,17 +53067,17 @@ "properties": { "token": { "type": "string", - "description": "Gets or sets the short-lived Azure Speech authorization token.", + "description": "The short-lived Azure Speech authorization token.", "nullable": true }, "region": { "type": "string", - "description": "Gets or sets the Azure Speech region the token belongs to.", + "description": "The Azure Speech region the token belongs to.", "nullable": true }, "expiresInSeconds": { "type": "integer", - "description": "Gets or sets the number of seconds until the token expires.", + "description": "The number of seconds until the token expires.", "format": "int32" } }, @@ -53123,89 +53089,89 @@ "properties": { "id": { "type": "string", - "description": "Gets or sets the thread identifier.", + "description": "The thread identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "type": { "type": "string", - "description": "Gets or sets the thread type.", + "description": "The thread type.", "nullable": true }, "title": { "type": "string", - "description": "Gets or sets the contextual thread title. A private thread title is available only to its creator.\nContributors do not widen this: they exist only on project- or task-backed threads, whose titles are never masked.", + "description": "The contextual thread title. A private thread title is available only to its creator.\nContributors do not widen this: they exist only on project- or task-backed threads, whose titles are never masked.", "nullable": true }, "createdBy": { "type": "string", - "description": "Gets or sets the human creator identifier.", + "description": "The human creator identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "agentId": { "type": "string", - "description": "Gets or sets the associated Agent identifier.", + "description": "The associated Agent identifier.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "agentNameSnapshot": { "type": "string", - "description": "Gets or sets the Agent display name captured for the initial run.", + "description": "The Agent display name captured for the initial run.", "nullable": true }, "executionType": { "type": "string", - "description": "Gets or sets the initial execution trigger type: direct, task-assignment, project-assignment, mention, schedule, automation, queue, delegation, or workflow.", + "description": "The initial execution trigger type: direct, task-assignment, project-assignment, mention, schedule, automation, queue, delegation, or workflow.", "nullable": true }, "projectId": { "type": "string", - "description": "Gets or sets the project context identifier.", + "description": "The project context identifier.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "taskId": { "type": "string", - "description": "Gets or sets the task context identifier.", + "description": "The task context identifier.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "clientId": { "type": "string", - "description": "Gets or sets the client context identifier.", + "description": "The client context identifier.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "status": { "type": "string", - "description": "Gets or sets the current thread status.", + "description": "The current thread status.", "nullable": true }, "creditsUsed": { "type": "integer", - "description": "Gets or sets the whole credits attributed to this thread for workspace administration.\nThis display value is independent from aggregate quota accounting.", + "description": "The whole credits attributed to this thread for workspace administration.\nThis display value is independent from aggregate quota accounting.", "format": "int64" }, "createdOn": { "type": "string", - "description": "Gets or sets when the thread was created.", + "description": "When the thread was created.", "format": "date-time", "nullable": true }, "lastActivityOn": { "type": "string", - "description": "Gets or sets when the thread last had user-visible activity.", + "description": "When the thread last had user-visible activity.", "format": "date-time", "nullable": true }, "updatedOn": { "type": "string", - "description": "Gets or sets when the thread was last updated.", + "description": "When the thread was last updated.", "format": "date-time", "nullable": true } @@ -53242,6 +53208,10 @@ "type": "object", "properties": { "type": { + "enum": [ + "personal-agent", + "custom-agent" + ], "type": "string", "description": "The thread type.", "nullable": true, @@ -53249,7 +53219,7 @@ }, "agentId": { "type": "string", - "description": "The Custom agent used by the thread or guided flow. For an agent-owned skill flow, this is the skill owner.", + "description": "The Custom agent or agent-owned skill owner.", "format": "uuid", "example": "4d22e163-2b4a-4d47-b51c-5b2217f84f57" }, @@ -53260,6 +53230,12 @@ "example": "0d291ab9-5b6d-4dd7-a0bd-842aca19a9e2" }, "setupFlow": { + "enum": [ + "agent-setup", + "agent-improvement", + "skill-improvement", + "workspace-context" + ], "type": "string", "description": "The optional setup flow.", "nullable": true, @@ -53273,7 +53249,7 @@ "items": { "$ref": "#/components/schemas/WorkerBootstrapContextFileModel" }, - "description": "The context files to attach to an agent runtime thread.", + "description": "Context files for the agent thread.", "nullable": true }, "title": { @@ -53290,7 +53266,7 @@ }, "sourceId": { "type": "string", - "description": "The source id for an agent runtime thread.", + "description": "The external source reference for the thread.", "nullable": true, "example": "api-client-status-run" }, @@ -53357,7 +53333,7 @@ "items": { "$ref": "#/components/schemas/AgentMessageConnectorConnectionRequestModel" }, - "description": "Per-message connection choices for custom-agent connectors.", + "description": "Custom agent connector choices.", "nullable": true }, "skillIds": { @@ -53371,7 +53347,7 @@ } }, "additionalProperties": false, - "description": "Represents the request payload for creating an AI thread." + "description": "Configures a new agent thread." }, "AiThreadCreatedResponseModel": { "type": "object", @@ -53435,7 +53411,7 @@ }, "agentId": { "type": "string", - "description": "The custom agent id.", + "description": "The custom agent assigned to the thread.", "format": "uuid", "nullable": true, "example": "4d22e163-2b4a-4d47-b51c-5b2217f84f57" @@ -53476,7 +53452,7 @@ } }, "additionalProperties": false, - "description": "Represents a newly created AI thread regardless of its runtime type." + "description": "Describes a created agent thread." }, "AiThreadMessageAcceptedResponseModel": { "type": "object", @@ -53629,7 +53605,7 @@ "items": { "$ref": "#/components/schemas/AgentMessageConnectorConnectionRequestModel" }, - "description": "Per-message connection choices for custom-agent connectors.\nThese choices do not update personal-agent or custom-agent configuration.", + "description": "Custom agent connector choices.", "nullable": true }, "skillIds": { @@ -53655,7 +53631,7 @@ }, "url": { "type": "string", - "description": "The URL of the page where the user is when sending the message.", + "description": "The page URL where the message was sent.", "nullable": true, "example": "https://app.awork.com/northstar/projects/acme-website" }, @@ -53697,7 +53673,7 @@ } }, "additionalProperties": false, - "description": "Represents the request payload for posting a message to an AI thread." + "description": "Adds an agent thread message." }, "AiThreadQueueResponseModel": { "type": "object", @@ -53707,7 +53683,7 @@ "items": { "$ref": "#/components/schemas/AiThreadQueuedMessageResponseModel" }, - "description": "Gets or sets the ordered queued messages.", + "description": "The ordered queued messages.", "nullable": true } }, @@ -53724,7 +53700,7 @@ "maximum": 10, "minimum": 1, "type": "integer", - "description": "Gets or sets the requested one-based queue position.", + "description": "The requested one-based queue position.", "format": "int32" } }, @@ -53845,7 +53821,7 @@ "items": { "$ref": "#/components/schemas/AgentMessageConnectorConnectionRequestModel" }, - "description": "Per-message connection choices for custom-agent connectors.\nThese choices do not update personal-agent or custom-agent configuration.", + "description": "Custom agent connector choices.", "nullable": true }, "skillIds": { @@ -53871,7 +53847,7 @@ }, "url": { "type": "string", - "description": "The URL of the page where the user is when sending the message.", + "description": "The page URL where the message was sent.", "nullable": true, "example": "https://app.awork.com/northstar/projects/acme-website" }, @@ -53920,14 +53896,14 @@ "properties": { "projectId": { "type": "string", - "description": "Gets or sets the project to attach to a thread that has no project.", + "description": "The project to attach.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "title": { "type": "string", - "description": "Gets or sets the thread title.", + "description": "The thread title.", "nullable": true }, "rating": { @@ -53936,38 +53912,38 @@ "negative" ], "type": "string", - "description": "Gets or sets the user rating for the thread.", + "description": "The user rating for the thread.", "nullable": true } }, "additionalProperties": false, - "description": "Represents the request payload for updating AI thread metadata." + "description": "Updates agent thread details." }, "AiToolCall": { "type": "object", "properties": { "id": { "type": "string", - "description": "The tool call id.", + "description": "The provider tool call identifier.", "nullable": true, "example": "call_01K4CLIENTSTATUS" }, "toolName": { "type": "string", - "description": "The tool name.", + "description": "The runtime tool that was called.", "nullable": true, "example": "code_mode_execute" }, "connectorId": { "type": "string", - "description": "The connector id.", + "description": "The connector that supplied the tool, if applicable.", "format": "uuid", "nullable": true, "example": "7e376777-7834-4af6-9eb8-da065f568d30" }, "connectionId": { "type": "string", - "description": "The connection id.", + "description": "The connector connection used by the tool, if applicable.", "format": "uuid", "nullable": true, "example": "af18602d-c8aa-4f63-a21e-5a7f59b2412c" @@ -53975,18 +53951,18 @@ "arguments": { "type": "object", "additionalProperties": {}, - "description": "The tool arguments.", + "description": "The structured arguments supplied to the tool.", "nullable": true }, "response": { "type": "string", - "description": "The response.", + "description": "The serialized tool result.", "nullable": true, "example": "{\"status\":\"completed\"}" } }, "additionalProperties": false, - "description": "Represents a pending agent tool call." + "description": "Describes a tool call stored with an agent message." }, "AiUserPlanStateInternalModel": { "type": "object", @@ -54139,53 +54115,53 @@ }, "plan": { "type": "string", - "description": "Gets or sets the user's assigned entitlement plan.", + "description": "The user's assigned entitlement plan.", "nullable": true }, "quotaPlan": { "type": "string", - "description": "Gets or sets the effective quota plan used for the current period.", + "description": "The effective quota plan used for the current period.", "nullable": true }, "activationBoostEndsOn": { "type": "string", - "description": "Gets or sets the exclusive end of the first-activation boost. Null when no boost applies.", + "description": "The exclusive end of the first-activation boost. Null when no boost applies.", "format": "date-time", "nullable": true }, "creditsIncluded": { "type": "integer", - "description": "Gets or sets the effective primary credit allowance.", + "description": "The effective primary credit allowance.", "format": "int64", "nullable": true }, "creditsUsed": { "type": "integer", - "description": "Gets or sets the whole credits consumed in the current primary period.", + "description": "The whole credits consumed in the current primary period.", "format": "int64", "nullable": true }, "creditsAvailable": { "type": "integer", - "description": "Gets or sets the non-negative whole credits remaining in the current primary period.", + "description": "The non-negative whole credits remaining in the current primary period.", "format": "int64", "nullable": true }, "creditsUsedPercentage": { "type": "number", - "description": "Gets or sets the percentage of primary credits consumed, capped at 100.", + "description": "The percentage of primary credits consumed, capped at 100.", "format": "double", "nullable": true }, "primaryPeriodEnd": { "type": "string", - "description": "Gets or sets the exclusive end of the current primary credit period.", + "description": "The exclusive end of the current primary credit period.", "format": "date-time", "nullable": true }, "lastManualResetOn": { "type": "string", - "description": "Gets or sets the latest manual quota usage reset that applies to this user.", + "description": "The latest manual quota usage reset that applies to this user.", "format": "date-time", "nullable": true } @@ -54340,60 +54316,60 @@ "properties": { "id": { "type": "string", - "description": "Gets or sets the connection identifier.", + "description": "The connection identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "name": { "type": "string", - "description": "Gets or sets the safe connection display name.", + "description": "The safe connection display name.", "nullable": true }, "connectorId": { "type": "string", - "description": "Gets or sets the connector identifier.", + "description": "The connector identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "connectorName": { "type": "string", - "description": "Gets or sets the connector display name.", + "description": "The connector display name.", "nullable": true }, "ownerUserId": { "type": "string", - "description": "Gets or sets the connection owner.", + "description": "The connection owner.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "status": { "type": "string", - "description": "Gets or sets the authorization state.", + "description": "The authorization state.", "nullable": true }, "isSharedWithWorkspace": { "type": "boolean", - "description": "Gets or sets whether the connection is shared with the workspace." + "description": "Whether the connection is shared with the workspace." }, "sharedUserCount": { "type": "integer", - "description": "Gets or sets the number of direct user shares.", + "description": "The number of direct user shares.", "format": "int32" }, "sharedTeamCount": { "type": "integer", - "description": "Gets or sets the number of team shares.", + "description": "The number of team shares.", "format": "int32" }, "createdOn": { "type": "string", - "description": "Gets or sets when the connection was created.", + "description": "When the connection was created.", "format": "date-time", "nullable": true }, "updatedOn": { "type": "string", - "description": "Gets or sets when the connection was last updated.", + "description": "When the connection was last updated.", "format": "date-time", "nullable": true } @@ -54728,6 +54704,11 @@ "description": "Whether the connector supports dynamic client registration.", "example": false }, + "requiresOAuthClientSecret": { + "type": "boolean", + "description": "Whether static OAuth configuration requires a client secret.", + "example": false + }, "documentationUrl": { "type": "string", "description": "The connector documentation URL.", @@ -54980,62 +54961,71 @@ "properties": { "delegatedAgentId": { "type": "string", - "description": "Gets or sets the delegated agent id.", + "description": "The agent that receives the delegated work.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "name": { "type": "string", - "description": "Gets or sets the name.", + "description": "The delegation name shown in workflow settings.", "nullable": true }, "description": { "type": "string", - "description": "Gets or sets the description.", + "description": "A short explanation of the delegated work.", "nullable": true }, "executionMode": { + "enum": [ + "auto", + "handoff", + "orchestrated", + "orchestracted", + "parallel", + "sequential", + "tool" + ], "type": "string", - "description": "Gets or sets the execution mode.", + "description": "How the parent agent invokes the delegated agent.", "nullable": true }, "promptOverride": { "type": "string", - "description": "Gets or sets the prompt override.", + "description": "Additional instructions supplied to the delegated agent.", "nullable": true }, "sortOrder": { "type": "integer", - "description": "Gets or sets the sort order.", + "description": "The delegation's display order.", "format": "int32" } }, "additionalProperties": false, - "description": "Represents the create agent delegation request payload for the agent runtime API." + "description": "Configures a new delegation to another agent." }, "CreateAgentMemoryRequestModel": { "type": "object", "properties": { "content": { "type": "string", - "description": "Gets or sets the content Mem0 should infer memory from.", + "description": "The content Mem0 should infer memory from.", "nullable": true }, "scope": { "type": "string", - "description": "Gets or sets the memory scope. Defaults to agent.", + "description": "The memory scope. Defaults to agent.", "nullable": true }, "projectId": { "type": "string", - "description": "Gets or sets the project id for project-scoped memory.", + "description": "The project id for project-scoped memory.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "clientId": { "type": "string", - "description": "Gets or sets the client id for client-scoped memory.", + "description": "The client id for client-scoped memory.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" @@ -55049,66 +55039,50 @@ "properties": { "name": { "type": "string", - "description": "The agent name.", + "description": "The name shown to users.", "nullable": true, "example": "Client Status Reporter" }, - "slug": { - "type": "string", - "description": "The slug.", - "nullable": true, - "example": "client-status-reporter" - }, "description": { "type": "string", - "description": "The description.", + "description": "A short explanation of what the agent does.", "nullable": true, "example": "Prepares client-ready project status reports." }, - "ownershipScope": { - "$ref": "#/components/schemas/AgentOwnershipScope" - }, - "projectId": { - "type": "string", - "description": "The project id.", - "format": "uuid", - "nullable": true, - "example": "c907b29e-f640-4639-910d-722623fd5b4a" - }, "forkedFromAgentId": { "type": "string", - "description": "The forked from agent id.", + "description": "The agent to copy. When set, the new agent inherits the source agent's configuration.", "format": "uuid", "nullable": true, "example": "1107cc84-1750-40e1-a86c-86f68d1f05c5" }, "modelProvider": { "type": "string", - "description": "The model provider.", + "description": "The provider that hosts the model. Required with AiService.Feature.AgentRuntime.Models.CreateAgentRequestModel.ModelName when no preset or source agent is specified.", "nullable": true, "example": "openai" }, "modelName": { "type": "string", - "description": "The model name.", + "description": "The model to run. Required with AiService.Feature.AgentRuntime.Models.CreateAgentRequestModel.ModelProvider when no preset or source agent is specified.", "nullable": true, "example": "gpt-5.6-terra" }, "presetKey": { "type": "string", - "description": "The workspace preset identity.", + "description": "The workspace model preset to use instead of a provider and model.", "nullable": true, "example": "balanced" }, "reasoningLevel": { "type": "string", - "description": "The reasoning level.", + "description": "The amount of reasoning the model uses.", "nullable": true, "example": "medium" }, "systemPrompt": { "type": "string", - "description": "The initial system prompt.", + "description": "The instructions that control the agent's behavior.", "nullable": true, "example": "Prepare concise client-ready project updates from awork data." }, @@ -55120,25 +55094,25 @@ }, "aworkAccessEnabled": { "type": "boolean", - "description": "Whether awork tools are enabled.", + "description": "Whether the agent can use awork tools.", "nullable": true, "example": true }, "googleGenAiAccessEnabled": { "type": "boolean", - "description": "Whether Google image generation is enabled.", + "description": "Whether the agent can generate images with Google models.", "nullable": true, "example": false }, "openAiImageGenerationAccessEnabled": { "type": "boolean", - "description": "Whether OpenAI image generation is enabled.", + "description": "Whether the agent can generate images with OpenAI models.", "nullable": true, "example": false } }, "additionalProperties": false, - "description": "Represents the create agent request payload for the agent runtime API." + "description": "Configures a new custom agent." }, "CreateAgentScheduleRequestModel": { "required": [ @@ -55205,58 +55179,66 @@ "properties": { "name": { "type": "string", - "description": "Gets or sets the name.", + "description": "The workflow step name.", "nullable": true }, "stepKind": { + "enum": [ + "task", + "verifier" + ], "type": "string", - "description": "Gets or sets the step kind.", + "description": "The behavior of the workflow step.", "nullable": true }, "delegationId": { "type": "string", - "description": "Gets or sets the delegation id.", + "description": "The delegation executed by this step, if any.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "nextStepId": { "type": "string", - "description": "Gets or sets the next step id.", + "description": "The step to run after this step succeeds.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "rejectStepId": { "type": "string", - "description": "Gets or sets the reject step id.", + "description": "The step to run when a verifier rejects the result.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "promptOverride": { "type": "string", - "description": "Gets or sets the prompt override.", + "description": "Additional instructions supplied to this step.", "nullable": true }, "outputName": { "type": "string", - "description": "Gets or sets the output name.", + "description": "The name used to store this step's output.", "nullable": true }, "failureMode": { + "enum": [ + "stop", + "continue" + ], "type": "string", - "description": "Gets or sets the failure mode.", + "description": "How the workflow handles a failed step.", "nullable": true }, "sortOrder": { "type": "integer", - "description": "Gets or sets the sort order.", + "description": "The step's display order.", "format": "int32" } }, "additionalProperties": false, - "description": "Represents the create agent workflow step request payload for the agent runtime API." + "description": "Configures a new agent workflow step." }, "CreateAiQuotaUsageResetRequestModel": { "required": [ @@ -55269,11 +55251,11 @@ "maxLength": 100, "minLength": 1, "type": "string", - "description": "Gets or sets whether the reset targets a user, workspace, or all users." + "description": "Whether the reset targets a user, workspace, or all users." }, "userId": { "type": "string", - "description": "Gets or sets the target user for a user reset.", + "description": "The target user for a user reset.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" @@ -55282,12 +55264,12 @@ "maxLength": 1000, "minLength": 1, "type": "string", - "description": "Gets or sets the required explanation for the reset." + "description": "The required explanation for the reset." }, "reference": { "maxLength": 255, "type": "string", - "description": "Gets or sets an optional incident or support reference.", + "description": "An optional incident or support reference.", "nullable": true } }, @@ -55368,37 +55350,37 @@ "properties": { "key": { "type": "string", - "description": "Gets or sets the key.", + "description": "The stable key used to reference the skill.", "nullable": true }, "name": { "type": "string", - "description": "Gets or sets the name.", + "description": "The name shown in the skill library.", "nullable": true }, "description": { "type": "string", - "description": "Gets or sets the description.", + "description": "A short explanation of what the skill does.", "nullable": true }, "instructions": { "minLength": 1, "type": "string", - "description": "Gets or sets the markdown instructions for the skill (SKILL.md body)." + "description": "The Markdown instruction body from `SKILL.md`." }, "instructionsSource": { "type": "string", - "description": "Gets or sets the instructions source.", + "description": "The source from which the instructions were created.", "nullable": true }, "metadata": { "type": "string", - "description": "Gets or sets the frontmatter metadata map as JSON.", + "description": "The skill frontmatter as a JSON object.", "nullable": true } }, "additionalProperties": false, - "description": "Represents the create skill request payload for the agent runtime API." + "description": "Configures a new reusable skill." }, "DisableModelsRequestModel": { "type": "object", @@ -55500,7 +55482,7 @@ "properties": { "created": { "type": "boolean", - "description": "Gets or sets whether the request created a new record." + "description": "Whether the request created a new record." } }, "additionalProperties": false, @@ -55522,75 +55504,82 @@ "maxLength": 64, "minLength": 0, "type": "string", - "description": "Gets or sets the evaluated environment." + "description": "The evaluated environment." }, "triggerType": { "maxLength": 32, "minLength": 0, "type": "string", - "description": "Gets or sets whether the run was scheduled or manually triggered." + "description": "Whether the run was scheduled or manually triggered." }, "sourceRevision": { "maxLength": 64, "minLength": 0, "type": "string", - "description": "Gets or sets the evaluation-suite source revision." + "description": "The evaluation-suite source revision." }, "targetBranch": { "maxLength": 64, "minLength": 0, "type": "string", - "description": "Gets or sets the branch reported by the target AI service." + "description": "The branch reported by the target AI service." }, "targetServiceVersion": { "maxLength": 64, "minLength": 0, "type": "string", - "description": "Gets or sets the version reported by the target AI service." + "description": "The version reported by the target AI service." + }, + "targetRevision": { + "maxLength": 64, + "minLength": 0, + "type": "string", + "description": "The git revision reported by the target AI service, when the deployment exposes it.", + "nullable": true }, "workflowUrl": { "maxLength": 1000, "minLength": 0, "type": "string", - "description": "Gets or sets the source workflow URL.", + "description": "The source workflow URL.", "nullable": true }, "schemaVersion": { "maximum": 2147483647, "minimum": 1, "type": "integer", - "description": "Gets or sets the result schema version.", + "description": "The result schema version.", "format": "int32" }, "suiteVersion": { "maximum": 2147483647, "minimum": 1, "type": "integer", - "description": "Gets or sets the expected suite version.", + "description": "The expected suite version.", "format": "int32" }, "manifestFingerprint": { "maxLength": 128, "minLength": 64, "type": "string", - "description": "Gets or sets the SHA-256 fingerprint of the expected case manifest." + "description": "The SHA-256 fingerprint of the expected case manifest." }, "expectedCaseManifestJson": { "maxLength": 25000, "minLength": 0, "type": "string", - "description": "Gets or sets the bounded expected case manifest JSON." + "description": "The bounded expected case manifest JSON." }, "expectedTrialCount": { "maximum": 1000, "minimum": 1, "type": "integer", - "description": "Gets or sets the number of expected trials.", + "description": "The number of expected trials.", "format": "int32" }, "startedAt": { "type": "string", - "description": "Gets or sets when the external run started.", + "description": "When the external run started.", "format": "date-time" } }, @@ -55602,104 +55591,104 @@ "properties": { "runId": { "type": "string", - "description": "Gets or sets the run identifier.", + "description": "The run identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "clientMessageId": { "type": "string", - "description": "Gets or sets the client message identifier of the run's trigger message, when present.", + "description": "The client message identifier of the run's trigger message, when present.", "nullable": true }, "status": { "type": "string", - "description": "Gets or sets the run status.", + "description": "The run status.", "nullable": true }, "executionMode": { "type": "string", - "description": "Gets or sets the quota execution mode used by the run.", + "description": "The quota execution mode used by the run.", "nullable": true }, "modelProvider": { "type": "string", - "description": "Gets or sets the model provider used by the run.", + "description": "The model provider used by the run.", "nullable": true }, "modelName": { "type": "string", - "description": "Gets or sets the model name used by the run.", + "description": "The model name used by the run.", "nullable": true }, "reasoningLevel": { "type": "string", - "description": "Gets or sets the reasoning level snapshot of the run's trigger message, when present.", + "description": "The reasoning level snapshot of the run's trigger message, when present.", "nullable": true }, "agentId": { "type": "string", - "description": "Gets or sets the agent that performed the run, when present.", + "description": "The agent that performed the run, when present.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "systemPromptVersionId": { "type": "string", - "description": "Gets or sets the immutable system-prompt version selected for the run, when one exists.", + "description": "The immutable system-prompt version selected for the run, when one exists.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "inputTokens": { "type": "integer", - "description": "Gets or sets the summed input tokens, or null when the run has no usage records.", + "description": "The summed input tokens, or null when the run has no usage records.", "format": "int64", "nullable": true }, "outputTokens": { "type": "integer", - "description": "Gets or sets the summed output tokens, or null when the run has no usage records.", + "description": "The summed output tokens, or null when the run has no usage records.", "format": "int64", "nullable": true }, "cachedInputTokens": { "type": "integer", - "description": "Gets or sets the summed cached input tokens, or null when the run has no usage records.", + "description": "The summed cached input tokens, or null when the run has no usage records.", "format": "int64", "nullable": true }, "reasoningTokens": { "type": "integer", - "description": "Gets or sets the summed reasoning tokens, or null when the run has no usage records.", + "description": "The summed reasoning tokens, or null when the run has no usage records.", "format": "int64", "nullable": true }, "costUsd": { "type": "number", - "description": "Gets or sets the summed cost in US dollars, or null when any usage record has no cost.", + "description": "The summed cost in US dollars, or null when any usage record has no cost.", "format": "double", "nullable": true }, "startedAt": { "type": "string", - "description": "Gets or sets the time the run started.", + "description": "The time the run started.", "format": "date-time", "nullable": true }, "completedAt": { "type": "string", - "description": "Gets or sets the time the run completed, failed, or was cancelled.", + "description": "The time the run completed, failed, or was cancelled.", "format": "date-time", "nullable": true }, "toolCallCount": { "type": "integer", - "description": "Gets or sets the number of tool calls recorded for the run.", + "description": "The number of tool calls recorded for the run.", "format": "int32" }, "failedToolCallCount": { "type": "integer", - "description": "Gets or sets the number of failed tool calls recorded for the run.", + "description": "The number of failed tool calls recorded for the run.", "format": "int32" } }, @@ -55711,20 +55700,20 @@ "properties": { "threadId": { "type": "string", - "description": "Gets or sets the thread identifier.", + "description": "The thread identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "agentId": { "type": "string", - "description": "Gets or sets the thread's custom agent, when present.", + "description": "The thread's custom agent, when present.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "sourceType": { "type": "string", - "description": "Gets or sets the thread's persisted source type, when present.", + "description": "The thread's persisted source type, when present.", "nullable": true }, "runs": { @@ -55732,7 +55721,7 @@ "items": { "$ref": "#/components/schemas/EvaluationThreadRunUsageResponseModel" }, - "description": "Gets or sets the thread's non-deleted runs ordered by start time.", + "description": "The thread's non-deleted runs ordered by start time.", "nullable": true } }, @@ -55746,7 +55735,7 @@ "type": "object", "properties": { "result": { - "description": "Gets or sets the normalized structured result." + "description": "The normalized structured result." } }, "additionalProperties": false, @@ -55934,7 +55923,7 @@ "properties": { "credits": { "type": "number", - "description": "Gets or sets the positive number of credits to add to the current period.", + "description": "The positive number of credits to add to the current period.", "format": "double", "example": 1000 }, @@ -55942,7 +55931,7 @@ "maxLength": 1000, "minLength": 1, "type": "string", - "description": "Gets or sets the operator explanation retained with the current override.", + "description": "The operator explanation retained with the current override.", "example": "Temporary allowance while investigating repeated tool retries" } }, @@ -55959,7 +55948,7 @@ "maxLength": 255, "minLength": 1, "type": "string", - "description": "Gets or sets the name of the normal agent created in the workspace." + "description": "The name of the normal agent created in the workspace." } }, "additionalProperties": false, @@ -55970,19 +55959,19 @@ "properties": { "content": { "type": "string", - "description": "The content.", + "description": "The message content.", "nullable": true, "example": "Summarize progress, risks, and next steps for the Acme website project." }, "clientMessageId": { "type": "string", - "description": "The client message id.", + "description": "The client-generated idempotency key for the message.", "nullable": true, "example": "client-status-2026-08-29" } }, "additionalProperties": false, - "description": "Represents the initial agent session message request payload for the agent runtime API." + "description": "Defines the first agent thread message." }, "ModelDisablePreflightResponseModel": { "type": "object", @@ -56139,7 +56128,7 @@ }, "isReferencedByCustomAgents": { "type": "boolean", - "description": "Whether a custom agent uses the source.", + "description": "Whether a Custom agent uses the source.", "example": true }, "requiresModelMapping": { @@ -56370,13 +56359,13 @@ "de" ], "type": "string", - "description": "Gets or sets the published language." + "description": "The published language." }, "detailedDescription": { "maxLength": 25000, "minLength": 1, "type": "string", - "description": "Gets or sets the detailed catalog description." + "description": "The detailed catalog description." } }, "additionalProperties": false, @@ -56387,7 +56376,7 @@ "properties": { "scope": { "type": "string", - "description": "Gets or sets the memory scope. Defaults to agent.", + "description": "The memory scope. Defaults to agent.", "nullable": true } }, @@ -56414,7 +56403,7 @@ "properties": { "isEnabled": { "type": "boolean", - "description": "Gets or sets whether the schedule is enabled." + "description": "Whether the schedule is enabled." } }, "additionalProperties": false, @@ -56467,7 +56456,7 @@ "items": { "$ref": "#/components/schemas/SkillSecretRequirementRequestModel" }, - "description": "Gets or sets the full set of secret requirements for the skill." + "description": "The full set of secret requirements for the skill." } }, "additionalProperties": false, @@ -56484,17 +56473,17 @@ "envVarName": { "minLength": 1, "type": "string", - "description": "Gets or sets the environment variable name the value belongs to." + "description": "The environment variable name the value belongs to." }, "scope": { "minLength": 1, "type": "string", - "description": "Gets or sets the scope of the value (\"workspace\" or \"user\")." + "description": "The scope of the value (\"workspace\" or \"user\")." }, "value": { "minLength": 1, "type": "string", - "description": "Gets or sets the secret value. It is stored encrypted and never returned by the API." + "description": "The secret value. It is stored encrypted and never returned by the API." } }, "additionalProperties": false, @@ -56508,7 +56497,7 @@ "properties": { "isArchived": { "type": "boolean", - "description": "Gets or sets whether the thread should be archived." + "description": "Whether the thread should be archived." } }, "additionalProperties": false, @@ -56522,7 +56511,7 @@ "properties": { "isPinned": { "type": "boolean", - "description": "Gets or sets whether the thread should be pinned." + "description": "Whether the thread should be pinned." } }, "additionalProperties": false, @@ -56533,14 +56522,17 @@ "properties": { "userId": { "type": "string", - "description": "The receiving user ID.", + "description": "The user who receives access.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "accessLevel": { + "enum": [ + "read", + "manage" + ], "type": "string", - "description": "The granted access level.", - "nullable": true + "description": "The granted access level." } }, "additionalProperties": false, @@ -56551,26 +56543,29 @@ "properties": { "id": { "type": "string", - "description": "The access grant ID.", + "description": "The access grant identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "skillId": { "type": "string", - "description": "The shared skill ID.", + "description": "The shared skill identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "userId": { "type": "string", - "description": "The receiving user ID.", + "description": "The user who receives access.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "accessLevel": { + "enum": [ + "read", + "manage" + ], "type": "string", - "description": "The granted access level.", - "nullable": true + "description": "The granted access level." } }, "additionalProperties": false, @@ -56581,12 +56576,12 @@ "properties": { "relativePath": { "type": "string", - "description": "Gets or sets the path of the file relative to the skill root (for example \"scripts/sync.py\").", + "description": "The path of the file relative to the skill root (for example \"scripts/sync.py\").", "nullable": true }, "sizeBytes": { "type": "integer", - "description": "Gets or sets the file size in bytes.", + "description": "The file size in bytes.", "format": "int64" } }, @@ -56598,81 +56593,91 @@ "properties": { "id": { "type": "string", - "description": "Gets or sets the id.", + "description": "The skill identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "createdBy": { "type": "string", - "description": "Gets or sets the ID of the user who created the skill.", + "description": "The user who created the skill.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "createdOn": { "type": "string", - "description": "Gets or sets when the skill was created.", + "description": "When the skill was created.", "format": "date-time" }, "updatedOn": { "type": "string", - "description": "Gets or sets when the skill was last updated.", + "description": "When the skill was last updated.", "format": "date-time", "nullable": true }, "key": { "type": "string", - "description": "Gets or sets the key.", + "description": "The stable key used to reference the skill.", "nullable": true }, "name": { "type": "string", - "description": "Gets or sets the name.", + "description": "The name shown in the skill library.", "nullable": true }, "description": { "type": "string", - "description": "Gets or sets the description.", + "description": "A short explanation of what the skill does.", "nullable": true }, "instructions": { "type": "string", - "description": "Gets or sets the markdown instructions for the skill (SKILL.md body).", + "description": "The Markdown instruction body from `SKILL.md`.", "nullable": true }, "instructionsSource": { "type": "string", - "description": "Gets or sets the instructions source.", + "description": "The source from which the instructions were created.", "nullable": true }, "type": { + "enum": [ + "user", + "agent" + ], "type": "string", - "description": "The ownership type.", - "nullable": true + "description": "The ownership type." }, "userId": { "type": "string", - "description": "The owning user ID.", + "description": "The owning user for a user-owned skill.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "agentId": { "type": "string", - "description": "The owning agent ID.", + "description": "The owning agent for an agent-owned skill.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "accessLevel": { + "enum": [ + "read", + "manage" + ], "type": "string", - "description": "The requesting user's resolved access level.", - "nullable": true + "description": "The requesting user's resolved access level." }, "isOwner": { "type": "boolean", "description": "Whether the requesting user owns the skill." }, "workspaceAccessLevel": { + "enum": [ + "read", + "manage" + ], "type": "string", "description": "The workspace-wide access level.", "nullable": true @@ -56684,24 +56689,24 @@ }, "metadata": { "type": "string", - "description": "Gets or sets the frontmatter metadata map as JSON.", + "description": "The skill frontmatter as a JSON object.", "nullable": true }, "hasFiles": { "type": "boolean", - "description": "Gets or sets a value indicating whether the skill has bundled files." + "description": "Whether the skill includes bundled files." }, "secretRequirements": { "type": "array", "items": { "$ref": "#/components/schemas/SkillSecretRequirementResponseModel" }, - "description": "Gets or sets the declared secret requirements of the skill.", + "description": "The secrets that the skill declares.", "nullable": true } }, "additionalProperties": false, - "description": "Represents the skill response payload for the agent runtime API." + "description": "Describes a reusable skill." }, "SkillSecretRequirementRequestModel": { "required": [ @@ -56713,21 +56718,25 @@ "envVarName": { "minLength": 1, "type": "string", - "description": "Gets or sets the environment variable name the secret is injected as." + "description": "The environment variable name the secret is injected as." }, "description": { "type": "string", - "description": "Gets or sets the description shown to users when providing the secret.", + "description": "The description shown to users when providing the secret.", "nullable": true }, "scope": { "minLength": 1, + "enum": [ + "workspace", + "user" + ], "type": "string", - "description": "Gets or sets the scope (\"workspace\" or \"user\")." + "description": "Who must provide the secret value." }, "isRequired": { "type": "boolean", - "description": "Gets or sets a value indicating whether the secret is required for the skill to work." + "description": "Whether the secret is required for the skill to work." } }, "additionalProperties": false, @@ -56738,32 +56747,35 @@ "properties": { "id": { "type": "string", - "description": "Gets or sets the id.", + "description": "The secret requirement identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "envVarName": { "type": "string", - "description": "Gets or sets the environment variable name the secret is injected as.", + "description": "The environment variable name the secret is injected as.", "nullable": true }, "description": { "type": "string", - "description": "Gets or sets the description shown to users when providing the secret.", + "description": "The description shown to users when providing the secret.", "nullable": true }, "scope": { + "enum": [ + "workspace", + "user" + ], "type": "string", - "description": "Gets or sets the scope (\"workspace\" or \"user\").", - "nullable": true + "description": "Who must provide the secret value." }, "isRequired": { "type": "boolean", - "description": "Gets or sets a value indicating whether the secret is required for the skill to work." + "description": "Whether the secret is required for the skill to work." }, "hasValue": { "type": "boolean", - "description": "Gets or sets a value indicating whether a value is available for the requesting user." + "description": "Whether a value is available for the requesting user." } }, "additionalProperties": false, @@ -56774,17 +56786,20 @@ "properties": { "envVarName": { "type": "string", - "description": "Gets or sets the environment variable name.", + "description": "The environment variable name.", "nullable": true }, "scope": { + "enum": [ + "workspace", + "user" + ], "type": "string", - "description": "Gets or sets the scope of the stored value (\"workspace\" or \"user\").", - "nullable": true + "description": "Who provided the stored value." }, "updatedOn": { "type": "string", - "description": "Gets or sets when the value was last updated.", + "description": "When the value was last updated.", "format": "date-time", "nullable": true } @@ -56796,6 +56811,10 @@ "type": "object", "properties": { "workspaceAccessLevel": { + "enum": [ + "read", + "manage" + ], "type": "string", "description": "The workspace-wide access level.", "nullable": true @@ -56825,14 +56844,17 @@ "properties": { "teamId": { "type": "string", - "description": "The receiving team ID.", + "description": "The team that receives access.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "accessLevel": { + "enum": [ + "read", + "manage" + ], "type": "string", - "description": "The granted access level.", - "nullable": true + "description": "The granted access level." } }, "additionalProperties": false, @@ -56843,26 +56865,29 @@ "properties": { "id": { "type": "string", - "description": "The access grant ID.", + "description": "The access grant identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "skillId": { "type": "string", - "description": "The shared skill ID.", + "description": "The shared skill identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "teamId": { "type": "string", - "description": "The receiving team ID.", + "description": "The team that receives access.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "accessLevel": { + "enum": [ + "read", + "manage" + ], "type": "string", - "description": "The granted access level.", - "nullable": true + "description": "The granted access level." } }, "additionalProperties": false, @@ -56873,39 +56898,39 @@ "properties": { "id": { "type": "string", - "description": "Gets or sets the prompt version identifier.", + "description": "The prompt version identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "agentId": { "type": "string", - "description": "Gets or sets the agent identifier.", + "description": "The agent identifier.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "versionNumber": { "type": "integer", - "description": "Gets or sets the creation-order version number.", + "description": "The creation-order version number.", "format": "int32" }, "isCurrent": { "type": "boolean", - "description": "Gets or sets whether this row is the agent's current prompt." + "description": "Whether this row is the agent's current prompt." }, "systemPrompt": { "type": "string", - "description": "Gets or sets the system prompt.", + "description": "The system prompt.", "nullable": true }, "createdOn": { "type": "string", - "description": "Gets or sets the creation time of the system prompt version.", + "description": "The creation time of the system prompt version.", "format": "date-time", "nullable": true }, "createdBy": { "type": "string", - "description": "Gets or sets the user who created the system prompt version.", + "description": "The user who created the system prompt version.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" @@ -57027,27 +57052,27 @@ "properties": { "threadId": { "type": "string", - "description": "Gets or sets the thread ID.", + "description": "The thread whose list state changed.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "isArchived": { "type": "boolean", - "description": "Gets or sets whether the thread is archived." + "description": "Whether the thread is archived." }, "archivedOn": { "type": "string", - "description": "Gets or sets when the thread was archived.", + "description": "When the thread was archived.", "format": "date-time", "nullable": true }, "isPinned": { "type": "boolean", - "description": "Gets or sets whether the thread is pinned." + "description": "Whether the thread is pinned." }, "pinnedOrder": { "type": "number", - "description": "Gets or sets the thread's pinned order.", + "description": "The thread's pinned order.", "format": "double", "nullable": true } @@ -57060,13 +57085,13 @@ "properties": { "threadId": { "type": "string", - "description": "Gets or sets the thread ID.", + "description": "The reordered thread.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "order": { "type": "number", - "description": "Gets or sets the resulting pinned order.", + "description": "The resulting pinned order.", "format": "double", "nullable": true } @@ -57079,38 +57104,47 @@ "properties": { "delegatedAgentId": { "type": "string", - "description": "Gets or sets the delegated agent id.", + "description": "The agent that receives the delegated work.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "name": { "type": "string", - "description": "Gets or sets the name.", + "description": "The delegation name shown in workflow settings.", "nullable": true }, "description": { "type": "string", - "description": "Gets or sets the description.", + "description": "A short explanation of the delegated work.", "nullable": true }, "executionMode": { + "enum": [ + "auto", + "handoff", + "orchestrated", + "orchestracted", + "parallel", + "sequential", + "tool" + ], "type": "string", - "description": "Gets or sets the execution mode.", + "description": "How the parent agent invokes the delegated agent.", "nullable": true }, "promptOverride": { "type": "string", - "description": "Gets or sets the prompt override.", + "description": "Additional instructions supplied to the delegated agent.", "nullable": true }, "sortOrder": { "type": "integer", - "description": "Gets or sets the sort order.", + "description": "The delegation's display order.", "format": "int32" } }, "additionalProperties": false, - "description": "Represents the update agent delegation request payload for the agent runtime API." + "description": "Configures an existing delegation to another agent." }, "UpdateAgentRequestModel": { "required": [ @@ -57130,18 +57164,23 @@ "maxLength": 255, "minLength": 1, "type": "string", - "description": "The agent name.", + "description": "The name shown to users.", "example": "Client Status Reporter" }, "description": { "maxLength": 25000, "type": "string", - "description": "The description.", + "description": "A short explanation of what the agent does.", "example": "Prepares client-ready project status reports." }, "workspaceAccessLevel": { "maxLength": 25, "minLength": 1, + "enum": [ + "none", + "read", + "manage" + ], "type": "string", "description": "The access level granted to every member of the workspace.", "example": "manage" @@ -57160,14 +57199,14 @@ }, "presetKey": { "type": "string", - "description": "The workspace preset identity.", + "description": "The workspace model preset to use instead of a provider and model.", "nullable": true, "example": "balanced" }, "reasoningLevel": { "minLength": 1, "type": "string", - "description": "The reasoning level.", + "description": "The amount of reasoning the model uses.", "example": "medium" }, "systemPrompt": { @@ -57198,7 +57237,7 @@ } }, "additionalProperties": false, - "description": "Represents the update agent request payload for the agent runtime API." + "description": "Configures an existing custom agent." }, "UpdateAgentScheduleRequestModel": { "required": [ @@ -57258,7 +57297,7 @@ }, "agentId": { "type": "string", - "description": "Gets or sets the optional target agent id.\nWhen omitted, the agent from the update route is kept.", + "description": "The optional target agent id.\nWhen omitted, the agent from the update route is kept.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" @@ -57272,58 +57311,66 @@ "properties": { "name": { "type": "string", - "description": "Gets or sets the name.", + "description": "The workflow step name.", "nullable": true }, "stepKind": { + "enum": [ + "task", + "verifier" + ], "type": "string", - "description": "Gets or sets the step kind.", + "description": "The behavior of the workflow step.", "nullable": true }, "delegationId": { "type": "string", - "description": "Gets or sets the delegation id.", + "description": "The delegation executed by this step, if any.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "nextStepId": { "type": "string", - "description": "Gets or sets the next step id.", + "description": "The step to run after this step succeeds.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "rejectStepId": { "type": "string", - "description": "Gets or sets the reject step id.", + "description": "The step to run when a verifier rejects the result.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" }, "promptOverride": { "type": "string", - "description": "Gets or sets the prompt override.", + "description": "Additional instructions supplied to this step.", "nullable": true }, "outputName": { "type": "string", - "description": "Gets or sets the output name.", + "description": "The name used to store this step's output.", "nullable": true }, "failureMode": { + "enum": [ + "stop", + "continue" + ], "type": "string", - "description": "Gets or sets the failure mode.", + "description": "How the workflow handles a failed step.", "nullable": true }, "sortOrder": { "type": "integer", - "description": "Gets or sets the sort order.", + "description": "The step's display order.", "format": "int32" } }, "additionalProperties": false, - "description": "Represents the update agent workflow step request payload for the agent runtime API." + "description": "Configures an existing agent workflow step." }, "UpdateAiQuotaConfigurationRequestModel": { "type": "object", @@ -57349,42 +57396,47 @@ "properties": { "key": { "type": "string", - "description": "Gets or sets the key.", + "description": "The stable key used to reference the skill.", "nullable": true }, "name": { "type": "string", - "description": "Gets or sets the name.", + "description": "The name shown in the skill library.", "nullable": true }, "description": { "type": "string", - "description": "Gets or sets the description.", + "description": "A short explanation of what the skill does.", "nullable": true }, "instructions": { "minLength": 1, "type": "string", - "description": "Gets or sets the markdown instructions for the skill (SKILL.md body)." + "description": "The Markdown instruction body from `SKILL.md`." }, "instructionsSource": { "type": "string", - "description": "Gets or sets the instructions source.", + "description": "The source from which the instructions were created.", "nullable": true }, "metadata": { "type": "string", - "description": "Gets or sets the frontmatter metadata map as JSON.", + "description": "The skill frontmatter as a JSON object.", "nullable": true } }, "additionalProperties": false, - "description": "Represents the update skill request payload for the agent runtime API." + "description": "Configures an existing reusable skill." }, "UpdateSkillSharingRequestModel": { "type": "object", "properties": { "workspaceAccessLevel": { + "enum": [ + "none", + "read", + "manage" + ], "type": "string", "description": "The workspace-wide access level.", "nullable": true @@ -57417,7 +57469,7 @@ "properties": { "order": { "type": "number", - "description": "Gets or sets the target pinned order.", + "description": "The target pinned order.", "format": "double" } }, @@ -57433,7 +57485,7 @@ "rawContentHtml": { "maxLength": 25000, "type": "string", - "description": "Gets or sets the complete workspace context as rich-text HTML." + "description": "The complete workspace context as rich-text HTML." } }, "additionalProperties": false, @@ -57462,45 +57514,45 @@ } }, "additionalProperties": false, - "description": "Represents a connector used successfully in an AI thread." + "description": "Identifies a used thread connector." }, "UserMemoryResponseModel": { "type": "object", "properties": { "id": { "type": "string", - "description": "Gets or sets the memory id assigned by Mem0.", + "description": "The memory id assigned by Mem0.", "nullable": true }, "fact": { "type": "string", - "description": "Gets or sets the validated governed memory fact.", + "description": "The validated governed memory fact.", "nullable": true }, "category": { "type": "string", - "description": "Gets or sets the governed memory category.", + "description": "The governed memory category.", "nullable": true }, "status": { "type": "string", - "description": "Gets or sets the governed lifecycle status.", + "description": "The governed lifecycle status.", "nullable": true }, "candidateSource": { "type": "string", - "description": "Gets or sets where the memory candidate originated.", + "description": "Where the memory candidate originated.", "nullable": true }, "createdAt": { "type": "string", - "description": "Gets or sets the creation timestamp returned by Mem0.", + "description": "The creation timestamp returned by Mem0.", "format": "date-time", "nullable": true }, "updatedAt": { "type": "string", - "description": "Gets or sets the update timestamp returned by Mem0.", + "description": "The update timestamp returned by Mem0.", "format": "date-time", "nullable": true } @@ -57590,39 +57642,39 @@ "properties": { "path": { "type": "string", - "description": "The path.", + "description": "The destination path relative to the worker workspace.", "nullable": true, "example": "context/uploads/acme-client-brief.md" }, "content": { "type": "string", - "description": "The content.", + "description": "The UTF-8 text content.", "nullable": true, "example": "Client: Acme. Launch target: 4 September 2026." }, "contentBase64": { "type": "string", - "description": "The base64 encoded content for binary files.", + "description": "The Base64-encoded content for a binary file.", "nullable": true, "example": "JVBERi0xLjQ=" }, "temporaryFileId": { "type": "string", - "description": "The temporary file id to materialize directly into the sandbox.", + "description": "The temporary file to materialize directly into the sandbox.", "format": "uuid", "nullable": true, "example": "c2e765ec-8aad-49f7-ae21-e54916a7e907" }, "aworkFileId": { "type": "string", - "description": "The awork file id to materialize directly into the sandbox.", + "description": "The awork file to materialize directly into the sandbox.", "format": "uuid", "nullable": true, "example": "8f77f578-ec66-47d9-98d1-5daf2ae5c6c3" } }, "additionalProperties": false, - "description": "Represents the worker bootstrap context file payload for the agent runtime API." + "description": "Provides one context file to an agent runtime worker." }, "WorkspaceContextCatalogStatus": { "enum": [ @@ -57638,7 +57690,7 @@ "properties": { "rawContentHtml": { "type": "string", - "description": "Gets or sets the complete workspace context as rich-text HTML.", + "description": "The complete workspace context as rich-text HTML.", "nullable": true }, "catalogStatus": { @@ -57646,13 +57698,13 @@ }, "updatedBy": { "type": "string", - "description": "Gets or sets the id of the user who last updated the context.", + "description": "The id of the user who last updated the context.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "updatedOn": { "type": "string", - "description": "Gets or sets when the context was last updated.", + "description": "When the context was last updated.", "format": "date-time" }, "sections": { @@ -57660,7 +57712,7 @@ "items": { "$ref": "#/components/schemas/WorkspaceContextSectionResponseModel" }, - "description": "Gets or sets the available catalog section summaries.", + "description": "The available catalog section summaries.", "nullable": true } }, @@ -57672,23 +57724,23 @@ "properties": { "id": { "type": "string", - "description": "Gets or sets the section id used for on-demand loading.", + "description": "The section id used for on-demand loading.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "heading": { "type": "string", - "description": "Gets or sets the section heading.", + "description": "The section heading.", "nullable": true }, "whenToLoadHint": { "type": "string", - "description": "Gets or sets the short hint that describes when to load the section.", + "description": "The short hint that describes when to load the section.", "nullable": true }, "order": { "type": "integer", - "description": "Gets or sets the section order.", + "description": "The section order.", "format": "int32" } }, @@ -84330,7 +84382,7 @@ }, { "name": "AgentThreads", - "description": "The AI threads feature provides endpoints to manage personal and custom agent conversations." + "description": "Manages agent threads." }, { "name": "OAuth", @@ -84553,6 +84605,10 @@ "name": "WorkspaceAbsences", "description": "Use those endpoints to define workspace wide absences. A WorkspaceAbsence is an absence that is applied to all the users of the workspace. \n It is useful for defining company specific events/holidays, for example." }, + { + "name": "Agent Thread Files", + "description": "Endpoints for files attached to agent threads." + }, { "name": "AgentFiles" }, @@ -84568,10 +84624,6 @@ { "name": "DocumentFiles" }, - { - "name": "Entity Files", - "description": "Endpoints for files attached to entities." - }, { "name": "EntityFiles", "description": "The entity file endpoints allow you to attach files to several entities." From 02bac8390dc777ed16b1d2b8108af33cb9a834c0 Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 9 Sep 2026 00:27:21 +0000 Subject: [PATCH 09/16] Update API specifications with fern api update --- fern/apis/v1/openapi/openapi.json | 82 +++++++++++++++++++++++++++---- 1 file changed, 73 insertions(+), 9 deletions(-) diff --git a/fern/apis/v1/openapi/openapi.json b/fern/apis/v1/openapi/openapi.json index 5a970b3..99847d7 100644 --- a/fern/apis/v1/openapi/openapi.json +++ b/fern/apis/v1/openapi/openapi.json @@ -2197,6 +2197,26 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "Service Unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -50662,22 +50682,35 @@ }, "modelPresetKey": { "type": "string", - "description": "The published model preset key.", + "description": "The target workspace model preset key used when importing.", "nullable": true }, "modelProvider": { "type": "string", - "description": "The published direct model provider.", + "description": "The current provider resolved from the workspace Balanced preset.", "nullable": true }, "modelName": { "type": "string", - "description": "The published direct model name.", + "description": "The current model resolved from the workspace Balanced preset.", "nullable": true }, "reasoningLevel": { "type": "string", - "description": "The published reasoning level.", + "description": "The current reasoning level resolved from the workspace Balanced preset.", + "nullable": true + }, + "importBlocker": { + "type": "string", + "description": "The import blocker from AgentPresetAvailabilityCodes, when Balanced is unavailable.\nNull when the template can be imported. Import checks availability again.", + "nullable": true + }, + "importWarnings": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Availability codes for capabilities disabled on import. These do not block import.", "nullable": true }, "webSearchEnabled": { @@ -52756,7 +52789,7 @@ "nullable": true, "example": 24.3 }, - "primaryPeriodEnd": { + "primaryPeriodEndOn": { "type": "string", "description": "The exclusive end of the current primary credit period.", "format": "date-time", @@ -53252,6 +53285,23 @@ "description": "Context files for the agent thread.", "nullable": true }, + "temporaryFileIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The uploaded temporary file identifiers for the first message.", + "nullable": true + }, + "temporaryFiles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TemporaryFileReference" + }, + "description": "The display metadata for the first message's temporary files.", + "nullable": true + }, "title": { "type": "string", "description": "The thread title.", @@ -53969,7 +54019,7 @@ "properties": { "accessSource": { "type": "string", - "description": "Whether the assignment is paid through Chargebee, sponsored by awork, or included with the base plan.", + "description": "Whether the assignment is paid through Chargebee, sponsored by awork, a trial, or included with the base plan.", "nullable": true }, "workspaceId": { @@ -54009,13 +54059,13 @@ "nullable": true, "example": "2026-09-01T00:00:00Z" }, - "primaryPeriodStart": { + "primaryPeriodStartOn": { "type": "string", "description": "Inclusive UTC start of the workspace's current shared monthly quota period.", "format": "date-time", "example": "2026-08-01T00:00:00Z" }, - "primaryPeriodEnd": { + "primaryPeriodEndOn": { "type": "string", "description": "Exclusive UTC end of the workspace's current shared monthly quota period.", "format": "date-time", @@ -54153,7 +54203,7 @@ "format": "double", "nullable": true }, - "primaryPeriodEnd": { + "primaryPeriodEndOn": { "type": "string", "description": "The exclusive end of the current primary credit period.", "format": "date-time", @@ -54377,6 +54427,20 @@ "additionalProperties": false, "description": "Contains safe connection metadata for workspace AI administration." }, + "ConnectionAuthorizationInitiationRequestModel": { + "type": "object", + "properties": { + "desktopCallbackScheme": { + "pattern": "^awork(?:-(?:develop|local))?$", + "type": "string", + "description": "The registered desktop protocol that receives the completed OAuth flow.", + "nullable": true, + "example": "awork" + } + }, + "additionalProperties": false, + "description": "Describes the client that starts a connector authorization flow." + }, "ConnectionAuthorizationInitiationResponseModel": { "type": "object", "properties": { From 10fdb1069b68bea95bf43b9af8000bc4800c0bbf Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 10 Sep 2026 00:25:30 +0000 Subject: [PATCH 10/16] Update API specifications with fern api update --- fern/apis/v1/openapi/openapi.json | 925 ++++++++++++------------------ 1 file changed, 373 insertions(+), 552 deletions(-) diff --git a/fern/apis/v1/openapi/openapi.json b/fern/apis/v1/openapi/openapi.json index 99847d7..cfc3ebe 100644 --- a/fern/apis/v1/openapi/openapi.json +++ b/fern/apis/v1/openapi/openapi.json @@ -18,93 +18,6 @@ } ], "paths": { - "/.well-known/oauth-protected-resource": { - "get": { - "tags": [ - "OAuth" - ], - "summary": "Returns the OAuth 2.0 Protected Resource metadata.", - "description": "\r\n\r\nAllows unauthenticated access.", - "operationId": "GetOAuthProtectedResourceMetadata", - "parameters": [ - { - "name": "resource", - "in": "query", - "description": "The resource to get the metadata for.", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": {} - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "anonymous": "true" - } - } - }, - "/.well-known/oauth-protected-resource/{resource}": { - "get": { - "tags": [ - "OAuth" - ], - "summary": "Returns the OAuth 2.0 Protected Resource metadata.", - "description": "\r\n\r\nAllows unauthenticated access.", - "operationId": "GetOAuthProtectedResourceMetadata2", - "parameters": [ - { - "name": "resource", - "in": "path", - "description": "The resource to get the metadata for.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": {} - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "anonymous": "true" - } - } - }, "/absenceregions": { "get": { "tags": [ @@ -1246,10 +1159,10 @@ "/agents": { "get": { "tags": [ - "AgentRuntime" + "Custom Agents" ], - "summary": "Returns the custom agents visible to the requesting user.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns all custom agents.", + "description": "Only agents visible to the requesting user are returned.\r\n\r\nAny authenticated user.", "operationId": "GetAgents", "responses": { "200": { @@ -1282,13 +1195,13 @@ }, "post": { "tags": [ - "AgentRuntime" + "Custom Agents" ], "summary": "Creates a new custom agent.", - "description": "Set to copy an existing agent. Otherwise, specify either a preset or a model provider and model name.\r\n\r\nAny authenticated user.", + "description": "Set to copy an existing agent. Otherwise, specify either a preset or a model provider and model name.\r\n\r\nAny authenticated user.", "operationId": "PostAgents", "requestBody": { - "description": "The request payload.", + "description": "The configuration for the new agent.", "content": { "application/json": { "schema": { @@ -2153,8 +2066,8 @@ "tags": [ "AgentThreads" ], - "summary": "Creates an agent thread.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Creates a conversation with the awork Agent or a custom agent.", + "description": "Supply content or attachments to submit the first message and start processing.\r\n Personal-agent threads can be created without a message; custom-agent threads require text or an attachment.\r\n The response contains the thread and accepted first-message identifiers, not the agent's reply.\r\n Read GET /agents/threads/{threadId}/messages to retrieve replies.\r\n Each request creates a new thread. Retrying after a lost response can create another thread.\r\n\r\nAny authenticated user.", "operationId": "PostAgentsThreads", "requestBody": { "description": "The thread creation payload.", @@ -2296,7 +2209,7 @@ "tags": [ "AgentThreads" ], - "summary": "Cancels a Custom agent thread.", + "summary": "Cancels the active run for the specified agent thread.", "description": "\r\n\r\nAny authenticated user.", "operationId": "PostAgentsThreadsCancelByThreadId", "parameters": [ @@ -2428,7 +2341,7 @@ "/agents/threads/{threadId}/files/{fileId}/download": { "get": { "tags": [ - "EntityFiles" + "Agent Thread Files" ], "summary": "Returns the content of a file from the specified agent thread.", "description": "The user must have read access to the agent thread.", @@ -2572,8 +2485,8 @@ "tags": [ "AgentThreads" ], - "summary": "Sends an agent thread message.", - "description": "The workspace must have remaining AI tokens and credits to process the message.\r\n The specified thread must belong to the current user.", + "summary": "Submits a message to an agent conversation.", + "description": "Provide text, attachments, or both. The message starts processing or enters the thread's queue.\r\n The response confirms acceptance; it does not contain the agent's reply.\r\n Read GET /agents/threads/{threadId}/messages to retrieve replies.\r\n Each request submits a new message. Retrying after a lost response can submit the message again.\r\n Processing is subject to the workspace's AI availability and usage limits.\r\n The user must have permission to contribute to the thread.", "operationId": "PostAgentsThreadsMessagesByThreadId", "parameters": [ { @@ -2592,7 +2505,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AiThreadMessageRequestModel" + "$ref": "#/components/schemas/AgentThreadMessageRequestModel" } } }, @@ -2655,14 +2568,14 @@ } } }, - "/agents/threads/{threadId}/messages/{clientMessageId}/status": { + "/agents/threads/{threadId}/messages/{messageId}/status": { "get": { "tags": [ "AgentThreads" ], "summary": "Gets agent thread message status.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetAgentsThreadsMessagesStatusByThreadIdAndClientMessageId", + "operationId": "GetAgentsThreadsMessagesStatusByThreadIdAndMessageId", "parameters": [ { "name": "threadId", @@ -2675,12 +2588,13 @@ } }, { - "name": "clientMessageId", + "name": "messageId", "in": "path", - "description": "The client-supplied id of the message to inspect.", + "description": "The accepted message id returned by the server.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], @@ -2724,10 +2638,10 @@ "/agents/{agentId}": { "get": { "tags": [ - "AgentRuntime" + "Custom Agents" ], - "summary": "Retrieves an agent by id.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns the custom agent's configuration.", + "description": "The requesting user must have read access to the agent. The response includes their access level.\r\n\r\nAny authenticated user.", "operationId": "GetAgentsByAgentId", "parameters": [ { @@ -2789,10 +2703,10 @@ }, "put": { "tags": [ - "AgentRuntime" + "Custom Agents" ], - "summary": "Replaces the complete editable agent form and records prompt history when the prompt changes.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Replaces the custom agent's editable configuration.", + "description": "Saves a new system prompt version if the prompt changes.\r\n\r\nAny authenticated user.", "operationId": "PutAgentsByAgentId", "parameters": [ { @@ -2807,7 +2721,7 @@ } ], "requestBody": { - "description": "The request payload.", + "description": "The new agent configuration.", "content": { "application/json": { "schema": { @@ -2877,7 +2791,7 @@ "/agents/{agentId}/connectors/{connectorId}": { "delete": { "tags": [ - "AgentRuntime" + "Custom Agents" ], "summary": "Unlinks a connector from an agent.", "description": "\r\n\r\nAny authenticated user.", @@ -2945,7 +2859,7 @@ }, "post": { "tags": [ - "AgentRuntime" + "Custom Agents" ], "summary": "Links a connector to an agent.", "description": "\r\n\r\nAny authenticated user.", @@ -3202,7 +3116,7 @@ "/agents/{agentId}/setarchived": { "post": { "tags": [ - "AgentRuntime" + "Custom Agents" ], "summary": "Archives or unarchives an agent.", "description": "\r\n\r\nAny authenticated user.", @@ -3220,7 +3134,7 @@ } ], "requestBody": { - "description": "The request payload.", + "description": "Whether to archive or unarchive the agent.", "content": { "application/json": { "schema": { @@ -50229,7 +50143,7 @@ } }, "additionalProperties": false, - "description": "Represents the request payload to change the access level of an existing agent share." + "description": "Changes a contributor's access level for an agent." }, "AgentConnectorConfigurationRequestModel": { "required": [ @@ -50245,18 +50159,18 @@ "specificConnection" ], "type": "string", - "description": "How the agent resolves a connection for the connector." + "description": "How the agent selects a connection for the connector." }, "connectionId": { "type": "string", - "description": "The connection identifier to configure. It is the fixed connection in specific-connection mode\nand the current user's selected connection in acting-user mode.", + "description": "The connection id to use.", "format": "uuid", "nullable": true, "example": "123e4567-e89b-12d3-a456-426614174000" } }, "additionalProperties": false, - "description": "Configures how an agent resolves connections for a connector." + "description": "Configures an agent's connector connection." }, "AgentConnectorUserConnectionRequestModel": { "required": [ @@ -50272,7 +50186,7 @@ } }, "additionalProperties": false, - "description": "Selects the current user's connection for an acting-user connector." + "description": "Selects the current user's connection for a connector." }, "AgentContributorRequestModel": { "type": "object", @@ -50293,14 +50207,14 @@ } }, "additionalProperties": false, - "description": "Represents the request payload to share an agent with a user." + "description": "Shares an agent with a user." }, "AgentContributorResponseModel": { "type": "object", "properties": { "id": { "type": "string", - "description": "The access grant identifier.", + "description": "The access grant id.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, @@ -50388,7 +50302,7 @@ "properties": { "id": { "type": "string", - "description": "The delegation identifier.", + "description": "The delegation id.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, @@ -50657,7 +50571,7 @@ }, "versionNumber": { "type": "integer", - "description": "The product-facing preset version number.", + "description": "The preset version number.", "format": "int32" }, "name": { @@ -50687,22 +50601,22 @@ }, "modelProvider": { "type": "string", - "description": "The current provider resolved from the workspace Balanced preset.", + "description": "The model provider from the workspace Balanced preset.", "nullable": true }, "modelName": { "type": "string", - "description": "The current model resolved from the workspace Balanced preset.", + "description": "The model from the workspace Balanced preset.", "nullable": true }, "reasoningLevel": { "type": "string", - "description": "The current reasoning level resolved from the workspace Balanced preset.", + "description": "The reasoning level from the workspace Balanced preset.", "nullable": true }, "importBlocker": { "type": "string", - "description": "The import blocker from AgentPresetAvailabilityCodes, when Balanced is unavailable.\nNull when the template can be imported. Import checks availability again.", + "description": "The code that explains why the preset cannot be imported.", "nullable": true }, "importWarnings": { @@ -50710,40 +50624,40 @@ "items": { "type": "string" }, - "description": "Availability codes for capabilities disabled on import. These do not block import.", + "description": "Codes for capabilities that will be disabled on import.", "nullable": true }, "webSearchEnabled": { "type": "boolean", - "description": "Whether web search is enabled in the published snapshot." + "description": "Whether web search is enabled in the preset." }, "aworkAccessEnabled": { "type": "boolean", - "description": "Whether awork access is enabled in the published snapshot." + "description": "Whether awork access is enabled in the preset." }, "googleGenAiAccessEnabled": { "type": "boolean", - "description": "Whether Google image generation is enabled in the published snapshot." + "description": "Whether Google image generation is enabled in the preset." }, "openAiImageGenerationAccessEnabled": { "type": "boolean", - "description": "Whether OpenAI image generation is enabled in the published snapshot." + "description": "Whether OpenAI image generation is enabled in the preset." }, "hasAvatar": { "type": "boolean", - "description": "Whether the published snapshot includes an avatar." + "description": "Whether the preset has an avatar." }, "skillNames": { "type": "array", "items": { "type": "string" }, - "description": "The skill names included in the published snapshot.", + "description": "The skill names included in the preset.", "nullable": true } }, "additionalProperties": false, - "description": "Represents the latest published localized preset available during agent creation." + "description": "Describes an agent preset available to import." }, "AgentPresetDefinitionResponseModel": { "type": "object", @@ -50756,7 +50670,7 @@ }, "sourceAgentName": { "type": "string", - "description": "The source agent name from the published snapshot.", + "description": "The source agent name when the preset was published.", "nullable": true }, "language": { @@ -50775,7 +50689,7 @@ }, "latestPublishedVersionNumber": { "type": "integer", - "description": "The latest product-facing version number.", + "description": "The active preset version number.", "format": "int32" }, "nextVersionNumber": { @@ -50788,19 +50702,19 @@ "items": { "$ref": "#/components/schemas/AgentPresetVersionSummaryResponseModel" }, - "description": "The bounded product-facing release history.", + "description": "The saved preset version history.", "nullable": true } }, "additionalProperties": false, - "description": "Represents one preset in the internal authoring catalog." + "description": "Describes an agent preset and its publication status." }, "AgentPresetSourceAgentResponseModel": { "type": "object", "properties": { "id": { "type": "string", - "description": "The source agent identifier.", + "description": "The source agent id.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, @@ -50816,7 +50730,7 @@ }, "presetKey": { "type": "string", - "description": "The stored model preset identity.", + "description": "The model preset key.", "nullable": true }, "modelProvider": { @@ -50868,19 +50782,19 @@ "items": { "type": "string" }, - "description": "The skill names that will be copied into an imported preset agent.", + "description": "The names of skills copied when the preset is imported.", "nullable": true } }, "additionalProperties": false, - "description": "Represents a normal authoring-workspace agent that can be selected as a preset source." + "description": "Describes a custom agent used as a source for a preset." }, "AgentPresetVersionSummaryResponseModel": { "type": "object", "properties": { "versionNumber": { "type": "integer", - "description": "The product-facing version number.", + "description": "The preset version number.", "format": "int32" }, "publishedOn": { @@ -50894,11 +50808,11 @@ }, "isActive": { "type": "boolean", - "description": "Whether this version is the active customer-facing version." + "description": "Whether this version is currently available to import." } }, "additionalProperties": false, - "description": "Represents one product release marker in UIC." + "description": "Describes an agent preset version." }, "AgentRuntimeModelResponseModel": { "type": "object", @@ -51320,7 +51234,7 @@ }, "prompt": { "type": "string", - "description": "The additional prompt guidance sent as the scheduled run's initial message.", + "description": "Optional custom instructions. An omitted or null prompt means no custom instructions.", "nullable": true }, "cronRule": { @@ -51328,6 +51242,11 @@ "description": "The normalized cron rule used for recurring execution.", "nullable": true }, + "recurrenceInterval": { + "type": "integer", + "description": "The number of matching cron occurrences between scheduled runs.", + "format": "int32" + }, "timezone": { "type": "string", "description": "The timezone used to evaluate the cron rule.", @@ -51398,7 +51317,7 @@ "properties": { "id": { "type": "string", - "description": "The agent-skill link identifier.", + "description": "The agent-skill link id.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, @@ -51410,7 +51329,7 @@ }, "skillId": { "type": "string", - "description": "The linked skill identifier.", + "description": "The linked skill id.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, @@ -51489,7 +51408,7 @@ }, "currentSystemPromptVersionId": { "type": "string", - "description": "The current immutable system prompt version.", + "description": "The current system prompt version.", "format": "uuid", "nullable": true, "example": "fd077515-d4a8-4f79-9fbf-19271bd0123d" @@ -51508,7 +51427,7 @@ }, "presetKey": { "type": "string", - "description": "The configured workspace preset identity.", + "description": "The configured workspace model preset key.", "nullable": true, "example": "balanced" }, @@ -51520,7 +51439,7 @@ }, "systemPrompt": { "type": "string", - "description": "The authoritative current system prompt.", + "description": "The current system prompt.", "nullable": true, "example": "Prepare concise client-ready project updates from awork data." }, @@ -51630,6 +51549,27 @@ "additionalProperties": false, "description": "Describes a file produced by an agent thread." }, + "AgentThreadAttachmentRequestModel": { + "type": "object", + "properties": { + "temporaryFileId": { + "type": "string", + "description": "The identifier returned when uploading a temporary file. Do not also supply aworkFileId.", + "format": "uuid", + "nullable": true, + "example": "af6ac9db-479a-49b8-8e1b-994ba79e940f" + }, + "aworkFileId": { + "type": "string", + "description": "The identifier of an existing awork file the caller can read. Do not also supply temporaryFileId.", + "format": "uuid", + "nullable": true, + "example": "7a5c994a-320a-4850-a7a8-dad86809d3ef" + } + }, + "additionalProperties": false, + "description": "References an attached file. Supply exactly one of temporaryFileId or aworkFileId." + }, "AgentThreadEventResponseModel": { "type": "object", "properties": { @@ -51690,6 +51630,81 @@ "type": "string", "description": "Identifies how an agent thread starts." }, + "AgentThreadMessageRequestModel": { + "type": "object", + "properties": { + "content": { + "type": "string", + "description": "The message text. Required when no attachments are supplied.", + "nullable": true, + "example": "Summarize this project's progress, risks, and next steps." + }, + "attachments": { + "maxItems": 20, + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentThreadAttachmentRequestModel" + }, + "description": "Up to 20 distinct files attached to this message. Upload new files before submitting their identifiers.", + "nullable": true + }, + "modelProvider": { + "type": "string", + "description": "The provider for a model override. Supply it together with modelName.", + "nullable": true, + "example": "openai" + }, + "modelName": { + "type": "string", + "description": "The model to use for this message. It must be available in the workspace.", + "nullable": true, + "example": "gpt-5.6-terra" + }, + "reasoningLevel": { + "type": "string", + "description": "The reasoning level for this message. Supported values depend on the selected model.", + "nullable": true, + "example": "medium" + }, + "toolAccess": { + "$ref": "#/components/schemas/AgentToolAccessOptionsModel" + }, + "connectorIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The connector selection for this message.", + "nullable": true + }, + "connectorConnections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentMessageConnectorConnectionRequestModel" + }, + "description": "Connection choices for custom-agent connectors. These do not change agent settings.", + "nullable": true + }, + "skillIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The skill selection for this message.", + "nullable": true + }, + "answerToInterruptId": { + "type": "string", + "description": "The interrupt identifier returned with the question being answered.", + "nullable": true, + "example": "interrupt_01K4CLIENTSTATUS" + } + }, + "additionalProperties": false, + "description": "Submits a follow-up message or answers a pending question in an agent conversation." + }, "AgentThreadMessageResponseModel": { "type": "object", "properties": { @@ -52216,14 +52231,14 @@ } }, "additionalProperties": false, - "description": "Represents the request payload to share an agent with a team." + "description": "Shares an agent with a team." }, "AgentToTeamResponseModel": { "type": "object", "properties": { "id": { "type": "string", - "description": "The access grant identifier.", + "description": "The access grant id.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, @@ -52531,7 +52546,7 @@ "properties": { "id": { "type": "string", - "description": "The workflow step identifier.", + "description": "The workflow step id.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, @@ -52902,7 +52917,7 @@ "additionalProperties": { "$ref": "#/components/schemas/AiQuotaPlanOptions" }, - "description": "Quota definitions keyed by the required logical plan names `Starter`, `Plus`, `Pro`, and `Max`.", + "description": "Quota definitions keyed by logical paid plan name. `Starter` is required; additional plan names are allowed.", "nullable": true, "example": { "Starter": { @@ -52972,6 +52987,23 @@ "priority": 1 } ] + }, + "Ultra": { + "creditsPerUsd": 100, + "limits": [ + { + "key": "monthly", + "role": "Primary", + "amountType": "AbsoluteCredits", + "amountValue": 64000, + "windowType": "Aligned", + "windowUnit": "Month", + "windowLength": 1, + "windowAnchor": "QuotaPeriodStart", + "enforcement": "HardBlock", + "priority": 1 + } + ] } } }, @@ -53238,131 +53270,41 @@ "description": "Represents a user who explicitly joined an agent thread." }, "AiThreadCreateRequestModel": { + "required": [ + "type" + ], "type": "object", "properties": { - "type": { - "enum": [ - "personal-agent", - "custom-agent" - ], - "type": "string", - "description": "The thread type.", - "nullable": true, - "example": "custom-agent" - }, - "agentId": { - "type": "string", - "description": "The Custom agent or agent-owned skill owner.", - "format": "uuid", - "example": "4d22e163-2b4a-4d47-b51c-5b2217f84f57" - }, - "skillId": { - "type": "string", - "description": "The skill id for a guided skill flow.", - "format": "uuid", - "example": "0d291ab9-5b6d-4dd7-a0bd-842aca19a9e2" - }, - "setupFlow": { - "enum": [ - "agent-setup", - "agent-improvement", - "skill-improvement", - "workspace-context" - ], + "content": { "type": "string", - "description": "The optional setup flow.", + "description": "The message text. Required when no attachments are supplied.", "nullable": true, - "example": "skill-improvement" + "example": "Summarize this project's progress, risks, and next steps." }, - "initialMessage": { - "$ref": "#/components/schemas/InitialAgentSessionMessageRequestModel" - }, - "contextFiles": { + "attachments": { + "maxItems": 20, "type": "array", "items": { - "$ref": "#/components/schemas/WorkerBootstrapContextFileModel" + "$ref": "#/components/schemas/AgentThreadAttachmentRequestModel" }, - "description": "Context files for the agent thread.", + "description": "Up to 20 distinct files attached to this message. Upload new files before submitting their identifiers.", "nullable": true }, - "temporaryFileIds": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "The uploaded temporary file identifiers for the first message.", - "nullable": true - }, - "temporaryFiles": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TemporaryFileReference" - }, - "description": "The display metadata for the first message's temporary files.", - "nullable": true - }, - "title": { - "type": "string", - "description": "The thread title.", - "nullable": true, - "example": "Weekly client status report" - }, - "sourceType": { - "$ref": "#/components/schemas/AgentSessionSourceType" - }, - "invocationType": { - "$ref": "#/components/schemas/AgentThreadInvocationType" - }, - "sourceId": { - "type": "string", - "description": "The external source reference for the thread.", - "nullable": true, - "example": "api-client-status-run" - }, - "projectId": { - "type": "string", - "description": "The project context id.", - "format": "uuid", - "nullable": true, - "example": "c907b29e-f640-4639-910d-722623fd5b4a" - }, - "taskId": { - "type": "string", - "description": "The task context id.", - "format": "uuid", - "nullable": true, - "example": "d88ef8fa-e549-4ca6-96d8-83f5be9d37a2" - }, - "clientId": { - "type": "string", - "description": "The client context id.", - "format": "uuid", - "nullable": true, - "example": "61341e18-3e3f-4efb-b471-b781e64f69f7" - }, - "documentId": { - "type": "string", - "description": "The document context id.", - "format": "uuid", - "nullable": true, - "example": "5a442338-8da3-49e9-a702-b45d6f829d43" - }, "modelProvider": { "type": "string", - "description": "The model provider selected for the initial message.", + "description": "The provider for a model override. Supply it together with modelName.", "nullable": true, "example": "openai" }, "modelName": { "type": "string", - "description": "The model name selected for the initial message.", + "description": "The model to use for this message. It must be available in the workspace.", "nullable": true, "example": "gpt-5.6-terra" }, "reasoningLevel": { "type": "string", - "description": "The reasoning level selected for the initial message.", + "description": "The reasoning level for this message. Supported values depend on the selected model.", "nullable": true, "example": "medium" }, @@ -53375,7 +53317,7 @@ "type": "string", "format": "uuid" }, - "description": "The exact connector list selected for the initial message.", + "description": "The connector selection for this message.", "nullable": true }, "connectorConnections": { @@ -53383,7 +53325,7 @@ "items": { "$ref": "#/components/schemas/AgentMessageConnectorConnectionRequestModel" }, - "description": "Custom agent connector choices.", + "description": "Connection choices for custom-agent connectors. These do not change agent settings.", "nullable": true }, "skillIds": { @@ -53392,8 +53334,58 @@ "type": "string", "format": "uuid" }, - "description": "The exact skill list selected for the initial message.", + "description": "The skill selection for this message.", "nullable": true + }, + "type": { + "minLength": 1, + "enum": [ + "personal-agent", + "custom-agent" + ], + "type": "string", + "description": "Select personal-agent for the awork Agent, or custom-agent for a configured workspace agent.", + "example": "custom-agent" + }, + "agentId": { + "type": "string", + "description": "The configured agent to run. Required for custom-agent threads; omit for ordinary personal-agent threads.", + "format": "uuid", + "example": "4d22e163-2b4a-4d47-b51c-5b2217f84f57" + }, + "title": { + "type": "string", + "description": "The thread title.", + "nullable": true, + "example": "Weekly client status report" + }, + "projectId": { + "type": "string", + "description": "The project context id.", + "format": "uuid", + "nullable": true, + "example": "c907b29e-f640-4639-910d-722623fd5b4a" + }, + "taskId": { + "type": "string", + "description": "The task context id.", + "format": "uuid", + "nullable": true, + "example": "d88ef8fa-e549-4ca6-96d8-83f5be9d37a2" + }, + "clientId": { + "type": "string", + "description": "The client context id.", + "format": "uuid", + "nullable": true, + "example": "61341e18-3e3f-4efb-b471-b781e64f69f7" + }, + "documentId": { + "type": "string", + "description": "The document context id.", + "format": "uuid", + "nullable": true, + "example": "5a442338-8da3-49e9-a702-b45d6f829d43" } }, "additionalProperties": false, @@ -53415,6 +53407,13 @@ "nullable": true, "example": "8f934a03-8f8b-44ea-9137-3ca563bb75e8" }, + "acceptedMessageId": { + "type": "string", + "description": "The accepted first-message id, or null when the thread was created without a message.", + "format": "uuid", + "nullable": true, + "example": "66fcbdc5-2ae6-43bd-b3ab-f18ccd24909a" + }, "type": { "type": "string", "description": "The thread type.", @@ -53428,10 +53427,15 @@ "example": "Weekly client status report" }, "status": { + "enum": [ + "ready", + "accepted", + "queued", + "failed" + ], "type": "string", - "description": "The thread status.", - "nullable": true, - "example": "running" + "description": "The creation result: ready without a first message, accepted with a first message, queued when the first message waits for a run, or failed to start.", + "example": "accepted" }, "createdOn": { "type": "string", @@ -53493,12 +53497,6 @@ "format": "uuid", "nullable": true, "example": "5a442338-8da3-49e9-a702-b45d6f829d43" - }, - "lastSequence": { - "type": "integer", - "description": "The latest persisted event sequence.", - "format": "int64", - "example": 42 } }, "additionalProperties": false, @@ -53520,15 +53518,9 @@ "nullable": true, "example": "8f934a03-8f8b-44ea-9137-3ca563bb75e8" }, - "clientMessageId": { - "type": "string", - "description": "The client idempotency key.", - "nullable": true, - "example": "client-status-2026-08-29" - }, "acceptedMessageId": { "type": "string", - "description": "The persisted thread message id when the message started immediately.", + "description": "The server-assigned message id. This identity is retained while queued and when execution starts.", "format": "uuid", "nullable": true, "example": "66fcbdc5-2ae6-43bd-b3ab-f18ccd24909a" @@ -53552,17 +53544,15 @@ "description": "Whether the backend stored the message in the queue.", "example": false }, - "lastSequence": { - "type": "integer", - "description": "The last thread event sequence produced by immediate acceptance.", - "format": "int64", - "example": 42 - }, "status": { + "enum": [ + "accepted", + "queued", + "failed" + ], "type": "string", - "description": "The processing status.", - "nullable": true, - "example": "in_progress" + "description": "Whether the message was accepted for execution, queued behind another message, or failed to start.", + "example": "accepted" } }, "additionalProperties": false, @@ -53571,11 +53561,11 @@ "AiThreadMessageProcessingStatusResponseModel": { "type": "object", "properties": { - "clientMessageId": { + "messageId": { "type": "string", - "description": "The client-generated message id.", - "nullable": true, - "example": "client-status-2026-08-29" + "description": "The server-generated identifier of the accepted user message.", + "format": "uuid", + "example": "66fcbdc5-2ae6-43bd-b3ab-f18ccd24909a" }, "status": { "type": "string", @@ -53611,120 +53601,6 @@ "additionalProperties": false, "description": "Represents the processing status for a thread message." }, - "AiThreadMessageRequestModel": { - "type": "object", - "properties": { - "content": { - "type": "string", - "description": "The message content.", - "nullable": true, - "example": "Add the latest budget and launch-date risks to the Acme client report." - }, - "modelProvider": { - "type": "string", - "description": "The model provider selected for this message.", - "nullable": true, - "example": "openai" - }, - "modelName": { - "type": "string", - "description": "The model name selected for this message.", - "nullable": true, - "example": "gpt-5.6-terra" - }, - "reasoningLevel": { - "type": "string", - "description": "The reasoning level selected for this message.", - "nullable": true, - "example": "medium" - }, - "toolAccess": { - "$ref": "#/components/schemas/AgentToolAccessOptionsModel" - }, - "connectorIds": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "The exact connector list selected for this message.", - "nullable": true - }, - "connectorConnections": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AgentMessageConnectorConnectionRequestModel" - }, - "description": "Custom agent connector choices.", - "nullable": true - }, - "skillIds": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "The exact skill list selected for this message.", - "nullable": true - }, - "clientMessageId": { - "type": "string", - "description": "Client-generated idempotency key for the user message.", - "nullable": true, - "example": "client-status-2026-08-29" - }, - "answerToInterruptId": { - "type": "string", - "description": "The interrupt identifier of the user question this message answers.", - "nullable": true, - "example": "interrupt_01K4CLIENTSTATUS" - }, - "url": { - "type": "string", - "description": "The page URL where the message was sent.", - "nullable": true, - "example": "https://app.awork.com/northstar/projects/acme-website" - }, - "useCompanySearch": { - "type": "boolean", - "description": "Whether the agent must search company sources for this message before answering.", - "example": false - }, - "runId": { - "type": "string", - "description": "Optional Agent-UI (AG-UI) run identifier for this streamed response.", - "nullable": true, - "example": "run_01K4CLIENTSTATUS" - }, - "temporaryFileIds": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "Optional temporary file identifiers uploaded by the chat client.", - "nullable": true - }, - "temporaryFiles": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TemporaryFileReference" - }, - "description": "Optional display metadata for the temporary files attached to this message.", - "nullable": true - }, - "contextFiles": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WorkerBootstrapContextFileModel" - }, - "description": "The context files to add to an agent runtime thread message.", - "nullable": true - } - }, - "additionalProperties": false, - "description": "Adds an agent thread message." - }, "AiThreadQueueResponseModel": { "type": "object", "properties": { @@ -53809,7 +53685,15 @@ "example": "Add client-ready risks and next steps to the status report." }, "payload": { - "$ref": "#/components/schemas/AiThreadMessageRequestModel" + "$ref": "#/components/schemas/AgentThreadMessageRequestModel" + }, + "attachments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TemporaryFileReference" + }, + "description": "Attachment display metadata resolved by the server. This metadata is not part of the editable request.", + "nullable": true }, "responsibleUserId": { "type": "string", @@ -53832,25 +53716,34 @@ "properties": { "content": { "type": "string", - "description": "The message content.", + "description": "The message text. Required when no attachments are supplied.", "nullable": true, - "example": "Add the latest budget and launch-date risks to the Acme client report." + "example": "Summarize this project's progress, risks, and next steps." + }, + "attachments": { + "maxItems": 20, + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentThreadAttachmentRequestModel" + }, + "description": "Up to 20 distinct files attached to this message. Upload new files before submitting their identifiers.", + "nullable": true }, "modelProvider": { "type": "string", - "description": "The model provider selected for this message.", + "description": "The provider for a model override. Supply it together with modelName.", "nullable": true, "example": "openai" }, "modelName": { "type": "string", - "description": "The model name selected for this message.", + "description": "The model to use for this message. It must be available in the workspace.", "nullable": true, "example": "gpt-5.6-terra" }, "reasoningLevel": { "type": "string", - "description": "The reasoning level selected for this message.", + "description": "The reasoning level for this message. Supported values depend on the selected model.", "nullable": true, "example": "medium" }, @@ -53863,7 +53756,7 @@ "type": "string", "format": "uuid" }, - "description": "The exact connector list selected for this message.", + "description": "The connector selection for this message.", "nullable": true }, "connectorConnections": { @@ -53871,7 +53764,7 @@ "items": { "$ref": "#/components/schemas/AgentMessageConnectorConnectionRequestModel" }, - "description": "Custom agent connector choices.", + "description": "Connection choices for custom-agent connectors. These do not change agent settings.", "nullable": true }, "skillIds": { @@ -53880,62 +53773,14 @@ "type": "string", "format": "uuid" }, - "description": "The exact skill list selected for this message.", + "description": "The skill selection for this message.", "nullable": true }, - "clientMessageId": { - "type": "string", - "description": "Client-generated idempotency key for the user message.", - "nullable": true, - "example": "client-status-2026-08-29" - }, "answerToInterruptId": { "type": "string", - "description": "The interrupt identifier of the user question this message answers.", + "description": "The interrupt identifier returned with the question being answered.", "nullable": true, "example": "interrupt_01K4CLIENTSTATUS" - }, - "url": { - "type": "string", - "description": "The page URL where the message was sent.", - "nullable": true, - "example": "https://app.awork.com/northstar/projects/acme-website" - }, - "useCompanySearch": { - "type": "boolean", - "description": "Whether the agent must search company sources for this message before answering.", - "example": false - }, - "runId": { - "type": "string", - "description": "Optional Agent-UI (AG-UI) run identifier for this streamed response.", - "nullable": true, - "example": "run_01K4CLIENTSTATUS" - }, - "temporaryFileIds": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "Optional temporary file identifiers uploaded by the chat client.", - "nullable": true - }, - "temporaryFiles": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TemporaryFileReference" - }, - "description": "Optional display metadata for the temporary files attached to this message.", - "nullable": true - }, - "contextFiles": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WorkerBootstrapContextFileModel" - }, - "description": "The context files to add to an agent runtime thread message.", - "nullable": true } }, "additionalProperties": false, @@ -55115,26 +54960,26 @@ }, "forkedFromAgentId": { "type": "string", - "description": "The agent to copy. When set, the new agent inherits the source agent's configuration.", + "description": "The agent to copy.", "format": "uuid", "nullable": true, "example": "1107cc84-1750-40e1-a86c-86f68d1f05c5" }, "modelProvider": { "type": "string", - "description": "The provider that hosts the model. Required with AiService.Feature.AgentRuntime.Models.CreateAgentRequestModel.ModelName when no preset or source agent is specified.", + "description": "The provider that hosts the model.", "nullable": true, "example": "openai" }, "modelName": { "type": "string", - "description": "The model to run. Required with AiService.Feature.AgentRuntime.Models.CreateAgentRequestModel.ModelProvider when no preset or source agent is specified.", + "description": "The model to run.", "nullable": true, "example": "gpt-5.6-terra" }, "presetKey": { "type": "string", - "description": "The workspace model preset to use instead of a provider and model.", + "description": "The workspace model preset to use.", "nullable": true, "example": "balanced" }, @@ -55181,8 +55026,7 @@ "CreateAgentScheduleRequestModel": { "required": [ "cronRule", - "name", - "prompt" + "name" ], "type": "object", "properties": { @@ -55195,9 +55039,9 @@ }, "prompt": { "maxLength": 25000, - "minLength": 1, "type": "string", - "description": "The additional prompt guidance sent as the scheduled run's initial message.", + "description": "Optional custom instructions for the initial message. Omitted, null, or blank input clears custom instructions.", + "nullable": true, "example": "Summarize progress, risks, and next steps for the Acme website project." }, "cronRule": { @@ -55207,6 +55051,15 @@ "description": "The cron rule used for recurring execution.", "example": "0 9 * * 1" }, + "recurrenceInterval": { + "maximum": 99, + "minimum": 1, + "type": "integer", + "description": "The number of matching cron occurrences between scheduled runs.", + "format": "int32", + "nullable": true, + "example": 2 + }, "timezone": { "maxLength": 100, "type": "string", @@ -56012,30 +55865,11 @@ "maxLength": 255, "minLength": 1, "type": "string", - "description": "The name of the normal agent created in the workspace." + "description": "The name of the new custom agent." } }, "additionalProperties": false, - "description": "Defines the workspace-agent identity used when importing the latest preset release." - }, - "InitialAgentSessionMessageRequestModel": { - "type": "object", - "properties": { - "content": { - "type": "string", - "description": "The message content.", - "nullable": true, - "example": "Summarize progress, risks, and next steps for the Acme website project." - }, - "clientMessageId": { - "type": "string", - "description": "The client-generated idempotency key for the message.", - "nullable": true, - "example": "client-status-2026-08-29" - } - }, - "additionalProperties": false, - "description": "Defines the first agent thread message." + "description": "Sets the name of a custom agent created from a preset." }, "ModelDisablePreflightResponseModel": { "type": "object", @@ -56433,7 +56267,7 @@ } }, "additionalProperties": false, - "description": "Defines the preset metadata for one source agent publication." + "description": "Sets the language and description for an agent preset." }, "RememberAgentSessionMessageRequestModel": { "type": "object", @@ -56457,7 +56291,7 @@ } }, "additionalProperties": false, - "description": "Represents the set agent archived request payload for the agent runtime API." + "description": "Sets whether an agent is archived." }, "SetAgentScheduleEnabledRequestModel": { "required": [ @@ -56962,24 +56796,24 @@ "properties": { "id": { "type": "string", - "description": "The prompt version identifier.", + "description": "The prompt version id.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "agentId": { "type": "string", - "description": "The agent identifier.", + "description": "The agent id.", "format": "uuid", "example": "123e4567-e89b-12d3-a456-426614174000" }, "versionNumber": { "type": "integer", - "description": "The creation-order version number.", + "description": "The version number, assigned in order of creation.", "format": "int32" }, "isCurrent": { "type": "boolean", - "description": "Whether this row is the agent's current prompt." + "description": "Whether this is the agent's current system prompt." }, "systemPrompt": { "type": "string", @@ -57001,7 +56835,7 @@ } }, "additionalProperties": false, - "description": "Represents one immutable system prompt history row." + "description": "Describes a saved system prompt version." }, "TableAuditEventModel": { "type": "object", @@ -57263,7 +57097,7 @@ }, "presetKey": { "type": "string", - "description": "The workspace model preset to use instead of a provider and model.", + "description": "The workspace model preset to use.", "nullable": true, "example": "balanced" }, @@ -57276,7 +57110,7 @@ "systemPrompt": { "maxLength": 25000, "type": "string", - "description": "The authoritative system prompt.", + "description": "The instructions that control the agent's behavior.", "example": "Prepare concise client-ready project updates from awork data." }, "webSearchEnabled": { @@ -57306,8 +57140,7 @@ "UpdateAgentScheduleRequestModel": { "required": [ "cronRule", - "name", - "prompt" + "name" ], "type": "object", "properties": { @@ -57320,9 +57153,9 @@ }, "prompt": { "maxLength": 25000, - "minLength": 1, "type": "string", - "description": "The additional prompt guidance sent as the scheduled run's initial message.", + "description": "Optional custom instructions for the initial message. Omitted, null, or blank input clears custom instructions.", + "nullable": true, "example": "Summarize progress, risks, and next steps for the Acme website project." }, "cronRule": { @@ -57332,6 +57165,15 @@ "description": "The cron rule used for recurring execution.", "example": "0 9 * * 1" }, + "recurrenceInterval": { + "maximum": 99, + "minimum": 1, + "type": "integer", + "description": "The number of matching cron occurrences between scheduled runs.", + "format": "int32", + "nullable": true, + "example": 2 + }, "timezone": { "maxLength": 100, "type": "string", @@ -57701,45 +57543,6 @@ "additionalProperties": false, "description": "The validation error response." }, - "WorkerBootstrapContextFileModel": { - "type": "object", - "properties": { - "path": { - "type": "string", - "description": "The destination path relative to the worker workspace.", - "nullable": true, - "example": "context/uploads/acme-client-brief.md" - }, - "content": { - "type": "string", - "description": "The UTF-8 text content.", - "nullable": true, - "example": "Client: Acme. Launch target: 4 September 2026." - }, - "contentBase64": { - "type": "string", - "description": "The Base64-encoded content for a binary file.", - "nullable": true, - "example": "JVBERi0xLjQ=" - }, - "temporaryFileId": { - "type": "string", - "description": "The temporary file to materialize directly into the sandbox.", - "format": "uuid", - "nullable": true, - "example": "c2e765ec-8aad-49f7-ae21-e54916a7e907" - }, - "aworkFileId": { - "type": "string", - "description": "The awork file to materialize directly into the sandbox.", - "format": "uuid", - "nullable": true, - "example": "8f77f578-ec66-47d9-98d1-5daf2ae5c6c3" - } - }, - "additionalProperties": false, - "description": "Provides one context file to an agent runtime worker." - }, "WorkspaceContextCatalogStatus": { "enum": [ "Pending", @@ -77986,6 +77789,28 @@ "additionalProperties": false, "description": "Statistics about workspace usage for plan validation.\nUsed to determine if a workspace can downgrade to a specific plan\nbased on their current usage of limited features." }, + "AttachmentFileMetadataModel": { + "type": "object", + "properties": { + "fileName": { + "type": "string", + "description": "Gets or sets the stored file name.", + "nullable": true + }, + "mimeType": { + "type": "string", + "description": "Gets or sets the stored media type.", + "nullable": true + }, + "size": { + "type": "integer", + "description": "Gets or sets the latest file version's size in bytes.", + "format": "int64" + } + }, + "additionalProperties": false, + "description": "Contains the display metadata needed to attach an existing file to an agent message." + }, "BulkDownloadForm": { "required": [ "fileIds" @@ -84449,8 +84274,8 @@ "description": "Manages agent threads." }, { - "name": "OAuth", - "description": "The OAuth feature provides OAuth 2.0 discovery endpoints for authorization server and protected resource metadata." + "name": "Custom Agents", + "description": "Create and configure custom agents, sharing, skills, connectors, delegations, workflows, and presets." }, { "name": "Accounts", @@ -84688,10 +84513,6 @@ { "name": "DocumentFiles" }, - { - "name": "EntityFiles", - "description": "The entity file endpoints allow you to attach files to several entities." - }, { "name": "FileUpload", "description": "These endpoints can be used to upload files to the workspace." From a27f569dd6b9cad5e4bb72106d359f058cd7cf68 Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 11 Sep 2026 00:27:13 +0000 Subject: [PATCH 11/16] Update API specifications with fern api update --- fern/apis/v1/openapi/openapi.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fern/apis/v1/openapi/openapi.json b/fern/apis/v1/openapi/openapi.json index cfc3ebe..5412d28 100644 --- a/fern/apis/v1/openapi/openapi.json +++ b/fern/apis/v1/openapi/openapi.json @@ -81822,7 +81822,7 @@ "plannedDuration": { "type": "integer", "description": "The total planned time of the project, in seconds.\nThe time is calculated as te sum of the planned duration by all project tasks.", - "format": "int32", + "format": "int64", "nullable": true, "example": 432000 }, From 5b601ac95fa72702981c7e2b9718cd8e9c12550c Mon Sep 17 00:00:00 2001 From: github-actions Date: Sat, 12 Sep 2026 00:25:43 +0000 Subject: [PATCH 12/16] Update API specifications with fern api update --- fern/apis/v1/openapi/openapi.json | 54 +++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/fern/apis/v1/openapi/openapi.json b/fern/apis/v1/openapi/openapi.json index 5412d28..2d5beb6 100644 --- a/fern/apis/v1/openapi/openapi.json +++ b/fern/apis/v1/openapi/openapi.json @@ -51201,6 +51201,60 @@ "additionalProperties": false, "description": "Represents one effective workspace model switch." }, + "AgentScheduleNextOccurrenceRequestModel": { + "required": [ + "cronRule", + "recurrenceInterval", + "timezone" + ], + "type": "object", + "properties": { + "cronRule": { + "maxLength": 100, + "minLength": 1, + "type": "string", + "description": "The cron rule used for recurring execution." + }, + "recurrenceInterval": { + "maximum": 99, + "minimum": 1, + "type": "integer", + "description": "The number of matching cron occurrences between scheduled runs.", + "format": "int32" + }, + "timezone": { + "maxLength": 100, + "minLength": 1, + "type": "string", + "description": "The IANA timezone used to evaluate the cron rule." + }, + "scheduleId": { + "type": "string", + "description": "The optional existing schedule whose current cadence phase is used.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + } + }, + "additionalProperties": false, + "description": "Represents the cadence used to preview the next scheduled agent run." + }, + "AgentScheduleNextOccurrenceResponseModel": { + "type": "object", + "properties": { + "nextRunOn": { + "type": "string", + "description": "The next selected occurrence in UTC.", + "format": "date-time" + }, + "isFirstRun": { + "type": "boolean", + "description": "Whether the occurrence starts a new cadence phase." + } + }, + "additionalProperties": false, + "description": "Represents the next scheduled agent run preview." + }, "AgentScheduleResponseModel": { "type": "object", "properties": { From 3b051a007421f9fdd1161020e39e6f090f93aa11 Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 15 Sep 2026 00:28:11 +0000 Subject: [PATCH 13/16] Update API specifications with fern api update --- fern/apis/v1/openapi/openapi.json | 18493 ++++++++++------------------ fern/apis/v2/openapi/openapi.json | 16 +- 2 files changed, 6395 insertions(+), 12114 deletions(-) diff --git a/fern/apis/v1/openapi/openapi.json b/fern/apis/v1/openapi/openapi.json index 2d5beb6..b0cb31a 100644 --- a/fern/apis/v1/openapi/openapi.json +++ b/fern/apis/v1/openapi/openapi.json @@ -23,8 +23,8 @@ "tags": [ "AbsenceRegions" ], - "summary": "Gets all absence regions.", - "description": "The user must be admin or have `user-planning-data:write` permissions to see the users assigned to the absence regions.", + "summary": "Returns all absence regions.", + "description": "Returns all absence regions with their public holiday details.\r\n The user must be an admin or have `user-planning-data:write` permission to see users assigned to absence regions.", "operationId": "GetAbsenceRegions", "responses": { "200": { @@ -59,8 +59,8 @@ "tags": [ "AbsenceRegions" ], - "summary": "Creates a new absence region.", - "description": "An absence region is defined by an ISO 3166-1 alpha-2 country code and a location code.\r\n There can be multiple absence regions for a country, but only one absence region for a country and location (no duplicates).\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", + "summary": "Creates an absence region.", + "description": "Creates an absence region for an ISO 3166-1 alpha-2 country and location. Names must be unique. Marking the new region as default clears the previous default region. This operation requires a Standard workspace plan or higher.\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", "operationId": "PostAbsenceRegion", "requestBody": { "description": "The model to create the absence region.", @@ -119,8 +119,8 @@ "tags": [ "AbsenceRegions" ], - "summary": "List of supported countries for absence regions.", - "description": "Returns a list of supported countries for absence regions.\r\n A country is defined by an ISO 3166-1 alpha-2 country code.\r\n\r\nAny authenticated user.", + "summary": "Returns supported absence region countries.", + "description": "Returns the supported countries and their ISO 3166-1 alpha-2 codes for absence regions.\r\n\r\nAny authenticated user.", "operationId": "GetAbsenceRegionsCountries", "responses": { "200": { @@ -157,8 +157,8 @@ "tags": [ "AbsenceRegions" ], - "summary": "List of locations for a country.", - "description": "Returns a list of all the locations of a country, expressed as ISO 3166-2 codes.\r\n It will include the regions and subregions (sublocations) of the country if available.\r\n\r\nAny authenticated user.", + "summary": "Returns locations for the specified country.", + "description": "Returns the country's locations as ISO 3166-2 codes, including regions and subregions when available. An unsupported country code returns not found.\r\n\r\nAny authenticated user.", "operationId": "GetAbsenceRegionsCountryLocationsByCountryCode", "parameters": [ { @@ -216,8 +216,8 @@ "tags": [ "AbsenceRegions" ], - "summary": "Assign/remove current user to/from an absence region.", - "description": "Assigns or removes the current user to/from an absence region.\r\n A user can be assigned to only one absence region.\r\n If a user is already assigned to an absence region, they will be removed from the previous one and assigned to the new one.\r\n Providing a null region id will remove the user from any absence region.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", + "summary": "Sets the current user's absence region.", + "description": "Sets the current user's absence region. A user can have only one region; assigning a new region replaces the previous one. A null region id removes the current assignment.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", "operationId": "PostMeAbsenceRegionsAssign", "requestBody": { "description": "The model to assign or unassign the current user to/from an absence region.", @@ -274,8 +274,8 @@ "tags": [ "AbsenceRegions" ], - "summary": "Assign/remove current user to/from an absence region.", - "description": "Assigns or removes the current user to/from an absence region.\r\n A user can be assigned to only one absence region.\r\n If a user is already assigned to an absence region, they will be removed from the previous one and assigned to the new one.\r\n Providing a null region id will remove the user from any absence region.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", + "summary": "Sets the current user's absence region.", + "description": "Sets the current user's absence region. A user can have only one region; assigning a new region replaces the previous one. A null region id removes the current assignment.\r\n This endpoint is deprecated; use the POST endpoint instead.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", "operationId": "PutMeAbsenceRegionsAssign", "requestBody": { "description": "The model to assign or unassign the current user to/from an absence region.", @@ -335,8 +335,8 @@ "tags": [ "AbsenceRegions" ], - "summary": "Assigns or unassigns users to/from an absence region.", - "description": "A user can be assigned to only one absence region.\r\n If a user is already assigned to an absence region, they will be removed from the previous one and assigned to the new one.\r\n Providing an empty list of user ids will remove all users from the absence region.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", + "summary": "Sets users for an absence region.", + "description": "Sets the users assigned to an absence region. A user can belong to only one region, so assigning a user here removes any previous assignment. An empty user list removes all assignments.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", "operationId": "PostAbsenceRegionsUsersAssign", "requestBody": { "description": "The model to assign or unassign users to/from an absence region.", @@ -393,8 +393,8 @@ "tags": [ "AbsenceRegions" ], - "summary": "Assigns or unassigns users to/from an absence region.", - "description": "A user can be assigned to only one absence region.\r\n If a user is already assigned to an absence region, they will be removed from the previous one and assigned to the new one.\r\n Providing an empty list of user ids will remove all users from the absence region.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", + "summary": "Sets users for an absence region.", + "description": "Sets the users assigned to an absence region. A user can belong to only one region, so assigning a user here removes any previous assignment. An empty user list removes all assignments.\r\n This endpoint is deprecated; use the POST endpoint instead.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", "operationId": "PutAbsenceRegionsUsersAssign", "requestBody": { "description": "The model to assign or unassign users to/from an absence region.", @@ -454,8 +454,8 @@ "tags": [ "AbsenceRegions" ], - "summary": "Deletes an absence region.", - "description": "Deletes an absence region by id, unassigning all users from the absence region.\r\n If there are workspace absences related to the region, they will be deleted as well.\r\n If the absence region is the default absence region, it will simply be deleted (no default absence region).\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", + "summary": "Deletes the specified absence region.", + "description": "Deletes the specified absence region, unassigns its users, and deletes related workspace absences. Deleting the default region leaves the workspace without a default region.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", "operationId": "DeleteAbsenceRegionById", "parameters": [ { @@ -503,8 +503,8 @@ "tags": [ "AbsenceRegions" ], - "summary": "Get an absence region by id.", - "description": "The absence region will include the details of the public holidays for the country and location.\r\n The user must be admin or have `user-planning-data:write` permissions to see the users assigned to the absence region.", + "summary": "Returns the specified absence region.", + "description": "Returns the absence region with public holiday details for its country and location.\r\n The user must be an admin or have `user-planning-data:write` permission to see users assigned to the absence region.", "operationId": "GetAbsenceRegionById", "parameters": [ { @@ -558,8 +558,8 @@ "tags": [ "AbsenceRegions" ], - "summary": "Updates an absence region.", - "description": "\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", + "summary": "Updates the specified absence region.", + "description": "Updates the region name, country, location, or default status. Names must remain unique, and marking this region as default clears the previous default region.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", "operationId": "PutAbsenceRegionById", "parameters": [ { @@ -638,7 +638,7 @@ "Absences" ], "summary": "Returns all absences.", - "description": "Admin or user planning data permissions are required,\r\n otherwise only the absences of the current user are returned.\r\n\r\nAny authenticated user.", + "description": "Returns workspace absences visible to the current user.\r\n The user must be an admin or have `user-planning-data:read` permission to view other users' absences.", "operationId": "GetAbsences", "parameters": [ { @@ -688,7 +688,7 @@ "Absences" ], "summary": "Creates an absence.", - "description": "The startOn and endOn get rounded to 00:00:00, 12:00:00, or 23:59:59 in UTC.\r\n These values can be used to set a half-day (pre or post mid-day) absence, or absences that start or end at mid-day.\r\n The end date needs to be the same or after the start date.\r\n \r\n User planning data permissions are required if the calling user is not the owner of the absence or admin.", + "description": "Creates an absence with dates rounded to 00:00:00, 12:00:00, or 23:59:59 UTC to support full-day and half-day periods. The end date must be the same as or later than the start date, and overlapping absences are rejected unless the provider allows them.\r\n \r\n The user must own the absence, be an admin, or have `user-planning-data:write` permission.", "operationId": "PostAbsence", "requestBody": { "description": "The model to create the absence.", @@ -753,8 +753,8 @@ "tags": [ "Absences" ], - "summary": "Deletes the absence with the specified id.", - "description": "User planning data permissions are required if the calling user is not the owner of the absence or admin.", + "summary": "Deletes the specified absence.", + "description": "Deletes the specified absence unless it is managed by an external provider. Web and mobile requests cannot delete externally managed absences.\r\n The user must own the absence, be an admin, or have `user-planning-data:delete` permission.", "operationId": "DeleteAbsenceById", "parameters": [ { @@ -801,8 +801,8 @@ "tags": [ "Absences" ], - "summary": "Returns the absence with the specified id.", - "description": "User planning data permissions are required if the calling user\r\n is not the owner of the absence or admin.", + "summary": "Returns the specified absence.", + "description": "Returns the specified absence when it is visible to the current user.\r\n The user must own the absence, be an admin, or have `user-planning-data:read` permission.", "operationId": "GetAbsenceById", "parameters": [ { @@ -856,8 +856,8 @@ "tags": [ "Absences" ], - "summary": "Updates the absence with the specified id.", - "description": "The startOn and endOn get rounded to 00:00:00, 12:00:00, or 23:59:59 in UTC.\r\n These values can be used to set a half-day (pre or post mid-day) absence, or absences that start or end at mid-day.\r\n The end date needs to be the same or after the start date.\r\n \r\n User planning data permissions are required if the calling user is not the owner of the absence or admin.", + "summary": "Updates the specified absence.", + "description": "Updates the specified absence with dates rounded to 00:00:00, 12:00:00, or 23:59:59 UTC to support full-day and half-day periods. The end date must be the same as or later than the start date, and overlapping absences are rejected unless the provider allows them.\r\n \r\n Web and mobile requests cannot update absences managed by an external provider.\r\n The user must own the absence, be an admin, or have `user-planning-data:write` permission.", "operationId": "PutAbsenceById", "parameters": [ { @@ -1099,35 +1099,49 @@ "tags": [ "Accounts" ], - "summary": "Updates the account with the specified id.", - "description": "Updates the account with the specified id.\nDoes not update the external account of the user.\nUse the 'accounts/connectToSocialAccount' or 'accounts/disconnectToSocialAccount' endpoints instead.\nIf the email of the account is changed, the email will not be changed immediately but a verification email will be sent to the new email address.\nThe email will only be changed after the user has verified the new email address.\r\n\r\nAny authenticated user.", - "operationId": "PutAccount", + "summary": "Updates the account profile and starts email verification when required.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PutAccountsByAccountId", "parameters": [ { "name": "accountId", "in": "path", - "description": "The id of the account.", + "description": "The accountId value.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "skipEmailVerification", + "in": "query", + "description": "The skipEmailVerification value.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "sendAdminInitiatedVerificationEmail", + "in": "query", + "description": "The sendAdminInitiatedVerificationEmail value.", + "schema": { + "type": "boolean", + "default": false + } } ], "requestBody": { - "description": "The model to update the account.", + "description": "The model value.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AccountForm" } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/AccountForm" - } } - } + }, + "required": true }, "responses": { "200": { @@ -1139,41 +1153,33 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/agents": { - "get": { - "tags": [ - "Custom Agents" - ], - "summary": "Returns all custom agents.", - "description": "Only agents visible to the requesting user are returned.\r\n\r\nAny authenticated user.", - "operationId": "GetAgents", - "responses": { - "200": { - "description": "OK", + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AgentSummaryResponseModel" - } + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -1192,20 +1198,43 @@ "x-access": { "any": "true" } - }, + } + }, + "/accounts/{email}/ispasswordvalid": { "post": { "tags": [ - "Custom Agents" + "Accounts" + ], + "summary": "Checks a password or passwordless token for the requested account.", + "description": "\r\n\r\nThe user must be an admin.", + "operationId": "PostAccountsIsPasswordValidByEmail", + "parameters": [ + { + "name": "email", + "in": "path", + "description": "The email value.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "aw-internal-request", + "in": "header", + "description": "Marks this request as an internal request. Only allowed by the awork app or internally.", + "required": true, + "schema": { + "type": "string", + "default": "true" + } + } ], - "summary": "Creates a new custom agent.", - "description": "Set to copy an existing agent. Otherwise, specify either a preset or a model provider and model name.\r\n\r\nAny authenticated user.", - "operationId": "PostAgents", "requestBody": { - "description": "The configuration for the new agent.", + "description": "The password value.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateAgentRequestModel" + "$ref": "#/components/schemas/PasswordForm" } } }, @@ -1217,11 +1246,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentSummaryResponseModel" + "type": "boolean" } } } }, + "204": { + "description": "No Content" + }, "400": { "description": "Bad Request", "content": { @@ -1231,6 +1263,16 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -1244,18 +1286,19 @@ "v1" ], "x-access": { - "any": "true" - } + "admin": "true" + }, + "x-internal": true } }, - "/agents/connectors": { + "/agents": { "get": { "tags": [ - "AgentRuntime" + "Custom Agents" ], - "summary": "Lists the connectors visible to the requesting user in the current workspace.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetConnectors", + "summary": "Returns all custom agents.", + "description": "Lists custom agents visible to the requesting user in the current workspace, including visible global agents.\r\n Results are ordered by name and include the user's access level for each agent.\r\n Use an agent id from this response to retrieve or update its configuration.\r\n\r\nAny authenticated user.", + "operationId": "GetAgents", "responses": { "200": { "description": "OK", @@ -1264,21 +1307,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ConnectorResponseModel" + "$ref": "#/components/schemas/AgentSummaryResponseModel" } } } } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -1297,17 +1330,17 @@ }, "post": { "tags": [ - "AgentRuntime" + "Custom Agents" ], - "summary": "Creates a new connector in the current workspace.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostConnectors", + "summary": "Creates a new custom agent.", + "description": "Creates a custom agent in the current workspace and returns its configuration and id.\r\n Provide a name and either PresetKey or both ModelProvider and ModelName. Do not combine these model selection options.\r\n\r\nAny authenticated user.", + "operationId": "PostAgents", "requestBody": { - "description": "The connector to create.", + "description": "The configuration for the new agent.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateConnectorRequestModel" + "$ref": "#/components/schemas/CreateAgentRequestModel" } } }, @@ -1319,7 +1352,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ConnectorResponseModel" + "$ref": "#/components/schemas/AgentSummaryResponseModel" } } } @@ -1333,6 +1366,44 @@ } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/connectors": { + "get": { + "tags": [ + "AgentRuntime" + ], + "summary": "Lists the connectors visible to the requesting user in the current workspace.", + "description": "Lists connectors visible to the requesting user in the current workspace.\r\n Use the returned connector ids to link existing connectors to custom agents.\r\n The user must have access to the custom-agent feature.\r\n\r\nAny authenticated user.", + "operationId": "GetConnectors", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ConnectorResponseModel" + } + } + } + } }, "401": { "description": "Unauthorized", @@ -1366,8 +1437,19 @@ "AgentRuntime" ], "summary": "Lists the predefined connector presets available to the workspace.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Lists predefined connector presets and the OAuth callback URI used for connector setup.\r\n Create connectors in the awork app.\r\n The response describes setup options; it does not create a connector.\r\n\r\nAny authenticated user.", "operationId": "GetConnectorsPresets", + "parameters": [ + { + "name": "includeAdded", + "in": "query", + "description": "Whether to include providers already added to the workspace for metadata lookup.", + "schema": { + "type": "boolean", + "default": false + } + } + ], "responses": { "200": { "description": "OK", @@ -1411,7 +1493,7 @@ "AgentRuntime" ], "summary": "Makes a custom connector workspace-visible or private.", - "description": "The user must own the connector or be a workspace administrator.", + "description": "Updates whether a custom connector is visible to the workspace or private and returns its sharing configuration.\r\n Set IsSharedWithWorkspace to the desired visibility. Making a connector private fails while connections remain shared or another user has a connection or agent using it.\r\n The user must own the connector or be a workspace administrator, and must have permission to contribute to the agent library.", "operationId": "PutConnectorsSharingByConnectorId", "parameters": [ { @@ -1499,7 +1581,7 @@ "AgentRuntime" ], "summary": "Gets the default agent options for a personal or custom agent.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Returns default model, tool access, connector, and skill options for a personal-agent or custom-agent conversation.\r\n Set type to 'personal-agent' for the requesting user's defaults, or 'custom-agent' and provide agentId for a custom agent.\r\n The response also includes the effective model catalog for the workspace.\r\n The user must have read access to the selected custom agent.", "operationId": "GetAgentDefaults", "parameters": [ { @@ -1578,13 +1660,51 @@ } } }, + "/agents/management/threads": { + "get": { + "tags": [ + "AgentThreads" + ], + "summary": "Returns thread metadata for usage analytics.", + "description": "Returns thread metadata for usage analytics, including the thread Id, name, credits, and creation timestamp.\r\n\r\nThe user must be an admin.", + "operationId": "GetAgentsManagementThreads", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AiThreadAdminMetadataResponseModel" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true" + } + } + }, "/agents/models": { "get": { "tags": [ "AgentRuntime" ], - "summary": "Returns the AI models available to the agent runtime.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns the AI models available to agents.", + "description": "Returns the agent model catalog with effective availability for the current workspace.\r\n The response includes model providers, model details, defaults, and available image capabilities.\r\n Use these values when selecting a model for an agent or conversation.\r\n\r\nAny authenticated user.", "operationId": "GetModels", "responses": { "200": { @@ -1623,20 +1743,20 @@ } } }, - "/agents/models/settings/automaticenablement": { - "put": { + "/agents/models/settings/disable": { + "post": { "tags": [ "AgentRuntime" ], - "summary": "Updates automatic enablement for future workspace model catalog entries.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PutAgentsModelsSettingsAutomaticEnablement", + "summary": "Disables a model, vendor, or region and updates settings that use it.", + "description": "Disables a model, vendor, or region for the workspace and updates settings that use it.\r\n Use the model settings in the awork app to review affected configurations and eligible replacements before disabling.\r\n Specify the required replacement models in the request. Returns no content when the changes are saved.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostAgentsModelsSettingsDisable", "requestBody": { - "description": "The automatic-enablement request.", + "description": "The disable and migration command.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SetModelAutoEnableRequestModel" + "$ref": "#/components/schemas/DisableModelsRequestModel" } } }, @@ -1683,158 +1803,31 @@ } } }, - "/agents/models/settings/disable": { - "post": { + "/agents/models/settings/presets/{presetKey}": { + "put": { "tags": [ "AgentRuntime" ], - "summary": "Atomically disables a model, vendor, or region and migrates dependent configurations.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostAgentsModelsSettingsDisable", + "summary": "Sets a workspace preset to Auto or a selected active text model.", + "description": "Updates a workspace model preset to use central Auto selection or an explicit active text model.\r\n Identify the preset by its catalog key and provide the assignment in the request body.\r\n Returns no content when the assignment is saved, or a validation error if the selection is invalid.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PutAgentsModelsSettingsPresetsByPresetKey", + "parameters": [ + { + "name": "presetKey", + "in": "path", + "description": "The preset key.", + "required": true, + "schema": { + "type": "string" + } + } + ], "requestBody": { - "description": "The disable and migration command.", + "description": "The preset assignment.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DisableModelsRequestModel" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "workspace-manage-config": "write" - } - } - }, - "/agents/models/settings/disable/preflight": { - "post": { - "tags": [ - "AgentRuntime" - ], - "summary": "Computes affected presets, source models, replacements, and blocked reasons.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostAgentsModelsSettingsDisablePreflight", - "requestBody": { - "description": "The disable target.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DisableModelsRequestModel" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ModelDisablePreflightResponseModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "workspace-manage-config": "write" - } - } - }, - "/agents/models/settings/presets/{presetKey}": { - "put": { - "tags": [ - "AgentRuntime" - ], - "summary": "Assigns central Auto or an explicit active text model to a workspace preset.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PutAgentsModelsSettingsPresetsByPresetKey", - "parameters": [ - { - "name": "presetKey", - "in": "path", - "description": "The preset key.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "description": "The preset assignment.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SetModelPresetRequestModel" + "$ref": "#/components/schemas/SetModelPresetRequestModel" } } }, @@ -1886,8 +1879,8 @@ "tags": [ "AgentRuntime" ], - "summary": "Enables one AI model serving region for the workspace.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "summary": "Enables an AI model region for the workspace.", + "description": "Enables an AI model serving region in the workspace's model policy.\r\n Use the stable region key from the model catalog. Returns no content when the policy is saved.\r\n Read [GET /agents/models](#/AgentRuntime/GetModels) to inspect the resulting model availability.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", "operationId": "PostAgentsModelsSettingsRegionsEnableByRegionKey", "parameters": [ { @@ -1947,7 +1940,7 @@ "AgentRuntime" ], "summary": "Enables one AI model vendor for the workspace.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "description": "Enables an AI model vendor in the workspace's model policy.\r\n Use the stable vendor key from the model catalog. Returns no content when the policy is saved.\r\n Read [GET /agents/models](#/AgentRuntime/GetModels) to inspect the resulting model availability.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", "operationId": "PostAgentsModelsSettingsVendorsEnableByVendorKey", "parameters": [ { @@ -2007,7 +2000,7 @@ "AgentRuntime" ], "summary": "Enables one AI model for the workspace.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "description": "Enables one catalog model for the workspace and returns no content when the policy is saved.\r\n Use the stable model key from [GET /agents/models](#/AgentRuntime/GetModels). The model's vendor and serving region must be enabled first.\r\n Removed models and models that cannot be changed in the current rollout state return a validation error.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", "operationId": "PostAgentsModelsEnableByModelKey", "parameters": [ { @@ -2067,7 +2060,7 @@ "AgentThreads" ], "summary": "Creates a conversation with the awork Agent or a custom agent.", - "description": "Supply content or attachments to submit the first message and start processing.\r\n Personal-agent threads can be created without a message; custom-agent threads require text or an attachment.\r\n The response contains the thread and accepted first-message identifiers, not the agent's reply.\r\n Read GET /agents/threads/{threadId}/messages to retrieve replies.\r\n Each request creates a new thread. Retrying after a lost response can create another thread.\r\n\r\nAny authenticated user.", + "description": "Creates a conversation with the awork Agent or a custom agent and optionally submits the first message.\r\n Supply content or attachments to submit the first message and start processing.\r\n awork Agent threads can be created without a message. Custom Agent threads require text or an attachment.\r\n The response contains the thread and accepted first-message identifiers, not the agent's reply.\r\n See [GET /agents/threads/{threadId}/messages](api:GET/agents/threads/{threadId}/messages) to retrieve replies.\r\n Each request creates a new thread. Retrying after a lost response can create another thread.\r\n\r\nAny authenticated user.", "operationId": "PostAgentsThreads", "requestBody": { "description": "The thread creation payload.", @@ -2153,7 +2146,7 @@ "AgentThreads" ], "summary": "Gets an agent thread.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Returns details of the specified agent conversation.\r\n Use the thread id returned when creating a conversation. Retrieve its messages separately with [GET /agents/threads/{threadId}/messages](api:GET/agents/threads/{threadId}/messages).\r\n Returns not found if the thread is missing or is not visible to the user.\r\n\r\nAny authenticated user.", "operationId": "GetAgentsThreadsByThreadId", "parameters": [ { @@ -2210,7 +2203,7 @@ "AgentThreads" ], "summary": "Cancels the active run for the specified agent thread.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Cancels the active run in the specified personal-agent or custom-agent conversation and returns the thread.\r\n A successful cancellation also pauses dispatch of the next queued message.\r\n The user must have permission to contribute to the thread.", "operationId": "PostAgentsThreadsCancelByThreadId", "parameters": [ { @@ -2267,7 +2260,7 @@ "Agent Thread Files" ], "summary": "Returns a file of the specified agent thread.", - "description": "The user must have `read` access to the agent thread.", + "description": "Returns file metadata for a file attached to the specified agent thread.\r\n Both the thread id and file id must match the attachment. Returns not found if the file is not attached to that thread.\r\n The user must have `read` access to the agent thread.", "operationId": "GetAgentsThreadsFilesByThreadIdAndFileId", "parameters": [ { @@ -2343,9 +2336,9 @@ "tags": [ "Agent Thread Files" ], - "summary": "Returns the content of a file from the specified agent thread.", - "description": "The user must have read access to the agent thread.", - "operationId": "GetAgentThreadFileContent", + "summary": "Returns content from a file attached to the specified agent thread.", + "description": "Returns the binary content of a file attached to the specified agent thread.\r\n Use the thread id and file id from the attachment metadata. For images, width, height, and crop control resizing.\r\n The user must have read access to the agent thread.", + "operationId": "GetAgentsThreadsFilesDownloadByThreadIdAndFileId", "parameters": [ { "name": "threadId", @@ -2405,122 +2398,6 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/agents/threads/{threadId}/messages": { - "get": { - "tags": [ - "AgentThreads" - ], - "summary": "Lists agent thread messages.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetAgentsThreadsMessagesByThreadId", - "parameters": [ - { - "name": "threadId", - "in": "path", - "description": "The thread id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AgentThreadMessageResponseModel" - } - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "AgentThreads" - ], - "summary": "Submits a message to an agent conversation.", - "description": "Provide text, attachments, or both. The message starts processing or enters the thread's queue.\r\n The response confirms acceptance; it does not contain the agent's reply.\r\n Read GET /agents/threads/{threadId}/messages to retrieve replies.\r\n Each request submits a new message. Retrying after a lost response can submit the message again.\r\n Processing is subject to the workspace's AI availability and usage limits.\r\n The user must have permission to contribute to the thread.", - "operationId": "PostAgentsThreadsMessagesByThreadId", - "parameters": [ - { - "name": "threadId", - "in": "path", - "description": "The id of the thread to send the message in.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model with the content to send to the agent thread.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AgentThreadMessageRequestModel" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AiThreadMessageAcceptedResponseModel" - } - } - } }, "400": { "description": "Bad Request", @@ -2532,8 +2409,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -2542,8 +2419,8 @@ } } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -2568,29 +2445,19 @@ } } }, - "/agents/threads/{threadId}/messages/{messageId}/status": { + "/agents/threads/{threadId}/messages": { "get": { "tags": [ "AgentThreads" ], - "summary": "Gets agent thread message status.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetAgentsThreadsMessagesStatusByThreadIdAndMessageId", + "summary": "Lists agent thread messages.", + "description": "Lists messages from the specified personal-agent or custom-agent conversation.\r\n Use this endpoint to retrieve replies after creating a thread or submitting a message.\r\n Returns not found if the thread is missing or the user cannot read it.\r\n\r\nAny authenticated user.", + "operationId": "GetAgentsThreadsMessagesByThreadId", "parameters": [ { "name": "threadId", "in": "path", - "description": "The id of the thread that contains the message.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "messageId", - "in": "path", - "description": "The accepted message id returned by the server.", + "description": "The thread id.", "required": true, "schema": { "type": "string", @@ -2604,7 +2471,163 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AiThreadMessageProcessingStatusResponseModel" + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentThreadMessageResponseModel" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "AgentThreads" + ], + "summary": "Submits a message to an agent conversation.", + "description": "Submits a new message to an existing agent conversation for processing.\r\n Provide text, attachments, or both. The message starts processing or enters the thread's queue.\r\n The response confirms acceptance; it does not contain the agent's reply.\r\n Read [GET /agents/threads/{threadId}/messages](api:GET/agents/threads/{threadId}/messages) to retrieve replies.\r\n Each request submits a new message. Retrying after a lost response can submit the message again.\r\n Processing is subject to the workspace's AI availability and usage limits.\r\n The user must have permission to contribute to the thread.", + "operationId": "PostAgentsThreadsMessagesByThreadId", + "parameters": [ + { + "name": "threadId", + "in": "path", + "description": "The id of the thread to send the message in.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model with the content to send to the agent thread.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentThreadMessageRequestModel" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AiThreadMessageAcceptedResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "Service Unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/threads/{threadId}/messages/{messageId}/status": { + "get": { + "tags": [ + "AgentThreads" + ], + "summary": "Gets agent thread message status.", + "description": "Returns the processing status of a submitted agent thread message, including messages still in the queue.\r\n Use the accepted message id returned by the server when creating a thread or submitting a message.\r\n The response indicates whether an agent response exists and includes its id and error details when available.\r\n Retrieve reply content with [GET /agents/threads/{threadId}/messages](api:GET/agents/threads/{threadId}/messages).\r\n\r\nAny authenticated user.", + "operationId": "GetAgentsThreadsMessagesStatusByThreadIdAndMessageId", + "parameters": [ + { + "name": "threadId", + "in": "path", + "description": "The id of the thread that contains the message.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "messageId", + "in": "path", + "description": "The accepted message id returned by the server.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AiThreadMessageProcessingStatusResponseModel" } } } @@ -2641,7 +2664,7 @@ "Custom Agents" ], "summary": "Returns the custom agent's configuration.", - "description": "The requesting user must have read access to the agent. The response includes their access level.\r\n\r\nAny authenticated user.", + "description": "Returns the specified custom agent's configuration, including the requesting user's access level.\r\n Use this response to inspect the agent's model, prompt, and linked capabilities before working with it.\r\n The user must have read access to the agent.", "operationId": "GetAgentsByAgentId", "parameters": [ { @@ -2705,8 +2728,8 @@ "tags": [ "Custom Agents" ], - "summary": "Replaces the custom agent's editable configuration.", - "description": "Saves a new system prompt version if the prompt changes.\r\n\r\nAny authenticated user.", + "summary": "Updates the custom agent's configuration.", + "description": "Updates the custom agent's configuration and returns the saved agent.\r\n Saves a new system prompt version if the prompt changes.\r\n The user must have manage access to the agent. Changing workspace sharing also requires permission to contribute to the agent library.", "operationId": "PutAgentsByAgentId", "parameters": [ { @@ -2794,7 +2817,7 @@ "Custom Agents" ], "summary": "Unlinks a connector from an agent.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Removes the connector link from the specified agent.\r\n Returns no content when the link is removed or is already absent.\r\n The user must have manage access to the agent.", "operationId": "DeleteConnectorsByConnectorIdAndAgentId", "parameters": [ { @@ -2862,7 +2885,7 @@ "Custom Agents" ], "summary": "Links a connector to an agent.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Links an existing connector to the specified agent and returns the linked connector.\r\n Use [GET /agents/connectors](#/AgentRuntime/GetConnectors) to find a connector id.\r\n The user must have manage access to the agent.", "operationId": "PostConnectorsByConnectorIdAndAgentId", "parameters": [ { @@ -2933,48 +2956,54 @@ } } }, - "/agents/{agentId}/files": { - "get": { + "/agents/{agentId}/copy": { + "post": { "tags": [ - "AgentFiles" + "Custom Agents" ], - "summary": "Returns all files of the agent with the specified id.", - "description": "Returns all file metadata of the agent with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetAgentFiles", + "summary": "Copies an existing custom agent.", + "description": "Creates a copy of an existing custom agent in the current workspace.\r\n Provide the new name and optional description in the request body. The source agent supplies the initial configuration and system prompt.\r\n Returns the new agent with its own id.\r\n The user must have read access to the source agent.", + "operationId": "PostAgentsCopyByAgentId", "parameters": [ { "name": "agentId", "in": "path", - "description": "The id of the agent.", + "description": "The source agent id.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], + "requestBody": { + "description": "The name and description for the copy.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CopyAgentRequestModel" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileInfo" - } + "$ref": "#/components/schemas/AgentSummaryResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -3063,63 +3092,13 @@ } } }, - "/agents/{agentId}/files/{fileId}": { - "delete": { - "tags": [ - "AgentFiles" - ], - "summary": "Deletes the agent file with the specified id.", - "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", - "operationId": "DeleteAgentFile", - "parameters": [ - { - "name": "agentId", - "in": "path", - "description": "The id of the agent.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, "/agents/{agentId}/setarchived": { "post": { "tags": [ "Custom Agents" ], "summary": "Archives or unarchives an agent.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Archives or unarchives the specified custom agent and returns its updated configuration.\r\n Set IsArchived to true to archive the agent, or false to unarchive it.\r\n The user must have manage access to the agent.", "operationId": "PostAgentsSetArchivedByAgentId", "parameters": [ { @@ -3201,75 +3180,222 @@ } } }, - "/apiusers": { + "/agents/{agentId}/systempromptversions": { "get": { "tags": [ - "ApiUsers" + "Custom Agents" ], - "summary": "Returns all API users.", - "description": "Returns all API users.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetApiUsers", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ApiUser" - } - } - } - } - } - }, - "security": [ + "summary": "Lists the agent's saved system prompt versions.", + "description": "Lists the saved system prompt versions for the specified custom agent.\r\n Use a returned version id with the system prompt restore endpoint to restore an earlier prompt.\r\n The user must have read access to the agent.", + "operationId": "GetAgentsSystemPromptVersionsByAgentId", + "parameters": [ { - "oauth2": [ - "full_access" - ] + "name": "agentId", + "in": "path", + "description": "The agent id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "workspace-manage-config": "read" - } - }, - "post": { - "tags": [ - "ApiUsers" - ], - "summary": "Creates an API user.", - "description": "Beware: API users will also be returned in the /users response when including\r\n archived users.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostApiUser", - "requestBody": { - "description": "The model to create the API user.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiUserPostForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ApiUser" + "type": "array", + "items": { + "$ref": "#/components/schemas/SystemPromptVersionResponseModel" + } } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/{agentId}/systempromptversions/{systemPromptVersionId}/restore": { + "post": { + "tags": [ + "Custom Agents" + ], + "summary": "Restores a previous system prompt version.", + "description": "Restores a saved system prompt version as the agent's current prompt.\r\n The restore records a new history version and returns that version. Use the system prompt versions endpoint to find a version id.\r\n The user must have manage access to the agent.", + "operationId": "PostAgentsSystemPromptVersionRestore", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "The agent id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "systemPromptVersionId", + "in": "path", + "description": "The prompt version id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemPromptVersionResponseModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/apiusers": { + "get": { + "tags": [ + "ApiUsers" + ], + "summary": "Returns all API users.", + "description": "Returns API users configured in the workspace.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "operationId": "GetApiUsers", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiUser" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "workspace-manage-config": "read" + } + }, + "post": { + "tags": [ + "ApiUsers" + ], + "summary": "Creates an API user.", + "description": "Creates an archived API user for the specified client application. The client application must exist, the name must be unique, and the selected role must be active and non-guest. If no role is supplied, the active admin role is used.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostApiUser", + "requestBody": { + "description": "The model to create the API user.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiUserPostForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiUser" + } + } + } + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -3310,8 +3436,8 @@ "tags": [ "ApiUsers" ], - "summary": "Deletes the API user with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "summary": "Deletes the specified API user.", + "description": "Deletes the specified API user and revokes its access.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", "operationId": "DeleteApiUserById", "parameters": [ { @@ -3359,8 +3485,8 @@ "tags": [ "ApiUsers" ], - "summary": "Returns the API user with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "summary": "Returns the specified API user.", + "description": "Returns the specified API user and its configured role.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", "operationId": "GetApiUserById", "parameters": [ { @@ -3415,8 +3541,8 @@ "tags": [ "ApiUsers" ], - "summary": "Updates the API user with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "summary": "Updates the specified API user.", + "description": "Updates the specified API user's name or role. Names must remain unique, and the target role must be active and non-guest.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", "operationId": "PutApiUserById", "parameters": [ { @@ -4105,7 +4231,7 @@ "Companies" ], "summary": "Returns all companies.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", + "description": "Returns all companies in the workspace.\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", "operationId": "GetCompanies", "parameters": [ { @@ -4155,8 +4281,8 @@ "tags": [ "Companies" ], - "summary": "Creates a new company.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", + "summary": "Creates a company.", + "description": "Creates a company and returns the created company.\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", "operationId": "PostCompany", "requestBody": { "description": "The company to create.", @@ -4213,7 +4339,7 @@ "CompanyTags" ], "summary": "Removes a tag from all companies.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", + "description": "Removes the specified tag from every company in the workspace.\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", "operationId": "PostCompaniesDeleteTags", "requestBody": { "description": "The model with the tag to be removed.", @@ -4272,8 +4398,8 @@ "tags": [ "Companies" ], - "summary": "Returns all company industries that are currently in use.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", + "summary": "Returns all company industries in use.", + "description": "Returns the distinct company industries currently used in the workspace.\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", "operationId": "GetCompaniesIndustries", "responses": { "200": { @@ -4311,8 +4437,8 @@ "tags": [ "CompanyTags" ], - "summary": "Returns all tags that are currently in use by companies.", - "description": "Returns all tags that are currently in use by companies ordered by count.\r\n\r\nAny authenticated user.", + "summary": "Returns company tags in use.", + "description": "Returns all tags currently used by companies.\r\n\r\nAny authenticated user.", "operationId": "GetCompanyTags", "responses": { "200": { @@ -4349,8 +4475,8 @@ "tags": [ "CompanyTags" ], - "summary": "Updates a tag globally for all companies.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", + "summary": "Updates a tag for all companies.", + "description": "Updates a tag across all companies. The tag can be renamed or merged with an existing tag according to the submitted options.\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", "operationId": "PostCompaniesUpdateTags", "requestBody": { "description": "The model containing the tag updates.", @@ -4399,8 +4525,8 @@ "tags": [ "Companies" ], - "summary": "Returns the company with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", + "summary": "Returns the specified company.", + "description": "Returns the specified company. External companies omit contact information, tags, project counts, descriptions, and industries.\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", "operationId": "GetCompanyById", "parameters": [ { @@ -4455,8 +4581,8 @@ "tags": [ "Companies" ], - "summary": "Updates the company with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", + "summary": "Updates the specified company.", + "description": "Updates the specified company's name, description, and industry.\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", "operationId": "PutCompanyById", "parameters": [ { @@ -4524,8 +4650,8 @@ "tags": [ "CompanyTags" ], - "summary": "Adds a batch of new tags to the company with the specified id.", - "description": "The request fails if one of the tags is invalid (e.g. empty or duplicate).\r\n To add tags to a company the user must have `company-master-data:write` permissions on the specified company.", + "summary": "Adds tags to the specified company.", + "description": "Adds the submitted tags and returns the tags assigned to the specified company.\r\n The user must have `company-master-data:write` permission for the specified company.", "operationId": "PostCompanyAddTagsByCompanyId", "parameters": [ { @@ -4608,8 +4734,8 @@ "tags": [ "Companies" ], - "summary": "Returns the contact infos of the company with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", + "summary": "Returns the company's contact information.", + "description": "Returns all contact information stored for the specified company.\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", "operationId": "GetCompanyContactInfoByCompanyId", "parameters": [ { @@ -4669,8 +4795,8 @@ "tags": [ "Companies" ], - "summary": "Creates a new contact info for the company with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", + "summary": "Creates company contact information.", + "description": "Creates contact information for the specified company and refreshes its address data when needed.\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", "operationId": "PostCompanyContactInfoByCompanyId", "parameters": [ { @@ -4738,8 +4864,8 @@ "tags": [ "Companies" ], - "summary": "Deletes the contact info of the company with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", + "summary": "Deletes company contact information.", + "description": "Deletes the specified contact information from the company and refreshes its address data when needed. The contact information must belong to the specified company.\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", "operationId": "DeleteCompanyContactInfoByCompanyIdAndContactInfoId", "parameters": [ { @@ -4807,8 +4933,8 @@ "tags": [ "Companies" ], - "summary": "Returns the specified contact info of the company with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", + "summary": "Returns specified company contact information.", + "description": "Returns the specified company contact information. The contact information must belong to the specified company.\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", "operationId": "GetCompanyContactInfoByCompanyIdAndContactInfoId", "parameters": [ { @@ -4895,8 +5021,8 @@ "tags": [ "Companies" ], - "summary": "Updates the contact info for the company with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", + "summary": "Updates company contact information.", + "description": "Updates the specified company contact information and refreshes the company's address data when needed. The contact information must belong to the specified company.\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", "operationId": "PutCompanyContactInfoByCompanyIdAndContactInfoId", "parameters": [ { @@ -4984,8 +5110,8 @@ "tags": [ "Companies" ], - "summary": "Deletes the company with the specified id.", - "description": "There are several ways to delete a company.\r\n Look into the property description of the post model to get detailed information.\r\n
If the post is executed without a model, the default process 'delete-only-company' will be executed.\r\n
For the operation 'delete-all-without-timeentries' project-master-data write permissions are required on all projects of the company.\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", + "summary": "Deletes the specified company.", + "description": "Deletes the specified company using the selected delete operation. Linked projects can be detached, moved to another company, or deleted with related work.\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", "operationId": "PostCompanyDeleteByCompanyId", "parameters": [ { @@ -5066,8 +5192,8 @@ "tags": [ "CompanyTags" ], - "summary": "Removes tags from the company with the specified id.", - "description": "Removes tags from the company with the specified id.\r\n \r\n Returns 204 NoContent if all tags have been removed successfully.\r\n Returns 207 MultiStatus if at least one tag could not be removed, including the reasons.\r\n \r\n To remove tags from a company the user must have `company-master-data:write` permissions on the specified company.", + "summary": "Removes tags from the specified company.", + "description": "Removes the submitted tags from the specified company. A partial failure returns a multi-status response with the reason for each tag that could not be removed.\r\n The user must have `company-master-data:write` permission for the specified company.", "operationId": "PostCompanyDeleteTagsByCompanyId", "parameters": [ { @@ -5138,255 +5264,14 @@ } } }, - "/companies/{companyId}/externalfiles": { - "post": { - "tags": [ - "CompanyFiles" - ], - "summary": "Endpoint to batch create external files without uploading.", - "description": "Endpoint to create file infos with batch operation.\nCreated file infos don't have a version.\r\n\r\nAny authenticated user.", - "operationId": "CreateExternalFiles", - "parameters": [ - { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "List of file forms.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - }, - "application/*+json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/companies/{companyId}/files": { - "delete": { - "tags": [ - "CompanyFiles" - ], - "summary": "Deletes the files of the specified company.", - "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCompanyFiles", - "parameters": [ - { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "CompanyFiles" - ], - "summary": "Creates a new company file for the company with the specified id..", - "description": "Uploads a new company file for the company with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateCompanyFile", - "parameters": [ - { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - }, - "400": { - "description": "Bad Request" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/companies/{companyId}/files/byurl": { - "post": { - "tags": [ - "CompanyFiles" - ], - "summary": "Uploads a new file by providing an url.", - "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", - "operationId": "CreateCompanyFileByUrl", - "parameters": [ - { - "name": "companyId", - "in": "path", - "description": "The id of the company the file is linked to.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The url, name and description of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, "/companies/{companyId}/files/{fileId}": { - "delete": { + "get": { "tags": [ - "CompanyFiles" + "Company Files" ], - "summary": "Deletes the company file with the specified id.", - "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCompanyFile", + "summary": "Returns the file with the specified id of the company with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByCompanyNameAndCompanyIdAndFileId", "parameters": [ { "name": "companyId", @@ -5410,8 +5295,35 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -5427,14 +5339,16 @@ "x-access": { "any": "true" } - }, + } + }, + "/companies/{companyId}/files/{fileId}/versions/{versionId}": { "get": { "tags": [ "Company Files" ], - "summary": "Returns the file with the specified id of the company with the specified id.", + "summary": "Returns the company file version with the specified id.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByCompanyNameAndCompanyIdAndFileId", + "operationId": "GetFilesVersionsByCompanyNameAndCompanyIdAndFileIdAndVersionId", "parameters": [ { "name": "companyId", @@ -5455,6 +5369,16 @@ "type": "string", "format": "uuid" } + }, + { + "name": "versionId", + "in": "path", + "description": "The id of the file version.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -5463,7 +5387,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/FileVersion" } } } @@ -5502,14 +5426,16 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/companies/{companyId}/tags": { + "get": { "tags": [ - "CompanyFiles" + "CompanyTags" ], - "summary": "Updates the metadata of the company file with the specified id.", - "description": "Updates the metadata of the company file with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "UpdateCompanyFile", + "summary": "Returns tags for the specified company.", + "description": "Returns the tags assigned to the specified company.\r\n The user must have `company-master-data:read` permission for the specified company.", + "operationId": "GetCompanyTagsByCompanyId", "parameters": [ { "name": "companyId", @@ -5520,40 +5446,28 @@ "type": "string", "format": "uuid" } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], - "requestBody": { - "description": "The model to update the file with the specified id.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - } - } - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -5574,50 +5488,71 @@ } } }, - "/companies/{companyId}/files/{fileId}/changeentity": { - "post": { + "/customfielddefinitions": { + "get": { "tags": [ - "CompanyFiles" + "CustomFields" ], - "summary": "Changes the company this file belongs to.", - "description": "Changes the company this file belongs to.\nSwitch to the specified company or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", - "operationId": "ChangeCompany", + "summary": "Returns all custom field definitions.", + "description": "Returns all custom field definitions in the workspace. Set `includeLinkedProjectIds` to include the projects linked to each definition.\r\n\r\nAny authenticated user.", + "operationId": "GetCustomFieldDefinitions", "parameters": [ { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, + "name": "includeLinkedProjectIds", + "in": "query", + "description": "Whether to include linked project Ids in the response.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptionsAndLinkedProjectIds" + } + } + } } } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "CustomFields" + ], + "summary": "Creates a custom field definition.", + "description": "Creates a custom field definition that can be linked to project templates, projects, or tasks according to its entity type.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostCustomFieldDefinition", "requestBody": { - "description": "The model to change the entity information of the file.", + "description": "The model containing the details for creating a new custom field definition.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" + "$ref": "#/components/schemas/CustomFieldDefinitionPostForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -5625,7 +5560,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -5642,33 +5587,73 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/companies/{companyId}/files/{fileId}/copy": { - "post": { + "/customfielddefinitions/{customFieldDefinitionId}": { + "delete": { "tags": [ - "CompanyFiles" + "CustomFields" ], - "summary": "Copies the file to a new company.", - "description": "Copies the file to a new company (meta and content).\r\n\r\nAny authenticated user.", - "operationId": "CopyToCompany", + "summary": "Deletes the specified custom field definition.", + "description": "Deletes the specified custom field definition, its selection options, its links, and all dependent task and task-template values.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "DeleteCustomFieldDefinitionById", "parameters": [ { - "name": "companyId", + "name": "customFieldDefinitionId", "in": "path", - "description": "The id of the company.", + "description": "The id of the custom field definition to delete.", "required": true, "schema": { "type": "string", "format": "uuid" } + } + ], + "responses": { + "204": { + "description": "No Content" }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ { - "name": "fileId", + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + }, + "put": { + "tags": [ + "CustomFields" + ], + "summary": "Updates the specified custom field definition.", + "description": "Updates the definition's name, type, or order. Type changes are limited to compatible date and date-time types or select and colored-select types.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutCustomFieldDefinitionById", + "parameters": [ + { + "name": "customFieldDefinitionId", "in": "path", - "description": "The id of the file.", + "description": "The id of the custom field definition to update.", "required": true, "schema": { "type": "string", @@ -5677,19 +5662,15 @@ } ], "requestBody": { - "description": "The model to change the entity information of the file.", + "description": "The model to change the custom field definition.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" + "$ref": "#/components/schemas/CustomFieldDefinitionPutForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -5697,7 +5678,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/CustomFieldDefinition" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -5714,74 +5715,59 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/companies/{companyId}/files/{fileId}/download": { - "get": { + "/customfielddefinitions/{customFieldDefinitionId}/selectionoptions": { + "post": { "tags": [ - "CompanyFiles" + "CustomFields" ], - "summary": "Returns the content of the company file with the specified id.", - "description": "Returns the content of the company file. Uses the latest file version.\nIf the company file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", - "operationId": "GetCompanyFileContent", + "summary": "Creates an option for a custom field.", + "description": "Creates a selection option for the specified custom field definition and places it at the requested order.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostCustomFieldDefinitionSelectionOptionsByCustomFieldDefinitionId", "parameters": [ { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "customFieldDefinitionId", "in": "path", - "description": "The id of the file.", + "description": "The id of the custom field definition to add a selection option to.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "name": "width", - "in": "query", - "description": "Set width to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "height", - "in": "query", - "description": "Set height to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "crop", - "in": "query", - "description": "Whether to crop the image when resizing it.", - "schema": { - "type": "boolean" - } } ], + "requestBody": { + "description": "The model describing the selection option to create.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFieldSelectionOptionsForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/CustomFieldSelectionOption" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -5798,23 +5784,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/companies/{companyId}/files/{fileId}/pdf": { - "get": { + "/customfielddefinitions/{customFieldDefinitionId}/selectionoptions/{selectionOptionId}": { + "delete": { "tags": [ - "CompanyFiles" + "CustomFields" ], - "summary": "Returns the content of the file with the specified id as pdf.\ntype or conversion not possible.", - "description": "Returns the content of the company file. Uses the latest file version.\r\n\r\nAny authenticated user.", - "operationId": "GetCompanyFileContent", + "summary": "Deletes a custom field selection option.", + "description": "Deletes the specified selection option from the custom field definition and clears references to that option from existing custom field values.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "DeleteCustomFieldDefinitionSelectionOptionByCustomFieldDefinitionIdAndSelectionOptionId", "parameters": [ { - "name": "companyId", + "name": "customFieldDefinitionId", "in": "path", - "description": "The id of the company.", + "description": "The id of the custom field definition containing the selection option.", "required": true, "schema": { "type": "string", @@ -5822,33 +5809,26 @@ } }, { - "name": "fileId", + "name": "selectionOptionId", "in": "path", - "description": "The id of the file.", + "description": "The id of the selection option to delete.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "name": "inline", - "in": "query", - "description": "If inline is false, content-disposition header is attachment.", - "schema": { - "type": "boolean", - "default": false - } } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -5865,23 +5845,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } - } - }, - "/companies/{companyId}/files/{fileId}/shareurl": { - "get": { + }, + "put": { "tags": [ - "CompanyFiles" + "CustomFields" ], - "summary": "Returns an url to share the file.", - "description": "Returns a url to share the file.\r\n\r\nAny authenticated user.", - "operationId": "GetPublicToken", + "summary": "Updates a custom field selection option.", + "description": "Updates the specified selection option's value, color, and order within its custom field definition.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutCustomFieldDefinitionSelectionOptionByCustomFieldDefinitionIdAndSelectionOptionId", "parameters": [ { - "name": "companyId", + "name": "customFieldDefinitionId", "in": "path", - "description": "The id of the company.", + "description": "The id of the custom field definition containing the selection option.", "required": true, "schema": { "type": "string", @@ -5889,9 +5868,9 @@ } }, { - "name": "fileId", + "name": "selectionOptionId", "in": "path", - "description": "The id of the file.", + "description": "The id of the selection option to update.", "required": true, "schema": { "type": "string", @@ -5899,13 +5878,34 @@ } } ], + "requestBody": { + "description": "The model describing the updated selection option.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFieldSelectionOptionsForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/CustomFieldSelectionOption" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -5922,37 +5922,27 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/companies/{companyId}/files/{fileId}/versions": { + "/documents": { "get": { "tags": [ - "CompanyFiles" + "Documents" ], - "summary": "Returns all file versions of the specified company file.", - "description": "Returns all file versions of the specified company file.\r\n\r\nAny authenticated user.", - "operationId": "GetCompanyFileVersions", + "summary": "Returns all documents.", + "description": "Returns documents visible to the current user. Set `includeTrashedDocuments` to include documents in the trash.\r\n The user must have at least `read` permission for each returned document.", + "operationId": "GetDocuments", "parameters": [ { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, + "name": "includeTrashedDocuments", + "in": "query", + "description": "Whether to include trashed documents in the result.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } }, { @@ -5976,7 +5966,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/DocumentModel" } } } @@ -5999,52 +5989,16 @@ }, "post": { "tags": [ - "CompanyFiles" - ], - "summary": "Uploads a new version of the company file with the specified id.", - "description": "Uploads a new version of an company file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateCompanyFileVersion", - "parameters": [ - { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Documents" ], + "summary": "Creates a document.", + "description": "Creates a document with optional HTML or Markdown content. Set `contentFormat` to `html` or `markdown`; HTML is the default. Canonical awork Markdown preserves safe editor structures during re-import.\r\n\r\nAny authenticated user.", + "operationId": "PostDocument", "requestBody": { "content": { "multipart/form-data": { "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } + "$ref": "#/components/schemas/DocumentPostForm" } } } @@ -6055,13 +6009,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/DocumentModel" } } } - }, - "400": { - "description": "Bad Request" } }, "security": [ @@ -6079,29 +6030,19 @@ } } }, - "/companies/{companyId}/files/{fileId}/versions/{versionId}": { - "get": { + "/documents/trash/{documentId}/restore": { + "post": { "tags": [ - "Company Files" + "Documents" ], - "summary": "Returns the company file version with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByCompanyNameAndCompanyIdAndFileIdAndVersionId", + "summary": "Restores the specified document.", + "description": "Restores the specified document from the trash. Related versions, content, and child documents are restored asynchronously. Restoring an already active document has no effect.\r\n The user must have at least `write` permission for the specified document.", + "operationId": "PostDocumentsTrashRestoreByDocumentId", "parameters": [ { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "documentId", "in": "path", - "description": "The id of the file.", + "description": "The id of the document to restore.", "required": true, "schema": { "type": "string", @@ -6109,26 +6050,18 @@ } }, { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, + "name": "alsoRestoreChildren", + "in": "query", + "description": "Whether to also restore children documents.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": true } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileVersion" - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", @@ -6139,16 +6072,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -6166,29 +6089,19 @@ } } }, - "/companies/{companyId}/files/{fileId}/versions/{versionId}/download": { - "get": { + "/documents/{documentId}": { + "delete": { "tags": [ - "CompanyFiles" + "Documents" ], - "summary": "Returns the content of the company file version with the specified id.", - "description": "Returns the content of the company file version with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetCompanyFileVersionContent", + "summary": "Deletes the specified document.", + "description": "Moves the specified document to the trash. The document is moved synchronously; child documents and related entities are moved asynchronously. Set `alsoDeleteChildren` to control whether child documents are included.\r\n The user must have at least `manage` permission for the specified document.", + "operationId": "DeleteDocumentById", "parameters": [ { - "name": "companyId", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "documentId", "in": "path", - "description": "The id of the file.", + "description": "The id of the document to delete.", "required": true, "schema": { "type": "string", @@ -6196,24 +6109,35 @@ } }, { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, + "name": "alsoDeleteChildren", + "in": "query", + "description": "Whether to also delete children documents. If false, the children's parent references are updated to point to the deleted document's parent.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": true } } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -6232,21 +6156,19 @@ "x-access": { "any": "true" } - } - }, - "/companies/{companyId}/tags": { + }, "get": { "tags": [ - "CompanyTags" + "Documents" ], - "summary": "Returns the tags of the company with the specified id.", - "description": "Returns the tags of the company with the specified id ordered by name.\r\n To read tags of a company the user must have `company-master-data:read` permissions on the specified company.", - "operationId": "GetCompanyTagsByCompanyId", + "summary": "Returns the specified document.", + "description": "Returns the specified document when it is visible to the current user.\r\n The user must have at least `read` permission for the specified document.", + "operationId": "GetDocumentById", "parameters": [ { - "name": "companyId", + "name": "documentId", "in": "path", - "description": "The id of the company.", + "description": "The id of the document to retrieve.", "required": true, "schema": { "type": "string", @@ -6260,10 +6182,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "$ref": "#/components/schemas/DocumentModel" } } } @@ -6277,52 +6196,13 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/customfielddefinitions": { - "get": { - "tags": [ - "CustomFields" - ], - "summary": "Returns all custom field definitions.", - "description": "The 'linkedProjectIds' are the project Ids that are linked to the custom field definition.\r\n The 'linkedProjectIds' property will only be included when the 'includeLinkedProjectIds' parameter is set to 'true'.\r\n\r\nAny authenticated user.", - "operationId": "GetCustomFieldDefinitions", - "parameters": [ - { - "name": "includeLinkedProjectIds", - "in": "query", - "description": "Whether to include linked project Ids in the response.", - "schema": { - "type": "boolean", - "default": false - } - } - ], - "responses": { - "200": { - "description": "OK", + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptionsAndLinkedProjectIds" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -6342,19 +6222,31 @@ "any": "true" } }, - "post": { + "put": { "tags": [ - "CustomFields" + "Documents" + ], + "summary": "Updates the specified document.", + "description": "Updates the specified document's content, location, sharing, or display properties. Moving a document can change its access rules and may be restricted by the workspace plan.\r\n The user must have at least `write` permission for the specified document.", + "operationId": "PutDocumentById", + "parameters": [ + { + "name": "documentId", + "in": "path", + "description": "The id of the document to update.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Creates a new custom field definition.", - "description": "Creates a new custom field definition. This custom field definition can then be linked to project templates and to tasks.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostCustomFieldDefinition", "requestBody": { - "description": "The model containing the details for creating a new custom field definition.", + "description": "The document form data with the updated information.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldDefinitionPostForm" + "$ref": "#/components/schemas/DocumentForm" } } }, @@ -6366,7 +6258,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" + "$ref": "#/components/schemas/DocumentModel" } } } @@ -6380,6 +6272,26 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -6393,24 +6305,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/customfielddefinitions/{customFieldDefinitionId}": { + "/documents/{documentId}/comments": { "delete": { "tags": [ - "CustomFields" + "DocumentComments" ], - "summary": "Deletes the custom field definition with the specified Id.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "DeleteCustomFieldDefinitionById", + "summary": "Deletes all comments of the specified document.", + "description": "Deletes all comments of the specified document.\r\n\r\nAny authenticated user.", + "operationId": "DeleteCommentsByDocumentNameAndDocumentId", "parameters": [ { - "name": "customFieldDefinitionId", + "name": "documentId", "in": "path", - "description": "The id of the custom field definition to delete.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -6422,8 +6333,8 @@ "204": { "description": "No Content" }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -6444,47 +6355,50 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } }, - "put": { + "get": { "tags": [ - "CustomFields" + "DocumentComments" ], - "summary": "Updates the custom field definition with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutCustomFieldDefinitionById", + "summary": "Returns all comments of the document with the specified id.", + "description": "Returns all comments of the document with the specified id. The user needs read permissions on the document.\r\n\r\nAny authenticated user.", + "operationId": "GetCommentsByDocumentNameAndDocumentId", "parameters": [ { - "name": "customFieldDefinitionId", + "name": "documentId", "in": "path", - "description": "The id of the custom field definition to update.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The model to change the custom field definition.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomFieldDefinitionPutForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldDefinition" + "type": "array", + "items": { + "$ref": "#/components/schemas/Comment" + } } } } @@ -6499,8 +6413,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -6521,24 +6435,21 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } - } - }, - "/customfielddefinitions/{customFieldDefinitionId}/selectionoptions": { + }, "post": { "tags": [ - "CustomFields" + "DocumentComments" ], - "summary": "Creates a custom field selection option for an existing custom field definition.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostCustomFieldDefinitionSelectionOptionsByCustomFieldDefinitionId", + "summary": "Creates a new comment on the document with the specified id.", + "description": "Creates a new comment on the document with the specified id.\r\n A user can only create a comment for him/herself, except for admins and api users.\r\n \r\n To create a comment the user must have at least `read` permissions on the specified document.", + "operationId": "PostCommentsByDocumentNameAndDocumentId", "parameters": [ { - "name": "customFieldDefinitionId", + "name": "documentId", "in": "path", - "description": "The id of the custom field definition to add a selection option to.", + "description": "The id of the document to create the comment for.", "required": true, "schema": { "type": "string", @@ -6547,11 +6458,11 @@ } ], "requestBody": { - "description": "The model describing the selection option to create.", + "description": "The model to create the comment.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldSelectionOptionsForm" + "$ref": "#/components/schemas/CommentForm" } } }, @@ -6563,7 +6474,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldSelectionOption" + "$ref": "#/components/schemas/Comment" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -6590,24 +6521,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/customfielddefinitions/{customFieldDefinitionId}/selectionoptions/{selectionOptionId}": { + "/documents/{documentId}/comments/{commentId}": { "delete": { "tags": [ - "CustomFields" + "DocumentComments" ], - "summary": "Deletes a custom field selection option for an existing custom field definition.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "DeleteCustomFieldDefinitionSelectionOptionByCustomFieldDefinitionIdAndSelectionOptionId", + "summary": "Deletes the comment with the specified id on the document with the specified id.", + "description": "Deletes the comment with the specified id on the document with the specified id.\r\n The delete includes the reactions of the comment.\r\n If there are any replies to the comment, they will be deleted as well.\r\n\r\nAny authenticated user.", + "operationId": "DeleteCommentByDocumentNameAndDocumentIdAndCommentId", "parameters": [ { - "name": "customFieldDefinitionId", + "name": "documentId", "in": "path", - "description": "The id of the custom field definition containing the selection option.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -6615,9 +6545,9 @@ } }, { - "name": "selectionOptionId", + "name": "commentId", "in": "path", - "description": "The id of the selection option to delete.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -6629,6 +6559,16 @@ "204": { "description": "No Content" }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -6651,22 +6591,21 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } }, - "put": { + "get": { "tags": [ - "CustomFields" + "DocumentComments" ], - "summary": "Updates a custom field selection option for an existing custom field definition.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutCustomFieldDefinitionSelectionOptionByCustomFieldDefinitionIdAndSelectionOptionId", + "summary": "Returns the comment with the specified id of the document with the specified id.", + "description": "Returns the comment with the specified id of the document with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetCommentByDocumentNameAndDocumentIdAndCommentId", "parameters": [ { - "name": "customFieldDefinitionId", + "name": "documentId", "in": "path", - "description": "The id of the custom field definition containing the selection option.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -6674,9 +6613,9 @@ } }, { - "name": "selectionOptionId", + "name": "commentId", "in": "path", - "description": "The id of the selection option to update.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -6684,30 +6623,19 @@ } } ], - "requestBody": { - "description": "The model describing the updated selection option.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomFieldSelectionOptionsForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldSelectionOption" + "$ref": "#/components/schemas/Comment" } } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -6728,94 +6656,76 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } - } - }, - "/documents": { - "get": { + }, + "put": { "tags": [ - "Documents" + "DocumentComments" ], - "summary": "Returns all documents.", - "description": "The user must have at least `read` permissions to see a document.", - "operationId": "GetDocuments", + "summary": "Updates the comment with the specified id on the document with the specified id.", + "description": "To update a comment the user must either have at least `read` permissions on the specified document, be the creator of the comment or be admin.", + "operationId": "PutCommentByDocumentNameAndDocumentIdAndCommentId", "parameters": [ { - "name": "includeTrashedDocuments", - "in": "query", - "description": "Whether to include trashed documents in the result.", + "name": "documentId", + "in": "path", + "description": "The id of the document.", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "commentId", + "in": "path", + "description": "The id of the comment.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], + "requestBody": { + "description": "The model with the updated comment information.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentPutForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "$ref": "#/components/schemas/Comment" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "Documents" - ], - "summary": "Creates a new document with optional HTML or Markdown content.", - "description": "When content is provided, set `contentFormat` to `html` or `markdown`. HTML is the default. Canonical awork Markdown preserves safe editor structures during re-import.\r\n\r\nAny authenticated user.", - "operationId": "PostDocument", - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/DocumentPostForm" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } - } - }, - "responses": { - "200": { - "description": "OK", + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentModel" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -6836,19 +6746,19 @@ } } }, - "/documents/trash/{documentId}/restore": { + "/documents/{documentId}/comments/{commentId}/react": { "post": { "tags": [ - "Documents" + "DocumentComments" ], - "summary": "Restores the document with the specified id from the trash.", - "description": "Please note that restoring a document using this method will asynchronously and eventually update or recreate the document and the related entities such as document versions or its content.\r\n This operation is idempotent, if applied to an already restored document, it will return a NoContent result.\r\n \r\n The user must have at least `write` permissions for the specified document.", - "operationId": "PostDocumentsTrashRestoreByDocumentId", + "summary": "Updates the reactions of the comment with the specified id on the document with the specified id.", + "description": "To update a reaction of a comment the user must have at least `read` permissions on the specified document.", + "operationId": "PostCommentReactByDocumentNameAndDocumentIdAndCommentId", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document to restore.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -6856,15 +6766,27 @@ } }, { - "name": "alsoRestoreChildren", - "in": "query", - "description": "Whether to also restore children documents.", + "name": "commentId", + "in": "path", + "description": "The id of the comment.", + "required": true, "schema": { - "type": "boolean", - "default": true + "type": "string", + "format": "uuid" } } ], + "requestBody": { + "description": "The model used to update the reactions of the comment with the specified id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReactionForm" + } + } + }, + "required": true + }, "responses": { "204": { "description": "No Content" @@ -6878,6 +6800,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -6895,19 +6827,19 @@ } } }, - "/documents/{documentId}": { - "delete": { + "/documents/{documentId}/comments/{commentId}/setresolved": { + "post": { "tags": [ - "Documents" + "DocumentComments" ], - "summary": "Deletes the document with the specified id.", - "description": "This operation moves the document to the trash.\r\n The document itself is moved to the trash synchronously, while its children and related entities will be moved to the trash asynchronously.\r\n \r\n The user must have at least `manage` permissions for the specified document.", - "operationId": "DeleteDocumentById", + "summary": "Sets the resolved status of a comment.", + "description": "Sets the resolved status of a comment. Users need write permissions on the document to resolve/unresolve comments.\r\n Currently, the IsResolved property is only available for document comments.\r\n\r\nAny authenticated user.", + "operationId": "PostCommentSetResolvedByDocumentNameAndDocumentIdAndCommentId", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document to delete.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -6915,18 +6847,37 @@ } }, { - "name": "alsoDeleteChildren", - "in": "query", - "description": "Whether to also delete children documents. If false, the children's parent references are updated to point to the deleted document's parent.", + "name": "commentId", + "in": "path", + "description": "The id of the comment.", + "required": true, "schema": { - "type": "boolean", - "default": true + "type": "string", + "format": "uuid" } } ], + "requestBody": { + "description": "The resolved status.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetResolvedForm" + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Comment" + } + } + } }, "401": { "description": "Unauthorized", @@ -6962,24 +6913,44 @@ "x-access": { "any": "true" } - }, + } + }, + "/documents/{documentId}/content": { "get": { "tags": [ "Documents" ], - "summary": "Returns the document with the specified id.", - "description": "The user must have at least `read` permissions for the specified document.", - "operationId": "GetDocumentById", + "summary": "Returns the current document content.", + "description": "Returns the current version as HTML by default. Use `format=markdown` for canonical Markdown, or `streamAsFile` to receive file content.\r\n The user must have at least `read` permission for the specified document.", + "operationId": "GetDocumentContentByDocumentId", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document to retrieve.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "streamAsFile", + "in": "query", + "description": "Whether to stream the content as a file. By default, the document's content is returned in a model containing a property `Content` holding the content as a string.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "format", + "in": "query", + "description": "The response format. Supported values are `html` and `markdown`.", + "schema": { + "type": "string", + "default": "html" + } } ], "responses": { @@ -6988,7 +6959,20 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentModel" + "type": "string" + } + } + } + }, + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -7032,9 +7016,9 @@ "tags": [ "Documents" ], - "summary": "Updates the document with the specified id.", - "description": "The user must have at least `write` permissions for the specified document.", - "operationId": "PutDocumentById", + "summary": "Updates the specified document content.", + "description": "Updates document content using UTF-8 HTML or Markdown. Set `contentFormat` to `html` or `markdown`; HTML is the default. Canonical awork Markdown preserves safe editor structures during re-import.\r\n The user must have at least `write` permission for the specified document.", + "operationId": "PutDocumentContentByDocumentId", "parameters": [ { "name": "documentId", @@ -7048,15 +7032,13 @@ } ], "requestBody": { - "description": "The document form data with the updated information.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/DocumentForm" + "$ref": "#/components/schemas/DocumentContentForm" } } - }, - "required": true + } }, "responses": { "200": { @@ -7078,26 +7060,6 @@ } } } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -7115,19 +7077,19 @@ } } }, - "/documents/{documentId}/comments": { - "delete": { + "/documents/{documentId}/contributors": { + "post": { "tags": [ - "DocumentComments" + "Documents" ], - "summary": "Deletes all comments of the specified document.", - "description": "Deletes all comments of the specified document.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCommentsByDocumentNameAndDocumentId", + "summary": "Adds contributors to the specified document.", + "description": "Adds contributors and grants them access to the document. Access for related entities is recalculated asynchronously.\r\n The user must have at least `write` permission for the specified document.", + "operationId": "PostDocumentContributorsByDocumentId", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document.", + "description": "The id of the document to add contributors to.", "required": true, "schema": { "type": "string", @@ -7135,9 +7097,43 @@ } } ], + "requestBody": { + "description": "The model used to add the document contributors.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContributorPostForm" + } + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MinimalContributorModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, "401": { "description": "Unauthorized", @@ -7148,6 +7144,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -7163,19 +7169,21 @@ "x-access": { "any": "true" } - }, - "get": { + } + }, + "/documents/{documentId}/contributors/{documentContributorId}": { + "delete": { "tags": [ - "DocumentComments" + "Documents" ], - "summary": "Returns all comments of the document with the specified id.", - "description": "Returns all comments of the document with the specified id. The user needs read permissions on the document.\r\n\r\nAny authenticated user.", - "operationId": "GetCommentsByDocumentNameAndDocumentId", + "summary": "Deletes a contributor from the specified document.", + "description": "Deletes only explicit contributors; inherited contributors cannot be removed. Access for related entities is recalculated asynchronously.\r\n The user must have at least `write` permission for the specified document.", + "operationId": "DeleteDocumentContributorByDocumentIdAndDocumentContributorId", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document.", + "description": "The id of the document to delete the contributor from.", "required": true, "schema": { "type": "string", @@ -7183,34 +7191,32 @@ } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "documentContributorId", + "in": "path", + "description": "The id of the document contributor to delete.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Comment" - } + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -7219,8 +7225,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -7244,18 +7250,28 @@ "any": "true" } }, - "post": { + "put": { "tags": [ - "DocumentComments" + "Documents" ], - "summary": "Creates a new comment on the document with the specified id.", - "description": "Creates a new comment on the document with the specified id.\r\n A user can only create a comment for him/herself, except for admins and api users.\r\n \r\n To create a comment the user must have at least `read` permissions on the specified document.", - "operationId": "PostCommentsByDocumentNameAndDocumentId", + "summary": "Updates a document contributor's access.", + "description": "Updates the specified contributor's access to the document. Access for related entities is recalculated asynchronously.\r\n The user must have at least `write` permission for the specified document.", + "operationId": "PutDocumentContributorByDocumentIdAndDocumentContributorId", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document to create the comment for.", + "description": "The id of the document to update.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "documentContributorId", + "in": "path", + "description": "The id of the document contributor to update.", "required": true, "schema": { "type": "string", @@ -7264,11 +7280,11 @@ } ], "requestBody": { - "description": "The model to create the comment.", + "description": "The model used to update the document contributor's access.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CommentForm" + "$ref": "#/components/schemas/ContributorForm" } } }, @@ -7280,7 +7296,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/MinimalContributorModel" } } } @@ -7331,29 +7347,19 @@ } } }, - "/documents/{documentId}/comments/{commentId}": { - "delete": { + "/documents/{documentId}/duplicate": { + "post": { "tags": [ - "DocumentComments" + "Documents" ], - "summary": "Deletes the comment with the specified id on the document with the specified id.", - "description": "Deletes the comment with the specified id on the document with the specified id.\r\n The delete includes the reactions of the comment.\r\n If there are any replies to the comment, they will be deleted as well.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCommentByDocumentNameAndDocumentIdAndCommentId", + "summary": "Duplicates the specified document.", + "description": "Duplicates the document's content, permissions, and child documents. Child duplication may complete asynchronously.\r\n The user must have at least `read` permission for the specified document.", + "operationId": "PostDocumentDuplicateByDocumentId", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "commentId", - "in": "path", - "description": "The id of the comment.", + "description": "The id of the document to duplicate.", "required": true, "schema": { "type": "string", @@ -7362,8 +7368,25 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, "401": { "description": "Unauthorized", @@ -7399,29 +7422,21 @@ "x-access": { "any": "true" } - }, - "get": { + } + }, + "/documents/{documentId}/files/byuploadid": { + "post": { "tags": [ - "DocumentComments" + "FileUpload" ], - "summary": "Returns the comment with the specified id of the document with the specified id.", - "description": "Returns the comment with the specified id of the document with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetCommentByDocumentNameAndDocumentIdAndCommentId", + "summary": "Creates a file from an upload id.", + "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file document from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostUploadByUploadId", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "commentId", - "in": "path", - "description": "The id of the comment.", + "description": "The id of the document to attach the file to.", "required": true, "schema": { "type": "string", @@ -7429,19 +7444,30 @@ } } ], + "requestBody": { + "description": "The model describing the uploaded file metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadByUploadIdForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/FileInfo" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -7464,14 +7490,16 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/documents/{documentId}/files/{fileId}": { + "get": { "tags": [ - "DocumentComments" + "Document Files" ], - "summary": "Updates the comment with the specified id on the document with the specified id.", - "description": "To update a comment the user must either have at least `read` permissions on the specified document, be the creator of the comment or be admin.", - "operationId": "PutCommentByDocumentNameAndDocumentIdAndCommentId", + "summary": "Returns the file with the specified id of the document with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByDocumentNameAndDocumentIdAndFileId", "parameters": [ { "name": "documentId", @@ -7484,9 +7512,9 @@ } }, { - "name": "commentId", + "name": "fileId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -7494,24 +7522,13 @@ } } ], - "requestBody": { - "description": "The model with the updated comment information.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CommentPutForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/FileInfo" } } } @@ -7552,14 +7569,14 @@ } } }, - "/documents/{documentId}/comments/{commentId}/react": { - "post": { + "/documents/{documentId}/files/{fileId}/versions/{versionId}": { + "get": { "tags": [ - "DocumentComments" + "Document Files" ], - "summary": "Updates the reactions of the comment with the specified id on the document with the specified id.", - "description": "To update a reaction of a comment the user must have at least `read` permissions on the specified document.", - "operationId": "PostCommentReactByDocumentNameAndDocumentIdAndCommentId", + "summary": "Returns the document file version with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByDocumentNameAndDocumentIdAndFileIdAndVersionId", "parameters": [ { "name": "documentId", @@ -7572,9 +7589,19 @@ } }, { - "name": "commentId", + "name": "fileId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "versionId", + "in": "path", + "description": "The id of the file version.", "required": true, "schema": { "type": "string", @@ -7582,21 +7609,17 @@ } } ], - "requestBody": { - "description": "The model used to update the reactions of the comment with the specified id.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ReactionForm" + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileVersion" + } } } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, "401": { "description": "Unauthorized", "content": { @@ -7633,14 +7656,14 @@ } } }, - "/documents/{documentId}/comments/{commentId}/setresolved": { + "/documents/{documentId}/teams": { "post": { "tags": [ - "DocumentComments" + "Documents" ], - "summary": "Sets the resolved status of a comment.", - "description": "Sets the resolved status of a comment. Users need write permissions on the document to resolve/unresolve comments.\r\n Currently, the IsResolved property is only available for document comments.\r\n\r\nAny authenticated user.", - "operationId": "PostCommentSetResolvedByDocumentNameAndDocumentIdAndCommentId", + "summary": "Adds teams to the specified document.", + "description": "Adds teams and changes their access to the document. Access for related entities is recalculated asynchronously.\r\n The user must have at least `write` permission for the specified document.", + "operationId": "PostDocumentTeamsByDocumentId", "parameters": [ { "name": "documentId", @@ -7651,24 +7674,17 @@ "type": "string", "format": "uuid" } - }, - { - "name": "commentId", - "in": "path", - "description": "The id of the comment.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "requestBody": { - "description": "The resolved status.", + "description": "The model used to add document teams to the document.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SetResolvedForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityToTeamPostForm" + } } } }, @@ -7680,7 +7696,20 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "type": "array", + "items": { + "$ref": "#/components/schemas/MinimalEntityToTeamModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -7721,19 +7750,19 @@ } } }, - "/documents/{documentId}/content": { - "get": { + "/documents/{documentId}/teams/{documentToTeamId}": { + "delete": { "tags": [ "Documents" ], - "summary": "Returns the content of the current version of the document with the specified id.", - "description": "The user must have at least `read` permissions for the specified document.", - "operationId": "GetDocumentContentByDocumentId", + "summary": "Deletes a team from the specified document.", + "description": "Deletes only explicit document teams; inherited teams cannot be removed. Access for related entities is recalculated asynchronously.\r\n The user must have at least `write` permission for the specified document.", + "operationId": "DeleteDocumentTeamByDocumentIdAndDocumentToTeamId", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document.", + "description": "The id of the document to delete the team from.", "required": true, "schema": { "type": "string", @@ -7741,35 +7770,17 @@ } }, { - "name": "streamAsFile", - "in": "query", - "description": "Whether to stream the content as a file. By default, the document's content is returned in a model containing a property `Content` holding the content as a string.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "format", - "in": "query", - "description": "The response format. Supported values are `html` and `markdown`.", + "name": "documentToTeamId", + "in": "path", + "description": "The id of the document to team connection.", + "required": true, "schema": { "type": "string", - "default": "html" + "format": "uuid" } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, "204": { "description": "No Content" }, @@ -7822,14 +7833,24 @@ "tags": [ "Documents" ], - "summary": "Updates document content using UTF-8 HTML or Markdown.", - "description": "Set `contentFormat` to `html` or `markdown`. HTML is the default. Canonical awork Markdown preserves safe editor structures during re-import.\r\n \r\n The user must have at least `write` permissions for the specified document.", - "operationId": "PutDocumentContentByDocumentId", + "summary": "Updates a document team's access.", + "description": "Updates the specified team's access to the document. Access for related entities is recalculated asynchronously.\r\n The user must have at least `write` permission for the specified document.", + "operationId": "PutDocumentTeamByDocumentIdAndDocumentToTeamId", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document to update.", + "description": "The id of the document.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "documentToTeamId", + "in": "path", + "description": "The id of the document to team connection to update.", "required": true, "schema": { "type": "string", @@ -7838,13 +7859,15 @@ } ], "requestBody": { + "description": "The model used to update document teams of a document.", "content": { - "multipart/form-data": { + "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentContentForm" + "$ref": "#/components/schemas/EntityToTeamForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -7852,7 +7875,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentModel" + "$ref": "#/components/schemas/MinimalEntityToTeamModel" } } } @@ -7866,15 +7889,35 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], "x-api-versions": [ "v1" ], @@ -7883,35 +7926,70 @@ } } }, - "/documents/{documentId}/contributors": { - "post": { + "/documentspaces": { + "get": { "tags": [ - "Documents" + "DocumentSpaces" ], - "summary": "Adds a list of document contributors to the document with the specified id.", - "description": "Adding document contributors will grant them access to the document.\r\n There will be a recalculation of permissions for related entities considering the updated document contributor.\r\n \r\n The user must have at least `write` permissions for this document.", - "operationId": "PostDocumentContributorsByDocumentId", + "summary": "Returns all document spaces.", + "description": "Returns document spaces visible to the current user.\r\n The user must have at least `read` permission for each returned document space.", + "operationId": "GetDocumentSpaces", "parameters": [ { - "name": "documentId", - "in": "path", - "description": "The id of the document to add contributors to.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentSpaceModel" + } + } + } } } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "DocumentSpaces" ], + "summary": "Creates a document space.", + "description": "Creates a document space and assigns the requested workspace access level. The space is inserted into the workspace order.\r\n\r\nThe user must be an admin.", + "operationId": "PostDocumentSpace", "requestBody": { - "description": "The model used to add the document contributors.", + "description": "The model used to create the document space.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ContributorPostForm" - } + "$ref": "#/components/schemas/DocumentSpaceForm" } } }, @@ -7923,10 +8001,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MinimalContributorModel" - } + "$ref": "#/components/schemas/DocumentSpaceModel" } } } @@ -7950,16 +8025,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -7973,33 +8038,81 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/documents/{documentId}/contributors/{documentContributorId}": { + "/documentspaces/{documentSpaceId}": { "delete": { "tags": [ - "Documents" + "DocumentSpaces" ], - "summary": "Deletes the document contributor with the specified id from a document.", - "description": "This operation cannot be performed on inherited document contributors, only explicit ones.\r\n There will be recalculation of permissions for related entities considering the deleted document contributor.\r\n \r\n The user must have at least `write` permissions for the specified document.", - "operationId": "DeleteDocumentContributorByDocumentIdAndDocumentContributorId", + "summary": "Deletes the specified document space.", + "description": "Deletes the specified document space. Documents in the space and related entities, such as comments, are permanently deleted asynchronously.\r\n\r\nThe user must be an admin.", + "operationId": "DeleteDocumentSpaceById", "parameters": [ { - "name": "documentId", + "name": "documentSpaceId", "in": "path", - "description": "The id of the document to delete the contributor from.", + "description": "The id of the document space to delete.", "required": true, "schema": { "type": "string", "format": "uuid" } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ { - "name": "documentContributorId", + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true" + } + }, + "get": { + "tags": [ + "DocumentSpaces" + ], + "summary": "Returns the specified document space.", + "description": "Returns the specified document space when it is visible to the current user.\r\n The user must have at least `read` permission for the specified document space.", + "operationId": "GetDocumentSpaceById", + "parameters": [ + { + "name": "documentSpaceId", "in": "path", - "description": "The id of the document contributor to delete.", + "description": "The id of the document space to retrieve.", "required": true, "schema": { "type": "string", @@ -8008,15 +8121,12 @@ } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/DocumentModel" } } } @@ -8058,26 +8168,16 @@ }, "put": { "tags": [ - "Documents" + "DocumentSpaces" ], - "summary": "Updates the access of a document contributor with the specified id to a document.", - "description": "Updating a document contributor will affect their access to the document.\r\n There will be a recalculation of permissions for related entities considering the updated document contributor.\r\n \r\n The user must have at least `write` permissions for the specified document.", - "operationId": "PutDocumentContributorByDocumentIdAndDocumentContributorId", + "summary": "Updates the specified document space.", + "description": "Updates the space name, icon, color, order, or workspace access level and reapplies its position in the workspace order.\r\n\r\nThe user must be an admin.", + "operationId": "PutDocumentSpaceById", "parameters": [ { - "name": "documentId", - "in": "path", - "description": "The id of the document to update.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "documentContributorId", + "name": "documentSpaceId", "in": "path", - "description": "The id of the document contributor to update.", + "description": "The id of the document space.", "required": true, "schema": { "type": "string", @@ -8086,11 +8186,11 @@ } ], "requestBody": { - "description": "The model used to update the document contributor's access.", + "description": "The model used to update the document space.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContributorForm" + "$ref": "#/components/schemas/DocumentSpaceForm" } } }, @@ -8102,17 +8202,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalContributorModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/DocumentSpaceModel" } } } @@ -8149,23 +8239,23 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/documents/{documentId}/duplicate": { + "/documentspaces/{documentSpaceId}/contributors": { "post": { "tags": [ - "Documents" + "DocumentSpaces" ], - "summary": "Duplicates the document with the specified id.", - "description": "Duplicates the document content, permissions and children documents.\r\n \r\n The user has at least `read` permissions for the specified document.", - "operationId": "PostDocumentDuplicateByDocumentId", + "summary": "Adds contributors to the specified document space.", + "description": "Adds contributors and changes their access to the document space and its documents.\r\n\r\nThe user must be an admin.", + "operationId": "PostDocumentSpaceContributorsByDocumentSpaceId", "parameters": [ { - "name": "documentId", + "name": "documentSpaceId", "in": "path", - "description": "The id of the document to duplicate.", + "description": "The id of the document space.", "required": true, "schema": { "type": "string", @@ -8173,13 +8263,27 @@ } } ], + "requestBody": { + "description": "The model with the list of contributors to add.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContributorPostForm" + } + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentModel" + "$ref": "#/components/schemas/MinimalContributorModel" } } } @@ -8226,23 +8330,33 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/documents/{documentId}/externalfiles": { - "post": { + "/documentspaces/{documentSpaceId}/contributors/{documentSpaceContributorId}": { + "delete": { "tags": [ - "DocumentFiles" + "DocumentSpaces" ], - "summary": "Endpoint to batch create external files without uploading.", - "description": "Endpoint to create file infos with batch operation.\nCreated file infos don't have a version.\r\n\r\nAny authenticated user.", - "operationId": "CreateExternalFiles", + "summary": "Deletes a document space contributor.", + "description": "Deletes the specified contributor and removes their access to the document space and its documents.\r\n\r\nThe user must be an admin.", + "operationId": "DeleteDocumentSpaceContributorByDocumentSpaceIdAndDocumentSpaceContributorId", "parameters": [ { - "name": "documentId", + "name": "documentSpaceId", "in": "path", - "description": "The id of the document.", + "description": "The id of the document space.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "documentSpaceContributorId", + "in": "path", + "description": "The id of the document space contributor to delete.", "required": true, "schema": { "type": "string", @@ -8250,34 +8364,36 @@ } } ], - "requestBody": { - "description": "List of file forms.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } - }, - "application/*+json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } - } - }, - "responses": { - "200": { - "description": "OK", + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -8294,23 +8410,31 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } - } - }, - "/documents/{documentId}/files": { - "delete": { + }, + "put": { "tags": [ - "DocumentFiles" + "DocumentSpaces" ], - "summary": "Deletes the files of the specified document.", - "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", - "operationId": "DeleteDocumentFiles", + "summary": "Updates a document space contributor's access.", + "description": "Updates the specified contributor's access to the document space and its documents.\r\n\r\nThe user must be an admin.", + "operationId": "PutDocumentSpaceContributorByDocumentSpaceIdAndDocumentSpaceContributorId", "parameters": [ { - "name": "documentId", + "name": "documentSpaceId", "in": "path", - "description": "The id of the document.", + "description": "The id of the document space.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "documentSpaceContributorId", + "in": "path", + "description": "The id of the document space contributor.", "required": true, "schema": { "type": "string", @@ -8318,9 +8442,57 @@ } } ], + "requestBody": { + "description": "The model with the updated contributor data.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContributorForm" + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MinimalContributorModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -8334,21 +8506,23 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } - }, + } + }, + "/documentspaces/{documentSpaceId}/documents": { "get": { "tags": [ - "DocumentFiles" + "Documents" ], - "summary": "Returns all files of the document with the specified id.", - "description": "Returns all file metadata of the document with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetDocumentFiles", + "summary": "Returns documents in the specified document space.", + "description": "Returns non-trashed documents visible in the specified document space.\r\n The user must have at least `read` permission for the specified document space.", + "operationId": "GetDocumentSpaceDocumentsByDocumentSpaceId", "parameters": [ { - "name": "documentId", + "name": "documentSpaceId", "in": "path", - "description": "The id of the document.", + "description": "The id of the document space to retrieve documents from.", "required": true, "schema": { "type": "string", @@ -8376,7 +8550,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/DocumentModel" } } } @@ -8396,62 +8570,53 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/documentspaces/{documentSpaceId}/documents/trash": { + "get": { "tags": [ - "DocumentFiles" + "Documents" ], - "summary": "Creates a new document file for the document with the specified id..", - "description": "Uploads a new document file for the document with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateDocumentFile", + "summary": "Returns trashed documents in a document space.", + "description": "Returns deleted documents visible in the specified document space.\r\n The user must have at least `read` permission for the specified document space.", + "operationId": "GetDocumentSpaceDocumentsTrashByDocumentSpaceId", "parameters": [ { - "name": "documentId", + "name": "documentSpaceId", "in": "path", - "description": "The id of the document.", + "description": "The id of the document space to retrieve trashed documents from.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } - } - } - } - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentModel" + } } } } - }, - "400": { - "description": "Bad Request" } }, "security": [ @@ -8469,19 +8634,19 @@ } } }, - "/documents/{documentId}/files/byuploadid": { + "/documentspaces/{documentSpaceId}/teams": { "post": { "tags": [ - "FileUpload" + "DocumentSpaces" ], - "summary": "Creates a file from an upload id.", - "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file document from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", - "operationId": "PostUploadByUploadId", + "summary": "Adds teams to the specified document space.", + "description": "Adds teams and changes their access to the document space and its documents.\r\n\r\nThe user must be an admin.", + "operationId": "PostDocumentSpaceTeamsByDocumentSpaceId", "parameters": [ { - "name": "documentId", + "name": "documentSpaceId", "in": "path", - "description": "The id of the document to attach the file to.", + "description": "The id of the document space.", "required": true, "schema": { "type": "string", @@ -8490,11 +8655,14 @@ } ], "requestBody": { - "description": "The model describing the uploaded file metadata.", + "description": "The model with the list of teams to add.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UploadByUploadIdForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityToTeamPostForm" + } } } }, @@ -8506,7 +8674,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/MinimalEntityToTeamModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -8533,106 +8721,74 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/documents/{documentId}/files/byurl": { - "post": { + "/documentspaces/{documentSpaceId}/teams/{documentSpaceToTeamId}": { + "delete": { "tags": [ - "DocumentFiles" + "DocumentSpaces" ], - "summary": "Uploads a new file by providing an url.", - "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", - "operationId": "CreateDocumentFileByUrl", + "summary": "Deletes a team from the specified document space.", + "description": "Deletes the specified team and removes its access to the document space and its documents.\r\n\r\nThe user must be an admin.", + "operationId": "DeleteDocumentSpaceTeamByDocumentSpaceIdAndDocumentSpaceToTeamId", "parameters": [ { - "name": "documentId", + "name": "documentSpaceId", "in": "path", - "description": "The id of the document the file is linked to.", + "description": "The id of the document space.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The url, name and description of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" - } + }, + { + "name": "documentSpaceToTeamId", + "in": "path", + "description": "The id of the document space to team connection.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } - }, + ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/documents/{documentId}/files/{fileId}": { - "delete": { - "tags": [ - "DocumentFiles" - ], - "summary": "Deletes the document file with the specified id.", - "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", - "operationId": "DeleteDocumentFile", - "parameters": [ - { - "name": "documentId", - "in": "path", - "description": "The id of the document.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } } - ], - "responses": { - "204": { - "description": "No Content" - } }, "security": [ { @@ -8645,21 +8801,21 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } }, - "get": { + "put": { "tags": [ - "Document Files" + "DocumentSpaces" ], - "summary": "Returns the file with the specified id of the document with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByDocumentNameAndDocumentIdAndFileId", + "summary": "Updates a document space team's access.", + "description": "Updates the specified team's access to the document space and its documents.\r\n\r\nThe user must be an admin.", + "operationId": "PutDocumentSpaceTeamByDocumentSpaceIdAndDocumentSpaceToTeamId", "parameters": [ { - "name": "documentId", + "name": "documentSpaceId", "in": "path", - "description": "The id of the document.", + "description": "The id of the document space.", "required": true, "schema": { "type": "string", @@ -8667,9 +8823,9 @@ } }, { - "name": "fileId", + "name": "documentSpaceToTeamId", "in": "path", - "description": "The id of the file.", + "description": "The id of the document space to team connection.", "required": true, "schema": { "type": "string", @@ -8677,13 +8833,34 @@ } } ], + "requestBody": { + "description": "The model with the updated team access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityToTeamForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/MinimalEntityToTeamModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -8720,60 +8897,25 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } - }, - "put": { + } + }, + "/files/generateuploadurl": { + "post": { "tags": [ - "DocumentFiles" - ], - "summary": "Updates the metadata of the document file with the specified id.", - "description": "Updates the metadata of the document file with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "UpdateDocumentFile", - "parameters": [ - { - "name": "documentId", - "in": "path", - "description": "The id of the document.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "FileUpload" ], - "requestBody": { - "description": "The model to update the file with the specified id.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - } - } - }, + "summary": "Generates a URL to upload a file to.", + "description": "Generates a URL that can be used to upload a file. Use the returned upload id to create a file entry. See for more information.\r\n\r\nAny authenticated user.", + "operationId": "PostGenerateUploadURL", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/GenerateUploadUrlResponseModel" } } } @@ -8794,29 +8936,27 @@ } } }, - "/documents/{documentId}/files/{fileId}/copy": { - "post": { + "/files/images/{entityName}/{entityId}": { + "delete": { "tags": [ - "DocumentFiles" + "Images" ], - "summary": "Copies the file to a new document.", - "description": "Copies the file to a new document (meta and content).\r\n\r\nAny authenticated user.", - "operationId": "CopyToDocument", + "summary": "Deletes the profile image of the entity with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesImagesByEntityNameAndEntityId", "parameters": [ { - "name": "documentId", + "name": "entityName", "in": "path", - "description": "The id of the document.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "pattern": "^[A-Za-z]*$", + "type": "string" } }, { - "name": "fileId", + "name": "entityId", "in": "path", - "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -8824,28 +8964,26 @@ } } ], - "requestBody": { - "description": "The model to change the entity information of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } - } - }, - "responses": { - "200": { - "description": "OK", + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -8864,31 +9002,27 @@ "x-access": { "any": "true" } - } - }, - "/documents/{documentId}/files/{fileId}/download": { + }, "get": { "tags": [ - "DocumentFiles" + "Images" ], - "summary": "Returns the content of the document file with the specified id.", - "description": "Returns the content of the document file. Uses the latest file version.\nIf the document file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", - "operationId": "GetDocumentFileContent", + "summary": "Returns the image of the entity with the specified id.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "GetFilesImagesByEntityNameAndEntityId", "parameters": [ { - "name": "documentId", + "name": "entityName", "in": "path", - "description": "The id of the document.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "pattern": "^[A-Za-z]*$", + "type": "string" } }, { - "name": "fileId", + "name": "entityId", "in": "path", - "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -8898,7 +9032,6 @@ { "name": "width", "in": "query", - "description": "Set width to resize.", "schema": { "type": "number", "format": "double" @@ -8907,7 +9040,6 @@ { "name": "height", "in": "query", - "description": "Set height to resize.", "schema": { "type": "number", "format": "double" @@ -8916,7 +9048,6 @@ { "name": "crop", "in": "query", - "description": "Whether to crop the image when resizing it.", "schema": { "type": "boolean" } @@ -8933,60 +9064,43 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/documents/{documentId}/files/{fileId}/shareurl": { - "get": { - "tags": [ - "DocumentFiles" - ], - "summary": "Returns an url to share the file.", - "description": "Returns a url to share the file.\r\n\r\nAny authenticated user.", - "operationId": "GetPublicToken", - "parameters": [ - { - "name": "documentId", - "in": "path", - "description": "The id of the document.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + }, + "304": { + "description": "Not Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } - } - ], - "responses": { - "200": { - "description": "OK", + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -9003,62 +9117,72 @@ "v1" ], "x-access": { - "any": "true" + "anonymous": "true" } - } - }, - "/documents/{documentId}/files/{fileId}/versions": { - "get": { + }, + "post": { "tags": [ - "DocumentFiles" + "Images" ], - "summary": "Returns all file versions of the specified document file.", - "description": "Returns all file versions of the specified document file.\r\n\r\nAny authenticated user.", - "operationId": "GetDocumentFileVersions", + "summary": "Uploads a new profile image.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesImagesByEntityNameAndEntityId", "parameters": [ { - "name": "documentId", + "name": "entityName", "in": "path", - "description": "The id of the document.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "pattern": "^[A-Za-z]*$", + "type": "string" } }, { - "name": "fileId", + "name": "entityId", "in": "path", - "description": "The id of the file.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/FileUploadModel" + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileVersion" - } + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -9077,29 +9201,29 @@ "x-access": { "any": "true" } - }, + } + }, + "/files/images/{entityName}/{entityId}/byuploadid": { "post": { "tags": [ - "DocumentFiles" + "Images" ], - "summary": "Uploads a new version of the document file with the specified id.", - "description": "Uploads a new version of an document file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateDocumentFileVersion", + "summary": "Sets a profile image from a previously uploaded file.", + "description": "After an image has been uploaded to an upload URL generated by the /files/generateuploadurl endpoint, this endpoint sets the uploaded image as the profile image of the entity by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostFilesImagesByUploadIdByEntityNameAndEntityId", "parameters": [ { - "name": "documentId", + "name": "entityName", "in": "path", - "description": "The id of the document.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "pattern": "^[A-Za-z]*$", + "type": "string" } }, { - "name": "fileId", + "name": "entityId", "in": "path", - "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -9109,26 +9233,13 @@ ], "requestBody": { "content": { - "multipart/form-data": { + "application/json": { "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } + "$ref": "#/components/schemas/UploadByUploadIdForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -9136,13 +9247,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/FileInfo" } } } }, "400": { - "description": "Bad Request" + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -9160,59 +9288,40 @@ } } }, - "/documents/{documentId}/files/{fileId}/versions/{versionId}": { + "/files/images/{entityType}": { "get": { "tags": [ - "Document Files" + "SharedFiles" ], - "summary": "Returns the document file version with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByDocumentNameAndDocumentIdAndFileIdAndVersionId", + "summary": "Returns the public profile image.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "GetFilesImagesByEntityType", "parameters": [ { - "name": "documentId", - "in": "path", - "description": "The id of the document.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "entityType", "in": "path", - "description": "The id of the file.", + "description": "The entity type for which we are requesting the image.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } }, { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", + "name": "token", + "in": "query", + "description": "The token to allow access.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileVersion" - } - } - } + "description": "OK" }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -9243,23 +9352,22 @@ "v1" ], "x-access": { - "any": "true" + "anonymous": "true" } } }, - "/documents/{documentId}/files/{fileId}/versions/{versionId}/download": { + "/files/{fileId}/download": { "get": { "tags": [ - "DocumentFiles" + "Files" ], - "summary": "Returns the content of the document file version with the specified id.", - "description": "Returns the content of the document file version with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetDocumentFileVersionContent", + "summary": "Returns the latest content of the specified file and supports range requests.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesDownloadByFileId", "parameters": [ { - "name": "documentId", + "name": "fileId", "in": "path", - "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -9267,23 +9375,42 @@ } }, { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, + "name": "width", + "in": "query", "schema": { - "type": "string", - "format": "uuid" + "type": "number", + "format": "double" } }, { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, + "name": "height", + "in": "query", "schema": { - "type": "string", - "format": "uuid" + "type": "number", + "format": "double" + } + }, + { + "name": "crop", + "in": "query", + "schema": { + "type": "boolean" + } + }, + { + "name": "enlarge", + "in": "query", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "inline", + "in": "query", + "schema": { + "type": "boolean", + "default": false } } ], @@ -9298,67 +9425,14 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/documents/{documentId}/teams": { - "post": { - "tags": [ - "Documents" - ], - "summary": "Adds a list of document teams to a document with the specified id.", - "description": "Adding document teams will affect their access to the document.\r\n Recalculation of permissions for related entities considering the new document teams\r\n will be done in the background asynchronously.\r\n \r\n The user must have at least `write` permissions for the specified document.", - "operationId": "PostDocumentTeamsByDocumentId", - "parameters": [ - { - "name": "documentId", - "in": "path", - "description": "The id of the document.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model used to add document teams to the document.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityToTeamPostForm" - } - } - } }, - "required": true - }, - "responses": { - "200": { - "description": "OK", + "206": { + "description": "Partial Content", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MinimalEntityToTeamModel" - } + "type": "string", + "format": "binary" } } } @@ -9392,6 +9466,16 @@ } } } + }, + "416": { + "description": "Range Not Satisfiable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -9409,19 +9493,18 @@ } } }, - "/documents/{documentId}/teams/{documentToTeamId}": { - "delete": { + "/files/{fileId}/pdf": { + "get": { "tags": [ - "Documents" + "Files" ], - "summary": "Deletes the document team with the specified id from a document.", - "description": "Deletes the specific document team from a document. Deleting a document team will affect their access to the document.\r\n This operation cannot be performed on inherited document teams, only explicit ones.\r\n There will be recalculation of permissions for related entities considering the deleted document team.\r\n \r\n The user must have at least `write` permissions for the specified document.", - "operationId": "DeleteDocumentTeamByDocumentIdAndDocumentToTeamId", + "summary": "Returns the latest version of the specified file as PDF.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesPdfByFileId", "parameters": [ { - "name": "documentId", + "name": "fileId", "in": "path", - "description": "The id of the document to delete the team from.", "required": true, "schema": { "type": "string", @@ -9429,19 +9512,25 @@ } }, { - "name": "documentToTeamId", - "in": "path", - "description": "The id of the document to team connection.", - "required": true, + "name": "inline", + "in": "query", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + } }, "400": { "description": "Bad Request", @@ -9487,74 +9576,40 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/filters": { + "get": { "tags": [ - "Documents" + "Filters" ], - "summary": "Updates the document team with the specified id.", - "description": "Updates the specific document team of a document. Updating a document team will affect their access to the document.\r\n There will be recalculation of permissions for related entities considering the updated document team.\r\n \r\n The user must have at least `write` permissions for this document.", - "operationId": "PutDocumentTeamByDocumentIdAndDocumentToTeamId", + "summary": "Returns the current user's filters.", + "description": "Returns the union of filters owned by the requesting user and filters explicitly shared with the requesting user.\r\n Use the specialized created-by-me and shared-with-me endpoints when only one category is needed.\r\n\r\nAny authenticated user.", + "operationId": "GetFilters", "parameters": [ { - "name": "documentId", - "in": "path", - "description": "The id of the document.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" }, { - "name": "documentToTeamId", - "in": "path", - "description": "The id of the document to team connection to update.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The model used to update document teams of a document.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EntityToTeamForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalEntityToTeamModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/Filter" + } } } } @@ -9585,15 +9640,24 @@ } } }, - "/documentspaces": { + "/filters/{entityType}": { "get": { "tags": [ - "DocumentSpaces" + "Filters" ], - "summary": "Returns all document spaces.", - "description": "The user must have at least `read` permissions to see a document space.", - "operationId": "GetDocumentSpaces", + "summary": "Returns the current user's filters for the specified user type.", + "description": "Returns the union of filters owned by the requesting user and filters explicitly shared with the requesting user\r\n for the requested user type.\r\n Use the specialized created-by-me and shared-with-me endpoints when only one category is needed.\r\n\r\nAny authenticated user.", + "operationId": "GetFiltersByUserType", "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "The entity type route value.", + "required": true, + "schema": { + "type": "string" + } + }, { "$ref": "#/components/parameters/page" }, @@ -9615,11 +9679,21 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/DocumentSpaceModel" + "$ref": "#/components/schemas/Filter" } } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -9635,20 +9709,33 @@ "x-access": { "any": "true" } - }, + } + }, + "/filters/{entityType}/evaluate": { "post": { "tags": [ - "DocumentSpaces" + "Filters" + ], + "summary": "Evaluates a filter definition against the specified user type and returns the filtered results without saving the filter.\n This endpoint is designed for quick filters where the frontend builds a FilterDefinition dynamically\n and needs to evaluate it immediately without persisting it to the database.\n Supports standard paging, ordering, and additional query constraints from query parameters.", + "description": "Evaluates an ad-hoc filter without persisting it. Useful for testing filters before saving or for temporary filtering needs.\r\n\r\nAny authenticated user.", + "operationId": "PostFilterEvaluateByUserType", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "The entity type name (tasks, projects, companies, users).", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Creates a new document space.", - "description": "\r\n\r\nThe user must be an admin.", - "operationId": "PostDocumentSpace", "requestBody": { - "description": "The model used to create the document space.", + "description": "The filter application form containing the FilterDefinition to evaluate.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentSpaceForm" + "$ref": "#/components/schemas/ApplyFilterForm" } } }, @@ -9660,7 +9747,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentSpaceModel" + "$ref": "#/components/schemas/ObjectPagedResult" } } } @@ -9675,8 +9762,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -9697,23 +9784,23 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/documentspaces/{documentSpaceId}": { - "delete": { + "/filters/{filterId}/contributors": { + "post": { "tags": [ - "DocumentSpaces" + "Filters" ], - "summary": "Deletes the document space with the specified id.", - "description": "The documents in this space and their related entities (comments, etc.) will be unrecoverably deleted in the background asynchronously.\r\n\r\nThe user must be an admin.", - "operationId": "DeleteDocumentSpaceById", + "summary": "Adds explicit contributors to the specified filter.", + "description": "Adding filter contributors grants explicit access to the filter with the specified access levels.\r\n Existing explicit contributors are ignored and therefore not recreated.\r\n The filter creator cannot be added as an explicit contributor because ownership is handled implicitly.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", + "operationId": "PostFilterContributorsByFilterId", "parameters": [ { - "name": "documentSpaceId", + "name": "filterId", "in": "path", - "description": "The id of the document space to delete.", + "description": "The filter that should receive explicit contributors.", "required": true, "schema": { "type": "string", @@ -9721,9 +9808,43 @@ } } ], + "requestBody": { + "description": "The contributor permissions to add.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContributorPostForm" + } + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MinimalContributorModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, "401": { "description": "Unauthorized", @@ -9757,21 +9878,33 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } - }, - "get": { + } + }, + "/filters/{filterId}/contributors/{filterContributorId}": { + "delete": { "tags": [ - "DocumentSpaces" + "Filters" ], - "summary": "Returns the document space with the specified id.", - "description": "The user must have at least `read` permissions for the specified document space.", - "operationId": "GetDocumentSpaceById", + "summary": "Removes an explicit contributor from the specified filter.", + "description": "Removing a filter contributor revokes that contributor's explicit access to the filter.\r\n The contributor entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", + "operationId": "DeleteFilterContributorByFilterIdAndFilterContributorId", "parameters": [ { - "name": "documentSpaceId", + "name": "filterId", "in": "path", - "description": "The id of the document space to retrieve.", + "description": "The filter that owns the contributor entry.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "filterContributorId", + "in": "path", + "description": "The contributor entry to delete.", "required": true, "schema": { "type": "string", @@ -9780,15 +9913,8 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DocumentModel" - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", @@ -9827,16 +9953,26 @@ }, "put": { "tags": [ - "DocumentSpaces" + "Filters" ], - "summary": "Updates the document space with the specified id.", - "description": "\r\n\r\nThe user must be an admin.", - "operationId": "PutDocumentSpaceById", + "summary": "Updates the access level of an explicit filter contributor.", + "description": "Updating a filter contributor changes that contributor's explicit access level for the filter.\r\n The contributor entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", + "operationId": "PutFilterContributorByFilterIdAndFilterContributorId", "parameters": [ { - "name": "documentSpaceId", + "name": "filterId", "in": "path", - "description": "The id of the document space.", + "description": "The filter that owns the contributor entry.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "filterContributorId", + "in": "path", + "description": "The contributor entry to update.", "required": true, "schema": { "type": "string", @@ -9845,11 +9981,11 @@ } ], "requestBody": { - "description": "The model used to update the document space.", + "description": "The new contributor permission payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentSpaceForm" + "$ref": "#/components/schemas/ContributorForm" } } }, @@ -9861,7 +9997,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentSpaceModel" + "$ref": "#/components/schemas/MinimalContributorModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -9898,23 +10044,23 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/documentspaces/{documentSpaceId}/contributors": { + "/filters/{filterId}/teams": { "post": { "tags": [ - "DocumentSpaces" + "Filters" ], - "summary": "Adds a list of document space contributors to a document space.", - "description": "Adding document space contributors will affect their access to the document space and documents within that space.\r\n\r\nThe user must be an admin.", - "operationId": "PostDocumentSpaceContributorsByDocumentSpaceId", + "summary": "Adds explicit team permissions to the specified filter.", + "description": "Adding filter teams grants explicit access to the filter for all members of the specified teams.\r\n Existing explicit team permissions are ignored and therefore not recreated.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", + "operationId": "PostFilterTeamsByFilterId", "parameters": [ { - "name": "documentSpaceId", + "name": "filterId", "in": "path", - "description": "The id of the document space.", + "description": "The filter that should receive explicit team permissions.", "required": true, "schema": { "type": "string", @@ -9923,13 +10069,13 @@ } ], "requestBody": { - "description": "The model with the list of contributors to add.", + "description": "The team permissions to add.", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ContributorPostForm" + "$ref": "#/components/schemas/EntityToTeamPostForm" } } } @@ -9942,7 +10088,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalContributorModel" + "type": "array", + "items": { + "$ref": "#/components/schemas/MinimalEntityToTeamModel" + } } } } @@ -9989,23 +10138,23 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/documentspaces/{documentSpaceId}/contributors/{documentSpaceContributorId}": { + "/filters/{filterId}/teams/{filterToTeamId}": { "delete": { "tags": [ - "DocumentSpaces" + "Filters" ], - "summary": "Deletes the document space contributor with the specified id from a document space.", - "description": "Deletes the specified document space contributor from a document space.\r\n Deleting a document space contributor will affect their access to the document space and the documents within that space.\r\n\r\nThe user must be an admin.", - "operationId": "DeleteDocumentSpaceContributorByDocumentSpaceIdAndDocumentSpaceContributorId", + "summary": "Removes an explicit team permission from the specified filter.", + "description": "Removing a filter team permission revokes that team's explicit access to the filter.\r\n The team permission entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", + "operationId": "DeleteFilterTeamByFilterIdAndFilterToTeamId", "parameters": [ { - "name": "documentSpaceId", + "name": "filterId", "in": "path", - "description": "The id of the document space.", + "description": "The filter that owns the team permission entry.", "required": true, "schema": { "type": "string", @@ -10013,9 +10162,9 @@ } }, { - "name": "documentSpaceContributorId", + "name": "filterToTeamId", "in": "path", - "description": "The id of the document space contributor to delete.", + "description": "The team permission entry to delete.", "required": true, "schema": { "type": "string", @@ -10027,16 +10176,6 @@ "204": { "description": "No Content" }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "401": { "description": "Unauthorized", "content": { @@ -10069,21 +10208,21 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } }, "put": { "tags": [ - "DocumentSpaces" + "Filters" ], - "summary": "Updates the access of a document space contributor to the document space with the specified id.", - "description": "Updates the access of the specified document space contributor to the specified document space.\r\n Updating a document space contributor will affect their access to the document space and documents within that space.\r\n\r\nThe user must be an admin.", - "operationId": "PutDocumentSpaceContributorByDocumentSpaceIdAndDocumentSpaceContributorId", + "summary": "Updates the access level of an explicit team permission on the specified filter.", + "description": "Updating a filter team permission changes the explicit access level of the referenced team for the filter.\r\n The team permission entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", + "operationId": "PutFilterTeamByFilterIdAndFilterToTeamId", "parameters": [ { - "name": "documentSpaceId", + "name": "filterId", "in": "path", - "description": "The id of the document space.", + "description": "The filter that owns the team permission entry.", "required": true, "schema": { "type": "string", @@ -10091,9 +10230,9 @@ } }, { - "name": "documentSpaceContributorId", + "name": "filterToTeamId", "in": "path", - "description": "The id of the document space contributor.", + "description": "The team permission entry to update.", "required": true, "schema": { "type": "string", @@ -10102,11 +10241,11 @@ } ], "requestBody": { - "description": "The model with the updated contributor data.", + "description": "The new team permission payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContributorForm" + "$ref": "#/components/schemas/EntityToTeamForm" } } }, @@ -10118,7 +10257,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalContributorModel" + "$ref": "#/components/schemas/MinimalEntityToTeamModel" } } } @@ -10165,52 +10304,25 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/documentspaces/{documentSpaceId}/documents": { + "/invitations": { "get": { "tags": [ - "Documents" - ], - "summary": "Returns all documents that belong to the document space with the specified id.", - "description": "The user must have at least `read` permissions for the specified document space.", - "operationId": "GetDocumentSpaceDocumentsByDocumentSpaceId", - "parameters": [ - { - "name": "documentSpaceId", - "in": "path", - "description": "The id of the document space to retrieve documents from.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } + "Invitations" ], + "summary": "Prevents GET requests to the invitations route from throwing errors.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "GetInvitations", "responses": { - "200": { - "description": "OK", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -10227,102 +10339,23 @@ "v1" ], "x-access": { - "any": "true" + "anonymous": "true" } - } - }, - "/documentspaces/{documentSpaceId}/documents/trash": { - "get": { + }, + "post": { "tags": [ - "Documents" + "Invitations" ], - "summary": "Returns all deleted documents of the document space with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetDocumentSpaceDocumentsTrashByDocumentSpaceId", - "parameters": [ - { - "name": "documentSpaceId", - "in": "path", - "description": "The id of the document space to retrieve trashed documents from.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/documentspaces/{documentSpaceId}/teams": { - "post": { - "tags": [ - "DocumentSpaces" - ], - "summary": "Adds teams to the document space with the specified id.", - "description": "Adding teams to a document space will affect their access to the document space and documents within that space.\r\n\r\nThe user must be an admin.", - "operationId": "PostDocumentSpaceTeamsByDocumentSpaceId", - "parameters": [ - { - "name": "documentSpaceId", - "in": "path", - "description": "The id of the document space.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model with the list of teams to add.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityToTeamPostForm" - } - } + "summary": "Invites a user to a workspace.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "PostInvitations", + "requestBody": { + "description": "The invitation details.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Invitation" + } } }, "required": true @@ -10333,7 +10366,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalEntityToTeamModel" + "$ref": "#/components/schemas/InvitationResponse" } } } @@ -10348,16 +10381,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -10380,41 +10403,33 @@ "v1" ], "x-access": { - "admin": "true" + "anonymous": "true" } } }, - "/documentspaces/{documentSpaceId}/teams/{documentSpaceToTeamId}": { - "delete": { + "/invitations/accept": { + "post": { "tags": [ - "DocumentSpaces" + "Invitations" ], - "summary": "Deletes the team with the specified id from a document space.", - "description": "Deletes the specified team from a document space.\r\n Deleting a team from a document space will affect their access to the document space and the documents within that space.\r\n\r\nThe user must be an admin.", - "operationId": "DeleteDocumentSpaceTeamByDocumentSpaceIdAndDocumentSpaceToTeamId", - "parameters": [ - { - "name": "documentSpaceId", - "in": "path", - "description": "The id of the document space.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Accepts an invitation using its invitation code.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "PostInvitationsAccept", + "requestBody": { + "description": "The invitation code and optional referral code.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AcceptInvitation" + } } }, - { - "name": "documentSpaceToTeamId", - "in": "path", - "description": "The id of the document space to team connection.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], + "required": true + }, "responses": { + "200": { + "description": "OK" + }, "204": { "description": "No Content" }, @@ -10427,26 +10442,6 @@ } } } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -10460,76 +10455,25 @@ "v1" ], "x-access": { - "admin": "true" + "anonymous": "true" } - }, - "put": { + } + }, + "/me": { + "get": { "tags": [ - "DocumentSpaces" - ], - "summary": "Updates the access of a team to the document space with the specified id.", - "description": "Updates the specified document space to team connection of a document space.\r\n Updating a document space team will affect their access to the document space and documents within that space.\r\n\r\nThe user must be an admin.", - "operationId": "PutDocumentSpaceTeamByDocumentSpaceIdAndDocumentSpaceToTeamId", - "parameters": [ - { - "name": "documentSpaceId", - "in": "path", - "description": "The id of the document space.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "documentSpaceToTeamId", - "in": "path", - "description": "The id of the document space to team connection.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Users" ], - "requestBody": { - "description": "The model with the updated team access.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EntityToTeamForm" - } - } - }, - "required": true - }, + "summary": "Returns the current user and workspace.", + "description": "Returns the current user's profile together with the selected workspace.\r\n\r\nAny authenticated user.", + "operationId": "GetMe", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalEntityToTeamModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/UserAndWorkspace" } } } @@ -10555,94 +10499,43 @@ "x-api-versions": [ "v1" ], - "x-access": { - "admin": "true" - } - } - }, - "/files/generateuploadurl": { - "post": { - "tags": [ - "FileUpload" - ], - "summary": "Generates a URL to upload a file to.", - "description": "Generates a URL that can be used to upload a file. Use the returned upload id to create a file entry. See for more information.\r\n\r\nAny authenticated user.", - "operationId": "PostGenerateUploadURL", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GenerateUploadUrlResponseModel" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], "x-access": { "any": "true" } } }, - "/files/images/{entityName}/{entityId}": { - "delete": { + "/me/allavailabletasks": { + "get": { "tags": [ - "Images" + "AssignedTasks" ], - "summary": "Deletes the profile image of the entity with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "DeleteFilesImagesByEntityNameAndEntityId", + "summary": "Returns tasks visible to the current user.", + "description": "Returns tasks available to the current user and removes time details when the user lacks the related time-tracking access.\r\n The user must have at least `read` permission for each returned task.", + "operationId": "GetMeAllAvailableTasks", "parameters": [ { - "name": "entityName", - "in": "path", - "required": true, - "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" - } + "$ref": "#/components/parameters/page" }, { - "name": "entityId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskModel" + } } } } @@ -10661,167 +10554,67 @@ "x-access": { "any": "true" } - }, + } + }, + "/me/assignedtasks": { "get": { "tags": [ - "Images" + "AssignedTasks" ], - "summary": "Returns the image of the entity with the specified id.", - "description": "\r\n\r\nAllows unauthenticated access.", - "operationId": "GetFilesImagesByEntityNameAndEntityId", + "summary": "Returns tasks assigned to the current user.", + "description": "Returns tasks assigned to the current user. Use the assignment date range or `inProgress` to narrow the result.\r\n The user must have permission to view each returned task.", + "operationId": "GetMeAssignedTasks", "parameters": [ { - "name": "entityName", - "in": "path", - "required": true, + "name": "inProgress", + "in": "query", + "description": "Whether to return only assigned project tasks of running projects. Defaults to true.", "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" + "type": "boolean", + "default": false } }, { - "name": "entityId", - "in": "path", - "required": true, + "name": "assignedOnFrom", + "in": "query", + "description": "The start date for filtering by assignment date. If set, tasks are returned only when the assignment date is greater or equal than this value.", "schema": { "type": "string", - "format": "uuid" + "format": "date-time" } }, { - "name": "width", + "name": "assignedOnTo", "in": "query", + "description": "The end date for filtering by assignment date. If set, tasks are returned only when the assignment date is less or equal than this value.", "schema": { - "type": "number", - "format": "double" + "type": "string", + "format": "date-time" } }, { - "name": "height", - "in": "query", - "schema": { - "type": "number", - "format": "double" - } + "$ref": "#/components/parameters/page" }, { - "name": "crop", - "in": "query", - "schema": { - "type": "boolean" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - }, - "304": { - "description": "Not Modified", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "$ref": "#/components/parameters/pageSize" }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "anonymous": "true" - } - }, - "post": { - "tags": [ - "Images" - ], - "summary": "Uploads a new profile image.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostFilesImagesByEntityNameAndEntityId", - "parameters": [ { - "name": "entityName", - "in": "path", - "required": true, - "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" - } + "$ref": "#/components/parameters/orderby" }, { - "name": "entityId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/FileUploadModel" - } - } - } - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskModel" + } } } } @@ -10835,16 +10628,6 @@ } } } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -10862,27 +10645,19 @@ } } }, - "/files/images/{entityName}/{entityId}/byuploadid": { - "post": { + "/me/assignedtasks/{taskId}": { + "get": { "tags": [ - "Images" + "AssignedTasks" ], - "summary": "Sets a profile image from a previously uploaded file.", - "description": "After an image has been uploaded to an upload URL generated by the /files/generateuploadurl endpoint, this endpoint sets the uploaded image as the profile image of the entity by providing the upload id.\r\n\r\nAny authenticated user.", - "operationId": "PostFilesImagesByUploadIdByEntityNameAndEntityId", + "summary": "Returns an assigned task for the current user.", + "description": "Returns the specified task when it is assigned to the current user. Time-tracking details are included only when permitted.\r\n The user must have permission to view the assigned task.", + "operationId": "GetMeAssignedTaskByTaskId", "parameters": [ { - "name": "entityName", - "in": "path", - "required": true, - "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" - } - }, - { - "name": "entityId", + "name": "taskId", "in": "path", + "description": "The id of the task to return.", "required": true, "schema": { "type": "string", @@ -10890,1856 +10665,13 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UploadByUploadIdForm" - } - } - }, - "required": true - }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/files/images/{entityType}": { - "get": { - "tags": [ - "SharedFiles" - ], - "summary": "Returns the public profile image.", - "description": "\r\n\r\nAllows unauthenticated access.", - "operationId": "GetFilesImagesByEntityType", - "parameters": [ - { - "name": "entityType", - "in": "path", - "description": "The entity type for which we are requesting the image.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "token", - "in": "query", - "description": "The token to allow access.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "OK" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "anonymous": "true" - } - } - }, - "/files/{fileId}/download": { - "get": { - "tags": [ - "Files" - ], - "summary": "Returns the content of the file with the specified id.", - "description": "Returns the content of the latest file version.\nIf the file is an image and the width and height are set,\nthe image will resized before it is returned.\nThe get the content it is necessary to have the 'read' permissions on the\nentity the file is related to.\r\n\r\nAny authenticated user.", - "operationId": "GetFile", - "parameters": [ - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "width", - "in": "query", - "description": "Set width to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "height", - "in": "query", - "description": "Set height to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "crop", - "in": "query", - "description": "Whether to crop the image when resizing it.", - "schema": { - "type": "boolean" - } - }, - { - "name": "enlarge", - "in": "query", - "description": "Whether to enlarge the image if the width/height are bigger than the original image.", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "name": "inline", - "in": "query", - "description": "If inline is true, content-disposition header is inline, else it is attachment.", - "schema": { - "type": "boolean", - "default": false - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - }, - "206": { - "description": "Partial Content", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - }, - "416": { - "description": "Range Not Satisfiable" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/files/{fileId}/pdf": { - "get": { - "tags": [ - "Files" - ], - "summary": "Returns the content of the file with the specified id as pdf.", - "description": "Returns the content of the latest file version as pdf.\nAll kinds of MS Office document types are supported.\nTo get the content you must have the 'read' permissions on the\nentity the file is related to.\r\n\r\nAny authenticated user.", - "operationId": "GetPdf", - "parameters": [ - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "inline", - "in": "query", - "description": "If inline is true, content-disposition header is inline, else it is attachment.", - "schema": { - "type": "boolean", - "default": false - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/filters": { - "get": { - "tags": [ - "Filters" - ], - "summary": "Returns the current user's filters.", - "description": "Returns the union of filters owned by the requesting user and filters explicitly shared with the requesting user.\r\n Use the specialized created-by-me and shared-with-me endpoints when only one category is needed.\r\n\r\nAny authenticated user.", - "operationId": "GetFilters", - "parameters": [ - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Filter" - } - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/filters/{entityType}": { - "get": { - "tags": [ - "Filters" - ], - "summary": "Returns the current user's filters for the specified user type.", - "description": "Returns the union of filters owned by the requesting user and filters explicitly shared with the requesting user\r\n for the requested user type.\r\n Use the specialized created-by-me and shared-with-me endpoints when only one category is needed.\r\n\r\nAny authenticated user.", - "operationId": "GetFiltersByUserType", - "parameters": [ - { - "name": "entityType", - "in": "path", - "description": "The entity type route value.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Filter" - } - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/filters/{entityType}/evaluate": { - "post": { - "tags": [ - "Filters" - ], - "summary": "Evaluates a filter definition against the specified user type and returns the filtered results without saving the filter.\n This endpoint is designed for quick filters where the frontend builds a FilterDefinition dynamically\n and needs to evaluate it immediately without persisting it to the database.\n Supports standard paging, ordering, and additional query constraints from query parameters.", - "description": "Evaluates an ad-hoc filter without persisting it. Useful for testing filters before saving or for temporary filtering needs.\r\n\r\nAny authenticated user.", - "operationId": "PostFilterEvaluateByUserType", - "parameters": [ - { - "name": "entityType", - "in": "path", - "description": "The entity type name (tasks, projects, companies, users).", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "description": "The filter application form containing the FilterDefinition to evaluate.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApplyFilterForm" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectPagedResult" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/filters/{filterId}/contributors": { - "post": { - "tags": [ - "Filters" - ], - "summary": "Adds explicit contributors to the specified filter.", - "description": "Adding filter contributors grants explicit access to the filter with the specified access levels.\r\n Existing explicit contributors are ignored and therefore not recreated.\r\n The filter creator cannot be added as an explicit contributor because ownership is handled implicitly.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "PostFilterContributorsByFilterId", - "parameters": [ - { - "name": "filterId", - "in": "path", - "description": "The filter that should receive explicit contributors.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The contributor permissions to add.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ContributorPostForm" - } - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MinimalContributorModel" - } - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/filters/{filterId}/contributors/{filterContributorId}": { - "delete": { - "tags": [ - "Filters" - ], - "summary": "Removes an explicit contributor from the specified filter.", - "description": "Removing a filter contributor revokes that contributor's explicit access to the filter.\r\n The contributor entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "DeleteFilterContributorByFilterIdAndFilterContributorId", - "parameters": [ - { - "name": "filterId", - "in": "path", - "description": "The filter that owns the contributor entry.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "filterContributorId", - "in": "path", - "description": "The contributor entry to delete.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "put": { - "tags": [ - "Filters" - ], - "summary": "Updates the access level of an explicit filter contributor.", - "description": "Updating a filter contributor changes that contributor's explicit access level for the filter.\r\n The contributor entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "PutFilterContributorByFilterIdAndFilterContributorId", - "parameters": [ - { - "name": "filterId", - "in": "path", - "description": "The filter that owns the contributor entry.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "filterContributorId", - "in": "path", - "description": "The contributor entry to update.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The new contributor permission payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ContributorForm" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MinimalContributorModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/filters/{filterId}/teams": { - "post": { - "tags": [ - "Filters" - ], - "summary": "Adds explicit team permissions to the specified filter.", - "description": "Adding filter teams grants explicit access to the filter for all members of the specified teams.\r\n Existing explicit team permissions are ignored and therefore not recreated.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "PostFilterTeamsByFilterId", - "parameters": [ - { - "name": "filterId", - "in": "path", - "description": "The filter that should receive explicit team permissions.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The team permissions to add.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityToTeamPostForm" - } - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MinimalEntityToTeamModel" - } - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/filters/{filterId}/teams/{filterToTeamId}": { - "delete": { - "tags": [ - "Filters" - ], - "summary": "Removes an explicit team permission from the specified filter.", - "description": "Removing a filter team permission revokes that team's explicit access to the filter.\r\n The team permission entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "DeleteFilterTeamByFilterIdAndFilterToTeamId", - "parameters": [ - { - "name": "filterId", - "in": "path", - "description": "The filter that owns the team permission entry.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "filterToTeamId", - "in": "path", - "description": "The team permission entry to delete.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "put": { - "tags": [ - "Filters" - ], - "summary": "Updates the access level of an explicit team permission on the specified filter.", - "description": "Updating a filter team permission changes the explicit access level of the referenced team for the filter.\r\n The team permission entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "PutFilterTeamByFilterIdAndFilterToTeamId", - "parameters": [ - { - "name": "filterId", - "in": "path", - "description": "The filter that owns the team permission entry.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "filterToTeamId", - "in": "path", - "description": "The team permission entry to update.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The new team permission payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EntityToTeamForm" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MinimalEntityToTeamModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/invitations": { - "get": { - "tags": [ - "Invitations" - ], - "summary": "Prevents GET requests to the invitations route from throwing errors.", - "description": "\r\n\r\nAllows unauthenticated access.", - "operationId": "GetInvitations", - "responses": { - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "anonymous": "true" - } - } - }, - "/invitations/accept": { - "post": { - "tags": [ - "Invitations" - ], - "summary": "Accepts the invitation with the invitation code.", - "operationId": "Accept", - "requestBody": { - "description": "The invitation code received when creating the invitation.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AcceptInvitation" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/AcceptInvitation" - } - } - } - }, - "responses": { - "200": { - "description": "OK" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ] - } - }, - "/me": { - "get": { - "tags": [ - "Users" - ], - "summary": "Returns the currently logged-in user and workspace.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMe", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserAndWorkspace" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/allavailabletasks": { - "get": { - "tags": [ - "AssignedTasks" - ], - "summary": "Returns all tasks the current user is allowed to see.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMeAllAvailableTasks", - "parameters": [ - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/assignedtasks": { - "get": { - "tags": [ - "AssignedTasks" - ], - "summary": "Returns all tasks assigned to the current user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMeAssignedTasks", - "parameters": [ - { - "name": "inProgress", - "in": "query", - "description": "Whether to return only assigned project tasks of running projects. Defaults to true.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "assignedOnFrom", - "in": "query", - "description": "The start date for filtering by assignment date. If set, tasks are returned only when the assignment date is greater or equal than this value.", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "assignedOnTo", - "in": "query", - "description": "The end date for filtering by assignment date. If set, tasks are returned only when the assignment date is less or equal than this value.", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/assignedtasks/{taskId}": { - "get": { - "tags": [ - "AssignedTasks" - ], - "summary": "Returns the assigned task with the specified id of the current user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMeAssignedTaskByTaskId", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task to return.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskModel" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/dashboards": { - "get": { - "tags": [ - "Dashboards" - ], - "summary": "Returns the dashboards of the current user.", - "description": "Returns the dashboards of the current user.\r\n\r\nThe user must be the creator.", - "operationId": "GetMeDashboards", - "parameters": [ - { - "name": "includeWidgets", - "in": "query", - "description": "Include widgets.", - "schema": { - "type": "boolean", - "default": false - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Dashboard" - } - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "owner": "true" - } - } - }, - "/me/filters": { - "get": { - "tags": [ - "Filters" - ], - "summary": "Returns the filters created by the current user.", - "description": "Returns filters that were created by and are owned by the requesting user.\r\n Shared filters are excluded, even if the requesting user also has explicit access through contributor, team, or workspace permissions.\r\n\r\nAny authenticated user.", - "operationId": "GetMeFilters", - "parameters": [ - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Filter" - } - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/filters/{entityType}": { - "get": { - "tags": [ - "Filters" - ], - "summary": "Returns the filters created by the current user for the specified user type.", - "description": "Returns filters that were created by and are owned by the requesting user and match the requested user type.\r\n Shared filters are excluded, even if the requesting user also has explicit access through contributor, team, or workspace permissions.\r\n\r\nAny authenticated user.", - "operationId": "GetMeFiltersByUserType", - "parameters": [ - { - "name": "entityType", - "in": "path", - "description": "The entity type route value.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Filter" - } - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "Filters" - ], - "summary": "Creates a persisted filter definition for the specified user type.", - "description": "Creates a new filter owned by the current user.\r\n\r\nAny authenticated user.", - "operationId": "PostMeFilterByUserType", - "parameters": [ - { - "name": "entityType", - "in": "path", - "description": "Route segment identifying the entity type (tasks, projects, companies, users).", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "description": "The filter definition payload supplied by the caller.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FilterForm" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Filter" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/filters/{entityType}/fromquery": { - "post": { - "tags": [ - "Filters" - ], - "summary": "Creates a persisted filter from an OData query string.\n Convenience endpoint for external API consumers who want to create filters using familiar OData syntax.", - "description": "Creates a filter from an OData filterby query string.\r\n\r\nAny authenticated user.", - "operationId": "PostMeFilterFromQueryByUserType", - "parameters": [ - { - "name": "entityType", - "in": "path", - "description": "Route segment identifying the entity type (tasks, projects, companies, users).", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "description": "The filter query payload containing the filter name, sharing settings, and query string.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FilterFromQueryForm" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Filter" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/filters/{filterId}": { - "delete": { - "tags": [ - "Filters" - ], - "summary": "Deletes a filter.", - "description": "Deletes the filter when the current user has manage access.\r\n\r\nAny authenticated user.", - "operationId": "DeleteMeFilterById", - "parameters": [ - { - "name": "filterId", - "in": "path", - "description": "Identifier of the filter to delete.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "get": { - "tags": [ - "Filters" - ], - "summary": "Returns a single filter by its identifier for the current user.", - "description": "Returns the filter if the current user has read access.\r\n\r\nAny authenticated user.", - "operationId": "GetMeFilterById", - "parameters": [ - { - "name": "filterId", - "in": "path", - "description": "The filter identifier.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Filter" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "put": { - "tags": [ - "Filters" - ], - "summary": "Updates an existing filter definition.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PutMeFilterById", - "parameters": [ - { - "name": "filterId", - "in": "path", - "description": "Identifier of the filter to update.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The updated filter definition supplied by the caller.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FilterForm" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Filter" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TaskModel" } } } @@ -12770,23 +10702,22 @@ } } }, - "/me/filters/{filterId}/copy": { - "post": { + "/me/dashboards": { + "get": { "tags": [ - "Filters" + "Dashboards" ], - "summary": "Creates a copy of an existing filter.", - "description": "Copies the filter definition and query.\r\n The copied filter will be owned only by the requesting user.\r\n The name of the copied filter will be \"{original name} (Copy)\" or \"{original name} (Kopie)\" for German users.\r\n\r\nAny authenticated user.", - "operationId": "PostMeFilterCopyByFilterId", + "summary": "Returns dashboards for the current user.", + "description": "Returns dashboards for the current user. Set `includeWidgets` to include widget details. A default dashboard is created when none exists.\r\n\r\nThe user must be the creator.", + "operationId": "GetMeDashboards", "parameters": [ { - "name": "filterId", - "in": "path", - "description": "The identifier of the filter to copy.", - "required": true, + "name": "includeWidgets", + "in": "query", + "description": "Include widgets.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } } ], @@ -12796,37 +10727,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Filter" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/Dashboard" + } } } } @@ -12843,37 +10747,30 @@ "v1" ], "x-access": { - "any": "true" + "owner": "true" } } }, - "/me/filters/{filterId}/{entityType}": { + "/me/filters": { "get": { "tags": [ "Filters" ], - "summary": "Evaluates a filter by applying it to the specified target user type and returning the filtered results.\n Supports standard paging, ordering, and additional query constraints from query parameters.", - "description": "Retrieves and evaluates a saved filter to return matching entities.\r\n\r\nAny authenticated user.", - "operationId": "GetMeFilterByFilterIdAndUserType", + "summary": "Returns the filters created by the current user.", + "description": "Returns filters that were created by and are owned by the requesting user.\r\n Shared filters are excluded, even if the requesting user also has explicit access through contributor, team, or workspace permissions.\r\n\r\nAny authenticated user.", + "operationId": "GetMeFilters", "parameters": [ { - "name": "filterId", - "in": "path", - "description": "The identifier of the filter to evaluate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" }, { - "name": "entityType", - "in": "path", - "description": "The entity type name (tasks, projects, companies, users).", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -12882,27 +10779,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ObjectPagedResult" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/Filter" + } } } } @@ -12933,15 +10813,24 @@ } } }, - "/me/otherprivatetasks": { + "/me/filters/{entityType}": { "get": { "tags": [ - "PrivateTasks" + "Filters" ], - "summary": "Returns all private tasks that the current user created and assigned to someone else.", - "description": "Private tasks are always created for the current user but can be reassigned to other users afterwards.\r\n This endpoint returns all private tasks that were originally created by the user but were reassigned to someone else.\r\n\r\nAny authenticated user.", - "operationId": "GetMeOtherPrivateTasks", + "summary": "Returns the filters created by the current user for the specified user type.", + "description": "Returns filters that were created by and are owned by the requesting user and match the requested user type.\r\n Shared filters are excluded, even if the requesting user also has explicit access through contributor, team, or workspace permissions.\r\n\r\nAny authenticated user.", + "operationId": "GetMeFiltersByUserType", "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "The entity type route value.", + "required": true, + "schema": { + "type": "string" + } + }, { "$ref": "#/components/parameters/page" }, @@ -12963,22 +10852,12 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TaskModel" + "$ref": "#/components/schemas/Filter" } } } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -13003,41 +10882,49 @@ "x-access": { "any": "true" } - } - }, - "/me/otherprivatetasks/{taskId}": { - "get": { + }, + "post": { "tags": [ - "PrivateTasks" + "Filters" ], - "summary": "Returns a private task that the current user created and assigned to someone else.", - "description": "Private tasks are always created for the current user but can be reassigned to other users afterwards.\r\n This endpoint returns a private task that was originally created by the user but was reassigned to someone else.\r\n\r\nAny authenticated user.", - "operationId": "GetMeOtherPrivateTaskByTaskId", + "summary": "Creates a persisted filter definition for the specified user type.", + "description": "Creates a new filter owned by the current user.\r\n\r\nAny authenticated user.", + "operationId": "PostMeFilterByUserType", "parameters": [ { - "name": "taskId", + "name": "entityType", "in": "path", - "description": "The id of the task.", + "description": "Route segment identifying the entity type (tasks, projects, companies, users).", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], + "requestBody": { + "description": "The filter definition payload supplied by the caller.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FilterForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskModel" + "$ref": "#/components/schemas/Filter" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -13072,51 +10959,49 @@ } } }, - "/me/otherprivatetasks/{taskId}/checklistitems": { - "get": { + "/me/filters/{entityType}/fromquery": { + "post": { "tags": [ - "ChecklistItems" + "Filters" ], - "summary": "Returns the checklist items for a private task with the specified id.", - "description": "The user must be the creator of the task.", - "operationId": "GetMyOtherPrivateTaskChecklistItemsByUserIdAndTaskId", + "summary": "Creates a persisted filter from an OData query string.\n Convenience endpoint for external API consumers who want to create filters using familiar OData syntax.", + "description": "Creates a filter from an OData filterby query string.\r\n\r\nAny authenticated user.", + "operationId": "PostMeFilterFromQueryByUserType", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskId", + "name": "entityType", "in": "path", - "description": "The id of the task.", + "description": "Route segment identifying the entity type (tasks, projects, companies, users).", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], + "requestBody": { + "description": "The filter query payload containing the filter name, sharing settings, and query string.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FilterFromQueryForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChecklistItem" - } + "$ref": "#/components/schemas/Filter" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -13151,38 +11036,19 @@ } } }, - "/me/otherprivatetasks/{taskId}/checklistitems/{checklistItemId}": { - "get": { + "/me/filters/{filterId}": { + "delete": { "tags": [ - "ChecklistItems" + "Filters" ], - "summary": "Returns a checklist item for a private task with the specified id.", - "description": "The user must be the creator of the task.", - "operationId": "GetMyOtherPrivateTaskChecklistItemByUserIdAndTaskIdAndChecklistItemId", + "summary": "Deletes a filter.", + "description": "Deletes the filter when the current user has manage access.\r\n\r\nAny authenticated user.", + "operationId": "DeleteMeFilterById", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "checklistItemId", + "name": "filterId", "in": "path", - "description": "The id of the checklist item.", + "description": "Identifier of the filter to delete.", "required": true, "schema": { "type": "string", @@ -13191,15 +11057,8 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChecklistItem" - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", @@ -13235,29 +11094,49 @@ "x-access": { "any": "true" } - } - }, - "/me/permissions": { + }, "get": { "tags": [ - "Permissions" + "Filters" + ], + "summary": "Returns a single filter by its identifier for the current user.", + "description": "Returns the filter if the current user has read access.\r\n\r\nAny authenticated user.", + "operationId": "GetMeFilterById", + "parameters": [ + { + "name": "filterId", + "in": "path", + "description": "The filter identifier.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Returns the permissions of the currently logged-in user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMePermissions", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserPermissionInfoExternal" + "$ref": "#/components/schemas/Filter" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -13280,92 +11159,74 @@ "x-access": { "any": "true" } - } - }, - "/me/privatedocuments": { - "get": { + }, + "put": { "tags": [ - "Documents" + "Filters" ], - "summary": "Returns the requesting user's private documents.", + "summary": "Updates an existing filter definition.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMePrivateDocuments", + "operationId": "PutMeFilterById", "parameters": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "filterId", + "in": "path", + "description": "Identifier of the filter to update.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], + "requestBody": { + "description": "The updated filter definition supplied by the caller.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FilterForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "$ref": "#/components/schemas/Filter" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/privatedocuments/trash": { - "get": { - "tags": [ - "Documents" - ], - "summary": "Returns the requesting user's private trashed documents.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMePrivateDocumentsTrash", - "parameters": [ - { - "$ref": "#/components/parameters/page" }, - { - "$ref": "#/components/parameters/pageSize" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - { - "$ref": "#/components/parameters/orderby" + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -13386,26 +11247,24 @@ } } }, - "/me/privatetasks": { - "get": { + "/me/filters/{filterId}/copy": { + "post": { "tags": [ - "PrivateTasks" + "Filters" ], - "summary": "Returns all private tasks of the current user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMePrivateTasks", + "summary": "Creates a copy of an existing filter.", + "description": "Copies the filter definition and query.\r\n The copied filter will be owned only by the requesting user.\r\n The name of the copied filter will be \"{original name} (Copy)\" or \"{original name} (Kopie)\" for German users.\r\n\r\nAny authenticated user.", + "operationId": "PostMeFilterCopyByFilterId", "parameters": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "filterId", + "in": "path", + "description": "The identifier of the filter to copy.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -13414,10 +11273,17 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } + "$ref": "#/components/schemas/Filter" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -13458,28 +11324,45 @@ } } }, - "/me/privatetasks/deletetags": { - "post": { + "/me/filters/{filterId}/{entityType}": { + "get": { "tags": [ - "TaskTags" + "Filters" ], - "summary": "Removes a tag from all private tasks.", - "description": "Removes a tag from all private tasks of the current user.\r\n\r\nAny authenticated user.", - "operationId": "PostMePrivateTasksDeleteTags", - "requestBody": { - "description": "The model to remove the tag from all private tasks.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteTagForm" - } + "summary": "Evaluates a filter by applying it to the specified target user type and returning the filtered results.\n Supports standard paging, ordering, and additional query constraints from query parameters.", + "description": "Retrieves and evaluates a saved filter to return matching entities.\r\n\r\nAny authenticated user.", + "operationId": "GetMeFilterByFilterIdAndUserType", + "parameters": [ + { + "name": "filterId", + "in": "path", + "description": "The identifier of the filter to evaluate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "entityType", + "in": "path", + "description": "The entity type name (tasks, projects, companies, users).", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ObjectPagedResult" + } + } + } }, "400": { "description": "Bad Request", @@ -13500,41 +11383,13 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/privatetasks/tags": { - "get": { - "tags": [ - "TaskTags" - ], - "summary": "Returns all tags of the private tasks of the current user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMePrivateTasksTags", - "responses": { - "200": { - "description": "OK", + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModelWithCount" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -13555,24 +11410,15 @@ } } }, - "/me/privatetasks/taskstatuses": { + "/me/otherprivatetasks": { "get": { "tags": [ "PrivateTasks" ], - "summary": "Returns the task statuses for private tasks for the specified user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMyPrivateTaskStatuses", + "summary": "Returns reassigned private tasks.", + "description": "Returns private tasks originally created by the current user and later assigned to someone else.\r\n\r\nAny authenticated user.", + "operationId": "GetMeOtherPrivateTasks", "parameters": [ - { - "name": "userId", - "in": "query", - "description": "The id of the user.", - "schema": { - "type": "string", - "format": "uuid" - } - }, { "$ref": "#/components/parameters/page" }, @@ -13594,56 +11440,24 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TaskStatus" + "$ref": "#/components/schemas/TaskModel" } } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/privatetasks/updatetags": { - "post": { - "tags": [ - "TaskTags" - ], - "summary": "Updates a tag for all private tasks.", - "description": "Updates a tag for all private tasks of the current user.\r\n\r\nAny authenticated user.", - "operationId": "PostMePrivateTasksUpdateTags", - "requestBody": { - "description": "The model to update the tag including the old and new tag names.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TagUpdateForm" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, - "207": { - "description": "Multi-Status" - }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -13668,14 +11482,14 @@ } } }, - "/me/privatetasks/{taskId}": { + "/me/otherprivatetasks/{taskId}": { "get": { "tags": [ "PrivateTasks" ], - "summary": "Returns the private task with the specified id for the current user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMePrivateTaskByTaskId", + "summary": "Returns a reassigned private task.", + "description": "Returns the specified private task when it was created by the current user and assigned to someone else.\r\n\r\nAny authenticated user.", + "operationId": "GetMeOtherPrivateTaskByTaskId", "parameters": [ { "name": "taskId", @@ -13735,14 +11549,14 @@ } } }, - "/me/privatetasks/{taskId}/checklistitems": { + "/me/otherprivatetasks/{taskId}/checklistitems": { "get": { "tags": [ "ChecklistItems" ], - "summary": "Returns the checklist for a private task with the specified id.", - "description": "The user must be be assigned to the task.", - "operationId": "GetMyPrivateTaskChecklistItemsByUserIdAndTaskId", + "summary": "Returns the checklist items for a private task.", + "description": "Returns the checklist items for a private task. The checklist belongs to the specified private task. The user must be the creator of the task.", + "operationId": "GetMyOtherPrivateTaskChecklistItemsByUserIdAndTaskId", "parameters": [ { "name": "userId", @@ -13814,14 +11628,14 @@ } } }, - "/me/privatetasks/{taskId}/checklistitems/{checklistItemId}": { + "/me/otherprivatetasks/{taskId}/checklistitems/{checklistItemId}": { "get": { "tags": [ "ChecklistItems" ], - "summary": "Retrieves a checklist item from a private task.", - "description": "The user must be assigned to the task.", - "operationId": "GetMyPrivateTaskChecklistItemByUserIdAndTaskIdAndChecklistItemId", + "summary": "Returns a checklist item for a private task.", + "description": "Returns a checklist item for a private task. The checklist belongs to the specified private task. The user must be the creator of the task.", + "operationId": "GetMyOtherPrivateTaskChecklistItemByUserIdAndTaskIdAndChecklistItemId", "parameters": [ { "name": "userId", @@ -13845,7 +11659,7 @@ { "name": "checklistItemId", "in": "path", - "description": "The id of the checklist item to retrieve.", + "description": "The id of the checklist item.", "required": true, "schema": { "type": "string", @@ -13900,38 +11714,31 @@ } } }, - "/me/projecttasks": { + "/me/permissions": { "get": { "tags": [ - "ProjectTasks" - ], - "summary": "Returns all project tasks that the current user can see.", - "description": "The user must have `project-planning-data:read` permissions, otherwise only assigned tasks will be returned.", - "operationId": "GetMeProjectTasks", - "parameters": [ - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } + "Permissions" ], + "summary": "Returns permissions for the current user.", + "description": "Returns the current user's permissions for the selected workspace.\r\n\r\nAny authenticated user.", + "operationId": "GetMePermissions", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } + "$ref": "#/components/schemas/UserPermissionInfoExternal" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -13952,14 +11759,14 @@ } } }, - "/me/shareddocuments": { + "/me/privatedocuments": { "get": { "tags": [ "Documents" ], - "summary": "Returns all documents that were shared with the requesting user.", - "description": "Returns documents where the user has been explicitly granted document-level permissions\r\n (direct user permissions, team permissions, or workspace permissions on the document).\r\n Excludes the user's own private documents.\r\n Note: Also includes documents the user can access through their project or space memberships.\r\n\r\nAny authenticated user.", - "operationId": "GetMeSharedDocuments", + "summary": "Returns private documents for the current user.", + "description": "Returns private documents owned by the current user.\r\n\r\nAny authenticated user.", + "operationId": "GetMePrivateDocuments", "parameters": [ { "$ref": "#/components/parameters/page" @@ -14004,14 +11811,14 @@ } } }, - "/me/sharedfilters": { + "/me/privatedocuments/trash": { "get": { "tags": [ - "Filters" + "Documents" ], - "summary": "Returns filters explicitly shared with the current user.", - "description": "Returns filters where the requesting user has been granted explicit access through user permissions,\r\n team permissions, or workspace-wide filter permissions.\r\n Excludes filters owned by the requesting user.\r\n\r\nAny authenticated user.", - "operationId": "GetMeSharedFilters", + "summary": "Returns trashed private documents.", + "description": "Returns private documents owned by the current user that are in the trash.\r\n\r\nAny authenticated user.", + "operationId": "GetMePrivateDocumentsTrash", "parameters": [ { "$ref": "#/components/parameters/page" @@ -14034,21 +11841,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Filter" + "$ref": "#/components/schemas/DocumentModel" } } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -14066,24 +11863,15 @@ } } }, - "/me/sharedfilters/{entityType}": { + "/me/privatetasks": { "get": { "tags": [ - "Filters" + "PrivateTasks" ], - "summary": "Returns filters explicitly shared with the current user for the specified user type.", - "description": "Returns filters where the requesting user has been granted explicit access through user permissions,\r\n team permissions, or workspace-wide filter permissions and that match the requested user type.\r\n Excludes filters owned by the requesting user.\r\n\r\nAny authenticated user.", - "operationId": "GetMeSharedFiltersByUserType", + "summary": "Returns private tasks for the current user.", + "description": "Returns all private tasks owned by the current user.\r\n\r\nAny authenticated user.", + "operationId": "GetMePrivateTasks", "parameters": [ - { - "name": "entityType", - "in": "path", - "description": "The entity type route value.", - "required": true, - "schema": { - "type": "string" - } - }, { "$ref": "#/components/parameters/page" }, @@ -14105,14 +11893,14 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Filter" + "$ref": "#/components/schemas/TaskModel" } } } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -14120,192 +11908,16 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/tasks/tags": { - "get": { - "tags": [ - "AssignedTasks" - ], - "summary": "Returns all task tags the current user is allowed to see.", - "description": "The tags can be filtered by the properties of the task model.\r\n\r\nAny authenticated user.", - "operationId": "GetMeTasksTags", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/timeentries/last": { - "get": { - "tags": [ - "TimeEntries" - ], - "summary": "Returns the last time entry of a specified user.", - "description": "The last time entry is always the last one that was started.\r\n Time entries which are started in the future are ignored.\r\n If a time entry does not have a start time, 12.00 am is automatically assumed as the start time\r\n for comparison with other time entries from the same day.\r\n\r\nThe user must be an admin or the creator.", - "operationId": "GetMyLastTimeEntries", - "parameters": [ - { - "name": "userId", - "in": "query", - "description": "The id of the user.", - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeTracking" - } - } - } - }, - "204": { - "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "owner": "true" - } - } - }, - "/me/timetracking/pause": { - "post": { - "tags": [ - "TimeTracking" - ], - "summary": "Pauses a running time tracking for a user.", - "description": "If there is already a paused time tracking nothing happens. If there is no running time tracking, returns NoContent.\r\n\r\nThe user must be the creator.", - "operationId": "PostPauseMyTimeTracking", - "parameters": [ - { - "name": "userId", - "in": "query", - "description": "The id of the user.", - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeTracking" - } - } - } }, - "204": { - "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "owner": "true" - } - } - }, - "/me/timetracking/resume": { - "post": { - "tags": [ - "TimeTracking" - ], - "summary": "Resumes a paused time tracking for a user.", - "description": "If there is already a running time tracking nothing happens. If there is no running time tracking, returns NoContent.\r\n\r\nThe user must be the creator.", - "operationId": "PostResumeMyTimeTracking", - "parameters": [ - { - "name": "userId", - "in": "query", - "description": "The id of the user.", - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "$ref": "#/components/schemas/ErrorResponse" } } } - }, - "204": { - "description": "No Content" } }, "security": [ @@ -14319,149 +11931,50 @@ "v1" ], "x-access": { - "owner": "true" + "any": "true" } } }, - "/me/timetracking/start": { + "/me/privatetasks/deletetags": { "post": { "tags": [ - "TimeTracking" - ], - "summary": "Starts a new time tracking for a user.", - "description": "If there is already a running/paused time tracking it will be stopped automatically in order to start the new one.\r\n\r\nThe user must be an admin or the creator.", - "operationId": "PostStartMyTimeTracking", - "parameters": [ - { - "name": "userId", - "in": "query", - "description": "The id of the user.", - "schema": { - "type": "string", - "format": "uuid" - } - } + "TaskTags" ], + "summary": "Removes a tag from private tasks.", + "description": "Removes the submitted tag from the current user's private tasks.\r\n The user must have permission to edit the affected private tasks.", + "operationId": "PostMePrivateTasksDeleteTags", "requestBody": { - "description": "The model describing the time tracking to start.", + "description": "The model to remove the tag from all private tasks.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/StartTimeTrackingForm" + "$ref": "#/components/schemas/DeleteTagForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeTracking" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "owner": "true" - } - } - }, - "/me/timetracking/stop": { - "post": { - "tags": [ - "TimeTracking" - ], - "summary": "Stops the currently running time tracking of the specified user.", - "description": "The request body is optional. You can provide a stopReason to indicate how the tracking was stopped.\r\n For external API clients, the stopReason is automatically set to \"external-api\" regardless of what is provided.\r\n For this operation to work there must be a running time tracking for the user.\r\n\r\nThe user must be an admin or the creator.", - "operationId": "PostStopMyTimeTracking", - "parameters": [ - { - "name": "userId", - "in": "query", - "description": "The id of the user.", - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StopTimeTrackingForm" - } - } - } - }, - "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "204": { - "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "owner": "true" - } - } - }, - "/permissions/features": { - "get": { - "tags": [ - "Permissions" - ], - "summary": "Returns all available features.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetPermissionsFeatures", - "responses": { - "200": { - "description": "OK", + "401": { + "description": "Unauthorized", "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string" - } - }, - "example": [ - "https://www.awork.com" - ] + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } } @@ -14481,14 +11994,14 @@ } } }, - "/permissions/projectfeatures": { + "/me/privatetasks/tags": { "get": { "tags": [ - "Permissions" + "TaskTags" ], - "summary": "Returns all available project features.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetPermissionsProjectFeatures", + "summary": "Returns tags for the user's private tasks.", + "description": "Returns tags assigned to the current user's private tasks, including their usage counts.\r\n The user must have permission to view the affected private tasks.", + "operationId": "GetMePrivateTasksTags", "responses": { "200": { "description": "OK", @@ -14497,12 +12010,9 @@ "schema": { "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/BaseTagModelWithCount" } - }, - "example": [ - "https://www.awork.com" - ] + } } } } @@ -14522,15 +12032,24 @@ } } }, - "/projectmilestones": { + "/me/privatetasks/taskstatuses": { "get": { "tags": [ - "ProjectMilestones" + "PrivateTasks" ], - "summary": "Retrieves all project milestones.", + "summary": "Returns the task statuses for private tasks for the specified user.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectMilestones", + "operationId": "GetMyPrivateTaskStatuses", "parameters": [ + { + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + }, { "$ref": "#/components/parameters/page" }, @@ -14552,7 +12071,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ProjectMilestone" + "$ref": "#/components/schemas/TaskStatus" } } } @@ -14572,35 +12091,33 @@ "x-access": { "any": "true" } - }, + } + }, + "/me/privatetasks/updatetags": { "post": { "tags": [ - "ProjectMilestones" + "TaskTags" ], - "summary": "Creates a new project milestone.", - "description": "The user must either be admin, have 'project-planning-data:write' permissions on the project or be the creator.", - "operationId": "PostProjectMilestone", + "summary": "Updates a tag for private tasks.", + "description": "Updates the submitted tag across the current user's private tasks.\r\n The user must have permission to edit the affected private tasks.", + "operationId": "PostMePrivateTasksUpdateTags", "requestBody": { - "description": "The model containing milestone details.", + "description": "The model to update the tag including the old and new tag names.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestonePostForm" + "$ref": "#/components/schemas/TagUpdateForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectMilestone" - } - } - } + "204": { + "description": "No Content" + }, + "207": { + "description": "Multi-Status" }, "400": { "description": "Bad Request", @@ -14628,19 +12145,19 @@ } } }, - "/projectmilestones/{milestoneId}": { + "/me/privatetasks/{taskId}": { "get": { "tags": [ - "ProjectMilestones" + "PrivateTasks" ], - "summary": "Returns the specified project milestone.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectMilestoneByMilestoneId", + "summary": "Returns a private task for the current user.", + "description": "Returns the specified private task when it belongs to the current user.\r\n\r\nAny authenticated user.", + "operationId": "GetMePrivateTaskByTaskId", "parameters": [ { - "name": "milestoneId", + "name": "taskId", "in": "path", - "description": "The id of the milestone.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -14654,7 +12171,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestone" + "$ref": "#/components/schemas/TaskModel" } } } @@ -14695,19 +12212,28 @@ } } }, - "/projectmilestones/{projectMilestoneId}": { - "delete": { + "/me/privatetasks/{taskId}/checklistitems": { + "get": { "tags": [ - "ProjectMilestones" + "ChecklistItems" ], - "summary": "Deletes a project milestone.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "DeleteProjectMilestoneById", + "summary": "Returns the checklist for a private task.", + "description": "Returns the checklist for a private task. The checklist belongs to the specified private task. The user must be be assigned to the task.", + "operationId": "GetMyPrivateTaskChecklistItemsByUserIdAndTaskId", "parameters": [ { - "name": "projectMilestoneId", + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskId", "in": "path", - "description": "The id of the project milestone to delete.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -14716,11 +12242,21 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChecklistItem" + } + } + } + } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -14753,19 +12289,40 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/me/privatetasks/{taskId}/checklistitems/{checklistItemId}": { + "get": { "tags": [ - "ProjectMilestones" + "ChecklistItems" ], - "summary": "Updates an existing project milestone.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PutProjectMilestoneById", + "summary": "Returns a checklist item from a private task.", + "description": "Returns a checklist item from a private task. The checklist belongs to the specified private task. The user must be assigned to the task.", + "operationId": "GetMyPrivateTaskChecklistItemByUserIdAndTaskIdAndChecklistItemId", "parameters": [ { - "name": "projectMilestoneId", + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskId", "in": "path", - "description": "The id of the project milestone.", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "checklistItemId", + "in": "path", + "description": "The id of the checklist item to retrieve.", "required": true, "schema": { "type": "string", @@ -14773,30 +12330,19 @@ } } ], - "requestBody": { - "description": "The model containing milestone details.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectMilestonePutForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestone" + "$ref": "#/components/schemas/ChecklistItem" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -14831,24 +12377,15 @@ } } }, - "/projectroles": { + "/me/projecttasks": { "get": { "tags": [ - "ProjectRoles" + "ProjectTasks" ], - "summary": "Returns all project roles.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectRoles", + "summary": "Returns project tasks for the current user.", + "description": "Returns project tasks visible to the current user.\r\n The user must have `project-planning-data:read` permission; otherwise only assigned tasks are returned.", + "operationId": "GetMeProjectTasks", "parameters": [ - { - "name": "includeMembers", - "in": "query", - "description": "Whether to include the members of each project role in the response.", - "schema": { - "type": "boolean", - "default": true - } - }, { "$ref": "#/components/parameters/page" }, @@ -14870,7 +12407,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ProjectRole" + "$ref": "#/components/schemas/TaskModel" } } } @@ -14890,38 +12427,98 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/me/shareddocuments": { + "get": { "tags": [ - "ProjectRoles" + "Documents" ], - "summary": "Creates a new project role.", - "description": "\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostProjectRole", - "requestBody": { - "description": "The model to create the project role.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectRoleForm" + "summary": "Returns documents shared with the current user.", + "description": "Returns documents shared directly or through project or document-space membership. Private documents are excluded.\r\n The user must have at least `read` permission for each returned document.", + "operationId": "GetMeSharedDocuments", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentModel" + } + } } } - }, - "required": true + } }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/sharedfilters": { + "get": { + "tags": [ + "Filters" + ], + "summary": "Returns filters explicitly shared with the current user.", + "description": "Returns filters where the requesting user has been granted explicit access through user permissions,\r\n team permissions, or workspace-wide filter permissions.\r\n Excludes filters owned by the requesting user.\r\n\r\nAny authenticated user.", + "operationId": "GetMeSharedFilters", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectRole" + "type": "array", + "items": { + "$ref": "#/components/schemas/Filter" + } } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -14942,32 +12539,39 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" - }, - "x-subscriptionlevel": { - "minimumPlan": "standard" + "any": "true" } } }, - "/projectroles/byuserid/{userId}": { + "/me/sharedfilters/{entityType}": { "get": { "tags": [ - "ProjectRoles" + "Filters" ], - "summary": "Returns all project roles assigned to the specified user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectRolesByUserIdByUserId", + "summary": "Returns filters explicitly shared with the current user for the specified user type.", + "description": "Returns filters where the requesting user has been granted explicit access through user permissions,\r\n team permissions, or workspace-wide filter permissions and that match the requested user type.\r\n Excludes filters owned by the requesting user.\r\n\r\nAny authenticated user.", + "operationId": "GetMeSharedFiltersByUserType", "parameters": [ { - "name": "userId", + "name": "entityType", "in": "path", - "description": "The id of the user.", + "description": "The entity type route value.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -14978,7 +12582,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ProjectRole" + "$ref": "#/components/schemas/Filter" } } } @@ -15010,20 +12614,57 @@ } } }, - "/projectroles/{projectRoleId}": { + "/me/tasks/tags": { "get": { "tags": [ - "ProjectRoles" + "AssignedTasks" ], - "summary": "Returns a project role by its id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectRoleById", + "summary": "Returns tags for tasks visible to the user.", + "description": "Returns tags assigned to tasks visible to the current user. Tags can be filtered by task properties.\r\n The user must have permission to view the affected tasks.", + "operationId": "GetMeTasksTags", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/timeentries/last": { + "get": { + "tags": [ + "TimeEntries" + ], + "summary": "Returns the last time entry of a specified user.", + "description": "The last time entry is always the last one that was started.\r\n Time entries which are started in the future are ignored.\r\n If a time entry does not have a start time, 12.00 am is automatically assumed as the start time\r\n for comparison with other time entries from the same day.\r\n\r\nThe user must be an admin or the creator.", + "operationId": "GetMyLastTimeEntries", "parameters": [ { - "name": "projectRoleId", - "in": "path", - "description": "The id of the project role.", - "required": true, + "name": "userId", + "in": "query", + "description": "The id of the user.", "schema": { "type": "string", "format": "uuid" @@ -15036,20 +12677,63 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectRole" + "$ref": "#/components/schemas/TimeTracking" } } } }, - "404": { - "description": "Not Found", + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "owner": "true" + } + } + }, + "/me/timetracking/pause": { + "post": { + "tags": [ + "TimeTracking" + ], + "summary": "Pauses a running time tracking for a user.", + "description": "If there is already a paused time tracking nothing happens. If there is no running time tracking, returns NoContent.\r\n\r\nThe user must be the creator.", + "operationId": "PostPauseMyTimeTracking", + "parameters": [ + { + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TimeTracking" } } } + }, + "204": { + "description": "No Content" } }, "security": [ @@ -15063,66 +12747,96 @@ "v1" ], "x-access": { - "any": "true" + "owner": "true" } - }, - "put": { + } + }, + "/me/timetracking/resume": { + "post": { "tags": [ - "ProjectRoles" + "TimeTracking" ], - "summary": "Updates an existing project role.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PutProjectRoleById", + "summary": "Resumes a paused time tracking for a user.", + "description": "If there is already a running time tracking nothing happens. If there is no running time tracking, returns NoContent.\r\n\r\nThe user must be the creator.", + "operationId": "PostResumeMyTimeTracking", "parameters": [ { - "name": "projectRoleId", - "in": "path", - "description": "The id of the project role.", - "required": true, + "name": "userId", + "in": "query", + "description": "The id of the user.", "schema": { "type": "string", "format": "uuid" } } ], - "requestBody": { - "description": "The model to update the project role.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectRoleForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectRole" + "$ref": "#/components/schemas/TimeTracking" } } } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "owner": "true" + } + } + }, + "/me/timetracking/start": { + "post": { + "tags": [ + "TimeTracking" + ], + "summary": "Starts a new time tracking for a user.", + "description": "If there is already a running/paused time tracking it will be stopped automatically in order to start the new one.\r\n\r\nThe user must be an admin or the creator.", + "operationId": "PostStartMyTimeTracking", + "parameters": [ + { + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model describing the time tracking to start.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StartTimeTrackingForm" } } }, - "404": { - "description": "Not Found", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TimeTracking" } } } @@ -15140,24 +12854,23 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "write" + "owner": "true" } } }, - "/projectroles/{projectRoleId}/delete": { + "/me/timetracking/stop": { "post": { "tags": [ - "ProjectRoles" + "TimeTracking" ], - "summary": "Deletes a project role and migrates its members to a new role.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostProjectRoleDeleteByProjectRoleId", + "summary": "Stops the currently running time tracking of the specified user.", + "description": "The request body is optional. You can provide a stopReason to indicate how the tracking was stopped.\r\n For external API clients, the stopReason is automatically set to \"external-api\" regardless of what is provided.\r\n For this operation to work there must be a running time tracking for the user.\r\n\r\nThe user must be an admin or the creator.", + "operationId": "PostStopMyTimeTracking", "parameters": [ { - "name": "projectRoleId", - "in": "path", - "description": "The id of the project role.", - "required": true, + "name": "userId", + "in": "query", + "description": "The id of the user.", "schema": { "type": "string", "format": "uuid" @@ -15165,39 +12878,27 @@ } ], "requestBody": { - "description": "The model to delete the project role.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectRoleDeleteForm" + "$ref": "#/components/schemas/StopTimeTrackingForm" } } - }, - "required": true + } }, "responses": { "200": { - "description": "OK" - }, - "400": { - "description": "Bad Request", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TimeTracking" } } } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -15212,42 +12913,18 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "write" + "owner": "true" } } }, - "/projectroles/{projectRoleId}/permissions": { + "/permissions/features": { "get": { "tags": [ - "ProjectRoles" - ], - "summary": "Returns all permissions assigned to a project role.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectRolePermissionsByProjectRoleId", - "parameters": [ - { - "name": "projectRoleId", - "in": "path", - "description": "The id of the project role.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } + "Permissions" ], + "summary": "Returns available workspace features.", + "description": "Returns feature keys available in the selected workspace, including AI features when available to the workspace.\r\n\r\nAny authenticated user.", + "operationId": "GetPermissionsFeatures", "responses": { "200": { "description": "OK", @@ -15256,19 +12933,12 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/PermissionOfProjectRole" + "type": "string" } - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + }, + "example": [ + "https://www.awork.com" + ] } } } @@ -15286,65 +12956,30 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/permissions/projectfeatures": { + "get": { "tags": [ - "ProjectRoles" - ], - "summary": "Creates or updates a permission for a project role.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectRolePermissionsByProjectRoleId", - "parameters": [ - { - "name": "projectRoleId", - "in": "path", - "description": "The id of the project role.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Permissions" ], - "requestBody": { - "description": "The model to create or update the project role permission.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PermissionOfProjectRoleForm" - } - } - }, - "required": true - }, + "summary": "Returns available project features.", + "description": "Returns project feature keys available in the selected workspace, including AI features when available to the workspace.\r\n\r\nAny authenticated user.", + "operationId": "GetPermissionsProjectFeatures", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PermissionOfProjectRole" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + "https://www.awork.com" + ] } } } @@ -15360,19 +12995,18 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projects": { + "/projectmilestones": { "get": { "tags": [ - "Projects" + "ProjectMilestones" ], - "summary": "Returns all projects.", - "description": "Returns all projects the user has `read` permissions for.", - "operationId": "GetProjects", + "summary": "Returns visible project milestones.", + "description": "Returns project milestones visible to the current user.\r\n The user must have `project-planning-data:read` permission for each returned project.", + "operationId": "GetProjectMilestones", "parameters": [ { "$ref": "#/components/parameters/page" @@ -15395,7 +13029,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Project" + "$ref": "#/components/schemas/ProjectMilestone" } } } @@ -15418,17 +13052,17 @@ }, "post": { "tags": [ - "Projects" + "ProjectMilestones" ], - "summary": "Creates a new project.", - "description": "Creates a new project.\r\n\r\nThe user must be an admin or have `project-create:write` permissions.", - "operationId": "PostProject", + "summary": "Creates a project milestone.", + "description": "Creates a milestone in the specified project.\r\n The user must be the project creator or have `project-planning-data:write` permission for the project.", + "operationId": "PostProjectMilestone", "requestBody": { - "description": "The model to create the project.", + "description": "The model containing milestone details.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ExtendedProjectForm" + "$ref": "#/components/schemas/ProjectMilestonePostForm" } } }, @@ -15440,7 +13074,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" + "$ref": "#/components/schemas/ProjectMilestone" } } } @@ -15467,54 +13101,43 @@ "v1" ], "x-access": { - "admin": "true", - "project-create": "write" + "any": "true" } } }, - "/projects/batch/{operation}": { - "post": { + "/projectmilestones/{milestoneId}": { + "get": { "tags": [ - "Projects" + "ProjectMilestones" ], - "summary": "Edits multiple projects using the specified operation.", - "description": "Returns MultiStatus including the list of successful and failed projects.\r\n \r\n Supported operations:\r\n
    \r\n
  • changeprojectstatus: changes the status of all selected projects.
  • \r\n
  • changeprojecttype: changes the type of all selected projects.
  • \r\n
  • linkworkflow: links a workflow to all selected projects.
  • \r\n
  • setclient: sets the client for all selected projects.
  • \r\n
  • setprojectlead: changes the responsible project member for all selected projects.
  • \r\n
  • addteams: adds teams to all selected projects.
  • \r\n
  • removeteams: removes teams from all selected projects.
  • \r\n
  • setdates: sets or removes project start and due dates.
  • \r\n
  • adjustdates: offsets project start and due dates by the specified amount of days.
  • \r\n
  • addtags: adds tags to all selected projects.
  • \r\n
  • removetags: removes tags from all selected projects.
  • \r\n
  • delete: deletes all selected projects.
  • \r\n
The user must have `write` permissions on all projects as well as related entities modified by the operation.", - "operationId": "PostProjectsBatchByOperation", + "summary": "Returns the specified project milestone.", + "description": "Returns the specified milestone when its project is visible to the current user.\r\n The user must have `project-planning-data:read` permission for the project.", + "operationId": "GetProjectMilestoneByMilestoneId", "parameters": [ { - "name": "operation", + "name": "milestoneId", "in": "path", - "description": "Batch operation route key.", + "description": "The id of the milestone.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], - "requestBody": { - "description": "Validated request body for the selected operation.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectBatchOperationForm" - } - } - }, - "required": true - }, "responses": { - "207": { - "description": "Multi-Status", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MultiStatusResult" + "$ref": "#/components/schemas/ProjectMilestone" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -15523,8 +13146,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -15549,25 +13172,26 @@ } } }, - "/projects/deletetags": { - "post": { + "/projectmilestones/{projectMilestoneId}": { + "delete": { "tags": [ - "ProjectTags" + "ProjectMilestones" ], - "summary": "Removes a tag from all projects.", - "description": "\r\n\r\nThe user must be an admin or have `project-master-data:write` permissions.", - "operationId": "PostProjectsDeleteTags", - "requestBody": { - "description": "The model to remove the tag from all projects.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteTagForm" - } + "summary": "Deletes the specified project milestone.", + "description": "Deletes the specified milestone from its project.\r\n The user must be the project creator or have `project-planning-data:write` permission for the project.", + "operationId": "DeleteProjectMilestoneById", + "parameters": [ + { + "name": "projectMilestoneId", + "in": "path", + "description": "The id of the project milestone to delete.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - }, - "required": true - }, + } + ], "responses": { "204": { "description": "No Content" @@ -15582,8 +13206,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -15604,37 +13228,46 @@ "v1" ], "x-access": { - "admin": "true", - "project-master-data": "write" + "any": "true" } - } - }, - "/projects/key/{projectKey}": { - "get": { + }, + "put": { "tags": [ - "Projects" + "ProjectMilestones" ], - "summary": "Returns the project with the specified key.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectsKeyByProjectKey", + "summary": "Updates the specified project milestone.", + "description": "Updates the specified milestone in its project.\r\n The user must be the project creator or have `project-planning-data:write` permission for the project.", + "operationId": "PutProjectMilestoneById", "parameters": [ { - "name": "projectKey", + "name": "projectMilestoneId", "in": "path", - "description": "The project key to lookup.", + "description": "The id of the project milestone.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], + "requestBody": { + "description": "The model containing milestone details.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectMilestonePutForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" + "$ref": "#/components/schemas/ProjectMilestone" } } } @@ -15649,16 +13282,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -15685,63 +13308,37 @@ } } }, - "/projects/projecttasks/tags": { + "/projectroles": { "get": { "tags": [ - "ProjectTasks" + "ProjectRoles" ], - "summary": "Returns all tags of the project tasks.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectsProjectTasksTags", + "summary": "Returns project roles in the workspace.", + "description": "Returns project roles in the workspace. Set `includeMembers` to include each role's members.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectRoles", "parameters": [ { - "name": "projectId", + "name": "includeMembers", "in": "query", - "description": "The id of the project to filter tags by. Returns tags of all projects if not provided.", + "description": "Whether to include the members of each project role in the response.", "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } - } - } + "type": "boolean", + "default": true } - } - }, - "security": [ + }, { - "oauth2": [ - "full_access" - ] + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/projects/tags": { - "get": { - "tags": [ - "ProjectTags" - ], - "summary": "Returns all tags currently in use by projects.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectsTags", "responses": { "200": { "description": "OK", @@ -15750,31 +13347,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/BaseTagModelWithCount" + "$ref": "#/components/schemas/ProjectRole" } } } } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -15790,43 +13367,38 @@ "x-access": { "any": "true" } - } - }, - "/projects/updatetags": { + }, "post": { "tags": [ - "ProjectTags" + "ProjectRoles" ], - "summary": "Updates a tag globally for all projects.", - "description": "\r\n\r\nThe user must be an admin or have `project-master-data:write` permissions.", - "operationId": "PostProjectsUpdateTags", + "summary": "Creates a project role.", + "description": "Creates a project role with the submitted name and settings.\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostProjectRole", "requestBody": { - "description": "The model containing the tag updates.", + "description": "The model to create the project role.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TagUpdateForm" + "$ref": "#/components/schemas/ProjectRoleForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectRole" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -15848,23 +13420,26 @@ ], "x-access": { "admin": "true", - "project-master-data": "write" + "workspace-manage-config": "write" + }, + "x-subscriptionlevel": { + "minimumPlan": "standard" } } }, - "/projects/{projectId}": { + "/projectroles/byuserid/{userId}": { "get": { "tags": [ - "Projects" + "ProjectRoles" ], - "summary": "Returns the project with the specified id.", - "description": "The user must either be admin, have `project-master-data:read` permissions or be the creator of the project.", - "operationId": "GetProjectById", + "summary": "Returns roles assigned to the specified user.", + "description": "Returns project roles assigned to the specified user in the workspace.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectRolesByUserIdByUserId", "parameters": [ { - "name": "projectId", + "name": "userId", "in": "path", - "description": "The id of the project.", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -15878,17 +13453,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectRole" + } } } } @@ -15917,19 +13485,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projectroles/{projectRoleId}": { + "get": { "tags": [ - "Projects" + "ProjectRoles" ], - "summary": "Updates the project with the specified id.", - "description": "Updates the project with the specified id.\r\n Special handling for retainer projects:\r\n If the project has at least one Retainer, the IsRetainer flag is automatically set to true.\r\n For retainer projects, the TimeBudget cannot be set. Instead the TimeBudget is the sum of all retainer budgets.\r\n \r\n The user has to be the creator of the project or needs `write` permissions of the feature `project-master-data`.", - "operationId": "PutProjectById", + "summary": "Returns the specified project role.", + "description": "Returns the project role with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectRoleById", "parameters": [ { - "name": "projectId", + "name": "projectRoleId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project role.", "required": true, "schema": { "type": "string", @@ -15937,44 +13507,13 @@ } } ], - "requestBody": { - "description": "The model containing the new project details.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectPutForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectRole" } } } @@ -16003,50 +13542,44 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/activities": { - "get": { + }, + "put": { "tags": [ - "Project Activities" + "ProjectRoles" ], - "summary": "Returns all activities of the project with the specified id.", - "description": "The activities contain information about the type of the activity, which property was changed and by whom.\r\n This contains changes to first-level properties of the project, like name, description, status, etc., as well as several related entities, such as tags, assignments, etc.\r\n This does not include activities of sub-entities, like tasks of a project or comments on a task.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectActivities", + "summary": "Updates the specified project role.", + "description": "Updates the specified role's name or default status. Changing the default role updates the previous default role.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PutProjectRoleById", "parameters": [ { - "name": "projectId", + "name": "projectRoleId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project role.", "required": true, "schema": { "type": "string", "format": "uuid" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + } } ], + "requestBody": { + "description": "The model to update the project role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectRoleForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ActivityModel" - } + "$ref": "#/components/schemas/ProjectRole" } } } @@ -16061,16 +13594,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -16093,23 +13616,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/projects/{projectId}/addprojectmember": { + "/projectroles/{projectRoleId}/delete": { "post": { "tags": [ - "ProjectMembers" + "ProjectRoles" ], - "summary": "Adds a project member to the project with the specified id.", - "description": "Adds a project member to the project with the specified id.\r\n The new project member can also be set as a responsible project member, but only if no other member of this project is responsible.\r\n It is necessary that the project role is available in this project, otherwise the member cannot be added.\r\n A project role is available when they are connected to the specified project type of the project.\r\n A user can only be added to the project once.\r\n \r\n The user has to be the creator or needs `project-master-data:manage` permissions on the project.", - "operationId": "PostProjectAddProjectMemberByProjectId", + "summary": "Deletes a project role and migrates members.", + "description": "Deletes the specified project role and moves its members to the role selected in the request.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostProjectRoleDeleteByProjectRoleId", "parameters": [ { - "name": "projectId", + "name": "projectRoleId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project role.", "required": true, "schema": { "type": "string", @@ -16118,11 +13642,11 @@ } ], "requestBody": { - "description": "The model containing project member details.", + "description": "The model to delete the project role.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMemberForm" + "$ref": "#/components/schemas/ProjectRoleDeleteForm" } } }, @@ -16130,11 +13654,24 @@ }, "responses": { "200": { - "description": "OK", + "description": "OK" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMember" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -16151,44 +13688,43 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/projects/{projectId}/addtags": { - "post": { + "/projectroles/{projectRoleId}/permissions": { + "get": { "tags": [ - "ProjectTags" + "ProjectRoles" ], - "summary": "Adds a batch of tags to the project with the specified id.", - "description": "To add tags to a project the user must have `project-master-data:write` permissions on the specified project.", - "operationId": "PostProjectAddTagsByProjectId", + "summary": "Returns permissions for the specified project role.", + "description": "Returns permissions assigned to the specified project role. AI role permissions are included only when available to the workspace.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectRolePermissionsByProjectRoleId", "parameters": [ { - "name": "projectId", + "name": "projectRoleId", "in": "path", - "description": "The id of the project to add tags for.", + "description": "The id of the project role.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The model containing the tags to add.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TagForm" - } - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", @@ -16197,32 +13733,12 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/BaseTagModel" + "$ref": "#/components/schemas/PermissionOfProjectRole" } } } } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -16247,21 +13763,19 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/addtaskbundle": { + }, "post": { "tags": [ - "TaskBundles" + "ProjectRoles" ], - "summary": "Adds a task bundle to a project.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostProjectAddTaskBundleByProjectId", + "summary": "Updates a permission for a project role.", + "description": "Creates, updates, or removes the submitted permission for the specified project role. AI role permissions require an eligible workspace plan.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectRolePermissionsByProjectRoleId", "parameters": [ { - "name": "projectId", + "name": "projectRoleId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project role.", "required": true, "schema": { "type": "string", @@ -16270,32 +13784,29 @@ } ], "requestBody": { - "description": "The add Task Bundle form payload.", + "description": "The model to create or update the project role permission.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AddTaskBundleForm" + "$ref": "#/components/schemas/PermissionOfProjectRoleForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/PermissionOfProjectRole" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -16326,29 +13837,20 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/allfiles": { + "/projects": { "get": { "tags": [ - "ProjectFiles" + "Projects" ], - "summary": "Returns all files of the project with the specified id.", - "description": "Returns all files of the project including the ones of tasks linked to that project, with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetAllProjectFiles", + "summary": "Returns projects visible to the current user.", + "description": "Returns projects visible to the current user.\r\n The user must have `read` permission for each returned project.", + "operationId": "GetProjects", "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the entity.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, { "$ref": "#/components/parameters/page" }, @@ -16370,7 +13872,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/Project" } } } @@ -16390,38 +13892,42 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/automations": { - "get": { + }, + "post": { "tags": [ - "Project Automations" + "Projects" ], - "summary": "Returns all automations of the specified project.", - "description": "The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", - "operationId": "GetProjectAutomations", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Creates a project.", + "description": "Creates a project in the selected workspace and returns it.\r\n\r\nThe user must be an admin or have `project-create:write` permissions.", + "operationId": "PostProject", + "requestBody": { + "description": "The model to create the project.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExtendedProjectForm" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Automation" - } + "$ref": "#/components/schemas/Project" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -16438,46 +13944,48 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-create": "write" } - }, + } + }, + "/projects/batch/{operation}": { "post": { "tags": [ - "Project Automations" + "Projects" ], - "summary": "Creates a new automation for the specified project.", - "description": "Creates a new automation for the project with the specified id.\r\n The user needs to be the owner of the project or have 'write' permissions of\r\n the feature 'project-master-data' globally or in the project.\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nAny authenticated user.", - "operationId": "PostProjectAutomation", + "summary": "Applies an operation to selected projects.", + "description": "Applies the selected operation to each project and returns successful and failed results. Supported operations include changing status or type, linking workflows, updating clients, leads, dates, teams, and tags, and deleting projects.\r\n The user must have `write` permission for all projects and related entities modified by the operation.", + "operationId": "PostProjectsBatchByOperation", "parameters": [ { - "name": "projectId", + "name": "operation", "in": "path", - "description": "The id of the project.", + "description": "Batch operation route key.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "requestBody": { - "description": "The model to create the automation.", + "description": "Validated request body for the selected operation.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AutomationTriggerForm" + "$ref": "#/components/schemas/ProjectBatchOperationForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "207": { + "description": "Multi-Status", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" + "$ref": "#/components/schemas/MultiStatusResult" } } } @@ -16491,6 +13999,16 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -16505,42 +14023,28 @@ ], "x-access": { "any": "true" - }, - "x-subscriptionlevel": { - "minimumPlan": "standard" } } }, - "/projects/{projectId}/automations/{automationId}": { - "delete": { + "/projects/deletetags": { + "post": { "tags": [ - "Project Automations" + "ProjectTags" ], - "summary": "Deletes the specified automation for a given project.", - "description": "Deletes the specified automation for a given project.\r\n Also deletes all actions connected to the automation.\r\n The user needs to be the owner of the project or have 'write' permissions of\r\n the feature 'project-master-data' globally or in the project.\r\n Automations created from a workflow cannot be deleted via this endpoint.\r\n\r\nAny authenticated user.", - "operationId": "DeleteProjectAutomation", - "parameters": [ - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Removes a tag from all projects.", + "description": "Removes the submitted tag from every project in the workspace.\r\n\r\nThe user must be an admin or have `project-master-data:write` permissions.", + "operationId": "PostProjectsDeleteTags", + "requestBody": { + "description": "The model to remove the tag from all projects.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteTagForm" + } } }, - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], + "required": true + }, "responses": { "204": { "description": "No Content" @@ -16554,6 +14058,16 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -16567,35 +14081,27 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-master-data": "write" } - }, + } + }, + "/projects/key/{projectKey}": { "get": { "tags": [ - "Project Automations" + "Projects" ], - "summary": "Returns a specific automation from a project.", - "description": "Returns a specific automation of the project with the specified id.\r\n Returns NotFound if the automation doesnt exist.\r\n To get the the automation data the user needs to be the owner of the project or\r\n have 'read' permissions of the feature 'project-master-data' globally or in his project role.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectAutomation", + "summary": "Returns the project with the specified key.", + "description": "Returns the project matching the specified key after normalizing its case and surrounding spaces.\r\n The user must have `project-master-data:read` permission for the project.", + "operationId": "GetProjectsKeyByProjectKey", "parameters": [ { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "projectId", + "name": "projectKey", "in": "path", - "description": "The id of the project.", + "description": "The project key to lookup.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -16605,7 +14111,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" + "$ref": "#/components/schemas/Project" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -16624,64 +14160,37 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projects/projecttasks/tags": { + "get": { "tags": [ - "Project Automations" + "ProjectTasks" ], - "summary": "Updates the automation with the specified id.", - "description": "Updates the automation with the specified id.\r\n The user needs to be the owner of the project or have 'write' permissions of\r\n the feature 'project-master-data' globally or in the project.\r\n If the automation was created from a workflow, only the Enabled flag can be changed.\r\n\r\nAny authenticated user.", - "operationId": "PutProjectAutomation", + "summary": "Returns tags for project tasks.", + "description": "Returns tags currently assigned to tasks in projects visible to the current user.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectsProjectTasksTags", "parameters": [ - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, { "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, + "in": "query", + "description": "The id of the project to filter tags by. Returns tags of all projects if not provided.", "schema": { "type": "string", "format": "uuid" } } ], - "requestBody": { - "description": "The model to update the automation.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AutomationPutForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } } } } @@ -16702,36 +14211,14 @@ } } }, - "/projects/{projectId}/automations/{automationId}/actions": { + "/projects/tags": { "get": { "tags": [ - "Project Automations" - ], - "summary": "Gets the actions of a project automation.", - "description": "Gets all actions including their values of an automation.\r\n The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", - "operationId": "GetProjectAutomationActions", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "ProjectTags" ], + "summary": "Returns tags used by projects.", + "description": "Returns tags currently assigned to projects.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectsTags", "responses": { "200": { "description": "OK", @@ -16740,11 +14227,31 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Action" + "$ref": "#/components/schemas/BaseTagModelWithCount" } } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -16759,61 +14266,44 @@ ], "x-access": { "any": "true" - } - }, - "post": { - "tags": [ - "Project Automations" - ], - "summary": "Creates a new action for an automation.", - "description": "Creates a new action including its values for an automation. Actions cannot be added to automations created from a workflow.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", - "operationId": "PostProjectAutomationAction", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + } + } + }, + "/projects/updatetags": { + "post": { + "tags": [ + "ProjectTags" ], + "summary": "Updates a tag for all projects.", + "description": "Updates a tag across all projects. The submitted options can rename or merge the tag.\r\n\r\nThe user must be an admin or have `project-master-data:write` permissions.", + "operationId": "PostProjectsUpdateTags", "requestBody": { - "description": "The model to create an action.", + "description": "The model containing the tag updates.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ActionForm" + "$ref": "#/components/schemas/TagUpdateForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -16834,43 +14324,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-master-data": "write" } } }, - "/projects/{projectId}/automations/{automationId}/actions/{actionId}": { - "delete": { + "/projects/{projectId}": { + "get": { "tags": [ - "Project Automations" + "Projects" ], - "summary": "Deletes an action for a project automation.", - "description": "Deletes an action for an automation including all its values. Actions of automations created from a workflow cannot be deleted.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", - "operationId": "DeleteProjectAutomationAction", + "summary": "Returns the specified project.", + "description": "Returns the specified project's details and applies the user's visibility rules.\r\n The user must be the project creator or have `project-master-data:read` permission.", + "operationId": "GetProjectById", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "actionId", - "in": "path", - "description": "The id of the action.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -16879,11 +14350,28 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -16907,38 +14395,18 @@ "any": "true" } }, - "get": { + "put": { "tags": [ - "Project Automations" + "Projects" ], - "summary": "Gets a specific action for a project automation.", - "description": "The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", - "operationId": "GetProjectAutomationAction", + "summary": "Updates the specified project.", + "description": "Updates the specified project's details. Retainer projects derive their time budget from retainer budgets, and changing the description can clear its live-editing document.\r\n \r\n The user must be the project creator or have `project-master-data:write` permission.", + "operationId": "PutProjectById", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "actionId", - "in": "path", - "description": "The id of the action.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -16946,13 +14414,54 @@ } } ], + "requestBody": { + "description": "The model containing the new project details.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectPutForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" + "$ref": "#/components/schemas/Project" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -16971,19 +14480,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projects/{projectId}/activities": { + "get": { "tags": [ - "Project Automations" + "Project Activities" ], - "summary": "Updates a specifc action of a project automation.", - "description": "Updates an exsting action including its values for an automation. Actions of automations created from a workflow cannot be modified.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", - "operationId": "PutProjectAutomationAction", + "summary": "Returns all activities of the project with the specified id.", + "description": "The activities contain information about the type of the activity, which property was changed and by whom.\r\n This contains changes to first-level properties of the project, like name, description, status, etc., as well as several related entities, such as tags, assignments, etc.\r\n This does not include activities of sub-entities, like tasks of a project or comments on a task.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectActivities", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project of the automation.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -16991,44 +14502,28 @@ } }, { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" }, { - "name": "actionId", - "in": "path", - "description": "The id of the action.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The model to update an action.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ActionForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" + "type": "array", + "items": { + "$ref": "#/components/schemas/ActivityModel" + } } } } @@ -17042,6 +14537,26 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -17059,39 +14574,19 @@ } } }, - "/projects/{projectId}/automations/{automationId}/actions/{actionId}/updateorder": { + "/projects/{projectId}/addprojectmember": { "post": { "tags": [ - "Project Automations" + "ProjectMembers" ], - "summary": "Updates the order of a given action of a project automation.", - "description": "Updates the order of a given action in the list of actions of the specific project automation. Actions of automations created from a workflow cannot be modified.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", - "operationId": "PostUpdateProjectAutomationActionOrder", + "summary": "Adds a member to the specified project.", + "description": "Adds a member to the specified project. The member can be responsible when no other responsible member exists, and the selected role must be available for the project's type.\r\n The user must be the project creator or have `project-master-data:manage` permission for the project.", + "operationId": "PostProjectAddProjectMemberByProjectId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "actionId", - "in": "path", - "description": "The id of the action.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -17100,26 +14595,23 @@ } ], "requestBody": { - "description": "The model to update the order.", + "description": "The model containing project member details.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateOrderForm" + "$ref": "#/components/schemas/ProjectMemberForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectMember" } } } @@ -17140,27 +14632,19 @@ } } }, - "/projects/{projectId}/automations/{automationId}/execute": { + "/projects/{projectId}/addtags": { "post": { "tags": [ - "Project Automations" + "ProjectTags" ], - "summary": "Executes a manual automation for a task.", - "description": "Can be used to trigger an automation that uses a manual trigger for a specific task.\r\n The calling user becomes the initiator of the automation execution.\r\n The user must have write permissions on the specified task.", - "operationId": "PostExecuteProjectAutomation", + "summary": "Adds tags to the specified project.", + "description": "Adds the submitted tags and returns the tags assigned to the specified project.\r\n The user must have `project-master-data:write` permission for the specified project.", + "operationId": "PostProjectAddTagsByProjectId", "parameters": [ { "name": "projectId", "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", + "description": "The id of the project to add tags for.", "required": true, "schema": { "type": "string", @@ -17169,18 +14653,32 @@ } ], "requestBody": { + "description": "The model containing the tags to add.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AutomationExecuteForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/TagForm" + } } } }, "required": true }, "responses": { - "202": { - "description": "Accepted" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } + } + } + } }, "400": { "description": "Bad Request", @@ -17228,14 +14726,14 @@ } } }, - "/projects/{projectId}/autopilot": { - "delete": { + "/projects/{projectId}/addtaskbundle": { + "post": { "tags": [ - "Autopilot" + "TaskBundles" ], - "summary": "Deletes the autopilot of the project with the specified id.", - "description": "Deletes the autopilot of the project with the specified id.\r\n To access and modify the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", - "operationId": "DeleteProjectsAutopilotByProjectId", + "summary": "Adds a task bundle to the specified project.", + "description": "Adds the submitted task bundle and its tasks to the specified project.\r\n The user must have `project-planning-data:write` permission for the project.", + "operationId": "PostProjectAddTaskBundleByProjectId", "parameters": [ { "name": "projectId", @@ -17248,9 +14746,50 @@ } } ], + "requestBody": { + "description": "The add Task Bundle form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddTaskBundleForm" + } + } + }, + "required": true + }, "responses": { "204": { "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -17266,24 +14805,37 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/allfiles": { "get": { "tags": [ - "Autopilot" + "Entity Files" ], - "summary": "Returns the autopilot of the project with the specified id.", - "description": "Returns NoContent if the project does not have an autopilot setup.\r\n To get the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectsAutopilotByProjectId", + "summary": "Returns project files and files of tasks linked to the project.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectsAllFilesByProjectId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -17292,13 +14844,23 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Autopilot" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } } } } }, - "204": { - "description": "No Content" + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -17314,14 +14876,16 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/projects/{projectId}/automations": { + "get": { "tags": [ - "Autopilot" + "Project Automations" ], - "summary": "Creates a new autopilot for the project with the specified id.", - "description": "Creates a new autopilot for the project with the specified id.\r\n Also creates and enables all alerts for the new autopilot.\r\n For this action, the user needs to be the owner of the project or must have 'read' permissions\r\n of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", - "operationId": "PostProjectsAutopilotByProjectId", + "summary": "Returns all automations of the specified project.", + "description": "The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", + "operationId": "GetProjectAutomations", "parameters": [ { "name": "projectId", @@ -17334,24 +14898,16 @@ } } ], - "requestBody": { - "description": "The model used to create the autopilot.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AutopilotPostForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Autopilot" + "type": "array", + "items": { + "$ref": "#/components/schemas/Automation" + } } } } @@ -17371,13 +14927,13 @@ "any": "true" } }, - "put": { + "post": { "tags": [ - "Autopilot" + "Project Automations" ], - "summary": "Updates the autopilot of the project with the specified id.", - "description": "Updates the autopilot of the project with the specified id.\r\n To access and modify the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", - "operationId": "PutProjectsAutopilotByProjectId", + "summary": "Creates a new automation for the specified project.", + "description": "Creates a new automation for the project with the specified id.\r\n The user needs to be the owner of the project or have 'write' permissions of\r\n the feature 'project-master-data' globally or in the project.\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nAny authenticated user.", + "operationId": "PostProjectAutomation", "parameters": [ { "name": "projectId", @@ -17391,11 +14947,11 @@ } ], "requestBody": { - "description": "The model used to update the autopilot.", + "description": "The model to create the automation.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AutopilotPutForm" + "$ref": "#/components/schemas/AutomationTriggerForm" } } }, @@ -17407,7 +14963,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Autopilot" + "$ref": "#/components/schemas/Automation" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -17425,66 +14991,48 @@ ], "x-access": { "any": "true" + }, + "x-subscriptionlevel": { + "minimumPlan": "standard" } } }, - "/projects/{projectId}/changeprojecttype": { - "post": { + "/projects/{projectId}/automations/{automationId}": { + "delete": { "tags": [ - "Projects" + "Project Automations" ], - "summary": "Changes the project type of the project with the specified id.", - "description": "Changes the project type of the project with the specified id.\r\n \r\n The user has to be the creator of the project or needs `write` permissions of the feature `project-master-data`.", - "operationId": "PostProjectChangeProjectTypeByProjectId", + "summary": "Deletes the specified automation for a given project.", + "description": "Deletes the specified automation for a given project.\r\n Also deletes all actions connected to the automation.\r\n The user needs to be the owner of the project or have 'write' permissions of\r\n the feature 'project-master-data' globally or in the project.\r\n Automations created from a workflow cannot be deleted via this endpoint.\r\n\r\nAny authenticated user.", + "operationId": "DeleteProjectAutomation", "parameters": [ { - "name": "projectId", + "name": "automationId", "in": "path", - "description": "The id of the project.", + "description": "The id of the automation.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The model to change the project type.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChangeProjectTypeForm" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } + } + ], + "responses": { + "204": { + "description": "No Content" }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -17507,17 +15055,25 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/changestatus": { - "post": { + }, + "get": { "tags": [ - "Projects" + "Project Automations" ], - "summary": "Changes the status of the project with the specified id.", - "description": "Changes the status of the project with the specified id.\r\n The project status must be associated with the project type used by the project.\r\n This potentially adds task bundles to the project and informs the project members about the status change.\r\n If the project is already in the specified status, nothing happens.\r\n \r\n The user has to be the creator of the project or needs `write` permissions of the feature `project-master-data`.", - "operationId": "PostProjectChangeStatusByProjectId", + "summary": "Returns a specific automation from a project.", + "description": "Returns a specific automation of the project with the specified id.\r\n Returns NotFound if the automation doesnt exist.\r\n To get the the automation data the user needs to be the owner of the project or\r\n have 'read' permissions of the feature 'project-master-data' globally or in his project role.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectAutomation", "parameters": [ + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, { "name": "projectId", "in": "path", @@ -17529,37 +15085,13 @@ } } ], - "requestBody": { - "description": "The model to change the project status.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChangeProjectStatusForm" - } - } - }, - "required": true - }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Automation" } } } @@ -17578,17 +15110,25 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/comments": { - "delete": { + }, + "put": { "tags": [ - "ProjectComments" + "Project Automations" ], - "summary": "Deletes all comments of the specified project.", - "description": "Deletes all comments of the specified project.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCommentsByProjectNameAndProjectId", + "summary": "Updates the automation with the specified id.", + "description": "Updates the automation with the specified id.\r\n The user needs to be the owner of the project or have 'write' permissions of\r\n the feature 'project-master-data' globally or in the project.\r\n If the automation was created from a workflow, only the Enabled flag can be changed.\r\n\r\nAny authenticated user.", + "operationId": "PutProjectAutomation", "parameters": [ + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, { "name": "projectId", "in": "path", @@ -17600,12 +15140,30 @@ } } ], + "requestBody": { + "description": "The model to update the automation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutomationPutForm" + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Automation" + } + } + } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -17628,19 +15186,21 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/automations/{automationId}/actions": { "get": { "tags": [ - "ProjectComments" + "Project Automations" ], - "summary": "Returns all comments of the project with the specified id.", - "description": "Returns all comments of the project with the specified id. The user needs read permissions on the project.\r\n\r\nAny authenticated user.", - "operationId": "GetCommentsByProjectNameAndProjectId", + "summary": "Gets the actions of a project automation.", + "description": "Gets all actions including their values of an automation.\r\n The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", + "operationId": "GetProjectAutomationActions", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project of the automation.", "required": true, "schema": { "type": "string", @@ -17648,16 +15208,14 @@ } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -17668,31 +15226,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/Action" } } } } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -17711,16 +15249,26 @@ }, "post": { "tags": [ - "ProjectComments" + "Project Automations" ], - "summary": "Creates a new comment on the project with the specified id.", - "description": "Creates a new comment on the project with the specified id.\r\n A user can only create a comment for him/herself, except for admins and api users.\r\n \r\n To create a comment the user must have at least `read` permissions on the specified project.", - "operationId": "PostCommentsByProjectNameAndProjectId", + "summary": "Creates a new action for an automation.", + "description": "Creates a new action including its values for an automation. Actions cannot be added to automations created from a workflow.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", + "operationId": "PostProjectAutomationAction", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project to create the comment for.", + "description": "The id of the project of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", "required": true, "schema": { "type": "string", @@ -17729,11 +15277,11 @@ } ], "requestBody": { - "description": "The model to create the comment.", + "description": "The model to create an action.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CommentForm" + "$ref": "#/components/schemas/ActionForm" } } }, @@ -17745,7 +15293,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/Action" } } } @@ -17759,26 +15307,6 @@ } } } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -17796,19 +15324,19 @@ } } }, - "/projects/{projectId}/comments/{commentId}": { + "/projects/{projectId}/automations/{automationId}/actions/{actionId}": { "delete": { "tags": [ - "ProjectComments" + "Project Automations" ], - "summary": "Deletes the comment with the specified id on the project with the specified id.", - "description": "Deletes the comment with the specified id on the project with the specified id.\r\n The delete includes the reactions of the comment.\r\n If there are any replies to the comment, they will be deleted as well.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCommentByProjectNameAndProjectIdAndCommentId", + "summary": "Deletes an action for a project automation.", + "description": "Deletes an action for an automation including all its values. Actions of automations created from a workflow cannot be deleted.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", + "operationId": "DeleteProjectAutomationAction", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project of the automation.", "required": true, "schema": { "type": "string", @@ -17816,9 +15344,19 @@ } }, { - "name": "commentId", + "name": "automationId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "description": "The id of the action.", "required": true, "schema": { "type": "string", @@ -17830,18 +15368,8 @@ "204": { "description": "No Content" }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -17867,16 +15395,16 @@ }, "get": { "tags": [ - "ProjectComments" + "Project Automations" ], - "summary": "Returns the comment with the specified id of the project with the specified id.", - "description": "Returns the comment with the specified id of the project with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetCommentByProjectNameAndProjectIdAndCommentId", + "summary": "Gets a specific action for a project automation.", + "description": "The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", + "operationId": "GetProjectAutomationAction", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project of the automation.", "required": true, "schema": { "type": "string", @@ -17884,9 +15412,19 @@ } }, { - "name": "commentId", + "name": "automationId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "description": "The id of the action.", "required": true, "schema": { "type": "string", @@ -17900,17 +15438,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Action" } } } @@ -17932,16 +15460,16 @@ }, "put": { "tags": [ - "ProjectComments" + "Project Automations" ], - "summary": "Updates the comment with the specified id on the project with the specified id.", - "description": "To update a comment the user must either have at least `read` permissions on the specified project, be the creator of the comment or be admin.", - "operationId": "PutCommentByProjectNameAndProjectIdAndCommentId", + "summary": "Updates a specifc action of a project automation.", + "description": "Updates an exsting action including its values for an automation. Actions of automations created from a workflow cannot be modified.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", + "operationId": "PutProjectAutomationAction", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project of the automation.", "required": true, "schema": { "type": "string", @@ -17949,9 +15477,19 @@ } }, { - "name": "commentId", + "name": "automationId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "description": "The id of the action.", "required": true, "schema": { "type": "string", @@ -17960,11 +15498,11 @@ } ], "requestBody": { - "description": "The model with the updated comment information.", + "description": "The model to update an action.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CommentPutForm" + "$ref": "#/components/schemas/ActionForm" } } }, @@ -17976,13 +15514,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/Action" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -17990,9 +15528,80 @@ } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/automations/{automationId}/actions/{actionId}/updateorder": { + "post": { + "tags": [ + "Project Automations" + ], + "summary": "Updates the order of a given action of a project automation.", + "description": "Updates the order of a given action in the list of actions of the specific project automation. Actions of automations created from a workflow cannot be modified.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", + "operationId": "PostUpdateProjectAutomationActionOrder", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, - "404": { - "description": "Not Found", + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "description": "The id of the action.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model to update the order.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrderForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -18017,19 +15626,18 @@ } } }, - "/projects/{projectId}/comments/{commentId}/react": { + "/projects/{projectId}/automations/{automationId}/execute": { "post": { "tags": [ - "ProjectComments" + "Project Automations" ], - "summary": "Updates the reactions of the comment with the specified id on the project with the specified id.", - "description": "To update a reaction of a comment the user must have at least `read` permissions on the specified project.", - "operationId": "PostCommentReactByProjectNameAndProjectIdAndCommentId", + "summary": "Executes a manual automation for a task.", + "description": "Can be used to trigger an automation that uses a manual trigger for a specific task.\r\n The calling user becomes the initiator of the automation execution.\r\n The user must have write permissions on the specified task.", + "operationId": "PostExecuteProjectAutomation", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -18037,9 +15645,8 @@ } }, { - "name": "commentId", + "name": "automationId", "in": "path", - "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -18048,19 +15655,28 @@ } ], "requestBody": { - "description": "The model used to update the reactions of the comment with the specified id.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ReactionForm" + "$ref": "#/components/schemas/AutomationExecuteForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "202": { + "description": "Accepted" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, "401": { "description": "Unauthorized", @@ -18098,14 +15714,52 @@ } } }, - "/projects/{projectId}/customfielddefinitions": { + "/projects/{projectId}/autopilot": { + "delete": { + "tags": [ + "Autopilot" + ], + "summary": "Deletes the autopilot of the project with the specified id.", + "description": "Deletes the autopilot of the project with the specified id.\r\n To access and modify the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", + "operationId": "DeleteProjectsAutopilotByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, "get": { "tags": [ - "CustomFields" + "Autopilot" ], - "summary": "Returns all custom field definitions linked to the specified project, including definitions linked via a workflow.", - "description": "The user must have either `project-master-data:read` permissions or access to at least one task in the project.", - "operationId": "GetProjectCustomFieldDefinitionsByProjectId", + "summary": "Returns the autopilot of the project with the specified id.", + "description": "Returns NoContent if the project does not have an autopilot setup.\r\n To get the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectsAutopilotByProjectId", "parameters": [ { "name": "projectId", @@ -18124,30 +15778,66 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" - } + "$ref": "#/components/schemas/Autopilot" } } } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + }, + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "Autopilot" + ], + "summary": "Creates a new autopilot for the project with the specified id.", + "description": "Creates a new autopilot for the project with the specified id.\r\n Also creates and enables all alerts for the new autopilot.\r\n For this action, the user needs to be the owner of the project or must have 'read' permissions\r\n of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", + "operationId": "PostProjectsAutopilotByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model used to create the autopilot.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutopilotPostForm" } } }, - "404": { - "description": "Not Found", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Autopilot" } } } @@ -18166,16 +15856,14 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/customfielddefinitions/{customFieldDefinitionId}": { + }, "put": { "tags": [ - "CustomFields" + "Autopilot" ], - "summary": "Updates the order of a custom field definition linked to the specified project.", - "description": "The user must have `project-master-data:write` permissions or `write` permissions on the specified project.", - "operationId": "PutProjectCustomFieldDefinitionByProjectIdAndCustomFieldDefinitionId", + "summary": "Updates the autopilot of the project with the specified id.", + "description": "Updates the autopilot of the project with the specified id.\r\n To access and modify the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", + "operationId": "PutProjectsAutopilotByProjectId", "parameters": [ { "name": "projectId", @@ -18186,24 +15874,14 @@ "type": "string", "format": "uuid" } - }, - { - "name": "customFieldDefinitionId", - "in": "path", - "description": "The id of the custom field definition.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "requestBody": { - "description": "The model used to update the order of the custom field definition.", + "description": "The model used to update the autopilot.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldOrderPutForm" + "$ref": "#/components/schemas/AutopilotPutForm" } } }, @@ -18215,27 +15893,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldOrderForm" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Autopilot" } } } @@ -18256,14 +15914,14 @@ } } }, - "/projects/{projectId}/delete": { + "/projects/{projectId}/changeprojecttype": { "post": { "tags": [ "Projects" ], - "summary": "Deletes the project with the specified id.", - "description": "Deletes the project with the specified id.\r\n In the default case the related tasks of this project will also be deleted and the related time entries of this project and all tasks loose the relation to the deleted project and tasks.\r\n To delete the time entries as well, you can set the `deleteTimeTrackings` property of the request to `true`.\r\n \r\n The user has to be the creator of the project or needs `write` permissions of the feature `project-master-data`.", - "operationId": "PostProjectDeleteByProjectId", + "summary": "Changes the specified project's type.", + "description": "Changes the specified project's type and applies the new type settings.\r\n The user must be the project creator or have `project-master-data:write` permission.", + "operationId": "PostProjectChangeProjectTypeByProjectId", "parameters": [ { "name": "projectId", @@ -18277,11 +15935,11 @@ } ], "requestBody": { - "description": "The model containing deletion options.", + "description": "The model to change the project type.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectDeleteForm" + "$ref": "#/components/schemas/ChangeProjectTypeForm" } } }, @@ -18291,6 +15949,16 @@ "204": { "description": "No Content" }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "401": { "description": "Unauthorized", "content": { @@ -18327,19 +15995,19 @@ } } }, - "/projects/{projectId}/deletetags": { + "/projects/{projectId}/changestatus": { "post": { "tags": [ - "ProjectTags" + "Projects" ], - "summary": "Removes tags from the project with the specified id.", - "description": "To remove tags from a project the user must have `project-master-data:write` permissions on the specified project.", - "operationId": "PostProjectDeleteTagsByProjectId", + "summary": "Changes the specified project's status.", + "description": "Changes the specified project's status. The status must belong to the project's type; changing status can add task bundles and notify project members. Repeating the current status has no effect.\r\n The user must be the project creator or have `project-master-data:write` permission.", + "operationId": "PostProjectChangeStatusByProjectId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project to remove tags from.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -18348,14 +16016,11 @@ } ], "requestBody": { - "description": "The model containing the tags to remove.", + "description": "The model to change the project status.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DeleteTagForm" - } + "$ref": "#/components/schemas/ChangeProjectStatusForm" } } }, @@ -18365,9 +16030,6 @@ "204": { "description": "No Content" }, - "207": { - "description": "Multi-Status" - }, "400": { "description": "Bad Request", "content": { @@ -18378,16 +16040,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -18414,14 +16066,14 @@ } } }, - "/projects/{projectId}/documents": { - "get": { + "/projects/{projectId}/comments": { + "delete": { "tags": [ - "Documents" + "ProjectComments" ], - "summary": "Retrieves all documents for a project.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectDocumentsByProjectId", + "summary": "Deletes all comments of the specified project.", + "description": "Deletes all comments of the specified project.\r\n\r\nAny authenticated user.", + "operationId": "DeleteCommentsByProjectNameAndProjectId", "parameters": [ { "name": "projectId", @@ -18432,30 +16084,18 @@ "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -18474,16 +16114,14 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/documents/trash": { + }, "get": { "tags": [ - "Documents" + "ProjectComments" ], - "summary": "Retrieves all trashed documents for a project.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectDocumentsTrashByProjectId", + "summary": "Returns all comments of the project with the specified id.", + "description": "Returns all comments of the project with the specified id. The user needs read permissions on the project.\r\n\r\nAny authenticated user.", + "operationId": "GetCommentsByProjectNameAndProjectId", "parameters": [ { "name": "projectId", @@ -18516,11 +16154,31 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/DocumentModel" + "$ref": "#/components/schemas/Comment" } } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -18536,21 +16194,19 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/externalfiles": { + }, "post": { "tags": [ - "ProjectFiles" + "ProjectComments" ], - "summary": "Endpoint to batch create external files without uploading.", - "description": "Endpoint to create file infos with batch operation.\nCreated file infos don't have a version.\r\n\r\nAny authenticated user.", - "operationId": "CreateExternalFiles", + "summary": "Creates a new comment on the project with the specified id.", + "description": "Creates a new comment on the project with the specified id.\r\n A user can only create a comment for him/herself, except for admins and api users.\r\n \r\n To create a comment the user must have at least `read` permissions on the specified project.", + "operationId": "PostCommentsByProjectNameAndProjectId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project to create the comment for.", "required": true, "schema": { "type": "string", @@ -18559,25 +16215,15 @@ } ], "requestBody": { - "description": "List of file forms.", + "description": "The model to create the comment.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - }, - "application/*+json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } + "$ref": "#/components/schemas/CommentForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -18585,7 +16231,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/Comment" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -18606,14 +16282,14 @@ } } }, - "/projects/{projectId}/files": { + "/projects/{projectId}/comments/{commentId}": { "delete": { "tags": [ - "ProjectFiles" + "ProjectComments" ], - "summary": "Deletes the files of the specified project.", - "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", - "operationId": "DeleteProjectFiles", + "summary": "Deletes the comment with the specified id on the project with the specified id.", + "description": "Deletes the comment with the specified id on the project with the specified id.\r\n The delete includes the reactions of the comment.\r\n If there are any replies to the comment, they will be deleted as well.\r\n\r\nAny authenticated user.", + "operationId": "DeleteCommentByProjectNameAndProjectIdAndCommentId", "parameters": [ { "name": "projectId", @@ -18624,11 +16300,41 @@ "type": "string", "format": "uuid" } + }, + { + "name": "commentId", + "in": "path", + "description": "The id of the comment.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { "204": { "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -18647,11 +16353,11 @@ }, "get": { "tags": [ - "ProjectFiles" + "ProjectComments" ], - "summary": "Returns all files of the project with the specified id.", - "description": "Returns all file metadata of the project with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectFiles", + "summary": "Returns the comment with the specified id of the project with the specified id.", + "description": "Returns the comment with the specified id of the project with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetCommentByProjectNameAndProjectIdAndCommentId", "parameters": [ { "name": "projectId", @@ -18664,16 +16370,14 @@ } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "commentId", + "in": "path", + "description": "The id of the comment.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -18682,10 +16386,17 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileInfo" - } + "$ref": "#/components/schemas/Comment" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -18705,13 +16416,13 @@ "any": "true" } }, - "post": { + "put": { "tags": [ - "ProjectFiles" + "ProjectComments" ], - "summary": "Creates a new project file for the project with the specified id..", - "description": "Uploads a new project file for the project with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateProjectFile", + "summary": "Updates the comment with the specified id on the project with the specified id.", + "description": "To update a comment the user must either have at least `read` permissions on the specified project, be the creator of the comment or be admin.", + "operationId": "PutCommentByProjectNameAndProjectIdAndCommentId", "parameters": [ { "name": "projectId", @@ -18722,74 +16433,11 @@ "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } }, - "400": { - "description": "Bad Request" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/projects/{projectId}/files/byuploadid": { - "post": { - "tags": [ - "FileUpload" - ], - "summary": "Creates a file from an upload id.", - "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file project from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", - "operationId": "PostUploadByUploadId", - "parameters": [ { - "name": "projectId", + "name": "commentId", "in": "path", - "description": "The id of the project to attach the file to.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -18798,11 +16446,11 @@ } ], "requestBody": { - "description": "The model describing the uploaded file metadata.", + "description": "The model with the updated comment information.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UploadByUploadIdForm" + "$ref": "#/components/schemas/CommentPutForm" } } }, @@ -18814,7 +16462,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/Comment" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -18845,19 +16503,29 @@ } } }, - "/projects/{projectId}/files/byurl": { + "/projects/{projectId}/comments/{commentId}/react": { "post": { "tags": [ - "ProjectFiles" + "ProjectComments" ], - "summary": "Uploads a new file by providing an url.", - "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", - "operationId": "CreateProjectFileByUrl", + "summary": "Updates the reactions of the comment with the specified id on the project with the specified id.", + "description": "To update a reaction of a comment the user must have at least `read` permissions on the specified project.", + "operationId": "PostCommentReactByProjectNameAndProjectIdAndCommentId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project the file is linked to.", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "commentId", + "in": "path", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -18866,81 +16534,40 @@ } ], "requestBody": { - "description": "The url, name and description of the file.", + "description": "The model used to update the reactions of the comment with the specified id.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" + "$ref": "#/components/schemas/ReactionForm" } } - } + }, + "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/projects/{projectId}/files/{fileId}": { - "delete": { - "tags": [ - "ProjectFiles" - ], - "summary": "Deletes the project file with the specified id.", - "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", - "operationId": "DeleteProjectFile", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } } - ], - "responses": { - "204": { - "description": "No Content" - } }, "security": [ { @@ -18955,14 +16582,16 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/customfielddefinitions": { "get": { "tags": [ - "Project Files" + "CustomFields" ], - "summary": "Returns the file with the specified id of the project with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByProjectNameAndProjectIdAndFileId", + "summary": "Returns custom fields for the specified project.", + "description": "Returns definitions linked directly to the project or through a workflow.\r\n The user must have `project-master-data:read` permission or access to at least one task in the project.", + "operationId": "GetProjectCustomFieldDefinitionsByProjectId", "parameters": [ { "name": "projectId", @@ -18973,16 +16602,6 @@ "type": "string", "format": "uuid" } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "responses": { @@ -18991,7 +16610,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" + } } } } @@ -19030,14 +16652,16 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/customfielddefinitions/{customFieldDefinitionId}": { "put": { "tags": [ - "ProjectFiles" + "CustomFields" ], - "summary": "Updates the metadata of the project file with the specified id.", - "description": "Updates the metadata of the project file with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "UpdateProjectFile", + "summary": "Updates custom field order in a project.", + "description": "Updates the order of a custom field definition linked to the specified project.\r\n The user must have `project-master-data:write` permission or `write` permission on the specified project.", + "operationId": "PutProjectCustomFieldDefinitionByProjectIdAndCustomFieldDefinitionId", "parameters": [ { "name": "projectId", @@ -19050,9 +16674,9 @@ } }, { - "name": "fileId", + "name": "customFieldDefinitionId", "in": "path", - "description": "The id of the file.", + "description": "The id of the custom field definition.", "required": true, "schema": { "type": "string", @@ -19061,19 +16685,15 @@ } ], "requestBody": { - "description": "The model to update the file with the specified id.", + "description": "The model used to update the order of the custom field definition.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" + "$ref": "#/components/schemas/CustomFieldOrderPutForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -19081,7 +16701,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/CustomFieldOrderForm" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -19102,14 +16742,14 @@ } } }, - "/projects/{projectId}/files/{fileId}/changeentity": { + "/projects/{projectId}/delete": { "post": { "tags": [ - "ProjectFiles" + "Projects" ], - "summary": "Changes the project this file belongs to.", - "description": "Changes the project this file belongs to.\nSwitch to the specified project or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", - "operationId": "ChangeProject", + "summary": "Deletes the specified project.", + "description": "Deletes the specified project. Related tasks are deleted by default, while related time entries lose their project and task links. Set `deleteTimeTrackings` to delete those time entries as well.\r\n \r\n The user must be the project creator or have `project-master-data:write` permission.", + "operationId": "PostProjectDeleteByProjectId", "parameters": [ { "name": "projectId", @@ -19120,40 +16760,39 @@ "type": "string", "format": "uuid" } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "requestBody": { - "description": "The model to change the entity information of the file.", + "description": "The model containing deletion options.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" + "$ref": "#/components/schemas/ProjectDeleteForm" } } - } + }, + "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -19174,29 +16813,19 @@ } } }, - "/projects/{projectId}/files/{fileId}/copy": { + "/projects/{projectId}/deletetags": { "post": { "tags": [ - "ProjectFiles" + "ProjectTags" ], - "summary": "Copies the file to a new project.", - "description": "Copies the file to a new project (meta and content).\r\n\r\nAny authenticated user.", - "operationId": "CopyToProject", + "summary": "Removes tags from the specified project.", + "description": "Removes the submitted tags from the specified project.\r\n The user must have `project-master-data:write` permission for the specified project.", + "operationId": "PostProjectDeleteTagsByProjectId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", + "description": "The id of the project to remove tags from.", "required": true, "schema": { "type": "string", @@ -19205,178 +16834,52 @@ } ], "requestBody": { - "description": "The model to change the entity information of the file.", + "description": "The model containing the tags to remove.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/DeleteTagForm" + } } } - } + }, + "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "207": { + "description": "Multi-Status" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/projects/{projectId}/files/{fileId}/download": { - "get": { - "tags": [ - "ProjectFiles" - ], - "summary": "Returns the content of the project file with the specified id.", - "description": "Returns the content of the project file. Uses the latest file version.\nIf the project file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectFileContent", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "width", - "in": "query", - "description": "Set width to resize.", - "schema": { - "type": "number", - "format": "double" - } }, - { - "name": "height", - "in": "query", - "description": "Set height to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "crop", - "in": "query", - "description": "Whether to crop the image when resizing it.", - "schema": { - "type": "boolean" - } - } - ], - "responses": { - "200": { - "description": "OK", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/ErrorResponse" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/projects/{projectId}/files/{fileId}/pdf": { - "get": { - "tags": [ - "ProjectFiles" - ], - "summary": "Returns the content of the file with the specified id as pdf.\ntype or conversion not possible.", - "description": "Returns the content of the project file. Uses the latest file version.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectFileContent", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } }, - { - "name": "inline", - "in": "query", - "description": "If inline is false, content-disposition header is attachment.", - "schema": { - "type": "boolean", - "default": false - } - } - ], - "responses": { - "200": { - "description": "OK", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -19397,14 +16900,14 @@ } } }, - "/projects/{projectId}/files/{fileId}/shareurl": { + "/projects/{projectId}/documents": { "get": { "tags": [ - "ProjectFiles" + "Documents" ], - "summary": "Returns an url to share the file.", - "description": "Returns a url to share the file.\r\n\r\nAny authenticated user.", - "operationId": "GetPublicToken", + "summary": "Returns documents in the specified project.", + "description": "Returns non-trashed documents visible in the specified project.\r\n The user must have permission to view the returned documents.", + "operationId": "GetProjectDocumentsByProjectId", "parameters": [ { "name": "projectId", @@ -19417,14 +16920,16 @@ } }, { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -19433,7 +16938,10 @@ "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentModel" + } } } } @@ -19454,14 +16962,14 @@ } } }, - "/projects/{projectId}/files/{fileId}/versions": { + "/projects/{projectId}/documents/trash": { "get": { "tags": [ - "ProjectFiles" + "Documents" ], - "summary": "Returns all file versions of the specified project file.", - "description": "Returns all file versions of the specified project file.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectFileVersions", + "summary": "Returns trashed documents in the specified project.", + "description": "Returns deleted documents visible in the specified project.\r\n The user must have permission to view the returned documents.", + "operationId": "GetProjectDocumentsTrashByProjectId", "parameters": [ { "name": "projectId", @@ -19473,16 +16981,6 @@ "format": "uuid" } }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, { "$ref": "#/components/parameters/page" }, @@ -19504,7 +17002,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/DocumentModel" } } } @@ -19524,29 +17022,21 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/files/byuploadid": { "post": { "tags": [ - "ProjectFiles" + "FileUpload" ], - "summary": "Uploads a new version of the project file with the specified id.", - "description": "Uploads a new version of an project file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateProjectFileVersion", + "summary": "Creates a file from an upload id.", + "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file project from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostUploadByUploadId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", + "description": "The id of the project to attach the file to.", "required": true, "schema": { "type": "string", @@ -19555,27 +17045,15 @@ } ], "requestBody": { + "description": "The model describing the uploaded file metadata.", "content": { - "multipart/form-data": { + "application/json": { "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } + "$ref": "#/components/schemas/UploadByUploadIdForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -19583,13 +17061,20 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/FileInfo" } } } }, - "400": { - "description": "Bad Request" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -19607,14 +17092,14 @@ } } }, - "/projects/{projectId}/files/{fileId}/versions/{versionId}": { + "/projects/{projectId}/files/{fileId}": { "get": { "tags": [ "Project Files" ], - "summary": "Returns the project file version with the specified id.", + "summary": "Returns the file with the specified id of the project with the specified id.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByProjectNameAndProjectIdAndFileIdAndVersionId", + "operationId": "GetFilesByProjectNameAndProjectIdAndFileId", "parameters": [ { "name": "projectId", @@ -19635,16 +17120,6 @@ "type": "string", "format": "uuid" } - }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "responses": { @@ -19653,7 +17128,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/FileInfo" } } } @@ -19694,14 +17169,14 @@ } } }, - "/projects/{projectId}/files/{fileId}/versions/{versionId}/download": { + "/projects/{projectId}/files/{fileId}/versions/{versionId}": { "get": { "tags": [ - "ProjectFiles" + "Project Files" ], - "summary": "Returns the content of the project file version with the specified id.", - "description": "Returns the content of the project file version with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectFileVersionContent", + "summary": "Returns the project file version with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByProjectNameAndProjectIdAndFileIdAndVersionId", "parameters": [ { "name": "projectId", @@ -19740,8 +17215,27 @@ "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/FileVersion" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -19767,8 +17261,8 @@ "tags": [ "CustomFields" ], - "summary": "Links a custom field definition to the specified project.", - "description": "The user must have `project-master-data:write` permissions or `write` permissions on the specified project.", + "summary": "Links a custom field to the specified project.", + "description": "Links the specified custom field definition to the project.\r\n The user must have `project-master-data:write` permission or `write` permission on the specified project.", "operationId": "PostProjectLinkCustomFieldDefinitionByProjectId", "parameters": [ { @@ -19848,8 +17342,8 @@ "tags": [ "Workflows" ], - "summary": "Links a workflow to a project.", - "description": "Links the specified workflow to the project, migrating existing statuses\r\n using the provided mapping. If the project has no existing statuses,\r\n workflow statuses are automatically assigned.\r\n If the project is already linked to a workflow, switching to a new workflow\r\n is supported when proper status mappings are provided.\r\n To link a workflow to a project the user must have `project-master-data:write` permissions on the specified project or be the project creator.", + "summary": "Links a workflow to the specified project.", + "description": "Links the specified workflow to the project and migrates existing statuses using the provided mapping. If the project has no statuses, workflow statuses are assigned automatically. Switching workflows requires mappings for existing statuses.\r\n The user must be the project creator or have `project-master-data:write` permission for the project.", "operationId": "PostProjectLinkWorkflowByProjectId", "parameters": [ { @@ -19936,8 +17430,8 @@ "tags": [ "Projects" ], - "summary": "Returns the project members of the project with the specified id.", - "description": "Returns the project members of the project with the specified id.\r\n \r\n The user has to be the creator of the project or needs `read` permissions of the feature `project-master-data`.", + "summary": "Returns members of the specified project.", + "description": "Returns members assigned to the specified project.\r\n The user must be the project creator or have `project-master-data:read` permission.", "operationId": "GetProjectMembersByProjectId", "parameters": [ { @@ -20006,8 +17500,8 @@ "tags": [ "ProjectMilestones" ], - "summary": "Returns all project milestones of the specified project.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns milestones for the specified project.", + "description": "Returns milestones assigned to the specified project.\r\n The user must have `project-planning-data:read` permission for the project.", "operationId": "GetProjectMilestonesByProjectId", "parameters": [ { @@ -20066,8 +17560,8 @@ "tags": [ "ProjectStatuses" ], - "summary": "Returns all project statuses of the project with the specified id.", - "description": "Returns all project statuses relevant to the project with the specified id. If the project is linked to a workflow, the workflow's project statuses are returned.\r\n The user must either be admin, have `project-master-data:read` permissions or be the creator of the project.", + "summary": "Returns statuses for the specified project.", + "description": "Returns statuses relevant to the specified project. If the project is linked to a workflow, the workflow's statuses are returned.\r\n The user must be the project creator or have `project-master-data:read` permission.", "operationId": "GetProjectProjectStatusesByProjectId", "parameters": [ { @@ -20145,8 +17639,8 @@ "tags": [ "ProjectStatuses" ], - "summary": "Creates a project status for a project.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Creates a status for the specified project.", + "description": "Creates a project status. Projects linked to a workflow must manage statuses through that workflow.\r\n The user must be the project owner or have `project-manage-config:write` permission.", "operationId": "PostProjectProjectStatusesByProjectId", "parameters": [ { @@ -20233,8 +17727,8 @@ "tags": [ "ProjectTasks" ], - "summary": "Returns all project tasks of the project with the specified id.", - "description": "The user must have `project-planning-data:read` permissions, otherwise only assigned tasks will be returned.", + "summary": "Returns tasks for the specified project.", + "description": "Returns project tasks visible to the current user.\r\n The user must have `project-planning-data:read` permission; otherwise only assigned tasks are returned.", "operationId": "GetProjectProjectTasksByProjectId", "parameters": [ { @@ -20305,8 +17799,8 @@ "tags": [ "ProjectTasks" ], - "summary": "Returns the project task with the specified id.", - "description": "The user must have either `project-planning-data:read` permissions or be assigned to the project task.", + "summary": "Returns the specified project task.", + "description": "Returns the specified task when it belongs to the project.\r\n The user must have `project-planning-data:read` permission or be assigned to the task.", "operationId": "GetProjectProjectTaskByProjectIdAndTaskId", "parameters": [ { @@ -20382,8 +17876,8 @@ "tags": [ "ProjectTasks" ], - "summary": "Changes the project of the task with the specified id.", - "description": "Changes the project of the task with the specified id.\r\n This call also moves all subtasks of the task to the new project.\r\n This also changes the tracked time sum of the new project and the previous project.\r\n The related time entries of this task will also be moved to the new project.\r\n The user must have `project-planning-data:write` permissions on both projects.", + "summary": "Moves a task to another project.", + "description": "Moves the specified task and its subtasks, related time entries, and tracked-time totals to another project.\r\n The user must have `project-planning-data:write` permission on both projects.", "operationId": "PostProjectProjectTaskChangeProjectByProjectIdAndTaskId", "parameters": [ { @@ -20473,8 +17967,8 @@ "tags": [ "ChecklistItems" ], - "summary": "Returns the checklist items for a project task with the specified id.", - "description": "The user must have either `project-planning-data:read` permissions or be assigned to the project task.", + "summary": "Returns checklist items for a project task.", + "description": "Returns checklist items for the specified project task.\r\n The user must have `project-planning-data:read` permission or be assigned to the task.", "operationId": "GetProjectProjectTaskChecklistItemsByProjectIdAndTaskId", "parameters": [ { @@ -20553,8 +18047,8 @@ "tags": [ "ChecklistItems" ], - "summary": "Retrieves a checklist item from a project task.", - "description": "The user must have either `project-planning-data:read` permissions or be assigned to the project task.", + "summary": "Returns a checklist item for a project task.", + "description": "Returns the specified checklist item for the project task.\r\n The user must have `project-planning-data:read` permission or be assigned to the task.", "operationId": "GetProjectProjectTaskChecklistItemByProjectIdAndTaskIdAndChecklistItemId", "parameters": [ { @@ -20640,8 +18134,8 @@ "tags": [ "Projects" ], - "summary": "Removes a project member from the project with the specified id.", - "description": "Removes a project member from the project with the specified id.\r\n \r\n The user has to be the creator of the project or needs `manage` permissions of the feature `project-master-data`.", + "summary": "Removes a member from the specified project.", + "description": "Removes the specified member from the project.\r\n The user must be the project creator or have `project-master-data:manage` permission.", "operationId": "PostProjectRemoveProjectMemberByProjectId", "parameters": [ { @@ -20721,8 +18215,8 @@ "tags": [ "Retainers" ], - "summary": "Endpoint to get all retainers for a project.", - "description": "The user must have the ProjectMasterData read permission for the project to access this endpoint.\r\n\r\nAny authenticated user.", + "summary": "Returns retainers for the specified project.", + "description": "Returns retainers associated with the specified project.\r\n The user must have `project-master-data:read` permission for the project.", "operationId": "GetProjectRetainersByProjectId", "parameters": [ { @@ -20781,8 +18275,8 @@ "tags": [ "Retainers" ], - "summary": "Endpoint to create a new retainer for a project.", - "description": "As soon as a retainer is created for a project, the project will be marked as a retainer project.\r\n Based on the Start and End dates of the retainer, the retainer budgets will be created automatically.\r\n Retainers cannot overlap. There can only be one active retainer per project at a time (no end date and/or including the current date).\r\n \r\n The user needs to have the ProjectMasterData write permission for the project to access this endpoint.\r\n\r\nAny authenticated user.", + "summary": "Creates a retainer for the specified project.", + "description": "Creates a retainer and marks the project as a retainer project. Retainer budgets are created from its dates. Retainers cannot overlap, and only one active retainer is allowed per project.\r\n The user must have `project-master-data:write` permission for the project.", "operationId": "PostProjectRetainersByProjectId", "parameters": [ { @@ -20859,8 +18353,8 @@ "tags": [ "Retainers" ], - "summary": "Endpoint to delete a retainer for a project. Deletes all related retainer budgets.", - "description": "The user must have the ProjectMasterData write permission for the project to access this endpoint.\r\n\r\nAny authenticated user.", + "summary": "Deletes a retainer from the specified project.", + "description": "Deletes the specified retainer and its related budgets.\r\n The user must have `project-master-data:write` permission for the project.", "operationId": "DeleteProjectRetainerByProjectIdAndRetainerId", "parameters": [ { @@ -20927,8 +18421,8 @@ "tags": [ "Retainers" ], - "summary": "Endpoint to get a retainer for a project by id.", - "description": "The user must have the ProjectMasterData read permission for the project to access this endpoint.\r\n\r\nAny authenticated user.", + "summary": "Returns the specified project retainer.", + "description": "Returns the specified retainer for the project.\r\n The user must have `project-master-data:read` permission for the project.", "operationId": "GetProjectRetainerByProjectIdAndRetainerId", "parameters": [ { @@ -20992,8 +18486,8 @@ "tags": [ "Retainers" ], - "summary": "Endpoint to update the retainer for a project.", - "description": "Date changes must not overlap another retainer for the project. The retainer period cannot be changed.\r\n \r\n The user needs to have the ProjectMasterData write permission for the project to access this endpoint.\r\n\r\nAny authenticated user.", + "summary": "Updates the specified project retainer.", + "description": "Updates the retainer settings. Date changes cannot overlap another retainer, and the retainer period cannot be changed.\r\n The user must have `project-master-data:write` permission for the project.", "operationId": "PutProjectRetainerByProjectIdAndRetainerId", "parameters": [ { @@ -21081,7 +18575,7 @@ "CustomFields" ], "summary": "Sets custom field values for a project.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Sets the submitted custom field values on the specified project.\r\n The user must have `project-master-data:write` permission for the project.", "operationId": "PostProjectSetCustomFieldsByProjectId", "parameters": [ { @@ -21164,8 +18658,8 @@ "tags": [ "Projects" ], - "summary": "Updates the project key for the specified project and all associated task identifiers.", - "description": "The project key must be unique within the workspace and follow these rules:\r\n - Only uppercase letters (A-Z), numbers (0-9), and dashes (-)\r\n - Between 1 and 32 characters\r\n - Not already in use by another active project in the workspace\r\n \r\n This operation will also update all task identifiers for tasks in this project\r\n (e.g., OLDKEY-123 becomes NEWKEY-123). Task identifiers are updated in batches\r\n to ensure audit logs and websocket events are triggered properly.\r\n \r\n Note: The project key update is now transactional with automatic retry on race conditions.\r\n If multiple concurrent requests try to update the same project key, the service will\r\n retry with exponential backoff (100ms, 200ms, 400ms) for up to 3 attempts.\r\n Task identifier updates are processed in batches as a background operation.\r\n \r\n Note: User-provided keys are not subject to profanity filtering. Users can set any key they choose.\r\n\r\nThe user must be an admin or have `project-master-data:write` permissions.", + "summary": "Updates the specified project's key.", + "description": "Updates the project key and the identifiers of tasks in that project. The key must be unique in the workspace and use uppercase letters, numbers, or dashes.\r\n\r\nThe user must be an admin or have `project-master-data:write` permissions.", "operationId": "PostProjectSetProjectKeyByProjectId", "parameters": [ { @@ -21242,8 +18736,8 @@ "tags": [ "ProjectTags" ], - "summary": "Returns the tags of the project with the specified id.", - "description": "To get the tags of a project the user must have `project-master-data:read` permissions on the specified project.", + "summary": "Returns tags for the specified project.", + "description": "Returns tags assigned to the specified project.\r\n The user must have `project-master-data:read` permission for the specified project.", "operationId": "GetProjectTagsByProjectId", "parameters": [ { @@ -21334,8 +18828,8 @@ "tags": [ "TaskDependencies" ], - "summary": "Returns all task dependencies for a specific project.", - "description": "To get all dependencies of a project, the user needs project planning permissions on that project.", + "summary": "Returns task dependencies for a project.", + "description": "Returns dependencies involving tasks in the specified project.\r\n The user must have `project-planning-data:read` permission for the project.", "operationId": "GetProjectTaskdependenciesByProjectId", "parameters": [ { @@ -21394,8 +18888,8 @@ "tags": [ "TaskLists" ], - "summary": "Returns all task lists of the project with the specified id.", - "description": "The permission check in this function is dynamically based on the entity name.\r\n In the cases where the user tries to get the project task lists,\r\n the user needs read permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", + "summary": "Returns task lists for the specified project.", + "description": "Returns task lists visible in the specified project.\r\n The user must have `project-planning-data:read` permission for the project.", "operationId": "GetProjectTaskListsByProjectId", "parameters": [ { @@ -21473,8 +18967,8 @@ "tags": [ "TaskLists" ], - "summary": "Creates a new task list.", - "description": "To create a new project task list, the user needs manage permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", + "summary": "Creates a task list in the specified project.", + "description": "Creates a task list in the specified project.\r\n The user must have `project-planning-data:manage` permission for the project.", "operationId": "PostProjectTaskListsByProjectId", "parameters": [ { @@ -21561,8 +19055,8 @@ "tags": [ "TaskLists" ], - "summary": "Returns the task list with the specified id.", - "description": "The permission check in this function is dynamically based on the entity name.\r\n In the cases where the user tries to get the project task lists,\r\n the user needs read permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", + "summary": "Returns the specified task list.", + "description": "Returns the specified task list when it is visible in the project.\r\n The user must have `project-planning-data:read` permission for the project.", "operationId": "GetProjectTaskListByProjectIdAndTaskListId", "parameters": [ { @@ -21616,8 +19110,8 @@ "tags": [ "TaskLists" ], - "summary": "Updates the task list with the specified id.", - "description": "To update a project task list, the user needs manage permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", + "summary": "Updates the specified task list.", + "description": "Updates the specified task list's name and settings.\r\n The user must have `project-planning-data:manage` permission for the project.", "operationId": "PutProjectTaskListByProjectIdAndTaskListId", "parameters": [ { @@ -21704,8 +19198,8 @@ "tags": [ "TaskLists" ], - "summary": "Adds the tasks to the task list with the specified id.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Adds tasks to the specified task list.", + "description": "Adds the submitted tasks to the specified task list and returns their resulting order.\r\n The user must have `project-planning-data:write` permission for the project and tasks.", "operationId": "PostProjectTaskListAddTasksByProjectIdAndTaskListId", "parameters": [ { @@ -21788,8 +19282,8 @@ "tags": [ "TaskLists" ], - "summary": "Changes the project of the task list with the specified id.", - "description": "This endpoint also moves all tasks and time entries to the new project.\r\n This will also change the tracked time sum of the old and new projects.\r\n The task status mapping will move all tasks of a certain status to the new provided status on the mapping.\r\n\r\nAny authenticated user.", + "summary": "Moves a task list to another project.", + "description": "Moves the task list, its tasks, and related time entries to another project. A status mapping can move tasks to replacement statuses.\r\n The user must have `project-planning-data:write` permission on both projects.", "operationId": "PostProjectTaskListChangeProjectByProjectIdAndTaskListId", "parameters": [ { @@ -21849,8 +19343,8 @@ "tags": [ "TaskLists" ], - "summary": "Creates a copy of the task list.", - "description": "A new task list will be created with the same name as the original one.\r\n All tasks and subtasks will also be copied in this operation.\r\n Comments, files and activity logs are not copied.\r\n To copy a task list, the user needs to have 'ProjectPlanning'\r\n permissions in general or in the project the task list belongs to.\r\n\r\nAny authenticated user.", + "summary": "Copies the specified task list.", + "description": "Creates a task list with the same name and copies its tasks and subtasks. Comments, files, and activity logs are not copied.\r\n The user must have `project-planning-data:write` permission for the project.", "operationId": "PostProjectTaskListCopyByProjectIdAndTaskListId", "parameters": [ { @@ -21926,8 +19420,8 @@ "tags": [ "TaskLists" ], - "summary": "Deletes the task list with the specified id.", - "description": "To delete project task list, the user needs manage permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", + "summary": "Deletes the specified task list.", + "description": "Deletes the specified task list and removes its task assignments.\r\n The user must have `project-planning-data:manage` permission for the project.", "operationId": "PostProjectTaskListDeleteByProjectIdAndTaskListId", "parameters": [ { @@ -22007,8 +19501,8 @@ "tags": [ "TaskLists" ], - "summary": "Removes the tasks from the task list with the specified id.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Removes tasks from the specified task list.", + "description": "Removes the submitted tasks from the specified task list.\r\n The user must have `project-planning-data:write` permission for the project and tasks.", "operationId": "PostProjectTaskListRemoveTasksByProjectIdAndTaskListId", "parameters": [ { @@ -22072,8 +19566,8 @@ "tags": [ "TaskLists" ], - "summary": "Archives or unarchives the task list with the specified id.", - "description": "Archives or unarchives the task list with the specified id.\r\n An archived task list still exists but is not editable anymore.\r\n\r\nAny authenticated user.", + "summary": "Archives or restores the specified task list.", + "description": "Archives or restores the specified task list. An archived task list remains available but cannot be edited.\r\n The user must have `project-planning-data:manage` permission for the project.", "operationId": "PostProjectTaskListSetArchivedByProjectIdAndTaskListId", "parameters": [ { @@ -22170,8 +19664,8 @@ "tags": [ "TaskLists" ], - "summary": "Returns the task with the specified id in the task list with the specified id.", - "description": "To get a task in a project task list, the user needs read permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", + "summary": "Returns a task in the specified task list.", + "description": "Returns the specified task when it belongs to the task list.\r\n The user must have `project-planning-data:read` permission for the project.", "operationId": "GetProjectTaskListTaskByProjectIdAndTaskListIdAndTaskId", "parameters": [ { @@ -22267,8 +19761,8 @@ "tags": [ "TaskLists" ], - "summary": "Updates the order of a task in a task list.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Updates a task's order in a task list.", + "description": "Updates the specified task's position in the task list.\r\n The user must have `project-planning-data:write` permission for the project and task.", "operationId": "PostProjectTaskListTaskUpdateOrderByProjectIdAndTaskListIdAndTaskId", "parameters": [ { @@ -22368,8 +19862,8 @@ "tags": [ "TaskLists" ], - "summary": "Updates the order of the task list with the specified id.", - "description": "To update the order of a project task list, the user needs manage permissions on the project-planning-data feature.\r\n\r\nAny authenticated user.", + "summary": "Updates the order of the specified task list.", + "description": "Updates the specified task list's position within the project.\r\n The user must have `project-planning-data:manage` permission for the project.", "operationId": "PostProjectTaskListUpdateOrderByProjectIdAndTaskListId", "parameters": [ { @@ -22449,8 +19943,8 @@ "tags": [ "TaskStatuses" ], - "summary": "Returns all task statuses of the project with the specified id.", - "description": "Returns all task statuses relevant to the project with the specified id. If the project is linked to a workflow, the workflow's task statuses are returned.\r\n The user must have either `project-master-data:read` permissions or be assigned to a task on the specified project.", + "summary": "Returns task statuses for the specified project.", + "description": "Returns statuses relevant to the specified project. If the project is linked to a workflow, the workflow's statuses are returned.\r\n The user must have `project-master-data:read` permission or be assigned to a task on the project.", "operationId": "GetProjectTaskStatusesByProjectId", "parameters": [ { @@ -22529,8 +20023,8 @@ "tags": [ "TaskStatuses" ], - "summary": "Creates a new task status for the specified project.", - "description": "The user must either have `project-planning-data:write` permissions or be creator of the project.", + "summary": "Creates a task status for the specified project.", + "description": "Creates a task status for the specified project.\r\n The user must be the project creator or have `project-planning-data:write` permission.", "operationId": "PostProjectTaskStatusesByProjectId", "parameters": [ { @@ -22617,8 +20111,8 @@ "tags": [ "TaskStatuses" ], - "summary": "Returns the specified task status of a project.", - "description": "The user must either have 'project-master-data:write' permissions or be the owner of the project.", + "summary": "Returns the specified project task status.", + "description": "Returns the specified status for the project.\r\n The user must have `project-master-data:read` permission or be the project creator.", "operationId": "GetProjectTaskStatusByProjectIdAndTaskStatusId", "parameters": [ { @@ -22693,7 +20187,7 @@ "TaskStatuses" ], "summary": "Updates a task status for the specified project.", - "description": "The status type cannot be changed if it is the last status of type 'todo' or 'done'.\r\n \r\n The user must either have `project-planning-data:write` permissions or be creator of the project.", + "description": "Updates the specified status. Its type cannot change when it is the last `todo` or `done` status in the project.\r\n The user must be the project creator or have `project-planning-data:write` permission.", "operationId": "PutProjectTaskStatusByProjectIdAndTaskStatusId", "parameters": [ { @@ -22790,8 +20284,8 @@ "tags": [ "TaskStatuses" ], - "summary": "Deletes the task status with the specified id.", - "description": "If the status to delete is still used by tasks, another task status to move the tasks to must be provided.\r\n The last status of type 'todo' or 'done' cannot be deleted.\r\n The user must either have `project-planning-data:write` permissions or must be creator of the project.", + "summary": "Deletes the specified project task status.", + "description": "Deletes the specified status. If tasks still use it, provide another status to receive those tasks. The last `todo` or `done` status cannot be deleted.\r\n The user must be the project creator or have `project-planning-data:write` permission.", "operationId": "PostProjectTaskStatusDeleteByProjectIdAndTaskStatusId", "parameters": [ { @@ -22943,8 +20437,8 @@ "tags": [ "ProjectTasks" ], - "summary": "Returns the type of work for the project with the specified id.", - "description": "The project can be a connected or a workspace project.\r\n User must have at least 'read' permissions on the 'project-planning-data' feature.\r\n\r\nAny authenticated user.", + "summary": "Returns types of work for the specified project.", + "description": "Returns types of work for connected or workspace projects.\r\n The user must have `project-planning-data:read` permission for the project.", "operationId": "GetProjectTypesOfWorkByProjectId", "parameters": [ { @@ -23013,8 +20507,8 @@ "tags": [ "CustomFields" ], - "summary": "Unlinks a custom field definition from the specified project.", - "description": "When the definition is unlinked from a project, all values of the custom field will be removed from the tasks within that project.\r\n \r\n The user must have `project-master-data:write` permissions or `write` permissions on the specified project.", + "summary": "Unlinks a custom field from the specified project.", + "description": "Unlinking the definition removes its values from tasks in the project.\r\n The user must have `project-master-data:write` permission or `write` permission on the specified project.", "operationId": "PostProjectUnlinkCustomFieldDefinitionByProjectId", "parameters": [ { @@ -23094,8 +20588,8 @@ "tags": [ "Workflows" ], - "summary": "Unlinks a workflow from a project.", - "description": "Unlinks the workflow from the project, cloning workflow statuses\r\n to local project-specific statuses. Custom fields and automations\r\n remain but become editable (no longer synced with workflow).\r\n To unlink a workflow from a project the user must have `project-master-data:write` permissions on the specified project or be the project creator.", + "summary": "Unlinks a workflow from the specified project.", + "description": "Unlinks the workflow and clones its statuses into project-specific statuses. Custom fields and automations remain but are no longer synchronized with the workflow.\r\n The user must be the project creator or have `project-master-data:write` permission for the project.", "operationId": "PostProjectUnlinkWorkflowByProjectId", "parameters": [ { @@ -23171,8 +20665,8 @@ "tags": [ "ProjectMembers" ], - "summary": "Updates the role of a project member of the project with the specified id.", - "description": "Changes the role of a project member.\r\n The project member can also be set as a responsible project member, but only if no other member of this project is\r\n responsible.\r\n It is necessary that the project role is available in this project, otherwise the member cannot be updated.\r\n A project role is available when they are connected to the specified project type of the project.\r\n \r\n The user has to be the creator or needs `project-master-data:manage` permissions on the project.", + "summary": "Updates a member of the specified project.", + "description": "Changes the member's role or responsible status. The selected role must be available for the project's type, and only one responsible member is allowed.\r\n The user must be the project creator or have `project-master-data:manage` permission for the project.", "operationId": "PostProjectUpdateProjectMemberByProjectId", "parameters": [ { @@ -23229,8 +20723,8 @@ "tags": [ "Projects" ], - "summary": "Updates the order of a project status.", - "description": "Updates the order of a project status.\r\n\r\nAny authenticated user.", + "summary": "Updates a project's status order.", + "description": "Updates the order of statuses for the specified project.\r\n The user must be the project owner or have `project-manage-config:write` permission.", "operationId": "PostProjectUpdateProjectStatusOrderByProjectId", "parameters": [ { @@ -23300,8 +20794,8 @@ "tags": [ "ProjectStatuses" ], - "summary": "Returns all project statuses.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns project statuses in the workspace.", + "description": "Returns active project statuses by default. Set `showArchived` to include archived statuses visible to the current user.\r\n The user must have access to each returned project status.", "operationId": "GetProjectStatuses", "parameters": [ { @@ -23381,8 +20875,8 @@ "tags": [ "ProjectStatuses" ], - "summary": "Returns the project status with the specified id.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns the specified project status.", + "description": "Returns the project status with the specified id.\r\n\r\nAny authenticated user.", "operationId": "GetProjectStatusById", "parameters": [ { @@ -23456,8 +20950,8 @@ "tags": [ "ProjectStatuses" ], - "summary": "Updates an existing project status.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Updates the specified project status.", + "description": "Updates the specified project status and returns the saved status.\r\n The user must be the project creator or have `project-master-data:write` permission.", "operationId": "PutProjectStatusById", "parameters": [ { @@ -23544,8 +21038,8 @@ "tags": [ "ProjectStatuses" ], - "summary": "Deletes a project status.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Deletes the specified project status.", + "description": "Deletes the specified status. Project statuses in use must be replaced, and workflow statuses must be managed through the workflow.\r\n The user must be the project owner or have `project-manage-config:write` permission for the project.", "operationId": "PostProjectStatusDeleteByProjectStatusId", "parameters": [ { @@ -23626,7 +21120,7 @@ "ProjectStatuses" ], "summary": "Sets the archived flag for a project status.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Sets the archived flag for a project status. Archived statuses remain available for existing projects. The user must have permission to access the requested resource.", "operationId": "PostProjectStatusSetArchivedByProjectStatusId", "parameters": [ { @@ -23713,8 +21207,8 @@ "tags": [ "ProjectTemplates" ], - "summary": "Retrieves all project templates.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns project templates.", + "description": "Returns project templates. Each template includes its configured project defaults. The user must have permission to access the requested resource.", "operationId": "GetProjectTemplates", "parameters": [ { @@ -23764,7 +21258,7 @@ "ProjectTemplates" ], "summary": "Creates a new project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "description": "Creates a new project template. The new template supplies defaults for future projects.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostProjectTemplate", "requestBody": { "description": "The model to create the project template.", @@ -23820,8 +21314,8 @@ "tags": [ "ProjectTemplateTags" ], - "summary": "Removes a tag from all project templates.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Removes a tag from project templates.", + "description": "Removes a tag from project templates. The submitted tags are applied to the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostProjectTemplatesDeleteTags", "requestBody": { "description": "The model to remove the tag from all project templates.", @@ -23880,8 +21374,8 @@ "tags": [ "ProjectTemplateTags" ], - "summary": "Returns all tags currently in use by project templates.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns tags in use by project templates.", + "description": "Returns tags in use by project templates. The result includes tags shared by project templates. The user must have permission to access the requested resource.", "operationId": "GetProjectTemplatesTags", "responses": { "200": { @@ -23928,8 +21422,8 @@ "tags": [ "ProjectTemplateTags" ], - "summary": "Updates a tag globally for all project templates.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Updates a tag globally for project templates.", + "description": "Updates a tag globally for project templates. The submitted tags are applied to the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostProjectTemplateUpdateTags", "requestBody": { "description": "The model containing the tag updates.", @@ -23989,7 +21483,7 @@ "ProjectTemplates" ], "summary": "Deletes a project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "description": "Deletes a project template. Projects already created from the template are not changed.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "DeleteProjectTemplateById", "parameters": [ { @@ -24027,8 +21521,8 @@ "tags": [ "ProjectTemplates" ], - "summary": "Retrieves a specific project template.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns a specific project template.", + "description": "Returns a specific project template. The response includes the template's project configuration. The user must have permission to access the requested resource.", "operationId": "GetProjectTemplateById", "parameters": [ { @@ -24082,8 +21576,8 @@ "tags": [ "ProjectTemplates" ], - "summary": "Updates an existing project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Updates project template.", + "description": "Updates project template. The template defaults are changed for future projects.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PutProjectTemplateById", "parameters": [ { @@ -24161,8 +21655,8 @@ "tags": [ "ProjectTemplateTags" ], - "summary": "Adds a batch of tags to the project template with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Adds a batch of tags to the project template.", + "description": "Adds a batch of tags to the project template. The submitted tags are applied to the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostProjectTemplateAddTagsByProjectTemplateId", "parameters": [ { @@ -25068,8 +22562,8 @@ "tags": [ "CustomFields" ], - "summary": "Returns all custom field definitions linked to the specified project template, including definitions linked via a workflow.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns custom fields.", + "description": "Returns custom fields. The result includes fields linked directly or through its workflow. The user must have permission to access the requested resource.", "operationId": "GetProjectTemplateCustomFieldDefinitionsByProjectTemplateId", "parameters": [ { @@ -25128,8 +22622,8 @@ "tags": [ "CustomFields" ], - "summary": "Updates the order of a custom field definition for the specified project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Updates custom field order in a template.", + "description": "Updates custom field order in a template. The custom field order is stored for the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PutProjectTemplateCustomFieldDefinitionByProjectTemplateIdAndCustomFieldDefinitionId", "parameters": [ { @@ -25207,8 +22701,8 @@ "tags": [ "ProjectTemplateTags" ], - "summary": "Removes tags from the project template with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Removes tags from the project template.", + "description": "Removes tags from the project template. The submitted tags are applied to the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostProjectTemplateDeleteTagsByProjectTemplateId", "parameters": [ { @@ -25295,8 +22789,8 @@ "tags": [ "CustomFields" ], - "summary": "Links a custom field definition to the specified project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Links a custom field definition to the template.", + "description": "Links a custom field definition to the template. The custom field is available on tasks created from the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostProjectTemplateLinkCustomFieldDefinitionByProjectTemplateId", "parameters": [ { @@ -25367,8 +22861,8 @@ "tags": [ "ProjectMilestoneTemplates" ], - "summary": "Returns all milestone templates of the given project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", + "summary": "Returns milestone templates of the given template.", + "description": "Returns milestone templates of the given template. Each milestone template belongs to the selected project template.\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", "operationId": "GetProjectTemplateMilestonesByProjectTemplateId", "parameters": [ { @@ -25428,8 +22922,8 @@ "tags": [ "ProjectMilestoneTemplates" ], - "summary": "Creates a new milestone template for the given project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Creates milestone template for the template.", + "description": "Creates milestone template for the template. Projects created from the template can use this milestone.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostProjectTemplateMilestonesByProjectTemplateId", "parameters": [ { @@ -25487,8 +22981,8 @@ "tags": [ "ProjectMilestoneTemplates" ], - "summary": "Deletes a milestone for the given project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Deletes a milestone for the project template.", + "description": "Deletes a milestone for the project template. The milestone is removed from the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "DeleteProjectTemplateMilestoneByProjectTemplateIdAndMilestoneId", "parameters": [ { @@ -25536,8 +23030,8 @@ "tags": [ "ProjectMilestoneTemplates" ], - "summary": "Returns a milestone by id for the given project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", + "summary": "Returns a milestone by id for the project template.", + "description": "Returns a milestone by id for the project template. The response includes the milestone's dates and status.\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", "operationId": "GetProjectTemplateMilestoneByProjectTemplateIdAndMilestoneId", "parameters": [ { @@ -25592,8 +23086,8 @@ "tags": [ "ProjectMilestoneTemplates" ], - "summary": "Updates a milestone template for the given project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Updates a milestone template for the template.", + "description": "Updates a milestone template for the template. The submitted dates and status replace the existing values.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PutProjectTemplateMilestoneByProjectTemplateIdAndMilestoneId", "parameters": [ { @@ -25661,8 +23155,8 @@ "tags": [ "ProjectTemplates" ], - "summary": "Retrieves all project statuses of a project template.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns project statuses of a project template.", + "description": "Returns project statuses of a project template. The result includes statuses available to the template. The user must have permission to access the requested resource.", "operationId": "GetProjectTemplateProjectStatusesByProjectTemplateId", "parameters": [ { @@ -25720,7 +23214,7 @@ "ProjectTemplates" ], "summary": "Adds a project status to a project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "description": "Adds a project status to a project template. Projects created from the template can use this status.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostProjectTemplateProjectStatusesByProjectTemplateId", "parameters": [ { @@ -25809,7 +23303,7 @@ "CustomFields" ], "summary": "Sets the custom fields for a project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "description": "Sets the custom fields for a project template. The custom fields become available to tasks created from the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostProjectTemplateSetCustomFieldsByProjectTemplateId", "parameters": [ { @@ -25863,8 +23357,8 @@ "tags": [ "ProjectTemplateTags" ], - "summary": "Returns the tags of the project template with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", + "summary": "Returns the tags of the project template.", + "description": "Returns the tags of the project template. The result includes tags currently used by that template.\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", "operationId": "GetProjectTemplateTagsByProjectTemplateId", "parameters": [ { @@ -25946,8 +23440,8 @@ "tags": [ "ProjectTemplates" ], - "summary": "Retrieves the task bundle associated with a project template.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns the bundle associated with a template.", + "description": "Returns the bundle associated with a template. The response includes the task bundle linked to the template. The user must have permission to access the requested resource.", "operationId": "GetProjectTemplateTaskBundleByProjectTemplateId", "parameters": [ { @@ -26003,8 +23497,8 @@ "tags": [ "ProjectTemplates" ], - "summary": "Returns all task statuses of the project template with the specified id.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns task statuses of the project template.", + "description": "Returns task statuses of the project template. The result includes statuses available to the template. The user must have permission to access the requested resource.", "operationId": "GetProjectTemplateTaskStatusesByProjectTemplateId", "parameters": [ { @@ -26073,8 +23567,8 @@ "tags": [ "ProjectTemplates" ], - "summary": "Creates a new task status for the specified project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Creates a task status for the template.", + "description": "Creates a task status for the template. Tasks created from the template can use this status.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostProjectTemplateTaskStatusesByProjectTemplateId", "parameters": [ { @@ -26152,8 +23646,8 @@ "tags": [ "ProjectTemplates" ], - "summary": "Deletes the task status of the project template with the specified id.", - "description": "The last status of type 'todo' or 'done' cannot be deleted.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Deletes the task status of the project template.", + "description": "Deletes the task status of the project template. The last status of type 'todo' or 'done' cannot be deleted.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "DeleteProjectTemplateTaskStatusByProjectTemplateIdAndTaskStatusId", "parameters": [ { @@ -26221,8 +23715,8 @@ "tags": [ "ProjectTemplates" ], - "summary": "Returns the task status of the project template with the specified id.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns the task status of the project template.", + "description": "Returns the task status of the project template. The result includes statuses available to the template. The user must have permission to access the requested resource.", "operationId": "GetProjectTemplateTaskStatusByProjectTemplateIdAndTaskStatusId", "parameters": [ { @@ -26286,8 +23780,8 @@ "tags": [ "ProjectTemplates" ], - "summary": "Updates a task status for the specified project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Updates a task status for the template.", + "description": "Updates a task status for the template. The template uses the submitted status settings.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PutProjectTemplateTaskStatusByProjectTemplateIdAndTaskStatusId", "parameters": [ { @@ -26375,8 +23869,8 @@ "tags": [ "CustomFields" ], - "summary": "Unlinks a custom field definition from the specified project template.", - "description": "When the definition is unlinked from a project template, all values of the custom field will be removed from the task templates within that project template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Unlinks a custom field from a template.", + "description": "Unlinks a custom field from a template. When the definition is unlinked from a project template, all values of the custom field will be removed from the task templates within that project template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostProjectTemplateUnlinkCustomFieldDefinitionByProjectTemplateId", "parameters": [ { @@ -26448,7 +23942,7 @@ "Workflows" ], "summary": "Unlinks a workflow from a project template.", - "description": "Unlinks the workflow from the project template, cloning workflow statuses\r\n to local template-specific statuses. Custom fields and automations\r\n remain but become editable (no longer synced with workflow).\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "description": "Unlinks a workflow from a project template. Custom fields and automations remain but become editable (no longer synced with workflow).\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostProjectTemplateUnlinkWorkflowByProjectTemplateId", "parameters": [ { @@ -26515,8 +24009,8 @@ "tags": [ "ProjectTemplates" ], - "summary": "Updates the order of a project status within a project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Updates project status order in a template.", + "description": "Updates project status order in a template. The selected status is moved within the template configuration.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostProjectTemplateUpdateProjectStatusOrderByProjectTemplateId", "parameters": [ { @@ -26582,356 +24076,7 @@ } } }, - "/projecttemplates/{projecttemplateId}/externalfiles": { - "post": { - "tags": [ - "ProjectTemplateFiles" - ], - "summary": "Endpoint to batch create external files without uploading.", - "description": "Endpoint to create file infos with batch operation.\nCreated file infos don't have a version.\r\n\r\nAny authenticated user.", - "operationId": "CreateExternalFiles", - "parameters": [ - { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "List of file forms.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - }, - "application/*+json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/projecttemplates/{projecttemplateId}/files": { - "delete": { - "tags": [ - "ProjectTemplateFiles" - ], - "summary": "Deletes the files of the specified projecttemplate.", - "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", - "operationId": "DeleteProjectTemplateFiles", - "parameters": [ - { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "get": { - "tags": [ - "ProjectTemplateFiles" - ], - "summary": "Returns all files of the projecttemplate with the specified id.", - "description": "Returns all file metadata of the projecttemplate with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateFiles", - "parameters": [ - { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "ProjectTemplateFiles" - ], - "summary": "Creates a new projecttemplate file for the projecttemplate with the specified id..", - "description": "Uploads a new projecttemplate file for the projecttemplate with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateProjectTemplateFile", - "parameters": [ - { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - }, - "400": { - "description": "Bad Request" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/projecttemplates/{projecttemplateId}/files/byurl": { - "post": { - "tags": [ - "ProjectTemplateFiles" - ], - "summary": "Uploads a new file by providing an url.", - "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", - "operationId": "CreateProjectTemplateFileByUrl", - "parameters": [ - { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate the file is linked to.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The url, name and description of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, "/projecttemplates/{projecttemplateId}/files/{fileId}": { - "delete": { - "tags": [ - "ProjectTemplateFiles" - ], - "summary": "Deletes the projecttemplate file with the specified id.", - "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", - "operationId": "DeleteProjectTemplateFile", - "parameters": [ - { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, "get": { "tags": [ "ProjectTemplate Files" @@ -26972,600 +24117,25 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "put": { - "tags": [ - "ProjectTemplateFiles" - ], - "summary": "Updates the metadata of the projecttemplate file with the specified id.", - "description": "Updates the metadata of the projecttemplate file with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "UpdateProjectTemplateFile", - "parameters": [ - { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model to update the file with the specified id.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/changeentity": { - "post": { - "tags": [ - "ProjectTemplateFiles" - ], - "summary": "Changes the projecttemplate this file belongs to.", - "description": "Changes the projecttemplate this file belongs to.\nSwitch to the specified projecttemplate or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", - "operationId": "ChangeProjectTemplate", - "parameters": [ - { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model to change the entity information of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/copy": { - "post": { - "tags": [ - "ProjectTemplateFiles" - ], - "summary": "Copies the file to a new projecttemplate.", - "description": "Copies the file to a new projecttemplate (meta and content).\r\n\r\nAny authenticated user.", - "operationId": "CopyToProjectTemplate", - "parameters": [ - { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model to change the entity information of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/download": { - "get": { - "tags": [ - "ProjectTemplateFiles" - ], - "summary": "Returns the content of the projecttemplate file with the specified id.", - "description": "Returns the content of the projecttemplate file. Uses the latest file version.\nIf the projecttemplate file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateFileContent", - "parameters": [ - { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "width", - "in": "query", - "description": "Set width to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "height", - "in": "query", - "description": "Set height to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "crop", - "in": "query", - "description": "Whether to crop the image when resizing it.", - "schema": { - "type": "boolean" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/pdf": { - "get": { - "tags": [ - "ProjectTemplateFiles" - ], - "summary": "Returns the content of the file with the specified id as pdf.\ntype or conversion not possible.", - "description": "Returns the content of the projecttemplate file. Uses the latest file version.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateFileContent", - "parameters": [ - { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "inline", - "in": "query", - "description": "If inline is false, content-disposition header is attachment.", - "schema": { - "type": "boolean", - "default": false - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/shareurl": { - "get": { - "tags": [ - "ProjectTemplateFiles" - ], - "summary": "Returns an url to share the file.", - "description": "Returns a url to share the file.\r\n\r\nAny authenticated user.", - "operationId": "GetPublicToken", - "parameters": [ - { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/versions": { - "get": { - "tags": [ - "ProjectTemplateFiles" - ], - "summary": "Returns all file versions of the specified projecttemplate file.", - "description": "Returns all file versions of the specified projecttemplate file.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateFileVersions", - "parameters": [ - { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileVersion" - } + "$ref": "#/components/schemas/ErrorResponse" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "ProjectTemplateFiles" - ], - "summary": "Uploads a new version of the projecttemplate file with the specified id.", - "description": "Uploads a new version of an projecttemplate file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateProjectTemplateFileVersion", - "parameters": [ - { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } - } - } - } - }, - "responses": { - "200": { - "description": "OK", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/ErrorResponse" } } } - }, - "400": { - "description": "Bad Request" } }, "security": [ @@ -27670,81 +24240,13 @@ } } }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/versions/{versionId}/download": { - "get": { - "tags": [ - "ProjectTemplateFiles" - ], - "summary": "Returns the content of the projecttemplate file version with the specified id.", - "description": "Returns the content of the projecttemplate file version with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateFileVersionContent", - "parameters": [ - { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, "/projecttimebookings": { "get": { "tags": [ "TimeBookings" ], "summary": "Returns a list of time bookings.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Returns a list of time bookings. Each booking includes its project, user, and tracked duration. The user must have permission to access the requested resource.", "operationId": "GetProjectTimeBookings", "parameters": [ { @@ -27793,8 +24295,8 @@ "tags": [ "TimeBookings" ], - "summary": "Creates a new time booking for a given project and user.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Creates a time booking for a project and user.", + "description": "Creates a time booking for a project and user. The booking records time for the submitted project and user. The user must have permission to access the requested resource.", "operationId": "PostProjectTimeBooking", "requestBody": { "description": "The model to create the time booking.", @@ -27860,7 +24362,7 @@ "TimeBookings" ], "summary": "Deletes a time booking by id.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Deletes a time booking by id. The booking is removed from the selected project. The user must have permission to access the requested resource.", "operationId": "DeleteProjectTimeBooking", "parameters": [ { @@ -27918,7 +24420,7 @@ "TimeBookings" ], "summary": "Updates a given time booking.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Updates a given time booking. The saved booking reflects the submitted duration and assignment. The user must have permission to access the requested resource.", "operationId": "PutProjectTimeBooking", "parameters": [ { @@ -27995,8 +24497,8 @@ "tags": [ "ProjectTypes" ], - "summary": "Returns all existing project types.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns existing project types.", + "description": "Returns existing project types. Each type includes its name, icon, and archived state. The user must have permission to access the requested resource.", "operationId": "GetProjectTypes", "parameters": [ { @@ -28055,7 +24557,7 @@ "ProjectTypes" ], "summary": "Creates a new project type.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "description": "Creates a new project type. The new type can be selected when projects are created.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostProjectType", "requestBody": { "content": { @@ -28100,8 +24602,8 @@ "tags": [ "ProjectTypes" ], - "summary": "Retrieves all available project type icons.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns available project type icons.", + "description": "Returns available project type icons. These icons can be assigned to project types. The user must have permission to access the requested resource.", "operationId": "GetProjectTypesIcons", "responses": { "200": { @@ -28138,8 +24640,8 @@ "tags": [ "ProjectTypes" ], - "summary": "Retrieves a project type by its ID.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns a project type by its ID.", + "description": "Returns a project type by its ID. The response includes the type's name, icon, and settings. The user must have permission to access the requested resource.", "operationId": "GetProjectTypeById", "parameters": [ { @@ -28193,8 +24695,8 @@ "tags": [ "ProjectTypes" ], - "summary": "Updates an existing project type.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Updates project type.", + "description": "Updates project type. The submitted name, icon, and settings replace the existing values.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PutProjectTypeById", "parameters": [ { @@ -28272,8 +24774,8 @@ "tags": [ "ProjectTypes" ], - "summary": "Deletes a project type and reassigns related projects and templates.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Deletes project types.", + "description": "Deletes project types. Projects using the type are reassigned before it is removed.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostProjectTypeDeleteByProjectTypeId", "parameters": [ { @@ -28344,8 +24846,8 @@ "tags": [ "ProjectTypes" ], - "summary": "Archives or unarchives the project type with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Archives or unarchives the project type.", + "description": "Archives or unarchives the project type. Archived types remain available for existing projects.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostProjectTypeSetArchivedByProjectTypeId", "parameters": [ { @@ -28402,8 +24904,8 @@ "tags": [ "Roles" ], - "summary": "Returns all roles of the workspace.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "summary": "Returns roles of the workspace.", + "description": "Returns roles of the workspace. Each role includes its name and status.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", "operationId": "GetRoles", "parameters": [ { @@ -28450,8 +24952,8 @@ "tags": [ "Roles" ], - "summary": "Creates a new role with specified permissions.", - "description": "\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "summary": "Creates a workspace role.", + "description": "Creates a workspace role. The role starts with the submitted settings.\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", "operationId": "PostRole", "requestBody": { "description": "The role form payload.", @@ -28510,8 +25012,8 @@ "tags": [ "Roles" ], - "summary": "Moves a user from their current role to another role.", - "description": "Moves a user from their current role to another role.\r\n At least one user needs to remain in the admin role.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "summary": "Moves a user to another role.", + "description": "Moves a user to another role. The user keeps workspace access under the new role.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", "operationId": "PostRolesMoveUser", "requestBody": { "description": "The move user in role payload.", @@ -28634,8 +25136,8 @@ "tags": [ "Roles" ], - "summary": "Returns the role with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "summary": "Returns the role.", + "description": "Returns the role. The returned role includes its workspace settings.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", "operationId": "GetRoleById", "parameters": [ { @@ -28690,8 +25192,8 @@ "tags": [ "Roles" ], - "summary": "Updates the role with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "summary": "Updates the role.", + "description": "Updates the role. The submitted settings replace the existing values.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", "operationId": "PutRoleById", "parameters": [ { @@ -28769,8 +25271,8 @@ "tags": [ "Roles" ], - "summary": "Adds the user to the role with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "summary": "Adds the user to the role.", + "description": "Adds the user to the role. The user is added to the role membership.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", "operationId": "PostRoleAddUserByRoleId", "parameters": [ { @@ -28851,8 +25353,8 @@ "tags": [ "Roles" ], - "summary": "Returns all deactivated menu items for the specified role.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "summary": "Returns deactivated menu items for the role.", + "description": "Returns deactivated menu items for the role. The result lists menu items disabled for the role.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", "operationId": "GetRoleDeactivatedMenuItemsByRoleId", "parameters": [ { @@ -28913,8 +25415,8 @@ "tags": [ "Roles" ], - "summary": "Creates or updates the deactivated menu items for the specified role.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "summary": "Updates deactivated menu items for a role.", + "description": "Updates deactivated menu items for a role. The submitted menu settings replace the role's disabled items.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", "operationId": "PostRoleDeactivatedMenuItemsByRoleId", "parameters": [ { @@ -28988,8 +25490,8 @@ "tags": [ "Roles" ], - "summary": "Deletes the role with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "summary": "Deletes the role.", + "description": "Deletes the role. Users assigned to the role must be moved before it is removed.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", "operationId": "PostRoleDeleteByRoleId", "parameters": [ { @@ -29070,8 +25572,8 @@ "tags": [ "Roles" ], - "summary": "Returns all permissions of the specified role.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "summary": "Returns permissions of the specified role.", + "description": "Returns permissions of the specified role. The result lists permissions assigned to the role.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", "operationId": "GetRolePermissionsByRoleId", "parameters": [ { @@ -29141,8 +25643,8 @@ "tags": [ "Roles" ], - "summary": "Creates, updates or deletes a permission of the specified role.", - "description": "Creates, updates or deletes a permission of the role.\r\n If the permission already exist, and the 'AccessLevels' property of the model is not empty,\r\n the permission will be updated. If the 'AccessLevels' property of the model is empty,\r\n the permission will be deleted.\r\n The permission will be created if it does not exist.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Updates permissions for a role.", + "description": "Updates permissions for a role. The submitted permission is added, changed, or removed for the role.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostRolePermissionsByRoleId", "parameters": [ { @@ -29223,8 +25725,8 @@ "tags": [ "Roles" ], - "summary": "Archives or unarchives the role with the specified id.", - "description": "Archives or unarchives the role with the specified id.\r\n An archived role still exists for all users currently using it,\r\n but users can no longer be assigned to this role.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "summary": "Archives or unarchives the role.", + "description": "Archives or unarchives the role. An archived role still exists for all users currently using it, but users can no longer be assigned to this role.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostRoleSetArchivedByRoleId", "parameters": [ { @@ -29302,8 +25804,8 @@ "tags": [ "Roles" ], - "summary": "Returns all users of the specified role.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "summary": "Returns users of the specified role.", + "description": "Returns users of the specified role. The result lists users assigned to the role.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", "operationId": "GetRoleUsersByRoleId", "parameters": [ { @@ -29384,8 +25886,8 @@ "tags": [ "Roles" ], - "summary": "Activates the user with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "summary": "Activates the user.", + "description": "Activates the user. The user's sign-in status changes for the workspace.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", "operationId": "PostRoleUserActivateByRoleIdAndUserId", "parameters": [ { @@ -29455,8 +25957,8 @@ "tags": [ "Roles" ], - "summary": "Deactivates the user with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "summary": "Deactivates the user.", + "description": "Deactivates the user. The user's sign-in status changes for the workspace.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", "operationId": "PostRoleUserDeactivateByRoleIdAndUserId", "parameters": [ { @@ -29526,8 +26028,8 @@ "tags": [ "Roles" ], - "summary": "Returns the role with the specified name.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "summary": "Returns the role for the name.", + "description": "Returns the role for the name. The name match is evaluated within the current workspace.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", "operationId": "GetRoleByRoleName", "parameters": [ { @@ -29732,8 +26234,8 @@ "tags": [ "TaskBundles" ], - "summary": "Lists task bundles.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns task bundles.", + "description": "Returns task bundles. Each bundle includes its task and list templates. The user must have permission to access the requested resource.", "operationId": "GetTaskBundles", "parameters": [ { @@ -29783,7 +26285,7 @@ "TaskBundles" ], "summary": "Creates a task bundle.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "description": "Creates a task bundle. It groups reusable task and list templates.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostTaskBundle", "requestBody": { "description": "The task bundle form payload.", @@ -29840,7 +26342,7 @@ "TaskBundles" ], "summary": "Creates a task bundle from a project.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "description": "Creates a task bundle from a project. The bundle is created from the selected project.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostTaskBundlesFromProjectByProjectId", "parameters": [ { @@ -29909,7 +26411,7 @@ "TaskBundles" ], "summary": "Creates a task bundle from a task list.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "description": "Creates a task bundle from a task list. The bundle is created from the selected task list.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostTaskBundlesFromTaskListByTaskListId", "parameters": [ { @@ -29977,8 +26479,8 @@ "tags": [ "TaskBundles" ], - "summary": "Lists available task bundle icons.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns available task bundle icons.", + "description": "Returns available task bundle icons. These icons can be assigned to task bundles. The user must have permission to access the requested resource.", "operationId": "GetTaskBundlesIcons", "responses": { "200": { @@ -30016,7 +26518,7 @@ "TaskBundles" ], "summary": "Deletes a task bundle.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "description": "Deletes a task bundle. The bundle is removed with its task templates.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "DeleteTaskBundleById", "parameters": [ { @@ -30054,8 +26556,8 @@ "tags": [ "TaskBundles" ], - "summary": "Gets a task bundle by id.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns a task bundle by id.", + "description": "Returns a task bundle by id. The response includes the bundle's configuration. The user must have permission to access the requested resource.", "operationId": "GetTaskBundleById", "parameters": [ { @@ -30110,7 +26612,7 @@ "TaskBundles" ], "summary": "Updates a task bundle.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "description": "Updates a task bundle. The submitted templates and settings replace the existing values.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PutTaskBundleById", "parameters": [ { @@ -30178,8 +26680,8 @@ "tags": [ "TaskBundles" ], - "summary": "Creates a copy of an existing task bundle.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "summary": "Creates a copy of a task bundle.", + "description": "Creates a copy of a task bundle. The copy receives a new identity and keeps the bundle configuration.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostTaskBundleCopyByTaskBundleId", "parameters": [ { @@ -30247,8 +26749,8 @@ "tags": [ "TaskDependencyTemplates" ], - "summary": "Returns all task dependency templates for a given task bundle.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", + "summary": "Returns dependency templates for a task bundle.", + "description": "Returns dependency templates for a task bundle. Each entry identifies a predecessor and successor task template.\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", "operationId": "GetTaskBundleTaskDependencyTemplatesByTaskBundleId", "parameters": [ { @@ -30326,8 +26828,8 @@ "tags": [ "TaskDependencyTemplates" ], - "summary": "Creates a task dependency template for two task templates of the given task bundle.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "summary": "Creates a dependency template for a bundle.", + "description": "Creates a dependency template for a bundle. The result describes dependencies configured for the bundle.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostTaskBundleTaskDependencyTemplatesByTaskBundleId", "parameters": [ { @@ -30415,8 +26917,8 @@ "tags": [ "TaskDependencyTemplates" ], - "summary": "Deletes the task dependency template from the task bundle.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "summary": "Deletes a dependency template from a bundle.", + "description": "Deletes a dependency template from a bundle. The result describes dependencies configured for the bundle.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "DeleteTaskBundleTaskDependencyTemplateByTaskBundleIdAndTaskDependencyTemplateId", "parameters": [ { @@ -30484,8 +26986,8 @@ "tags": [ "TaskDependencyTemplates" ], - "summary": "Returns a task dependency template by id for a given task bundle.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", + "summary": "Returns a dependency template from a bundle.", + "description": "Returns a dependency template from a bundle. The result describes dependencies configured for the bundle.\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", "operationId": "GetTaskBundleTaskDependencyTemplateByTaskBundleIdAndTaskDependencyTemplateId", "parameters": [ { @@ -30572,8 +27074,8 @@ "tags": [ "TaskBundles" ], - "summary": "Lists task list templates for a task bundle.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns task list templates for a task bundle.", + "description": "Returns task list templates for a task bundle. The response includes the list template configuration. The user must have permission to access the requested resource.", "operationId": "GetTaskBundleTaskListTemplatesByTaskBundleId", "parameters": [ { @@ -30643,7 +27145,7 @@ "TaskBundles" ], "summary": "Creates a task list template for a bundle.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "description": "Creates a task list template for a bundle. It is included when the bundle is applied.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostTaskBundleTaskListTemplatesByTaskBundleId", "parameters": [ { @@ -30712,7 +27214,7 @@ "TaskBundles" ], "summary": "Deletes a task list template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "description": "Deletes a task list template. The response includes the list template configuration.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "DeleteTaskBundleTaskListTemplateByTaskBundleIdAndTaskListTemplateId", "parameters": [ { @@ -30770,8 +27272,8 @@ "tags": [ "TaskBundles" ], - "summary": "Gets a task list template.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns a task list template.", + "description": "Returns a task list template. The response includes the list template configuration. The user must have permission to access the requested resource.", "operationId": "GetTaskBundleTaskListTemplateByTaskBundleIdAndTaskListTemplateId", "parameters": [ { @@ -30836,7 +27338,7 @@ "TaskBundles" ], "summary": "Updates a task list template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "description": "Updates a task list template.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PutTaskBundleTaskListTemplateByTaskBundleIdAndTaskListTemplateId", "parameters": [ { @@ -30915,7 +27417,7 @@ "TaskBundles" ], "summary": "Adds task templates to a task list template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "description": "Adds task templates to a task list template. The listed task templates are added to the bundle list.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostTaskBundleTaskListTemplateAddTaskTemplatesByTaskBundleIdAndTaskListTemplateId", "parameters": [ { @@ -31010,7 +27512,7 @@ "TaskBundles" ], "summary": "Removes task templates from a task list template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "description": "Removes task templates from a task list template. The listed task templates are removed from the bundle list.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostTaskBundleTaskListTemplateRemoveTaskTemplatesByTaskBundleIdAndTaskListTemplateId", "parameters": [ { @@ -31095,8 +27597,8 @@ "tags": [ "TaskBundles" ], - "summary": "Lists task templates inside a task list template.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns task templates inside a task list template.", + "description": "Returns task templates inside a task list template. The response includes task templates assigned to the list. The user must have permission to access the requested resource.", "operationId": "GetTaskBundleTaskListTemplateTaskTemplatesByTaskBundleIdAndTaskListTemplateId", "parameters": [ { @@ -31165,8 +27667,8 @@ "tags": [ "TaskBundles" ], - "summary": "Gets a task template inside a task list template.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns a task template from a list.", + "description": "Returns a task template from a list. The response includes task templates assigned to the list. The user must have permission to access the requested resource.", "operationId": "GetTaskBundleTaskListTemplateTaskTemplateByTaskBundleIdAndTaskListTemplateIdAndTaskTemplateId", "parameters": [ { @@ -31242,8 +27744,8 @@ "tags": [ "TaskBundles" ], - "summary": "Updates the order of a task template inside a task list template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "summary": "Updates task template order in a list.", + "description": "Updates task template order in a list. The selected task template is moved within the list.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostTaskBundleTaskListTemplateTaskTemplateUpdateOrderByTaskBundleIdAndTaskListTemplateIdAndTaskTemplateId", "parameters": [ { @@ -31334,8 +27836,8 @@ "tags": [ "TaskBundles" ], - "summary": "Updates the order of task templates in a task list template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "summary": "Updates task template order in a list.", + "description": "Updates task template order in a list. The task list template order is stored on the bundle.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostTaskBundleTaskListTemplateUpdateOrderByTaskBundleIdAndTaskListTemplateId", "parameters": [ { @@ -31406,8 +27908,8 @@ "tags": [ "TaskTemplates" ], - "summary": "Returns all task templates of the task bundle with the specified id.", - "description": "Returns all task templates of the task bundle with the specified id.\r\n\r\nAny authenticated user.", + "summary": "Returns task templates of the task bundle.", + "description": "Returns task templates of the task bundle. The response includes the task template configuration. The user must have permission to access the requested resource.", "operationId": "GetTaskBundleTaskTemplatesByTaskBundleId", "parameters": [ { @@ -31476,8 +27978,8 @@ "tags": [ "TaskTemplates" ], - "summary": "Creates a new task template for the task bundle with the specified id.", - "description": "Creates a new task template for the task bundle with the specified id.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "summary": "Creates a task template for the task bundle.", + "description": "Creates a task template for the task bundle. It is included when the bundle is applied.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostTaskBundleTaskTemplatesByTaskBundleId", "parameters": [ { @@ -31555,8 +28057,8 @@ "tags": [ "TaskTemplates" ], - "summary": "Deletes the task template for the task bundle with the specified id.", - "description": "Deletes the task template for the task bundle with the specified id.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "summary": "Deletes the task template for the task bundle.", + "description": "Deletes the task template for the task bundle. The task template is removed from the bundle.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "DeleteTaskBundleTaskTemplateByTaskBundleIdAndTaskTemplateId", "parameters": [ { @@ -31614,8 +28116,8 @@ "tags": [ "TaskTemplates" ], - "summary": "Returns the task template of the task bundle with the specified id.", - "description": "Returns the task template of the task bundle with the specified id.\r\n\r\nAny authenticated user.", + "summary": "Returns the task template of the task bundle.", + "description": "Returns the task template of the task bundle. The response includes the task template configuration. The user must have permission to access the requested resource.", "operationId": "GetTaskBundleTaskTemplateByTaskBundleIdAndTaskTemplateId", "parameters": [ { @@ -31679,8 +28181,8 @@ "tags": [ "TaskTemplates" ], - "summary": "Updates the task template for the task bundle with the specified id.", - "description": "Updates the task template for the task bundle with the specified id.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "summary": "Updates the task template for the task bundle.", + "description": "Updates the task template for the task bundle. The updated task template is stored in the bundle.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PutTaskBundleTaskTemplateByTaskBundleIdAndTaskTemplateId", "parameters": [ { @@ -31759,7 +28261,7 @@ "TaskTemplates" ], "summary": "Assigns a list of users to task templates.", - "description": "Users that are not passed and are already assigned will be removed.\r\n Removes existing task template assignments and adds the new assignment.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "description": "Assigns a list of users to task templates. Users that are not passed and are already assigned will be removed. Removes existing task template assignments and adds the new assignment.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostTaskBundlesTaskTemplatesSetAssigneesByTaskBundleIdAndTaskTemplateId", "parameters": [ { @@ -31824,8 +28326,8 @@ "tags": [ "TaskDependencies" ], - "summary": "Creates a new task dependency.", - "description": "To create a task dependency, the user needs to be the assignee of both tasks or have `ProjectPlanning`\r\n permissions in general or in the project the tasks are related to.", + "summary": "Creates task dependency.", + "description": "Creates task dependency. The dependency links the selected tasks. To create a task dependency, the user needs to be the assignee of both tasks or have `ProjectPlanning`\r\n permissions in general or in the project the tasks are related to.", "operationId": "PostTaskDependency", "requestBody": { "description": "The task Dependency form payload.", @@ -31891,7 +28393,7 @@ "TaskDependencies" ], "summary": "Deletes a task dependency.", - "description": "To delete a task dependency, the User needs to be the assignee of both tasks or have 'ProjectPlanning'\r\n permissions in general or in the project the task are related to.", + "description": "Deletes a task dependency. The dependency is removed from both related tasks. To delete a task dependency, the User needs to be the assignee of both tasks or have 'ProjectPlanning'\r\n permissions in general or in the project the task are related to.", "operationId": "DeleteTaskdependencyByTaskDependencyId", "parameters": [ { @@ -31950,8 +28452,8 @@ "tags": [ "Tasks" ], - "summary": "Creates a new project or private task.", - "description": "The user mast either have `project-planning-data:write` permissions, be assigned to the parent task (if a parent task is specified) or create a private task.", + "summary": "Creates a project or private task.", + "description": "Creates a project or private task. The created task is returned with its project or private-task scope. The user mast either have `project-planning-data:write` permissions, be assigned to the parent task (if a parent task is specified) or create a private task.", "operationId": "PostTask", "requestBody": { "description": "The general Task Post form payload.", @@ -32017,7 +28519,7 @@ "Tasks" ], "summary": "Invites a user by email and assigns them to a task.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Invites a user by email and assigns them to a task. The invited user is added to the task's assignees. The user must have permission to access the requested resource.", "operationId": "PostTasksAssignUserByEmail", "requestBody": { "description": "The assign By Email form payload.", @@ -32075,8 +28577,8 @@ "tags": [ "Tasks" ], - "summary": "Edits multiple tasks using the specified operation.", - "description": "Returns MultiStatus including the list of successful and failed tasks.\r\n \r\n Supported Operations:\r\n
    >\r\n
  • movetoproject: Moves all tasks to a new project.
  • movetotasklist: Moves all tasks to a new task list inside the same project.
  • moveundertask: Moves every selected task (and their subtasks) under the specified parent task, validating project boundaries.
  • setdates: Sets the due and optionally start date for all tasks.
  • adjustdates: Offsets start and due dates by the specified number of days while respecting the user's timezone.
  • addtags: Adds a list of tags to all tasks in the list that don't already have the tag.
  • delete: Deletes all tasks. Optional including time trackings.
  • changetypeofwork: Changes the type of work for a list of tasks. Optionally also for the related timetrackings.
  • assignusers: Assigns a list of users to a list of tasks.
  • unassignusers: Unassigns a list of users from a list of tasks. If the UserIds are not provided, all users are unassigned.
  • setprio: Sets the prio flag for a list of tasks.
  • changetaskstatus: Sets the task status for a list of tasks.
  • copy: Creates copies of all specified tasks (including subtasks) and reorders them to maintain hierarchy.
  • plannerbatch: Multiple operations to a single task. Used in the planner.
The user must have `write` permissions on all tasks as well as related entities modified by the operation.", + "summary": "Updates multiple tasks with the selected operation.", + "description": "Updates multiple tasks with the selected operation. Supported operations move tasks, change dates, manage tags, change status or type, assign users, copy tasks, and delete tasks.\r\n The user must have `write` permission for the requested tasks and related entities.", "operationId": "PostTasksBatchByOperation", "parameters": [ { @@ -32152,8 +28654,8 @@ "tags": [ "Tasks" ], - "summary": "Changes the base type for multiple tasks.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Updates the base type for multiple tasks.", + "description": "Updates the base type for multiple tasks. The task becomes available with the selected base type. The user must have permission to access the requested resource.", "operationId": "PostTasksChangeBaseTypes", "requestBody": { "description": "The tasks Change Base Types form payload.", @@ -32204,8 +28706,8 @@ "tags": [ "Tasks" ], - "summary": "Changes the lists of tasks.", - "description": "Adds tasks to lists, removes them and reorders tasks within lists.\r\n\r\nAny authenticated user.", + "summary": "Updates the task lists of tasks.", + "description": "Updates the task lists of tasks. The listed tasks are assigned to the selected lists. The user must have permission to access the requested resource.", "operationId": "PostTasksChangeLists", "requestBody": { "description": "The change Task List forms.", @@ -32266,8 +28768,8 @@ "tags": [ "Tasks" ], - "summary": "Changes statuses of tasks.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Updates the statuses of tasks.", + "description": "Updates the statuses of tasks. The selected status is applied to the listed tasks. The user must have permission to access the requested resource.", "operationId": "PostTasksChangeStatuses", "requestBody": { "description": "The change Status form list.", @@ -32321,8 +28823,8 @@ "tags": [ "Tasks" ], - "summary": "Changes the parent task and the order of subtasks.", - "description": "Changes parent task and order of subtasks. If the parent task of a subtask changed, its lists, base type and entity\r\n will change to match the parent ones.\r\n It is not possible to change a task to subtask if the task already has subtasks.\r\n\r\nAny authenticated user.", + "summary": "Updates task hierarchy and subtask order.", + "description": "Updates task hierarchy and subtask order. A moved subtask adopts the parent task's list and type, and tasks with subtasks cannot become subtasks. The user must have permission to access the requested resource.", "operationId": "PostTasksChangeSubtasks", "requestBody": { "description": "The subtask Changes model.", @@ -32373,8 +28875,8 @@ "tags": [ "Tasks" ], - "summary": "Convert subtasks to a parent task.", - "description": "Convert subtasks to a parent task. If list ids are not provided it will keep the same lists as the old parent task,\r\n placing the task as last item in the lists.\r\n If multiple list ids are provided per task, the lists will be overwritten with the lists provided. In this case, if an\r\n order is not provided, it will be put as the last item in the list.\r\n\r\nAny authenticated user.", + "summary": "Converts subtasks to a parent task.", + "description": "Converts subtasks to a parent task. Convert subtasks to a parent task. If list ids are not provided it will keep the same lists as the old parent task, placing the task as last item in the lists. If multiple list ids are provided per task, the lists will be overwritten with the lists provided. In this case, if an order is not provided, it will be put as the last item in the list. The user must have permission to access the requested resource.", "operationId": "PostTasksChangeSubtasksToParent", "requestBody": { "description": "The change Subtasks To Parent Post form list.", @@ -32425,8 +28927,8 @@ "tags": [ "Tasks" ], - "summary": "Changes the type of work for a batch of tasks.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Updates the type of work for multiple tasks.", + "description": "Updates the type of work for multiple tasks. The selected work type is applied to the listed tasks. The user must have permission to access the requested resource.", "operationId": "PostTasksChangeTypeOfWork", "requestBody": { "description": "The tasks Change Types form payload.", @@ -32478,7 +28980,7 @@ "Tasks" ], "summary": "Deletes tasks and optionally related time entries.", - "description": "Returns 207 MultiStatus when individual deletions fail.\r\n\r\nAny authenticated user.", + "description": "Deletes tasks and optionally related time entries. Related time entries are removed when requested. The user must have permission to access the requested resource.", "operationId": "PostTasksDelete", "requestBody": { "description": "The model describing the task deletion request.", @@ -32529,8 +29031,8 @@ "tags": [ "TaskTags" ], - "summary": "Removes a tag from all project tasks.", - "description": "Removes a tag from all project tasks.\r\n\r\nThe user must be an admin or have `project-planning-data:write` permissions.", + "summary": "Removes a tag from project tasks.", + "description": "Removes a tag from project tasks. The tag is removed from matching project tasks.\r\n\r\nThe user must be an admin or have `project-planning-data:write` permissions.", "operationId": "PostTasksDeleteTags", "requestBody": { "description": "The model to delete the tag from all tasks.", @@ -32589,8 +29091,8 @@ "tags": [ "Tasks" ], - "summary": "Returns the task with the specified key.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns the task for the key.", + "description": "Returns the task for the key. The key is matched within the current workspace. The user must have permission to access the requested resource.", "operationId": "GetTasksKeyByTaskIdentifier", "parameters": [ { @@ -32666,7 +29168,7 @@ "Tasks" ], "summary": "Sets the priority flag for a task.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Sets the priority flag for a task. The task priority flag is stored on the task. The user must have permission to access the requested resource.", "operationId": "PostTasksSetTaskPriority", "requestBody": { "description": "The task Set Prio form payload.", @@ -32724,8 +29226,8 @@ "tags": [ "TaskTags" ], - "summary": "Returns all task tags that are currently in use by tasks.", - "description": "Returns all task tags that are currently in use by tasks ordered by count.\r\n\r\nAny authenticated user.", + "summary": "Returns task tags that are in use by tasks.", + "description": "Returns task tags that are in use by tasks. The result includes tags used by visible tasks. The user must have permission to access the requested resource.", "operationId": "GetTasksTags", "responses": { "200": { @@ -32772,8 +29274,8 @@ "tags": [ "TaskTags" ], - "summary": "Updates a tag globally for all project tasks.", - "description": "Updates a tag for all project tasks.\r\n\r\nThe user must be an admin or have `project-planning-data:write` permissions.", + "summary": "Updates a tag globally for project tasks.", + "description": "Updates a tag globally for project tasks. The renamed or merged tag is applied to matching project tasks.\r\n\r\nThe user must be an admin or have `project-planning-data:write` permissions.", "operationId": "PostTasksUpdateTags", "requestBody": { "description": "The model to update the tag including the old and new tag names.", @@ -32825,8 +29327,8 @@ "tags": [ "Tasks" ], - "summary": "Returns the task with the specified id.", - "description": "The required permissions depend on the base type of the task.\r\n If the task is a project task, 'read' permissions on the 'project-planning-data' feature are required.\r\n For a user's private task, no special permissions are required.\r\n\r\nAny authenticated user.", + "summary": "Returns the specified task.", + "description": "Returns the specified task. The response includes the task's current assignments and status. The user must have permission to access the requested resource.", "operationId": "GetTaskById", "parameters": [ { @@ -32890,8 +29392,8 @@ "tags": [ "Tasks" ], - "summary": "Updates the task with the specified id.", - "description": "To update the task, the user needs to be the assignee of the task or 'ProjectPlanning'\r\n permissions in general or in the project the task is related to.\r\n\r\nAny authenticated user.", + "summary": "Updates the task.", + "description": "Updates the task. The updated task is returned with its changed fields. The user must have permission to access the requested resource.", "operationId": "PutTaskById", "parameters": [ { @@ -33070,8 +29572,8 @@ "tags": [ "TaskTags" ], - "summary": "Adds a batch of tags to the task with the specified id.", - "description": "The request fails if one of the tags is invalid (e.g. empty or duplicate).\r\n To add tags to a task the user must have `write` permissions on the specified task.", + "summary": "Adds a batch of tags to the task.", + "description": "Adds a batch of tags to the task. The request fails if one of the tags is invalid (e.g. empty or duplicate). To add tags to a task the user must have `write` permissions on the specified task.", "operationId": "PostTaskAddTagsByTaskId", "parameters": [ { @@ -33154,8 +29656,8 @@ "tags": [ "ChecklistItems" ], - "summary": "Returns the checklist items for the task with the specified id.", - "description": "The user must have at least `read` permissions on the specified task.", + "summary": "Returns the checklist items for the task.", + "description": "Returns the checklist items for the task. The checklist belongs to the specified task. The user must have at least `read` permissions on the specified task.", "operationId": "GetTaskChecklistItemsByTaskId", "parameters": [ { @@ -33222,8 +29724,8 @@ "tags": [ "ChecklistItems" ], - "summary": "Creates a checklist item for a task with the specified id.", - "description": "The required permissions depend on the base type of the task. If the task is a project task, the user must have either `project-master-data:write` permissions or be assigned to the task. For a user's private task, no special permissions are required.", + "summary": "Creates a checklist item for a task.", + "description": "Creates a checklist item for a task. The new item is added to the task checklist. The required permissions depend on the base type of the task. If the task is a project task, the user must have either `project-master-data:write` permissions or be assigned to the task. For a user's private task, no special permissions are required.", "operationId": "PostTaskChecklistItemsByTaskId", "parameters": [ { @@ -33300,8 +29802,8 @@ "tags": [ "ChecklistItems" ], - "summary": "Converts all checklist items of the specified task to subtasks.", - "description": "The user must have at least `write` permissions on the specified task.", + "summary": "Converts checklist items of the task to subtasks.", + "description": "Converts checklist items of the task to subtasks. Each checklist item becomes a subtask of the task. The user must have at least `write` permissions on the specified task.", "operationId": "PostTaskChecklistItemsToSubtasksByTaskId", "parameters": [ { @@ -33381,7 +29883,7 @@ "ChecklistItems" ], "summary": "Deletes a checklist item from a task.", - "description": "The user must have at least `write` permissions on the specified task.", + "description": "Deletes a checklist item from a task. The selected checklist item is removed from the task. The user must have at least `write` permissions on the specified task.", "operationId": "DeleteTaskChecklistItemByTaskIdAndChecklistItemId", "parameters": [ { @@ -33448,8 +29950,8 @@ "tags": [ "ChecklistItems" ], - "summary": "Returns the checklist item with the specified id for a task.", - "description": "The user must have at least `read` permissions on the specified task.", + "summary": "Returns the checklist item for a task.", + "description": "Returns the checklist item for a task. The checklist belongs to the specified task. The user must have at least `read` permissions on the specified task.", "operationId": "GetTaskChecklistItemByTaskIdAndChecklistItemId", "parameters": [ { @@ -33523,8 +30025,8 @@ "tags": [ "ChecklistItems" ], - "summary": "Updates a checklist item for a task with the specified id.", - "description": "The required permissions depend on the base type of the task. If the task is a project task, the user must have either `project-master-data:write` permissions or be assigned to the task. For a user's private task, no special permissions are required.", + "summary": "Updates a checklist item for a task.", + "description": "Updates a checklist item for a task. The submitted item fields are stored on the checklist item. The required permissions depend on the base type of the task. If the task is a project task, the user must have either `project-master-data:write` permissions or be assigned to the task. For a user's private task, no special permissions are required.", "operationId": "PutTaskChecklistItemByTaskIdAndChecklistItemId", "parameters": [ { @@ -34130,7 +30632,7 @@ "Tasks" ], "summary": "Creates a copy of the specified task.", - "description": "Comments, files and activity logs are not copied.\r\n To copy a task, the user needs to be the assignee of the task or 'ProjectPlanning'\r\n permissions in general or in the project the task is related to.\r\n If the task is a parent task, it will also copy its subtasks.\r\n\r\nAny authenticated user.", + "description": "Creates a copy of the specified task. Comments, files and activity logs are not copied. If the task is a parent task, it will also copy its subtasks. The user must have permission to access the requested resource.", "operationId": "PostTaskCopyByTaskId", "parameters": [ { @@ -34197,7 +30699,7 @@ "Tasks" ], "summary": "Deletes the recurrence rule for a task.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Deletes the recurrence rule for a task. The task no longer repeats after the rule is removed. The user must have permission to access the requested resource.", "operationId": "PostTaskDeleteRecurrencyByTaskId", "parameters": [ { @@ -34256,8 +30758,8 @@ "tags": [ "TaskTags" ], - "summary": "Removes tags from the task with the specified id.", - "description": "Returns 204 NoContent if all tags have been removed successfully.\r\n Returns 207 MultiStatus if at least one tag could not be removed, including the reasons.\r\n \r\n To remove tags from a task the user must have `write` permissions on the specified task.", + "summary": "Removes tags from the task.", + "description": "Removes tags from the task. Returns 207 MultiStatus if at least one tag could not be removed, including the reasons. To remove tags from a task the user must have `write` permissions on the specified task.", "operationId": "PostTaskDeleteTagsByTaskId", "parameters": [ { @@ -34328,245 +30830,6 @@ } } }, - "/tasks/{taskId}/externalfiles": { - "post": { - "tags": [ - "TaskFiles" - ], - "summary": "Endpoint to batch create external files without uploading.", - "description": "Endpoint to create file infos with batch operation.\nCreated file infos don't have a version.\r\n\r\nAny authenticated user.", - "operationId": "CreateExternalFiles", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "List of file forms.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - }, - "application/*+json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasks/{taskId}/files": { - "delete": { - "tags": [ - "TaskFiles" - ], - "summary": "Deletes the files of the specified task.", - "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", - "operationId": "DeleteTaskFiles", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "get": { - "tags": [ - "TaskFiles" - ], - "summary": "Returns all files of the task with the specified id.", - "description": "Returns all file metadata of the task with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskFiles", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "TaskFiles" - ], - "summary": "Creates a new task file for the task with the specified id..", - "description": "Uploads a new task file for the task with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateTaskFile", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - }, - "400": { - "description": "Bad Request" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, "/tasks/{taskId}/files/byuploadid": { "post": { "tags": [ @@ -34635,117 +30898,7 @@ } } }, - "/tasks/{taskId}/files/byurl": { - "post": { - "tags": [ - "TaskFiles" - ], - "summary": "Uploads a new file by providing an url.", - "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", - "operationId": "CreateTaskFileByUrl", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task the file is linked to.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The url, name and description of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, "/tasks/{taskId}/files/{fileId}": { - "delete": { - "tags": [ - "TaskFiles" - ], - "summary": "Deletes the task file with the specified id.", - "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", - "operationId": "DeleteTaskFile", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, "get": { "tags": [ "Task Files" @@ -34786,600 +30939,25 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "put": { - "tags": [ - "TaskFiles" - ], - "summary": "Updates the metadata of the task file with the specified id.", - "description": "Updates the metadata of the task file with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "UpdateTaskFile", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model to update the file with the specified id.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasks/{taskId}/files/{fileId}/changeentity": { - "post": { - "tags": [ - "TaskFiles" - ], - "summary": "Changes the task this file belongs to.", - "description": "Changes the task this file belongs to.\nSwitch to the specified task or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", - "operationId": "ChangeTask", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model to change the entity information of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasks/{taskId}/files/{fileId}/copy": { - "post": { - "tags": [ - "TaskFiles" - ], - "summary": "Copies the file to a new task.", - "description": "Copies the file to a new task (meta and content).\r\n\r\nAny authenticated user.", - "operationId": "CopyToTask", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model to change the entity information of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasks/{taskId}/files/{fileId}/download": { - "get": { - "tags": [ - "TaskFiles" - ], - "summary": "Returns the content of the task file with the specified id.", - "description": "Returns the content of the task file. Uses the latest file version.\nIf the task file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskFileContent", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "width", - "in": "query", - "description": "Set width to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "height", - "in": "query", - "description": "Set height to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "crop", - "in": "query", - "description": "Whether to crop the image when resizing it.", - "schema": { - "type": "boolean" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasks/{taskId}/files/{fileId}/pdf": { - "get": { - "tags": [ - "TaskFiles" - ], - "summary": "Returns the content of the file with the specified id as pdf.\ntype or conversion not possible.", - "description": "Returns the content of the task file. Uses the latest file version.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskFileContent", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "inline", - "in": "query", - "description": "If inline is false, content-disposition header is attachment.", - "schema": { - "type": "boolean", - "default": false - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasks/{taskId}/files/{fileId}/shareurl": { - "get": { - "tags": [ - "TaskFiles" - ], - "summary": "Returns an url to share the file.", - "description": "Returns a url to share the file.\r\n\r\nAny authenticated user.", - "operationId": "GetPublicToken", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasks/{taskId}/files/{fileId}/versions": { - "get": { - "tags": [ - "TaskFiles" - ], - "summary": "Returns all file versions of the specified task file.", - "description": "Returns all file versions of the specified task file.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskFileVersions", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileVersion" - } + "$ref": "#/components/schemas/ErrorResponse" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "TaskFiles" - ], - "summary": "Uploads a new version of the task file with the specified id.", - "description": "Uploads a new version of an task file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateTaskFileVersion", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } - } - } - } - }, - "responses": { - "200": { - "description": "OK", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/ErrorResponse" } } } - }, - "400": { - "description": "Bad Request" } }, "security": [ @@ -35484,81 +31062,13 @@ } } }, - "/tasks/{taskId}/files/{fileId}/versions/{versionId}/download": { - "get": { - "tags": [ - "TaskFiles" - ], - "summary": "Returns the content of the task file version with the specified id.", - "description": "Returns the content of the task file version with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskFileVersionContent", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, "/tasks/{taskId}/recurrency": { "get": { "tags": [ "Tasks" ], - "summary": "Gets the recurrence rule of a task.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns the recurrence rule of a task.", + "description": "Returns the recurrence rule of a task. The response includes the task's recurrence settings. The user must have permission to access the requested resource.", "operationId": "GetTaskRecurrencyByTaskId", "parameters": [ { @@ -35625,7 +31135,7 @@ "Tasks" ], "summary": "Assigns a list of users to a task.", - "description": "Replaces existing assignments with the provided list.\r\n\r\nAny authenticated user.", + "description": "Assigns a list of users to a task. Replaces existing assignments with the provided list. The user must have permission to access the requested resource.", "operationId": "PostTaskSetAssigneesByTaskId", "parameters": [ { @@ -35710,7 +31220,7 @@ "CustomFields" ], "summary": "Sets the custom fields for a task.", - "description": "The required properties depend on the type of the custom field.\r\n \r\n The user must have at least `write` permissions on the specified task.", + "description": "Sets the custom fields for a task. The required properties depend on the type of the custom field. The user must have at least `write` permissions on the specified task.", "operationId": "PostTaskSetCustomFieldsByTaskId", "parameters": [ { @@ -35793,8 +31303,8 @@ "tags": [ "Tasks" ], - "summary": "Modifies planned efforts for the given task assignments.", - "description": "Only the provided assignments are updated; missing assignments remain unchanged.\r\n\r\nAny authenticated user.", + "summary": "Modifies planned efforts for the task assignments.", + "description": "Modifies planned efforts for the task assignments. Only the provided assignments are updated; missing assignments remain unchanged. The user must have permission to access the requested resource.", "operationId": "PostTaskSetPlannedEffortsByTaskId", "parameters": [ { @@ -35878,7 +31388,7 @@ "Tasks" ], "summary": "Adds or updates a recurrence rule for a task.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Adds or updates a recurrence rule for a task. The recurrence rule is stored on the task. The user must have permission to access the requested resource.", "operationId": "PostTaskSetRecurrencyByTaskId", "parameters": [ { @@ -35958,8 +31468,8 @@ "tags": [ "TaskTags" ], - "summary": "Returns the tags of the task with the specified id.", - "description": "Returns the tags of the task with the specified id ordered by name.\r\n\r\nAny authenticated user.", + "summary": "Returns the tags of the task.", + "description": "Returns the tags of the task. The result includes tags assigned to the task. The user must have permission to access the requested resource.", "operationId": "GetTaskTagsByTaskId", "parameters": [ { @@ -36018,8 +31528,8 @@ "tags": [ "TaskDependencies" ], - "summary": "Returns all task dependencies for a specific task.", - "description": "To get all dependencies of a task, the user needs project planning permissions on that project or be assigned to that task.", + "summary": "Returns task dependencies for a specific task.", + "description": "Returns task dependencies for a specific task. The result includes dependencies linked to the task. To get all dependencies of a task, the user needs project planning permissions on that project or be assigned to that task.", "operationId": "GetTaskTaskdependenciesByTaskId", "parameters": [ { @@ -36141,7 +31651,7 @@ "Tasks" ], "summary": "Updates the order of a task within its list.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Updates the order of a task within its list. The task is repositioned within its list. The user must have permission to access the requested resource.", "operationId": "PostTaskUpdateOrderByTaskId", "parameters": [ { @@ -36232,7 +31742,7 @@ "TaskSchedules" ], "summary": "Returns a list of task schedules.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Returns a list of task schedules. Each result includes its task and timing settings. The user must have permission to access the requested resource.", "operationId": "GetTaskSchedules", "responses": { "200": { @@ -36277,8 +31787,8 @@ "tags": [ "TaskSchedules" ], - "summary": "Creates a new task schedule for a given task and a given user.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Creates a schedule for a task.", + "description": "Creates a schedule for a task. The schedule controls planned work for the task. The user must have permission to access the requested resource.", "operationId": "PostTaskSchedule", "requestBody": { "description": "The model to create the task schedule.", @@ -36354,7 +31864,7 @@ "TaskSchedules" ], "summary": "Creates task schedules from a task by id.", - "description": "Creates task schedules from a task by id. The task must have start and due date and at least one assignee.\r\n If more than one user is assigned to the task, then the user needs to opt in to create task schedules for all assignees\r\n by setting the\r\n 'createSchedulesForAllAssignees' query param to true. This requires admin or feature permissions.\r\n\r\nAny authenticated user.", + "description": "Creates task schedules from a task by id. If more than one user is assigned to the task, then the user needs to opt in to create task schedules for all assignees by setting the 'createSchedulesForAllAssignees' query param to true. The user must have permission to access the requested resource.", "operationId": "PostTaskSchedulesByTaskIdByTaskId", "parameters": [ { @@ -36433,7 +31943,7 @@ "TaskSchedules" ], "summary": "Deletes a task schedule by id.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Deletes a task schedule by id. The schedule is removed from the task. The user must have permission to access the requested resource.", "operationId": "DeleteTaskScheduleById", "parameters": [ { @@ -36481,7 +31991,7 @@ "TaskSchedules" ], "summary": "Returns a task schedule by id.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Returns a task schedule by id. The response includes the schedule's task and timing settings. The user must have permission to access the requested resource.", "operationId": "GetTaskScheduleById", "parameters": [ { @@ -36546,7 +32056,7 @@ "TaskSchedules" ], "summary": "Updates a given task schedule.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Updates a given task schedule. The saved schedule reflects the submitted timing. The user must have permission to access the requested resource.", "operationId": "PutTaskScheduleById", "parameters": [ { @@ -36623,8 +32133,8 @@ "tags": [ "TaskTemplateTags" ], - "summary": "Removes a tag from all task templates.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "summary": "Removes a tag from task templates.", + "description": "Removes a tag from task templates. The tag is removed from matching task templates.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostDeleteTagForAllTaskTemplates", "requestBody": { "description": "The model to remove the tag from all task templates.", @@ -36683,8 +32193,8 @@ "tags": [ "TaskTemplateTags" ], - "summary": "Returns all tags that are currently in use by task templates.", - "description": "Returns all tags that are currently in use by task templates ordered by count.\r\n\r\nAny authenticated user.", + "summary": "Returns tags that are in use by task templates.", + "description": "Returns tags that are in use by task templates. The result includes tags assigned to the task template. The user must have permission to access the requested resource.", "operationId": "GetTaskTemplateTags", "responses": { "200": { @@ -36721,8 +32231,8 @@ "tags": [ "TaskTemplateTags" ], - "summary": "Updates a tag globally for all task templates.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "summary": "Updates a tag globally for task templates.", + "description": "Updates a tag globally for task templates. The renamed or merged tag is applied to matching task templates.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostTaskTemplatesUpdateTags", "requestBody": { "description": "The model containing the tag updates.", @@ -36781,8 +32291,8 @@ "tags": [ "TaskTemplates" ], - "summary": "Returns the task template with the specified id.", - "description": "Returns the task template with the specified id.\r\n\r\nAny authenticated user.", + "summary": "Returns the task template.", + "description": "Returns the task template. The response includes the task template configuration. The user must have permission to access the requested resource.", "operationId": "GetTaskTemplateById", "parameters": [ { @@ -36838,8 +32348,8 @@ "tags": [ "TaskTemplateTags" ], - "summary": "Adds a batch of tags to the task template with the specified id.", - "description": "The request fails if one of the tags is invalid (e.g. empty or duplicate).\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "summary": "Adds a batch of tags to the task template.", + "description": "Adds a batch of tags to the task template. The request fails if one of the tags is invalid (e.g. empty or duplicate).\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostCreateTaskTemplateTag", "parameters": [ { @@ -36923,8 +32433,8 @@ "tags": [ "TaskBundles" ], - "summary": "Lists checklist item templates for a task template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", + "summary": "Returns checklist items for a task template.", + "description": "Returns checklist items for a task template. The result lists checklist templates defined for the task template.\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", "operationId": "GetTaskTemplateChecklistItemTemplatesByTaskTemplateId", "parameters": [ { @@ -36983,7 +32493,7 @@ "TaskBundles" ], "summary": "Creates a checklist item template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "description": "Creates a checklist item template. It can be used when creating checklist items from the task template.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostTaskTemplateChecklistItemTemplatesByTaskTemplateId", "parameters": [ { @@ -37062,7 +32572,7 @@ "TaskBundles" ], "summary": "Deletes a checklist item template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "description": "Deletes a checklist item template. The checklist template is removed from the task template.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "DeleteTaskTemplateChecklistItemTemplateByTaskTemplateIdAndChecklistItemTemplateId", "parameters": [ { @@ -37120,8 +32630,8 @@ "tags": [ "TaskBundles" ], - "summary": "Gets a checklist item template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", + "summary": "Returns a checklist item template.", + "description": "Returns a checklist item template. The response includes the checklist template's label and completion settings.\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", "operationId": "GetTaskTemplateChecklistItemTemplateByTaskTemplateIdAndChecklistItemTemplateId", "parameters": [ { @@ -37187,7 +32697,7 @@ "TaskBundles" ], "summary": "Updates a checklist item template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "description": "Updates a checklist item template. The submitted checklist template fields are stored.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PutTaskTemplateChecklistItemTemplateByTaskTemplateIdAndChecklistItemTemplateId", "parameters": [ { @@ -37275,8 +32785,8 @@ "tags": [ "TaskBundles" ], - "summary": "Deletes recurrence information from a task template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "summary": "Deletes a task template recurrence rule.", + "description": "Deletes a task template recurrence rule. The recurrence rule is removed from the template.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostTaskTemplateDeleteRecurrencyByTaskTemplateId", "parameters": [ { @@ -37326,8 +32836,8 @@ "tags": [ "TaskTemplateTags" ], - "summary": "Removes tags from the task template with the specified id.", - "description": "Returns 204 NoContent if all tags have been removed successfully.\r\n Returns 207 MultiStatus if at least one tag could not be removed, including the reasons.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "summary": "Removes tags from the task template.", + "description": "Removes tags from the task template. Returns 207 MultiStatus if at least one tag could not be removed, including the reasons.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostDeleteTaskTemplatesTags", "parameters": [ { @@ -37404,8 +32914,8 @@ "tags": [ "TaskBundles" ], - "summary": "Gets recurrency details for a task template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", + "summary": "Returns recurrency details for a task template.", + "description": "Returns recurrency details for a task template. The response includes the template's recurrence settings.\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", "operationId": "GetTaskTemplateRecurrencyByTaskTemplateId", "parameters": [ { @@ -37462,8 +32972,8 @@ "tags": [ "CustomFields" ], - "summary": "Sets the custom fields for the specified task template.", - "description": "The required properties depend on the type of the custom field. Only task templates which are linked to a project template may have custom fields set.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Sets the custom fields for the task template.", + "description": "Sets the custom fields for the task template. The required properties depend on the type of the custom field. Only task templates which are linked to a project template may have custom fields set.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostTaskTemplateSetCustomFieldsByTaskTemplateId", "parameters": [ { @@ -37537,8 +33047,8 @@ "tags": [ "TaskBundles" ], - "summary": "Adds or updates a recurrence rule for a task template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "summary": "Updates a task template recurrence rule.", + "description": "Updates a task template recurrence rule. The template uses the submitted recurrence rule.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostTaskTemplateSetRecurrencyByTaskTemplateId", "parameters": [ { @@ -37599,8 +33109,8 @@ "tags": [ "TaskTemplateTags" ], - "summary": "Returns the tags of the task template with the specified id.", - "description": "Returns the tags of the task template with the specified id ordered by name.\r\n\r\nAny authenticated user.", + "summary": "Returns the tags of the task template.", + "description": "Returns the tags of the task template. The result includes tags assigned to the task template. The user must have permission to access the requested resource.", "operationId": "GetTagsByTaskTemplateId", "parameters": [ { @@ -37649,8 +33159,8 @@ "tags": [ "TaskDependencyTemplates" ], - "summary": "Returns the task dependency templates for a given task template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", + "summary": "Returns dependency templates for a task template.", + "description": "Returns dependency templates for a task template. The result lists dependencies defined for the task template.\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", "operationId": "GetTaskTemplateTaskDependencyTemplatesByTaskTemplateId", "parameters": [ { @@ -37715,245 +33225,6 @@ } } }, - "/tasktemplates/{tasktemplateId}/externalfiles": { - "post": { - "tags": [ - "TaskTemplateFiles" - ], - "summary": "Endpoint to batch create external files without uploading.", - "description": "Endpoint to create file infos with batch operation.\nCreated file infos don't have a version.\r\n\r\nAny authenticated user.", - "operationId": "CreateExternalFiles", - "parameters": [ - { - "name": "tasktemplateId", - "in": "path", - "description": "The id of the tasktemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "List of file forms.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - }, - "application/*+json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasktemplates/{tasktemplateId}/files": { - "delete": { - "tags": [ - "TaskTemplateFiles" - ], - "summary": "Deletes the files of the specified tasktemplate.", - "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", - "operationId": "DeleteTaskTemplateFiles", - "parameters": [ - { - "name": "tasktemplateId", - "in": "path", - "description": "The id of the tasktemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "get": { - "tags": [ - "TaskTemplateFiles" - ], - "summary": "Returns all files of the tasktemplate with the specified id.", - "description": "Returns all file metadata of the tasktemplate with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskTemplateFiles", - "parameters": [ - { - "name": "tasktemplateId", - "in": "path", - "description": "The id of the tasktemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "TaskTemplateFiles" - ], - "summary": "Creates a new tasktemplate file for the tasktemplate with the specified id..", - "description": "Uploads a new tasktemplate file for the tasktemplate with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateTaskTemplateFile", - "parameters": [ - { - "name": "tasktemplateId", - "in": "path", - "description": "The id of the tasktemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - }, - "400": { - "description": "Bad Request" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, "/tasktemplates/{tasktemplateId}/files/byuploadid": { "post": { "tags": [ @@ -38022,117 +33293,7 @@ } } }, - "/tasktemplates/{tasktemplateId}/files/byurl": { - "post": { - "tags": [ - "TaskTemplateFiles" - ], - "summary": "Uploads a new file by providing an url.", - "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", - "operationId": "CreateTaskTemplateFileByUrl", - "parameters": [ - { - "name": "tasktemplateId", - "in": "path", - "description": "The id of the tasktemplate the file is linked to.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The url, name and description of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, "/tasktemplates/{tasktemplateId}/files/{fileId}": { - "delete": { - "tags": [ - "TaskTemplateFiles" - ], - "summary": "Deletes the tasktemplate file with the specified id.", - "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", - "operationId": "DeleteTaskTemplateFile", - "parameters": [ - { - "name": "tasktemplateId", - "in": "path", - "description": "The id of the tasktemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, "get": { "tags": [ "TaskTemplate Files" @@ -38173,600 +33334,25 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "put": { - "tags": [ - "TaskTemplateFiles" - ], - "summary": "Updates the metadata of the tasktemplate file with the specified id.", - "description": "Updates the metadata of the tasktemplate file with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "UpdateTaskTemplateFile", - "parameters": [ - { - "name": "tasktemplateId", - "in": "path", - "description": "The id of the tasktemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model to update the file with the specified id.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasktemplates/{tasktemplateId}/files/{fileId}/changeentity": { - "post": { - "tags": [ - "TaskTemplateFiles" - ], - "summary": "Changes the tasktemplate this file belongs to.", - "description": "Changes the tasktemplate this file belongs to.\nSwitch to the specified tasktemplate or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", - "operationId": "ChangeTaskTemplate", - "parameters": [ - { - "name": "tasktemplateId", - "in": "path", - "description": "The id of the tasktemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model to change the entity information of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasktemplates/{tasktemplateId}/files/{fileId}/copy": { - "post": { - "tags": [ - "TaskTemplateFiles" - ], - "summary": "Copies the file to a new tasktemplate.", - "description": "Copies the file to a new tasktemplate (meta and content).\r\n\r\nAny authenticated user.", - "operationId": "CopyToTaskTemplate", - "parameters": [ - { - "name": "tasktemplateId", - "in": "path", - "description": "The id of the tasktemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model to change the entity information of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasktemplates/{tasktemplateId}/files/{fileId}/download": { - "get": { - "tags": [ - "TaskTemplateFiles" - ], - "summary": "Returns the content of the tasktemplate file with the specified id.", - "description": "Returns the content of the tasktemplate file. Uses the latest file version.\nIf the tasktemplate file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskTemplateFileContent", - "parameters": [ - { - "name": "tasktemplateId", - "in": "path", - "description": "The id of the tasktemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "width", - "in": "query", - "description": "Set width to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "height", - "in": "query", - "description": "Set height to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "crop", - "in": "query", - "description": "Whether to crop the image when resizing it.", - "schema": { - "type": "boolean" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasktemplates/{tasktemplateId}/files/{fileId}/pdf": { - "get": { - "tags": [ - "TaskTemplateFiles" - ], - "summary": "Returns the content of the file with the specified id as pdf.\ntype or conversion not possible.", - "description": "Returns the content of the tasktemplate file. Uses the latest file version.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskTemplateFileContent", - "parameters": [ - { - "name": "tasktemplateId", - "in": "path", - "description": "The id of the tasktemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "inline", - "in": "query", - "description": "If inline is false, content-disposition header is attachment.", - "schema": { - "type": "boolean", - "default": false - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasktemplates/{tasktemplateId}/files/{fileId}/shareurl": { - "get": { - "tags": [ - "TaskTemplateFiles" - ], - "summary": "Returns an url to share the file.", - "description": "Returns a url to share the file.\r\n\r\nAny authenticated user.", - "operationId": "GetPublicToken", - "parameters": [ - { - "name": "tasktemplateId", - "in": "path", - "description": "The id of the tasktemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasktemplates/{tasktemplateId}/files/{fileId}/versions": { - "get": { - "tags": [ - "TaskTemplateFiles" - ], - "summary": "Returns all file versions of the specified tasktemplate file.", - "description": "Returns all file versions of the specified tasktemplate file.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskTemplateFileVersions", - "parameters": [ - { - "name": "tasktemplateId", - "in": "path", - "description": "The id of the tasktemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileVersion" - } + "$ref": "#/components/schemas/ErrorResponse" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "TaskTemplateFiles" - ], - "summary": "Uploads a new version of the tasktemplate file with the specified id.", - "description": "Uploads a new version of an tasktemplate file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateTaskTemplateFileVersion", - "parameters": [ - { - "name": "tasktemplateId", - "in": "path", - "description": "The id of the tasktemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } - } - } - } - }, - "responses": { - "200": { - "description": "OK", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/ErrorResponse" } } } - }, - "400": { - "description": "Bad Request" } }, "security": [ @@ -38871,81 +33457,13 @@ } } }, - "/tasktemplates/{tasktemplateId}/files/{fileId}/versions/{versionId}/download": { - "get": { - "tags": [ - "TaskTemplateFiles" - ], - "summary": "Returns the content of the tasktemplate file version with the specified id.", - "description": "Returns the content of the tasktemplate file version with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskTemplateFileVersionContent", - "parameters": [ - { - "name": "tasktemplateId", - "in": "path", - "description": "The id of the tasktemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, "/teams": { "get": { "tags": [ "Teams" ], - "summary": "Returns all teams.", - "description": "When team restrictions are applied for the workspace, the user must either be an admin or member of the team to retrieve it.", + "summary": "Returns teams in the workspace.", + "description": "Returns teams in the workspace. The result follows the workspace's team visibility restrictions. When team restrictions are applied for the workspace, the user must either be an admin or member of the team to retrieve it.", "operationId": "GetTeams", "parameters": [ { @@ -39012,8 +33530,8 @@ "tags": [ "Teams" ], - "summary": "Creates a new team.", - "description": "\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin.", + "summary": "Creates a team.", + "description": "Creates a team. It can then be assigned to users and projects.\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin.", "operationId": "PostTeam", "requestBody": { "description": "The model used to create the team.", @@ -39061,8 +33579,8 @@ "tags": [ "Teams" ], - "summary": "Deletes the team with the specified id.", - "description": "\r\n\r\nThe user must be an admin.", + "summary": "Deletes the team.", + "description": "Deletes the team. The team is removed from workspace membership and project grouping.\r\n\r\nThe user must be an admin.", "operationId": "DeleteTeamById", "parameters": [ { @@ -39109,8 +33627,8 @@ "tags": [ "Teams" ], - "summary": "Returns the team with the specified id.", - "description": "When team restrictions are applied for the workspace, the user must either be an admin or member of the team to retrieve it.", + "summary": "Returns the team.", + "description": "Returns the team. The response includes the team's members and projects. When team restrictions are applied for the workspace, the user must either be an admin or member of the team to retrieve it.", "operationId": "GetTeamById", "parameters": [ { @@ -39192,8 +33710,8 @@ "tags": [ "Teams" ], - "summary": "Updates the team with the specified id.", - "description": "\r\n\r\nThe user must be an admin.", + "summary": "Updates the team.", + "description": "Updates the team. The submitted settings replace the existing values.\r\n\r\nThe user must be an admin.", "operationId": "PutTeamById", "parameters": [ { @@ -39279,7 +33797,7 @@ "Teams" ], "summary": "Adds projects to the specified team.", - "description": "The user must have `project-master-data:write` permissions or be the owner of the projects.", + "description": "Adds projects to the specified team. The listed projects become associated with the team. The user must have `project-master-data:write` permissions or be the owner of the projects.", "operationId": "PostTeamAddProjectsByTeamId", "parameters": [ { @@ -39364,7 +33882,7 @@ "Teams" ], "summary": "Adds users to the specified team.", - "description": "\r\n\r\nThe user must be an admin.", + "description": "Adds users to the specified team. The listed users become members of the team.\r\n\r\nThe user must be an admin.", "operationId": "PostTeamAddUsersByTeamId", "parameters": [ { @@ -39449,7 +33967,7 @@ "Teams" ], "summary": "Removes projects from the specified team.", - "description": "The user must have `project-master-data:write` permissions or be the owner of the projects.", + "description": "Removes projects from the specified team. The listed projects stop being associated with the team. The user must have `project-master-data:write` permissions or be the owner of the projects.", "operationId": "PostTeamRemoveProjectsByTeamId", "parameters": [ { @@ -39524,7 +34042,7 @@ "Teams" ], "summary": "Removes users from the specified team.", - "description": "\r\n\r\nThe user must be an admin.", + "description": "Removes users from the specified team. The listed users stop being members of the team.\r\n\r\nThe user must be an admin.", "operationId": "PostTeamRemoveUsersByTeamId", "parameters": [ { @@ -39972,7 +34490,7 @@ "TimeBookings" ], "summary": "Returns a list of time bookings.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Returns a list of time bookings. Each booking includes its project, user, and tracked duration. The user must have permission to access the requested resource.", "operationId": "GetTimeBookings", "parameters": [ { @@ -40021,8 +34539,8 @@ "tags": [ "TimeBookings" ], - "summary": "Creates a new time booking for a given project and user.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Creates a time booking for a project and user.", + "description": "Creates a time booking for a project and user. The booking records time for the submitted project and user. The user must have permission to access the requested resource.", "operationId": "PostTimeBooking", "requestBody": { "description": "The model to create the time booking.", @@ -40088,7 +34606,7 @@ "TimeBookings" ], "summary": "Deletes a time booking by id.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Deletes a time booking by id. The booking is removed from the selected project. The user must have permission to access the requested resource.", "operationId": "DeleteTimeBookingById", "parameters": [ { @@ -40146,7 +34664,7 @@ "TimeBookings" ], "summary": "Updates a given time booking.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Updates a given time booking. The saved booking reflects the submitted duration and assignment. The user must have permission to access the requested resource.", "operationId": "PutTimeBookingById", "parameters": [ { @@ -40223,8 +34741,8 @@ "tags": [ "TimeEntries" ], - "summary": "Returns all time entries.", - "description": "Returns all time entries.\r\n Depending on the time entry, the calling users has to have several permissions to get the time entry.\r\n No permissions are required if the calling user is owner of this time entry (this includes external timetrackings from connected projects).\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions on the 'project-timetracking' feature are necessary (this does NOT include external timetrackings from connected projects).\r\n\r\nAny authenticated user.", + "summary": "Returns time entries in the workspace.", + "description": "Returns time entries in the workspace. The result includes entries the current user is allowed to view.\r\n The user must own the time entry or have `project-timetracking:read` permission for connected project entries.", "operationId": "GetTimeEntries", "parameters": [ { @@ -40282,8 +34800,8 @@ "tags": [ "TimeEntries" ], - "summary": "Creates a new time entry.", - "description": "Creates a new time entry.\r\n Depending on the time entry, the calling users has to have several permissions to create the time entry.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user needs permissions on:\r\n 'project-planning-data' if it is a project task.\r\n\r\nAny authenticated user.", + "summary": "Creates a time entry.", + "description": "Creates a time entry. The entry records the submitted project, task, user, and duration. The user must have permission to access the requested resource.", "operationId": "PostTimeEntry", "requestBody": { "description": "The time entry data.", @@ -40348,8 +34866,8 @@ "tags": [ "TimeEntries" ], - "summary": "Edits multiple time entries using the specified operation.", - "description": "The user is only allowed to edit time entries they have permissions for.\r\n Returns MultiStatus. Includes the list of successfully changed, not found, unauthorized, and invalid time entry ids.\r\n Returns BadRequest if the validation of the form fails, f.e. the new type of work cannot be found.\r\n Returns NotFound if the operation route value is not supported.\r\n \r\n Supported Operations:\r\n
    \r\n
  • \r\n delete: Deletes all time entries. Only admins can delete already billed time entries.
  • \r\n
  • \r\n setTypeOfWork: Changes the type of work for a list of time entries.
  • \r\n
  • \r\n setIsBillable: Changes the billability for a list of time entries. Already billed time entries can only be changed to\r\n being unbillable by admins. In this case, the IsBilled flag is also set to false.
  • \r\n
  • \r\n setIsBilled: Changes the billing status for a list of time entries. Only admins can change the billing status back to\r\n unbilled for already billed time entries.
  • \r\n
  • \r\n setProject: Changes the project for a list of time entries. Only admins can change the project for already billed time\r\n entries. Setting the project unsets the previous project and task.
  • \r\n
  • \r\n setTask: Changes the task for a list of time entries. Only admins can change the task for already billed time entries.\r\n Setting the task automatically sets the project if that task is a project task.
  • \r\n
  • \r\n setUser: Changes the user for a list of time entries. Only admins can change the user for already billed time entries.
  • \r\n
\r\n\r\nAny authenticated user.", + "summary": "Updates multiple time entries using the operation.", + "description": "Updates multiple time entries using the operation. Each requested change is reported separately.\r\n The user must have permission to access the requested time entries.", "operationId": "PostTimeEntriesBatchByOperation", "parameters": [ { @@ -40425,8 +34943,8 @@ "tags": [ "TimeEntries" ], - "summary": "Deletes the time entry with the specified ids.", - "description": "This endpoint is deprecated, please use the batch endpoint POST /timeentries/batch/delete instead.\r\n \r\n Deletes the time entries with the specified ids.\r\n Depending on the time entry, the calling users has to have several permissions to delete the time entries.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user needs permissions on:\r\n 'project-planning-data' if it is a project task.\r\n If the time entry is billed, Admin permissions are required.\r\n\r\nAny authenticated user.", + "summary": "Deletes the time entry for the ids.", + "description": "Deletes the time entry for the ids. This endpoint is deprecated, please use the batch endpoint POST /timeentries/batch/delete instead. Deletes the time entries with the specified ids. The user must have permission to access the requested resource.", "operationId": "PostTimeEntriesDelete", "requestBody": { "description": "The time entry ids to delete.", @@ -40475,8 +34993,8 @@ "tags": [ "TimeEntries" ], - "summary": "Sets the time entries with the specified ids to billable.", - "description": "Depending on the time entry, the calling users has to have several permissions to edit the time entries.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user must have 'write'\r\n permissions on:\r\n 'project-timetracking' if it is a project task.\r\n\r\nAny authenticated user.", + "summary": "Sets the time entries for the ids to billable.", + "description": "Sets the time entries for the ids to billable. The selected billing state is applied to the time entries. The user must have permission to access the requested resource.", "operationId": "PostTimeEntriesSetBillable", "requestBody": { "description": "The time entry ids and billable flag.", @@ -40545,8 +35063,8 @@ "tags": [ "TimeEntries" ], - "summary": "Sets the time entries with the specified ids to billed.", - "description": "Depending on the time entry, the calling users has to have several permissions to edit the time entries.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user needs permissions on:\r\n 'project-planning-data' if it is a project task.\r\n If the time entry is billed, the permissions can be ignored because there is no change.\r\n\r\nAny authenticated user.", + "summary": "Sets the time entries for the ids to billed.", + "description": "Sets the time entries for the ids to billed. The selected billing state is applied to the time entries. The user must have permission to access the requested resource.", "operationId": "PostTimeEntriesSetBilled", "requestBody": { "description": "The time entry ids and billed flag.", @@ -40616,7 +35134,7 @@ "TimeEntries" ], "summary": "Sets the type of work of the specified timeentries.", - "description": "Depending on the time entry, the calling users has to have several permissions to edit the time entries.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user needs permissions on:\r\n 'project-planning-data' if it is a project task.\r\n\r\nAny authenticated user.", + "description": "Sets the type of work of the specified timeentries. The selected work type is applied to the time entries. The user must have permission to access the requested resource.", "operationId": "PostTimeEntriesSetTypeOfWork", "requestBody": { "description": "The time entry ids and type of work.", @@ -40685,8 +35203,8 @@ "tags": [ "TimeEntries" ], - "summary": "Sets the time entries with the specified ids to unbillable.", - "description": "Already billed time entries cannot be set to unbillable -> Badrequest\r\n Depending on the time entry, the calling users has to have several permissions to edit the time entries.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user needs write\r\n permissions on:\r\n 'project-timetracking' if it is a project task.\r\n\r\nAny authenticated user.", + "summary": "Sets the time entries for the ids to unbillable.", + "description": "Sets the time entries for the ids to unbillable. Billed entries also become unbilled when an administrator changes them.\r\n The user must be an administrator to change a billed entry. For other entries, the user must own the entry or have applicable `user-timetracking:write`, `project-timetracking:write`, or project-role write permission. Team restrictions also apply.", "operationId": "PostTimeEntriesSetUnbillable", "requestBody": { "description": "The time entry ids and billable flag.", @@ -40755,8 +35273,8 @@ "tags": [ "TimeEntries" ], - "summary": "Sets the time entries with the specified ids to unbilled.", - "description": "For setting already billed time entries to unbilled, the user needs to have admin permissions.\r\n\r\nAny authenticated user.", + "summary": "Sets the time entries for the ids to unbilled.", + "description": "Sets the time entries for the ids to unbilled. The selected billing state is applied to the time entries. The user must have permission to access the requested resource.", "operationId": "PostTimeEntriesSetUnBilled", "requestBody": { "description": "The time entry ids and billed flag.", @@ -40805,8 +35323,8 @@ "tags": [ "TimeEntries" ], - "summary": "Retrieves all time entries with a simplified model based on the grouping parameter.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns simplified time entries.", + "description": "Returns simplified time entries grouped by the requested property when one is supplied.\r\n The user must have permission to view the returned time entries.", "operationId": "GetTimeEntriesSimplified", "parameters": [ { @@ -40865,8 +35383,8 @@ "tags": [ "TimeEntries" ], - "summary": "Deletes the time entry with the specified id.", - "description": "Deletes the time entry with the specified id.\r\n Depending on the time entry, the calling users has to have several permissions to delete the time entry.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is billed, Admin permissions are required.\r\n\r\nAny authenticated user.", + "summary": "Deletes the time entry.", + "description": "Deletes the time entry. The time entry is removed from the selected project or task. The user must have permission to access the requested resource.", "operationId": "DeleteTimeEntryById", "parameters": [ { @@ -40923,8 +35441,8 @@ "tags": [ "TimeEntries" ], - "summary": "Get a time entry by id.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns the specified time entry.", + "description": "Returns the specified time entry when it is visible to the current user.\r\n The user must own the time entry or have permission to view it.", "operationId": "GetTimeEntryById", "parameters": [ { @@ -40968,8 +35486,8 @@ "tags": [ "TimeEntries" ], - "summary": "Updates the time entry with the specified id.", - "description": "Updates the time entry with the specified id.\r\n Depending on the time entry, the calling users has to have several permissions to update the time entry:\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user needs permissions on:\r\n 'project-planning-data' if it is a project task.\r\n The break duration of the time entry is kept the same. The break duration cannot be smaller than the duration of the\r\n time entry. To remove the breaks, use the endpoint POST /timeentries/{id}/removeBreaks.\r\n Following combination of times and duration are allowed for already completed time entries:\r\n - start time (local or utc) and end time (local or utc) (this option always takes precedence)\r\n - start time (local or utc) and duration\r\n - end time (local or utc) and duration\r\n For running time entries, you can only update the start time (local or utc) while the duration stays 0.\r\n\r\nAny authenticated user.", + "summary": "Updates the time entry.", + "description": "Updates the time entry. The break duration of the time entry is kept the same. The break duration cannot be smaller than the duration of the time entry. To remove the breaks, use the endpoint POST /timeentries/{id}/removeBreaks. Following combination of times and duration are allowed for already completed time entries: - start time (local or utc) and end time (local or utc) (this option always takes precedence) - start time (local or utc) and duration - end time (local or utc) and duration For running time entries, you can only update the start time (local or utc) while the duration stays 0. The user must have permission to access the requested resource.", "operationId": "PutTimeEntryById", "parameters": [ { @@ -41056,8 +35574,8 @@ "tags": [ "TimeEntries" ], - "summary": "Handles removing all breaks from a time entry, effectively resuming the timer.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Removes breaks from the specified time entry.", + "description": "Removes all breaks from the specified time entry and resumes its timer.\r\n The user must have permission to edit the time entry.", "operationId": "PostTimeEntryRemoveBreaks", "parameters": [ { @@ -41103,8 +35621,8 @@ "tags": [ "TimeReports" ], - "summary": "Returns all time reports of a user.", - "description": "Returns time reports the user created as well as the shared time reports of\r\n other users.\r\n\r\nAny authenticated user.", + "summary": "Returns time reports of a user.", + "description": "Returns time reports of a user. The response includes details for the selected time range. The user must have permission to access the requested resource.", "operationId": "GetTimeReports", "responses": { "200": { @@ -41142,7 +35660,7 @@ "TimeTrackingSettings" ], "summary": "Returns the global timetracking settings.", - "description": "\r\n\r\nAny authenticated user.", + "description": "Returns the global timetracking settings. The response contains the workspace's time-tracking defaults. The user must have permission to access the requested resource.", "operationId": "GetTimeTrackingSettings", "responses": { "200": { @@ -41179,8 +35697,8 @@ "tags": [ "TypeOfWork" ], - "summary": "Gets all types of work.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns types of work.", + "description": "Returns types of work. Each type includes its billing and color settings. The user must have permission to access the requested resource.", "operationId": "GetTypesOfWork", "parameters": [ { @@ -41238,8 +35756,8 @@ "tags": [ "TypeOfWork" ], - "summary": "Creates a new type of work.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "summary": "Creates a type of work.", + "description": "Creates a type of work. It can then be selected on time entries.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PostTypesOfWork", "requestBody": { "description": "The type Of Work form payload.", @@ -41295,8 +35813,8 @@ "tags": [ "TypeOfWork" ], - "summary": "Gets all possible icons for type of work.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns possible icons for type of work.", + "description": "Returns possible icons for type of work. These icons can be assigned to work types. The user must have permission to access the requested resource.", "operationId": "GetTypesOfWorkIcons", "responses": { "200": { @@ -41333,8 +35851,8 @@ "tags": [ "TypeOfWork" ], - "summary": "Gets the type of work with the specified id.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns the type of work.", + "description": "Returns the type of work. The response includes the type's label, color, and billing settings. The user must have permission to access the requested resource.", "operationId": "GetTypeOfWorkById", "parameters": [ { @@ -41388,8 +35906,8 @@ "tags": [ "TypeOfWork" ], - "summary": "Changes the properties of an existing type of work.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "summary": "Changes the properties of a type of work.", + "description": "Changes the properties of a type of work. Future entries use the submitted billing and color settings.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", "operationId": "PutTypeOfWorkById", "parameters": [ { @@ -41467,8 +35985,8 @@ "tags": [ "TypeOfWork" ], - "summary": "Deletes the type of work with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "summary": "Deletes the type of work.", + "description": "Deletes the type of work. The type of work is removed from the workspace.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", "operationId": "PostTypeOfWorkDeleteByTypeOfWorkId", "parameters": [ { @@ -41539,8 +36057,8 @@ "tags": [ "TypeOfWork" ], - "summary": "Archives or unarchives the type of work with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "summary": "Archives or unarchives the type of work.", + "description": "Archives or unarchives the type of work. Archived types remain available for existing time entries.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", "operationId": "PostTypeOfWorkSetArchivedByTypeOfWorkId", "parameters": [ { @@ -41618,8 +36136,8 @@ "tags": [ "Users" ], - "summary": "Returns all users with their details.", - "description": "Returns all users with their details like status, contact info and more.\r\n Returns all users if the user has read permissions on the feature\r\n user-master-data, otherwise returns only his own user.\r\n Archived users are excluded by default. You can include them by setting the 'showArchived' query parameter.\r\n If the permissions have UserTeamsData Feature, the filter for teams is applied.\r\n Beware that this will also include API users in the response.\r\n\r\nAny authenticated user.", + "summary": "Returns users with their details.", + "description": "Returns users with their details. Archived users are excluded by default; set 'showArchived' to include them. API users are included in the response. The user must have `user-master-data:read` permission to see all workspace users. Without it, the response contains only the requesting user. If team restrictions apply, the response is limited to users in the user's teams.", "operationId": "GetUsers", "parameters": [ { @@ -41679,8 +36197,8 @@ "tags": [ "Users" ], - "summary": "Tries to retrieve user name and gender for the specified email.", - "description": "Returns the first name, last name and gender of the given email address.\r\n\r\nAny authenticated user.", + "summary": "Returns user name and gender for the email.", + "description": "Returns user name and gender for the email. The response contains the matching name and gender fields. The user must have permission to access the requested resource.", "operationId": "GetUsersAutofillByEmail", "parameters": [ { @@ -41728,8 +36246,8 @@ "tags": [ "UserTags" ], - "summary": "Removes a tag from all users.", - "description": "\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", + "summary": "Removes a tag from users.", + "description": "Removes a tag from users. The selected tag is removed from matching users.\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", "operationId": "PostUsersDeleteTags", "requestBody": { "description": "The model with the tag to be removed.", @@ -41768,8 +36286,8 @@ "tags": [ "Users" ], - "summary": "Returns the currently logged-in user and workspace.", - "description": "This is an alternate URL for the /me endpoint.\r\n\r\nAny authenticated user.", + "summary": "Returns the logged-in user and workspace.", + "description": "Returns the logged-in user and workspace. This is an alternate URL for the /me endpoint. The user must have permission to access the requested resource.", "operationId": "GetUsersMe", "responses": { "200": { @@ -41813,8 +36331,8 @@ "tags": [ "TimeBookings" ], - "summary": "Returns the time bookings in a specified time range for a list of users.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns time bookings for users.", + "description": "Returns time bookings for users. Each booking includes its project, user, and tracked duration. The user must have permission to access the requested resource.", "operationId": "GetProjectTimeBookingsForUsers", "parameters": [ { @@ -41904,8 +36422,8 @@ "tags": [ "UserTags" ], - "summary": "Returns all tags that are currently in use.", - "description": "Returns all tags that are currently in use ordered by count.\r\n\r\nAny authenticated user.", + "summary": "Returns tags that are in use.", + "description": "Returns tags that are in use. The result includes tags used by users in the workspace. The user must have permission to access the requested resource.", "operationId": "GetUsersTags", "responses": { "200": { @@ -41942,8 +36460,8 @@ "tags": [ "TimeBookings" ], - "summary": "Returns the time bookings in a specified time range for a list of users.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns time bookings for users.", + "description": "Returns time bookings for users. Each booking includes its project, user, and tracked duration. The user must have permission to access the requested resource.", "operationId": "GetUsersTimeBookings", "parameters": [ { @@ -42033,8 +36551,8 @@ "tags": [ "UserTags" ], - "summary": "Updates a tag globally for all users.", - "description": "\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", + "summary": "Updates a tag globally for users.", + "description": "Updates a tag globally for users. The renamed or merged tag is applied to matching users.\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", "operationId": "PostUsersUpdateTags", "requestBody": { "content": { @@ -42093,7 +36611,7 @@ "Workload" ], "summary": "Returns the users' workloads per day.", - "description": "Returns the users' workloads per day for projects, tasks, task schedules and calendar events\r\n that have an overlap with the interval specified by intervalStart and intervalEnd.\r\n Takes into consideration weekly availability, absences, user capacity, planned efforts, as well as project budget.\r\n\r\nThe user must be an admin or have `user-planning-data:read` permissions.", + "description": "Returns the users' workloads per day. Takes into consideration weekly availability, absences, user capacity, planned efforts, as well as project budget.\r\n\r\nThe user must be an admin or have `user-planning-data:read` permissions.", "operationId": "GetUsersWorkload", "parameters": [ { @@ -42212,7 +36730,7 @@ "tags": [ "Users" ], - "summary": "Deletes the user with the specified id.", + "summary": "Deletes the user.", "description": "\r\n\r\nThe user must be an admin or have `user-manage-config:delete` permissions.", "operationId": "DeleteUserById", "parameters": [ @@ -42271,7 +36789,7 @@ "tags": [ "Users" ], - "summary": "Returns the user with the specified id.", + "summary": "Returns the user.", "description": "\r\n\r\nAny authenticated user.", "operationId": "GetUserById", "parameters": [ @@ -42336,7 +36854,7 @@ "tags": [ "Users" ], - "summary": "Updates the user with the specified id.", + "summary": "Updates the user.", "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:write` permissions.", "operationId": "PutUserById", "parameters": [ @@ -42406,8 +36924,8 @@ "tags": [ "Users" ], - "summary": "Activates the user with the specified id.", - "description": "The user is then allowed to sign in again and will be notified via email.\r\n\r\nThe user must be an admin or have `user-manage-config:write` permissions.", + "summary": "Activates the user.", + "description": "Activates the user. The user is then allowed to sign in again and will be notified via email.\r\n\r\nThe user must be an admin or have `user-manage-config:write` permissions.", "operationId": "PostUserActivateByUserId", "parameters": [ { @@ -42477,8 +36995,8 @@ "tags": [ "UserTags" ], - "summary": "Adds a batch of tags to the user with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", + "summary": "Adds a batch of tags to the user.", + "description": "Adds a batch of tags to the user. The selected tags are added to the user.\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", "operationId": "PostUserAddTagsByUserId", "parameters": [ { @@ -42562,7 +37080,7 @@ "tags": [ "AssignedTasks" ], - "summary": "Returns all tasks the specified user is allowed to see.", + "summary": "Returns tasks the specified user is allowed to see.", "description": "\r\n\r\nAny authenticated user.", "operationId": "GetUserAllAvailableTasksByUserId", "parameters": [ @@ -42624,8 +37142,8 @@ "tags": [ "AssignedTasks" ], - "summary": "Returns all tasks assigned to the specified user.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns tasks assigned to the specified user.", + "description": "Returns tasks assigned to the specified user. The result includes tasks assigned to that user. The user must have permission to access the requested resource.", "operationId": "GetUserAssignedTasksByUserId", "parameters": [ { @@ -42713,8 +37231,8 @@ "tags": [ "AssignedTasks" ], - "summary": "Returns the assigned task with the specified id of a specified user.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns the assigned task of a specified user.", + "description": "Returns the assigned task of a specified user. The result includes tasks assigned to that user. The user must have permission to access the requested resource.", "operationId": "GetUserAssignedTaskByUserIdAndTaskId", "parameters": [ { @@ -42791,7 +37309,7 @@ "UserCapacities" ], "summary": "Returns the capacity of the specified user.", - "description": "Returns the capacity of the specified user.\r\n User planning data or admin permissions are required if the capacity of the specified user\r\n does not belong to the calling user.\r\n\r\nAny authenticated user.", + "description": "Returns the capacity of the specified user. The response includes the user's planning capacity. The user must have permission to access the requested resource.", "operationId": "GetUserCapacityByUserId", "parameters": [ { @@ -42846,7 +37364,7 @@ "UserCapacities" ], "summary": "Updates the capacity of the specified user.", - "description": "Updates the capacity of the user with the specified id.\r\n User planning data or admin permissions are required if the capacity of the specified user\r\n does not belong to the calling user.\r\n\r\nAny authenticated user.", + "description": "Updates the capacity of the specified user. The capacity is stored for the user's planning. The user must have permission to access the requested resource.", "operationId": "PutUserCapacityByUserId", "parameters": [ { @@ -42913,7 +37431,7 @@ "tags": [ "Users" ], - "summary": "Returns the contact infos of the user with the specified id.", + "summary": "Returns the contact infos of the user.", "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:read` permissions.", "operationId": "GetUserContactInfoByUserId", "parameters": [ @@ -42985,7 +37503,7 @@ "tags": [ "Users" ], - "summary": "Creates a new contact info for the user with the specified id.", + "summary": "Creates contact info for the user.", "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:write` permissions.", "operationId": "PostUserContactInfoByUserId", "parameters": [ @@ -43055,7 +37573,7 @@ "tags": [ "Users" ], - "summary": "Deletes the contact info of the user with the specified id.", + "summary": "Deletes the contact info of the user.", "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:write` permissions.", "operationId": "DeleteUserContactInfoByUserIdAndContactInfoId", "parameters": [ @@ -43125,7 +37643,7 @@ "tags": [ "Users" ], - "summary": "Returns the contact info of the user with the specified id.", + "summary": "Returns the contact info of the user.", "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:read` permissions.", "operationId": "GetUserContactInfoByUserIdAndContactInfoId", "parameters": [ @@ -43192,7 +37710,7 @@ "tags": [ "Users" ], - "summary": "Updates the contact info of the user with the specified id.", + "summary": "Updates the contact info of the user.", "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:write` permissions.", "operationId": "PutUserContactInfoByUserIdAndContactInfoId", "parameters": [ @@ -43282,8 +37800,8 @@ "tags": [ "Users" ], - "summary": "Deactivates the user with the specified id.", - "description": "A deactivated user can no longer sign in.\r\n This is only possible if the user is not the last admin user.\r\n\r\nThe user must be an admin or have `user-manage-config:write` permissions.", + "summary": "Deactivates the user.", + "description": "Deactivates the user. A deactivated user can no longer sign in. This is only possible if the user is not the last admin user.\r\n\r\nThe user must be an admin or have `user-manage-config:write` permissions.", "operationId": "PostUserDeactivateByUserId", "parameters": [ { @@ -43372,8 +37890,8 @@ "tags": [ "UserTags" ], - "summary": "Removes tags from the user with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", + "summary": "Removes tags from the user.", + "description": "Removes tags from the user. The selected tags are removed from the user.\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", "operationId": "PostUserDeleteTagsByUserId", "parameters": [ { @@ -43425,356 +37943,7 @@ } } }, - "/users/{userId}/externalfiles": { - "post": { - "tags": [ - "UserFiles" - ], - "summary": "Endpoint to batch create external files without uploading.", - "description": "Endpoint to create file infos with batch operation.\nCreated file infos don't have a version.\r\n\r\nAny authenticated user.", - "operationId": "CreateExternalFiles", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "List of file forms.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - }, - "application/*+json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/users/{userId}/files": { - "delete": { - "tags": [ - "UserFiles" - ], - "summary": "Deletes the files of the specified user.", - "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", - "operationId": "DeleteUserFiles", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "get": { - "tags": [ - "UserFiles" - ], - "summary": "Returns all files of the user with the specified id.", - "description": "Returns all file metadata of the user with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetUserFiles", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "UserFiles" - ], - "summary": "Creates a new user file for the user with the specified id..", - "description": "Uploads a new user file for the user with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateUserFile", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - }, - "400": { - "description": "Bad Request" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/users/{userId}/files/byurl": { - "post": { - "tags": [ - "UserFiles" - ], - "summary": "Uploads a new file by providing an url.", - "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", - "operationId": "CreateUserFileByUrl", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user the file is linked to.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The url, name and description of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, "/users/{userId}/files/{fileId}": { - "delete": { - "tags": [ - "UserFiles" - ], - "summary": "Deletes the user file with the specified id.", - "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", - "operationId": "DeleteUserFile", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, "get": { "tags": [ "User Files" @@ -43815,600 +37984,25 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "put": { - "tags": [ - "UserFiles" - ], - "summary": "Updates the metadata of the user file with the specified id.", - "description": "Updates the metadata of the user file with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "UpdateUserFile", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model to update the file with the specified id.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/users/{userId}/files/{fileId}/changeentity": { - "post": { - "tags": [ - "UserFiles" - ], - "summary": "Changes the user this file belongs to.", - "description": "Changes the user this file belongs to.\nSwitch to the specified user or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", - "operationId": "ChangeUser", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model to change the entity information of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/users/{userId}/files/{fileId}/copy": { - "post": { - "tags": [ - "UserFiles" - ], - "summary": "Copies the file to a new user.", - "description": "Copies the file to a new user (meta and content).\r\n\r\nAny authenticated user.", - "operationId": "CopyToUser", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model to change the entity information of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/users/{userId}/files/{fileId}/download": { - "get": { - "tags": [ - "UserFiles" - ], - "summary": "Returns the content of the user file with the specified id.", - "description": "Returns the content of the user file. Uses the latest file version.\nIf the user file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", - "operationId": "GetUserFileContent", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "width", - "in": "query", - "description": "Set width to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "height", - "in": "query", - "description": "Set height to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "crop", - "in": "query", - "description": "Whether to crop the image when resizing it.", - "schema": { - "type": "boolean" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/users/{userId}/files/{fileId}/pdf": { - "get": { - "tags": [ - "UserFiles" - ], - "summary": "Returns the content of the file with the specified id as pdf.\ntype or conversion not possible.", - "description": "Returns the content of the user file. Uses the latest file version.\r\n\r\nAny authenticated user.", - "operationId": "GetUserFileContent", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "inline", - "in": "query", - "description": "If inline is false, content-disposition header is attachment.", - "schema": { - "type": "boolean", - "default": false - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/users/{userId}/files/{fileId}/shareurl": { - "get": { - "tags": [ - "UserFiles" - ], - "summary": "Returns an url to share the file.", - "description": "Returns a url to share the file.\r\n\r\nAny authenticated user.", - "operationId": "GetPublicToken", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/users/{userId}/files/{fileId}/versions": { - "get": { - "tags": [ - "UserFiles" - ], - "summary": "Returns all file versions of the specified user file.", - "description": "Returns all file versions of the specified user file.\r\n\r\nAny authenticated user.", - "operationId": "GetUserFileVersions", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileVersion" - } + "$ref": "#/components/schemas/ErrorResponse" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "UserFiles" - ], - "summary": "Uploads a new version of the user file with the specified id.", - "description": "Uploads a new version of an user file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateUserFileVersion", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } - } - } - } - }, - "responses": { - "200": { - "description": "OK", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/ErrorResponse" } } } - }, - "400": { - "description": "Bad Request" } }, "security": [ @@ -44513,81 +38107,13 @@ } } }, - "/users/{userId}/files/{fileId}/versions/{versionId}/download": { - "get": { - "tags": [ - "UserFiles" - ], - "summary": "Returns the content of the user file version with the specified id.", - "description": "Returns the content of the user file version with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetUserFileVersionContent", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, "/users/{userId}/otherprivatetasks": { "get": { "tags": [ "PrivateTasks" ], - "summary": "Returns all private tasks that a user created and assigned to someone else.", - "description": "Private tasks are always created for the current user but can be reassigned to other users afterwards.\r\n This endpoint returns all private tasks that were originally created by the user but were reassigned to someone else.\r\n\r\nAny authenticated user.", + "summary": "Returns private tasks reassigned by the user.", + "description": "Returns private tasks reassigned by the user. Private tasks are always created for the current user but can be reassigned to other users afterwards. This endpoint returns all private tasks that were originally created by the user but were reassigned to someone else. The user must have permission to access the requested resource.", "operationId": "GetUserOtherPrivateTasksByUserId", "parameters": [ { @@ -44668,8 +38194,8 @@ "tags": [ "PrivateTasks" ], - "summary": "Returns a private task that a user created and assigned to someone else.", - "description": "Private tasks are always created for the current user but can be reassigned to other users afterwards.\r\n This endpoint returns a private task that was originally created by the user but was reassigned to someone else.\r\n\r\nAny authenticated user.", + "summary": "Returns a private task reassigned by the user.", + "description": "Returns a private task reassigned by the user. Private tasks are always created for the current user but can be reassigned to other users afterwards. This endpoint returns a private task that was originally created by the user but was reassigned to someone else. The user must have permission to access the requested resource.", "operationId": "GetUserOtherPrivateTaskByUserIdAndTaskId", "parameters": [ { @@ -44745,8 +38271,8 @@ "tags": [ "ChecklistItems" ], - "summary": "Returns the checklist items for a private task with the specified id.", - "description": "The user must be the creator of the task.", + "summary": "Returns the checklist items for a private task.", + "description": "Returns the checklist items for a private task. The checklist belongs to the specified private task. The user must be the creator of the task.", "operationId": "GetUserOtherPrivateTaskChecklistItemsByUserIdAndTaskId", "parameters": [ { @@ -44825,8 +38351,8 @@ "tags": [ "ChecklistItems" ], - "summary": "Returns a checklist item for a private task with the specified id.", - "description": "The user must be the creator of the task.", + "summary": "Returns a checklist item for a private task.", + "description": "Returns a checklist item for a private task. The checklist belongs to the specified private task. The user must be the creator of the task.", "operationId": "GetUserOtherPrivateTaskChecklistItemByUserIdAndTaskIdAndChecklistItemId", "parameters": [ { @@ -44912,8 +38438,8 @@ "tags": [ "PrivateTasks" ], - "summary": "Returns all private tasks of the user with the specified id.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns private tasks of the user.", + "description": "Returns private tasks of the user. The result includes tasks owned by that user. The user must have permission to access the requested resource.", "operationId": "GetUserPrivateTasksByUserId", "parameters": [ { @@ -45056,8 +38582,8 @@ "tags": [ "PrivateTasks" ], - "summary": "Returns the private task of a user with the specified id.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns the private task of a user.", + "description": "Returns the private task of a user. The result includes tasks owned by that user. The user must have permission to access the requested resource.", "operationId": "GetUserPrivateTaskByUserIdAndTaskId", "parameters": [ { @@ -45133,8 +38659,8 @@ "tags": [ "ChecklistItems" ], - "summary": "Returns the checklist for a private task with the specified id.", - "description": "The user must be be assigned to the task.", + "summary": "Returns the checklist for a private task.", + "description": "Returns the checklist for a private task. The checklist belongs to the specified private task. The user must be be assigned to the task.", "operationId": "GetUserPrivateTaskChecklistItemsByUserIdAndTaskId", "parameters": [ { @@ -45213,8 +38739,8 @@ "tags": [ "ChecklistItems" ], - "summary": "Retrieves a checklist item from a private task.", - "description": "The user must be assigned to the task.", + "summary": "Returns a checklist item from a private task.", + "description": "Returns a checklist item from a private task. The checklist belongs to the specified private task. The user must be assigned to the task.", "operationId": "GetUserPrivateTaskChecklistItemByUserIdAndTaskIdAndChecklistItemId", "parameters": [ { @@ -45300,8 +38826,8 @@ "tags": [ "Users" ], - "summary": "Archives or unarchives the user with the specified id.", - "description": "Archived objects can not be used any longer but still exist for being referenced by other entities.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Archives or unarchives the user.", + "description": "Archives or unarchives the user. Archived objects can not be used any longer but still exist for being referenced by other entities.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostUserSetArchivedByUserId", "parameters": [ { @@ -45379,8 +38905,8 @@ "tags": [ "UserTags" ], - "summary": "Returns the tags of the users with the specified id.", - "description": "Returns the tags of the user with the specified id ordered by name.\r\n \r\n To read the tags of a user the user must have 'read' permissions on the specified user.", + "summary": "Returns the tags of the users.", + "description": "Returns the tags of the users. The result includes tags assigned to that user. To read the tags of a user the user must have 'read' permissions on the specified user.", "operationId": "GetUserTagsByUserId", "parameters": [ { @@ -45449,8 +38975,8 @@ "tags": [ "AssignedTasks" ], - "summary": "Returns all task tags the specified user is allowed to see.", - "description": "The tags can be filtered by the properties of the task model.\r\n\r\nAny authenticated user.", + "summary": "Returns task tags the user is allowed to see.", + "description": "Returns task tags the user is allowed to see. The tags can be filtered by the properties of the task model. The user must have permission to access the requested resource.", "operationId": "GetUserTasksTagsByUserId", "parameters": [ { @@ -46204,8 +39730,8 @@ "tags": [ "Workflows" ], - "summary": "Retrieves all workflows.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns workflows.", + "description": "Returns workflows. Each workflow includes its linked statuses and custom fields. The user must have permission to access the requested resource.", "operationId": "GetWorkflows", "parameters": [ { @@ -46263,7 +39789,7 @@ "Workflows" ], "summary": "Creates a new workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "description": "Creates a new workflow. It can then be linked to projects.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostWorkflow", "requestBody": { "content": { @@ -46367,8 +39893,8 @@ "tags": [ "Workflows" ], - "summary": "Retrieves a specified workflow.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns a specified workflow.", + "description": "Returns a specified workflow. Linked statuses and custom fields are included. The user must have permission to access the requested resource.", "operationId": "GetWorkflowById", "parameters": [ { @@ -46422,7 +39948,7 @@ "Workflows" ], "summary": "Updates a workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "description": "Updates a workflow. Linked projects use its submitted status and field settings.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PutWorkflowById", "parameters": [ { @@ -47295,8 +40821,8 @@ "tags": [ "Workflows" ], - "summary": "Creates a copy of an existing workflow.", - "description": "Creates a new workflow with the same properties as the original.\r\n The new workflow will have a unique name with \" (Copy)\" appended.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Creates a copy of a workflow.", + "description": "Creates a copy of a workflow. The new workflow will have a unique name with \" (Copy)\" appended.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostWorkflowCopyByWorkflowId", "parameters": [ { @@ -47352,8 +40878,8 @@ "tags": [ "CustomFields" ], - "summary": "Returns all custom field definitions linked to a workflow.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns custom fields linked to a workflow.", + "description": "Returns custom fields linked to a workflow. The result includes fields linked to the workflow. The user must have permission to access the requested resource.", "operationId": "GetWorkflowCustomFieldDefinitionsByWorkflowId", "parameters": [ { @@ -47412,8 +40938,8 @@ "tags": [ "CustomFields" ], - "summary": "Updates the order of a custom field definition linked to a workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Updates custom fields.", + "description": "Updates custom fields. The custom field order is stored for the workflow.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PutWorkflowCustomFieldDefinitionByWorkflowIdAndCustomFieldDefinitionId", "parameters": [ { @@ -47492,7 +41018,7 @@ "Workflows" ], "summary": "Deletes a workflow.", - "description": "If the workflow is linked to projects or project templates they can either be unlinked\r\n or migrated to another workflow before the workflow is deleted.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "description": "Deletes a workflow. If the workflow is linked to projects or project templates they can either be unlinked or migrated to another workflow before the workflow is deleted.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostWorkflowDeleteByWorkflowId", "parameters": [ { @@ -47562,7 +41088,7 @@ "CustomFields" ], "summary": "Links a custom field definition to a workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "description": "Links a custom field definition to a workflow. The custom field is available on the workflow.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostWorkflowLinkCustomFieldDefinitionByWorkflowId", "parameters": [ { @@ -47631,8 +41157,8 @@ "tags": [ "Workflows" ], - "summary": "Returns all project statuses of the workflow with the specified id.", - "description": "The user must either have `project-master-data:read` permissions for a linked project, be assigned to a non-deleted task in a linked project, be allowed to see the external workflow, or have admin / `project-manage-config:read` permissions.", + "summary": "Returns project statuses of the workflow.", + "description": "Returns project statuses of the workflow. The result includes statuses configured for the workflow. The user must either have `project-master-data:read` permissions for a linked project, be assigned to a non-deleted task in a linked project, be allowed to see the external workflow, or have admin / `project-manage-config:read` permissions.", "operationId": "GetWorkflowProjectStatusesByWorkflowId", "parameters": [ { @@ -47710,8 +41236,8 @@ "tags": [ "Workflows" ], - "summary": "Creates a new project status for the specified workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Creates a project status in a workflow.", + "description": "Creates a project status in a workflow. Linked projects can use this status.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostWorkflowProjectStatusesByWorkflowId", "parameters": [ { @@ -47787,8 +41313,8 @@ "tags": [ "Workflows" ], - "summary": "Returns the project status of the workflow with the specified id.", - "description": "The user must either have `project-master-data:read` permissions for a linked project, be assigned to a non-deleted task in a linked project, be allowed to see the external workflow, or have admin / `project-manage-config:read` permissions.", + "summary": "Returns the project status of the workflow.", + "description": "Returns the project status of the workflow. The result includes statuses configured for the workflow. The user must either have `project-master-data:read` permissions for a linked project, be assigned to a non-deleted task in a linked project, be allowed to see the external workflow, or have admin / `project-manage-config:read` permissions.", "operationId": "GetWorkflowProjectStatusByWorkflowIdAndProjectStatusId", "parameters": [ { @@ -47860,8 +41386,8 @@ "tags": [ "Workflows" ], - "summary": "Updates a project status for the specified workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Updates a project status for the workflow.", + "description": "Updates a project status for the workflow. Linked projects use the submitted status settings.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PutWorkflowProjectStatusByWorkflowIdAndProjectStatusId", "parameters": [ { @@ -47947,7 +41473,7 @@ "Workflows" ], "summary": "Deletes a project status from the workflow.", - "description": "A workflow must always have at least one project status to ensure projects\r\n using this workflow have a valid status. If you attempt to delete the last\r\n remaining project status, this endpoint will return a BadRequest error.\r\n \r\n If any projects are currently using this status, you must provide a\r\n NewProjectStatusId in the request body to migrate those projects to a\r\n different status within the same workflow.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "description": "Deletes a project status from the workflow. A workflow must always have at least one project status to ensure projects using this workflow have a valid status. If you attempt to delete the last remaining project status, this endpoint will return a BadRequest error. If any projects are currently using this status, you must provide a NewProjectStatusId in the request body to migrate those projects to a different status within the same workflow.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostWorkflowProjectStatusDeleteByWorkflowIdAndProjectStatusId", "parameters": [ { @@ -48029,7 +41555,7 @@ "Workflows" ], "summary": "Sets the archived status of a workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "description": "Sets the archived status of a workflow. Archived workflows remain available for existing links.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostWorkflowSetArchivedByWorkflowId", "parameters": [ { @@ -48105,8 +41631,8 @@ "tags": [ "Workflows" ], - "summary": "Returns all task statuses of the workflow with the specified id.", - "description": "The user must either have `project-master-data:read` permissions for a linked project, be assigned to a non-deleted task in a linked project, be allowed to see the external workflow, or have admin / `project-manage-config:read` permissions.", + "summary": "Returns task statuses of the workflow.", + "description": "Returns task statuses of the workflow. The result includes statuses configured for the workflow. The user must either have `project-master-data:read` permissions for a linked project, be assigned to a non-deleted task in a linked project, be allowed to see the external workflow, or have admin / `project-manage-config:read` permissions.", "operationId": "GetWorkflowTaskStatusesByWorkflowId", "parameters": [ { @@ -48184,8 +41710,8 @@ "tags": [ "Workflows" ], - "summary": "Creates a new task status for the specified workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Creates a task status for the specified workflow.", + "description": "Creates a task status for the specified workflow. Linked projects can use this status.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostWorkflowTaskStatusesByWorkflowId", "parameters": [ { @@ -48261,8 +41787,8 @@ "tags": [ "Workflows" ], - "summary": "Returns the task status of the workflow with the specified id.", - "description": "The user must either have `project-master-data:read` permissions for a linked project, be assigned to a non-deleted task in a linked project, be allowed to see the external workflow, or have admin / `project-manage-config:read` permissions.", + "summary": "Returns the task status of the workflow.", + "description": "Returns the task status of the workflow. The result includes statuses configured for the workflow. The user must either have `project-master-data:read` permissions for a linked project, be assigned to a non-deleted task in a linked project, be allowed to see the external workflow, or have admin / `project-manage-config:read` permissions.", "operationId": "GetWorkflowTaskStatusByWorkflowIdAndTaskStatusId", "parameters": [ { @@ -48335,7 +41861,7 @@ "Workflows" ], "summary": "Updates a task status for the specified workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "description": "Updates a task status for the specified workflow. Linked projects use the submitted status settings.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PutWorkflowTaskStatusByWorkflowIdAndTaskStatusId", "parameters": [ { @@ -48420,8 +41946,8 @@ "tags": [ "Workflows" ], - "summary": "Deletes the task status of the workflow with the specified id.", - "description": "A workflow must always have at least one task status of type 'todo' and one\r\n of type 'done'. If you attempt to delete the last status of either type,\r\n this endpoint will return a BadRequest error.\r\n \r\n If any tasks are currently using this status, you must provide a\r\n NewTaskStatusId in the request body to migrate those tasks to a\r\n different status within the same workflow.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Deletes the task status of the workflow.", + "description": "Deletes the task status of the workflow. A workflow must always have at least one task status of type 'todo' and one of type 'done'. If you attempt to delete the last status of either type, this endpoint will return a BadRequest error. If any tasks are currently using this status, you must provide a NewTaskStatusId in the request body to migrate those tasks to a different status within the same workflow.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostWorkflowTaskStatusDeleteByWorkflowIdAndTaskStatusId", "parameters": [ { @@ -48502,8 +42028,8 @@ "tags": [ "CustomFields" ], - "summary": "Unlinks a custom field definition from a workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Unlinks a custom field from a workflow.", + "description": "Unlinks a custom field from a workflow. The custom field is no longer linked to the workflow.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostWorkflowUnlinkCustomFieldDefinitionByWorkflowId", "parameters": [ { @@ -48572,8 +42098,8 @@ "tags": [ "Workflows" ], - "summary": "Updates the order of a project status in the workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "summary": "Updates project status order in a workflow.", + "description": "Updates project status order in a workflow. The selected status is moved within the workflow configuration.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", "operationId": "PostWorkflowUpdateProjectStatusOrderByWorkflowId", "parameters": [ { @@ -48642,8 +42168,8 @@ "tags": [ "WorkspaceAbsences" ], - "summary": "Gets all workspace absences.", - "description": "Gets all workspace absences. The result can be filtered, sorted, and paged.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", + "summary": "Returns workspace absences.", + "description": "Returns workspace absences. Gets all workspace absences.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", "operationId": "GetWorkspaceAbsences", "parameters": [ { @@ -48694,7 +42220,7 @@ "WorkspaceAbsences" ], "summary": "Creates a new workspace absence.", - "description": "Creates a new workspace absence.\r\n A workspace absence is a kind of absence that is applied to all users in a workspace.\r\n It can be used to define special holidays (e.g: company offsite) that apply to all users in a workspace.\r\n It can be limited to a specific absence region, in which case only users in that region will be affected.\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", + "description": "Creates a new workspace absence. A workspace absence is a kind of absence that is applied to all users in a workspace. It can be used to define special holidays (e.g: company offsite) that apply to all users in a workspace. It can be limited to a specific absence region, in which case only users in that region will be affected.\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", "operationId": "PostWorkspaceAbsence", "requestBody": { "description": "Workspace absence details including start date, end date, description, and optional region.", @@ -48754,7 +42280,7 @@ "WorkspaceAbsences" ], "summary": "Deletes a workspace absence.", - "description": "Deletes a workspace absence.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", + "description": "Deletes a workspace absence. The absence is removed from the workspace.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", "operationId": "DeleteWorkspaceAbsenceById", "parameters": [ { @@ -48803,7 +42329,7 @@ "WorkspaceAbsences" ], "summary": "Updates a workspace absence.", - "description": "Updates a workspace absence.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", + "description": "Updates a workspace absence. The submitted dates and region determine when it applies.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", "operationId": "PutWorkspaceAbsenceById", "parameters": [ { @@ -48969,21 +42495,19 @@ "x-access": { "any": "true" } - } - }, - "/workspaces/{workspaceId}/externalfiles": { - "post": { + }, + "put": { "tags": [ - "WorkspaceFiles" + "Workspaces" ], - "summary": "Endpoint to batch create external files without uploading.", - "description": "Endpoint to create file infos with batch operation.\nCreated file infos don't have a version.\r\n\r\nAny authenticated user.", - "operationId": "CreateExternalFiles", + "summary": "Updates the workspace with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PutWorkspacesByWorkspaceId", "parameters": [ { "name": "workspaceId", "in": "path", - "description": "The id of the workspace.", + "description": "The workspace id.", "required": true, "schema": { "type": "string", @@ -48992,17 +42516,269 @@ } ], "requestBody": { - "description": "List of file forms.", + "description": "The new workspace values.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" + "$ref": "#/components/schemas/WorkspacePutForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Workspace" } } - }, - "application/*+json": { + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "workspace-manage-config": "write" + } + } + }, + "/workspaces/{workspaceId}/files/{fileId}": { + "get": { + "tags": [ + "Workspace Files" + ], + "summary": "Returns the file with the specified id of the workspace with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByWorkspaceNameAndWorkspaceIdAndFileId", + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "description": "The id of the workspace.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/workspaces/{workspaceId}/files/{fileId}/versions/{versionId}": { + "get": { + "tags": [ + "Workspace Files" + ], + "summary": "Returns the workspace file version with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByWorkspaceNameAndWorkspaceIdAndFileIdAndVersionId", + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "description": "The id of the workspace.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "versionId", + "in": "path", + "description": "The id of the file version.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileVersion" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/{entityName}/{entityId}/externalfiles": { + "post": { + "tags": [ + "Entity Files" + ], + "summary": "Creates external file references for the specified entity.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostExternalFilesByEntityNameAndEntityId", + "parameters": [ + { + "name": "entityName", + "in": "path", + "required": true, + "schema": { + "pattern": "^[A-Za-z]*$", + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { "schema": { "type": "array", "items": { @@ -49010,7 +42786,8 @@ } } } - } + }, + "required": true }, "responses": { "200": { @@ -49018,7 +42795,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -49039,19 +42839,29 @@ } } }, - "/workspaces/{workspaceId}/files": { + "/{entityName}/{entityId}/files": { "delete": { "tags": [ - "WorkspaceFiles" + "Entity Files" ], - "summary": "Deletes the files of the specified workspace.", - "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", - "operationId": "DeleteWorkspaceFiles", + "summary": "Deletes all files and versions for the specified entity.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesByEntityNameAndEntityId", "parameters": [ { - "name": "workspaceId", + "name": "entityName", "in": "path", - "description": "The id of the workspace.", + "description": "The entity type.", + "required": true, + "schema": { + "pattern": "^[A-Za-z]*$", + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "The entity id.", "required": true, "schema": { "type": "string", @@ -49062,6 +42872,36 @@ "responses": { "204": { "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -49080,16 +42920,24 @@ }, "get": { "tags": [ - "WorkspaceFiles" + "Entity Files" ], - "summary": "Returns all files of the workspace with the specified id.", - "description": "Returns all file metadata of the workspace with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetWorkspaceFiles", + "summary": "Returns all files of the specified entity.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByEntityNameAndEntityId", "parameters": [ { - "name": "workspaceId", + "name": "entityName", + "in": "path", + "required": true, + "schema": { + "pattern": "^[A-Za-z]*$", + "type": "string" + } + }, + { + "name": "entityId", "in": "path", - "description": "The id of the workspace.", "required": true, "schema": { "type": "string", @@ -49122,6 +42970,26 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -49140,16 +43008,24 @@ }, "post": { "tags": [ - "WorkspaceFiles" + "Entity Files" ], - "summary": "Creates a new workspace file for the workspace with the specified id..", - "description": "Uploads a new workspace file for the workspace with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateWorkspaceFile", + "summary": "Uploads a file for the specified entity.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesByEntityNameAndEntityId", "parameters": [ { - "name": "workspaceId", + "name": "entityName", + "in": "path", + "required": true, + "schema": { + "pattern": "^[A-Za-z]*$", + "type": "string" + } + }, + { + "name": "entityId", "in": "path", - "description": "The id of the workspace.", "required": true, "schema": { "type": "string", @@ -49160,22 +43036,8 @@ "requestBody": { "content": { "multipart/form-data": { - "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } + "schema": { + "$ref": "#/components/schemas/FileUploadModel" } } } @@ -49192,7 +43054,24 @@ } }, "400": { - "description": "Bad Request" + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -49210,19 +43089,27 @@ } } }, - "/workspaces/{workspaceId}/files/byurl": { + "/{entityName}/{entityId}/files/byurl": { "post": { "tags": [ - "WorkspaceFiles" + "Entity Files" ], - "summary": "Uploads a new file by providing an url.", - "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", - "operationId": "CreateWorkspaceFileByUrl", + "summary": "Uploads a file from a public URL for the specified entity.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesByUrlByEntityNameAndEntityId", "parameters": [ { - "name": "workspaceId", + "name": "entityName", + "in": "path", + "required": true, + "schema": { + "pattern": "^[A-Za-z]*$", + "type": "string" + } + }, + { + "name": "entityId", "in": "path", - "description": "The id of the workspace the file is linked to.", "required": true, "schema": { "type": "string", @@ -49231,19 +43118,14 @@ } ], "requestBody": { - "description": "The url, name and description of the file.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FilePostForm" } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" - } } - } + }, + "required": true }, "responses": { "200": { @@ -49255,6 +43137,26 @@ } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -49272,67 +43174,29 @@ } } }, - "/workspaces/{workspaceId}/files/{fileId}": { + "/{entityName}/{entityId}/files/{fileId}": { "delete": { "tags": [ - "WorkspaceFiles" + "Entity Files" ], - "summary": "Deletes the workspace file with the specified id.", - "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", - "operationId": "DeleteWorkspaceFile", + "summary": "Deletes the specified entity file and its versions.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesByEntityNameAndEntityIdAndFileId", "parameters": [ { - "name": "workspaceId", + "name": "entityName", "in": "path", - "description": "The id of the workspace.", + "description": "The entity type.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "pattern": "^[A-Za-z]*$", + "type": "string" } }, { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "get": { - "tags": [ - "Workspace Files" - ], - "summary": "Returns the file with the specified id of the workspace with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByWorkspaceNameAndWorkspaceIdAndFileId", - "parameters": [ - { - "name": "workspaceId", + "name": "entityId", "in": "path", - "description": "The id of the workspace.", + "description": "The entity id.", "required": true, "schema": { "type": "string", @@ -49342,7 +43206,7 @@ { "name": "fileId", "in": "path", - "description": "The id of the file.", + "description": "The file id.", "required": true, "schema": { "type": "string", @@ -49351,12 +43215,15 @@ } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -49398,16 +43265,24 @@ }, "put": { "tags": [ - "WorkspaceFiles" + "Entity Files" ], - "summary": "Updates the metadata of the workspace file with the specified id.", - "description": "Updates the metadata of the workspace file with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "UpdateWorkspaceFile", + "summary": "Updates metadata for the specified file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PutFilesByEntityNameAndEntityIdAndFileId", "parameters": [ { - "name": "workspaceId", + "name": "entityName", + "in": "path", + "required": true, + "schema": { + "pattern": "^[A-Za-z]*$", + "type": "string" + } + }, + { + "name": "entityId", "in": "path", - "description": "The id of the workspace.", "required": true, "schema": { "type": "string", @@ -49417,7 +43292,6 @@ { "name": "fileId", "in": "path", - "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -49426,19 +43300,14 @@ } ], "requestBody": { - "description": "The model to update the file with the specified id.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FileInfoUpdateForm" } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } } - } + }, + "required": true }, "responses": { "200": { @@ -49450,6 +43319,36 @@ } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -49467,19 +43366,27 @@ } } }, - "/workspaces/{workspaceId}/files/{fileId}/changeentity": { + "/{entityName}/{entityId}/files/{fileId}/changeentity": { "post": { "tags": [ - "WorkspaceFiles" + "Entity Files" ], - "summary": "Changes the workspace this file belongs to.", - "description": "Changes the workspace this file belongs to.\nSwitch to the specified workspace or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", - "operationId": "ChangeWorkspace", + "summary": "Changes the entity that owns the specified file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesChangeEntityByEntityNameAndEntityIdAndFileId", "parameters": [ { - "name": "workspaceId", + "name": "entityName", + "in": "path", + "required": true, + "schema": { + "pattern": "^[A-Za-z]*$", + "type": "string" + } + }, + { + "name": "entityId", "in": "path", - "description": "The id of the workspace.", "required": true, "schema": { "type": "string", @@ -49489,7 +43396,6 @@ { "name": "fileId", "in": "path", - "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -49498,19 +43404,14 @@ } ], "requestBody": { - "description": "The model to change the entity information of the file.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FileEntityForm" } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } } - } + }, + "required": true }, "responses": { "200": { @@ -49522,6 +43423,36 @@ } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -49539,19 +43470,27 @@ } } }, - "/workspaces/{workspaceId}/files/{fileId}/copy": { + "/{entityName}/{entityId}/files/{fileId}/copy": { "post": { "tags": [ - "WorkspaceFiles" + "Entity Files" ], - "summary": "Copies the file to a new workspace.", - "description": "Copies the file to a new workspace (meta and content).\r\n\r\nAny authenticated user.", - "operationId": "CopyToWorkspace", + "summary": "Copies the specified file to another entity.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesCopyByEntityNameAndEntityIdAndFileId", "parameters": [ { - "name": "workspaceId", + "name": "entityName", + "in": "path", + "required": true, + "schema": { + "pattern": "^[A-Za-z]*$", + "type": "string" + } + }, + { + "name": "entityId", "in": "path", - "description": "The id of the workspace.", "required": true, "schema": { "type": "string", @@ -49561,7 +43500,6 @@ { "name": "fileId", "in": "path", - "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -49570,19 +43508,14 @@ } ], "requestBody": { - "description": "The model to change the entity information of the file.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FileCopyForm" } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } } - } + }, + "required": true }, "responses": { "200": { @@ -49594,6 +43527,36 @@ } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -49611,19 +43574,27 @@ } } }, - "/workspaces/{workspaceId}/files/{fileId}/download": { + "/{entityName}/{entityId}/files/{fileId}/download": { "get": { "tags": [ - "WorkspaceFiles" + "Entity Files" ], - "summary": "Returns the content of the workspace file with the specified id.", - "description": "Returns the content of the workspace file. Uses the latest file version.\nIf the workspace file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", - "operationId": "GetWorkspaceFileContent", + "summary": "Returns the latest content of the specified entity file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesDownloadByEntityNameAndEntityIdAndFileId", "parameters": [ { - "name": "workspaceId", + "name": "entityName", + "in": "path", + "required": true, + "schema": { + "pattern": "^[A-Za-z]*$", + "type": "string" + } + }, + { + "name": "entityId", "in": "path", - "description": "The id of the workspace.", "required": true, "schema": { "type": "string", @@ -49633,7 +43604,6 @@ { "name": "fileId", "in": "path", - "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -49643,7 +43613,6 @@ { "name": "width", "in": "query", - "description": "Set width to resize.", "schema": { "type": "number", "format": "double" @@ -49652,7 +43621,6 @@ { "name": "height", "in": "query", - "description": "Set height to resize.", "schema": { "type": "number", "format": "double" @@ -49661,7 +43629,6 @@ { "name": "crop", "in": "query", - "description": "Whether to crop the image when resizing it.", "schema": { "type": "boolean" } @@ -49678,6 +43645,36 @@ } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -49695,19 +43692,27 @@ } } }, - "/workspaces/{workspaceId}/files/{fileId}/pdf": { + "/{entityName}/{entityId}/files/{fileId}/pdf": { "get": { "tags": [ - "WorkspaceFiles" + "Entity Files" ], - "summary": "Returns the content of the file with the specified id as pdf.\ntype or conversion not possible.", - "description": "Returns the content of the workspace file. Uses the latest file version.\r\n\r\nAny authenticated user.", - "operationId": "GetWorkspaceFileContent", + "summary": "Returns the specified entity file as PDF.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesPdfByEntityNameAndEntityIdAndFileId", "parameters": [ { - "name": "workspaceId", + "name": "entityName", + "in": "path", + "required": true, + "schema": { + "pattern": "^[A-Za-z]*$", + "type": "string" + } + }, + { + "name": "entityId", "in": "path", - "description": "The id of the workspace.", "required": true, "schema": { "type": "string", @@ -49717,7 +43722,6 @@ { "name": "fileId", "in": "path", - "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -49727,7 +43731,6 @@ { "name": "inline", "in": "query", - "description": "If inline is false, content-disposition header is attachment.", "schema": { "type": "boolean", "default": false @@ -49745,6 +43748,36 @@ } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -49762,19 +43795,27 @@ } } }, - "/workspaces/{workspaceId}/files/{fileId}/shareurl": { + "/{entityName}/{entityId}/files/{fileId}/shareurl": { "get": { "tags": [ - "WorkspaceFiles" + "Entity Files" ], - "summary": "Returns an url to share the file.", - "description": "Returns a url to share the file.\r\n\r\nAny authenticated user.", - "operationId": "GetPublicToken", + "summary": "Returns a public URL for the specified file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesShareUrlByEntityNameAndEntityIdAndFileId", "parameters": [ { - "name": "workspaceId", + "name": "entityName", + "in": "path", + "required": true, + "schema": { + "pattern": "^[A-Za-z]*$", + "type": "string" + } + }, + { + "name": "entityId", "in": "path", - "description": "The id of the workspace.", "required": true, "schema": { "type": "string", @@ -49784,7 +43825,6 @@ { "name": "fileId", "in": "path", - "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -49802,6 +43842,26 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -49819,19 +43879,27 @@ } } }, - "/workspaces/{workspaceId}/files/{fileId}/versions": { + "/{entityName}/{entityId}/files/{fileId}/versions": { "get": { "tags": [ - "WorkspaceFiles" + "Entity Files" ], - "summary": "Returns all file versions of the specified workspace file.", - "description": "Returns all file versions of the specified workspace file.\r\n\r\nAny authenticated user.", - "operationId": "GetWorkspaceFileVersions", + "summary": "Returns all versions of the specified entity file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByEntityNameAndEntityIdAndFileId", "parameters": [ { - "name": "workspaceId", + "name": "entityName", + "in": "path", + "required": true, + "schema": { + "pattern": "^[A-Za-z]*$", + "type": "string" + } + }, + { + "name": "entityId", "in": "path", - "description": "The id of the workspace.", "required": true, "schema": { "type": "string", @@ -49841,7 +43909,6 @@ { "name": "fileId", "in": "path", - "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -49874,6 +43941,26 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -49892,16 +43979,24 @@ }, "post": { "tags": [ - "WorkspaceFiles" + "Entity Files" ], - "summary": "Uploads a new version of the workspace file with the specified id.", - "description": "Uploads a new version of an workspace file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateWorkspaceFileVersion", + "summary": "Uploads a new version of the specified entity file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesVersionsByEntityNameAndEntityIdAndFileId", "parameters": [ { - "name": "workspaceId", + "name": "entityName", + "in": "path", + "required": true, + "schema": { + "pattern": "^[A-Za-z]*$", + "type": "string" + } + }, + { + "name": "entityId", "in": "path", - "description": "The id of the workspace.", "required": true, "schema": { "type": "string", @@ -49911,7 +44006,6 @@ { "name": "fileId", "in": "path", - "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -49923,21 +44017,7 @@ "content": { "multipart/form-data": { "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } + "$ref": "#/components/schemas/FileUploadModel" } } } @@ -49954,71 +44034,11 @@ } }, "400": { - "description": "Bad Request" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/workspaces/{workspaceId}/files/{fileId}/versions/{versionId}": { - "get": { - "tags": [ - "Workspace Files" - ], - "summary": "Returns the workspace file version with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByWorkspaceNameAndWorkspaceIdAndFileIdAndVersionId", - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "description": "The id of the workspace.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -50059,19 +44079,27 @@ } } }, - "/workspaces/{workspaceId}/files/{fileId}/versions/{versionId}/download": { + "/{entityName}/{entityId}/files/{fileId}/versions/{versionId}/download": { "get": { "tags": [ - "WorkspaceFiles" + "Entity Files" ], - "summary": "Returns the content of the workspace file version with the specified id.", - "description": "Returns the content of the workspace file version with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetWorkspaceFileVersionContent", + "summary": "Returns the content of the specified entity file version.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsDownloadByEntityNameAndEntityIdAndFileIdAndVersionId", "parameters": [ { - "name": "workspaceId", + "name": "entityName", + "in": "path", + "required": true, + "schema": { + "pattern": "^[A-Za-z]*$", + "type": "string" + } + }, + { + "name": "entityId", "in": "path", - "description": "The id of the workspace.", "required": true, "schema": { "type": "string", @@ -50081,7 +44109,6 @@ { "name": "fileId", "in": "path", - "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -50091,7 +44118,6 @@ { "name": "versionId", "in": "path", - "description": "The id of the file version.", "required": true, "schema": { "type": "string", @@ -50110,6 +44136,26 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -51699,7 +45745,7 @@ "items": { "$ref": "#/components/schemas/AgentThreadAttachmentRequestModel" }, - "description": "Up to 20 distinct files attached to this message. Upload new files before submitting their identifiers.", + "description": "Up to 20 distinct files attached to this message. Each file can contain up to 20 MiB.\nUpload new files before submitting their identifiers.", "nullable": true }, "modelProvider": { @@ -53341,7 +47387,7 @@ "items": { "$ref": "#/components/schemas/AgentThreadAttachmentRequestModel" }, - "description": "Up to 20 distinct files attached to this message. Upload new files before submitting their identifiers.", + "description": "Up to 20 distinct files attached to this message. Each file can contain up to 20 MiB.\nUpload new files before submitting their identifiers.", "nullable": true }, "modelProvider": { @@ -53780,7 +47826,7 @@ "items": { "$ref": "#/components/schemas/AgentThreadAttachmentRequestModel" }, - "description": "Up to 20 distinct files attached to this message. Upload new files before submitting their identifiers.", + "description": "Up to 20 distinct files attached to this message. Each file can contain up to 20 MiB.\nUpload new files before submitting their identifiers.", "nullable": true }, "modelProvider": { @@ -53908,6 +47954,12 @@ "description": "The serialized tool result.", "nullable": true, "example": "{\"status\":\"completed\"}" + }, + "chartBlock": { + "type": "string", + "description": "The serialized native chart block produced by code mode, when present.", + "nullable": true, + "example": "{\"type\":\"chart\",\"version\":1,\"spec\":{\"style\":\"bar\",\"series\":[{\"name\":\"Revenue\",\"values\":[1,2]}]}}" } }, "additionalProperties": false, @@ -54367,6 +48419,21 @@ "ConnectionResponseModel": { "type": "object", "properties": { + "canUse": { + "type": "boolean", + "description": "Whether normal ownership or sharing grants use of this connection and its owner is not suspended.\nAdministrator status does not grant use.", + "example": true + }, + "canDelete": { + "type": "boolean", + "description": "Whether the requesting user can delete this connection.", + "example": true + }, + "isSuspended": { + "type": "boolean", + "description": "Whether this connection is suspended because its owner is inactive.", + "example": false + }, "id": { "type": "string", "description": "The connection identifier.", @@ -54644,6 +48711,12 @@ "ConnectorPresetResponseModel": { "type": "object", "properties": { + "hasConfiguration": { + "type": "boolean", + "description": "Whether setup accepts endpoint values or custom OAuth client settings.", + "readOnly": true, + "example": false + }, "key": { "type": "string", "description": "The stable connector preset key.", @@ -54763,6 +48836,18 @@ "format": "uuid", "example": "3d844c62-7410-4df9-a5b2-78805c0ee260" }, + "ownerUserId": { + "type": "string", + "description": "The connector owner, or null for a preset without configuration. CreatedBy remains audit history.", + "format": "uuid", + "nullable": true, + "example": "9ad63972-4396-4b0b-9e7d-40b852cdebf8" + }, + "canDelete": { + "type": "boolean", + "description": "Whether the requesting user can delete the connector and all its connections.", + "example": true + }, "name": { "type": "string", "description": "The connector display name.", @@ -54919,6 +49004,25 @@ }, "additionalProperties": false }, + "CopyAgentRequestModel": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name shown to users.", + "nullable": true, + "example": "Client Status Reporter" + }, + "description": { + "type": "string", + "description": "A short explanation of what the agent does.", + "nullable": true, + "example": "Prepares client-ready project status reports." + } + }, + "additionalProperties": false, + "description": "Configures a copied agent." + }, "CreateAgentDelegationRequestModel": { "type": "object", "properties": { @@ -54998,12 +49102,15 @@ "description": "Represents a request to store a new agent memory." }, "CreateAgentRequestModel": { + "required": [ + "name" + ], "type": "object", "properties": { "name": { + "minLength": 1, "type": "string", "description": "The name shown to users.", - "nullable": true, "example": "Client Status Reporter" }, "description": { @@ -55012,13 +49119,6 @@ "nullable": true, "example": "Prepares client-ready project status reports." }, - "forkedFromAgentId": { - "type": "string", - "description": "The agent to copy.", - "format": "uuid", - "nullable": true, - "example": "1107cc84-1750-40e1-a86c-86f68d1f05c5" - }, "modelProvider": { "type": "string", "description": "The provider that hosts the model.", @@ -55306,7 +49406,8 @@ }, "isSharedWithWorkspace": { "type": "boolean", - "description": "Whether the connector is shared with the workspace.", + "description": "Whether the connector is shared with the workspace. When omitted, the user's contribution permission sets the default.", + "nullable": true, "example": true } }, @@ -55354,18 +49455,22 @@ "description": "Configures a new reusable skill." }, "DisableModelsRequestModel": { + "required": [ + "resourceKey", + "resourceType" + ], "type": "object", "properties": { "resourceType": { + "minLength": 1, "type": "string", "description": "The resource type: model, vendor, or region.", - "nullable": true, "example": "model" }, "resourceKey": { + "minLength": 1, "type": "string", "description": "The resource key.", - "nullable": true, "example": "openai:gpt-5.6-terra" }, "replacements": { @@ -56323,6 +50428,32 @@ "additionalProperties": false, "description": "Sets the language and description for an agent preset." }, + "PublishSkillPresetDefinitionRequestModel": { + "required": [ + "detailedDescription", + "language" + ], + "type": "object", + "properties": { + "language": { + "minLength": 1, + "enum": [ + "en", + "de" + ], + "type": "string", + "description": "The language to assign to the published content." + }, + "detailedDescription": { + "maxLength": 25000, + "minLength": 1, + "type": "string", + "description": "The detailed catalog description in Markdown." + } + }, + "additionalProperties": false, + "description": "Defines the preset metadata for one source skill publication." + }, "RememberAgentSessionMessageRequestModel": { "type": "object", "properties": { @@ -56336,6 +50467,9 @@ "description": "Represents a request to remember an existing session message." }, "SetAgentArchivedRequestModel": { + "required": [ + "isArchived" + ], "type": "object", "properties": { "isArchived": { @@ -56362,6 +50496,9 @@ "description": "Represents a request to enable or disable an agent schedule." }, "SetModelAutoEnableRequestModel": { + "required": [ + "enabled" + ], "type": "object", "properties": { "enabled": { @@ -56374,6 +50511,9 @@ "description": "Represents a workspace automatic-enablement change." }, "SetModelPresetRequestModel": { + "required": [ + "isAuto" + ], "type": "object", "properties": { "isAuto": { @@ -56540,6 +50680,152 @@ "additionalProperties": false, "description": "Represents a bundled skill file in API responses." }, + "SkillPresetCatalogResponseModel": { + "type": "object", + "properties": { + "sourceSkillId": { + "type": "string", + "description": "The source skill ID that identifies the preset across releases.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "versionNumber": { + "type": "integer", + "description": "The release number available for import.", + "format": "int32" + }, + "language": { + "type": "string", + "description": "The language of the published content.", + "nullable": true + }, + "name": { + "type": "string", + "description": "The skill name shown in the preset catalog.", + "nullable": true + }, + "description": { + "type": "string", + "description": "The short description shown in preset summaries.", + "nullable": true + }, + "detailedDescription": { + "type": "string", + "description": "The detailed catalog description in Markdown.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the customer-safe description of a published skill preset." + }, + "SkillPresetDefinitionResponseModel": { + "type": "object", + "properties": { + "sourceSkillId": { + "type": "string", + "description": "The source skill, which also identifies the preset.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "sourceSkillName": { + "type": "string", + "description": "The source skill name from the published snapshot.", + "nullable": true + }, + "language": { + "type": "string", + "description": "The published language.", + "nullable": true + }, + "detailedDescription": { + "type": "string", + "description": "The detailed catalog description.", + "nullable": true + }, + "isPublished": { + "type": "boolean", + "description": "Whether the preset is currently visible to customers." + }, + "latestPublishedVersionNumber": { + "type": "integer", + "description": "The latest product-facing version number.", + "format": "int32" + }, + "nextVersionNumber": { + "type": "integer", + "description": "The version number assigned by the next publication.", + "format": "int32" + }, + "versions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SkillPresetVersionSummaryResponseModel" + }, + "description": "The bounded product-facing release history.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents one preset in the internal authoring catalog." + }, + "SkillPresetSourceSkillResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the skill used to publish this preset.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "name": { + "type": "string", + "description": "The current source skill name.", + "nullable": true + }, + "key": { + "type": "string", + "description": "The current source skill runtime key.", + "nullable": true + }, + "description": { + "type": "string", + "description": "The current source skill description.", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The current source skill instructions.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents a reusable skill that is available for preset publication." + }, + "SkillPresetVersionSummaryResponseModel": { + "type": "object", + "properties": { + "versionNumber": { + "type": "integer", + "description": "The product-facing version number.", + "format": "int32" + }, + "publishedOn": { + "type": "string", + "description": "When this version was published.", + "format": "date-time" + }, + "isPublished": { + "type": "boolean", + "description": "Whether this version remains published." + }, + "isActive": { + "type": "boolean", + "description": "Whether this version is the active customer-facing version." + } + }, + "additionalProperties": false, + "description": "Represents one product release marker in UIC." + }, "SkillResponseModel": { "type": "object", "properties": { @@ -58890,6 +53176,18 @@ }, "additionalProperties": false }, + "PasswordForm": { + "type": "object", + "properties": { + "password": { + "type": "string", + "description": "The password to validate.", + "nullable": true, + "example": "AC0mplexP@ssw0rd" + } + }, + "additionalProperties": false + }, "PasswordResetModel": { "type": "object", "properties": { @@ -76331,6 +70629,12 @@ "UserPermission": { "type": "object", "properties": { + "aku": { + "type": "string", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, "uid": { "type": "string", "format": "uuid", @@ -84552,20 +78856,15 @@ "name": "Agent Thread Files", "description": "Endpoints for files attached to agent threads." }, - { - "name": "AgentFiles" - }, { "name": "Company Files" }, - { - "name": "CompanyFiles" - }, { "name": "Document Files" }, { - "name": "DocumentFiles" + "name": "Entity Files", + "description": "Endpoints for files attached to entities." }, { "name": "FileUpload", @@ -84582,15 +78881,9 @@ { "name": "Project Files" }, - { - "name": "ProjectFiles" - }, { "name": "ProjectTemplate Files" }, - { - "name": "ProjectTemplateFiles" - }, { "name": "SharedFiles", "description": "These file endpoints are used to get shared files and public profile images." @@ -84598,15 +78891,9 @@ { "name": "Task Files" }, - { - "name": "TaskFiles" - }, { "name": "TaskTemplate Files" }, - { - "name": "TaskTemplateFiles" - }, { "name": "Temporary Files", "description": "The temporary file endpoints allow you to upload and update files\n that do not have a connection to any entity. The files can be linked to an entity later.\n They don't show up in awork before they are either linked to a file or marked as a global file.\n Only the user who uploaded the file has access to the temporary file." @@ -84614,15 +78901,9 @@ { "name": "User Files" }, - { - "name": "UserFiles" - }, { "name": "Workspace Files" }, - { - "name": "WorkspaceFiles" - }, { "name": "Project Automations", "description": "Endpoints to manage automations and actions scoped to projects." diff --git a/fern/apis/v2/openapi/openapi.json b/fern/apis/v2/openapi/openapi.json index 37910e8..58cd5c2 100644 --- a/fern/apis/v2/openapi/openapi.json +++ b/fern/apis/v2/openapi/openapi.json @@ -412,8 +412,8 @@ "tags": [ "TimeEntries" ], - "summary": "Returns all time entries.", - "description": "Returns all time entries.\r\n Depending on the time entry, the calling users has to have several permissions to get the time entry.\r\n No permissions are required if the calling user is owner of this time entry (this includes external timetrackings from connected projects).\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions on the 'project-timetracking' feature are necessary (this does NOT include external timetrackings from connected projects).\r\n\r\nAny authenticated user.", + "summary": "Returns time entries in the workspace.", + "description": "Returns time entries in the workspace. The result includes entries the current user is allowed to view.\r\n The user must own the time entry or have `project-timetracking:read` permission for connected project entries.", "operationId": "GetTimeEntriesV2", "parameters": [ { @@ -537,8 +537,8 @@ "tags": [ "TimeEntries" ], - "summary": "Retrieves all time entries with a simplified model based on the grouping parameter.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns simplified time entries.", + "description": "Returns simplified time entries grouped by the requested property when one is supplied.\r\n The user must have permission to view the returned time entries.", "operationId": "GetTimeEntriesSimplifiedV2", "parameters": [ { @@ -597,8 +597,8 @@ "tags": [ "TimeEntries" ], - "summary": "Get a time entry by id.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Returns the specified time entry.", + "description": "Returns the specified time entry when it is visible to the current user.\r\n The user must own the time entry or have permission to view it.", "operationId": "GetTimeEntryByIdV2", "parameters": [ { @@ -730,8 +730,8 @@ "tags": [ "TimeEntries" ], - "summary": "Handles removing all breaks from a time entry, effectively resuming the timer.", - "description": "\r\n\r\nAny authenticated user.", + "summary": "Removes breaks from the specified time entry.", + "description": "Removes all breaks from the specified time entry and resumes its timer.\r\n The user must have permission to edit the time entry.", "operationId": "PostTimeEntryRemoveBreaksV2", "parameters": [ { From 26b0285669b4450722ca4bb9fffb98f5d4609b4d Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 17 Sep 2026 00:26:15 +0000 Subject: [PATCH 14/16] Update API specifications with fern api update --- fern/apis/v1/openapi/openapi.json | 3195 +++++++++++++++++++++++++---- 1 file changed, 2820 insertions(+), 375 deletions(-) diff --git a/fern/apis/v1/openapi/openapi.json b/fern/apis/v1/openapi/openapi.json index b0cb31a..e20929e 100644 --- a/fern/apis/v1/openapi/openapi.json +++ b/fern/apis/v1/openapi/openapi.json @@ -2054,20 +2054,2436 @@ } } }, + "/agents/schedules": { + "get": { + "tags": [ + "Agent Schedules" + ], + "summary": "Lists project schedules.", + "description": "Lists readable schedules directly linked to a project or linked through one of its tasks.\r\n\r\nAny authenticated user.", + "operationId": "GetAgentsSchedules", + "parameters": [ + { + "name": "projectId", + "in": "query", + "description": "The required project id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentScheduleResponseModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "Service Unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/schedules/me": { + "get": { + "tags": [ + "Agent Schedules" + ], + "summary": "Lists owned schedules.", + "description": "Lists schedules owned by the requesting user whose active agents remain readable. The overview processes the newest 1,000 owned schedules.\r\n\r\nAny authenticated user.", + "operationId": "GetAgentsSchedulesMe", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentScheduleResponseModel" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/skills": { + "get": { + "tags": [ + "Agent Skills" + ], + "summary": "Lists accessible skills.", + "description": "Returns one page of shared skills available to the requesting user. Pages contain at most 1000 skills. Use page and pageSize query parameters; pagination metadata is returned in aw-* headers.\r\n\r\nAny authenticated user.", + "operationId": "GetSkills", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SkillResponseModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "Agent Skills" + ], + "summary": "Creates a reusable skill.", + "description": "Creates a user-owned skill and enables it when the creator may configure the awork Agent.\r\n\r\nAny authenticated user.", + "operationId": "PostSkills", + "requestBody": { + "description": "The request payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateSkillRequestModel" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SkillResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/skills/import": { + "post": { + "tags": [ + "Agent Skills" + ], + "summary": "Imports a skill package.", + "description": "Imports a skill from an agentskills.io ZIP package or standalone SKILL.md file. Pass agentId to import the skill as private to that agent; omit it to create a reusable skill.\r\n\r\nAny authenticated user.", + "operationId": "PostSkillsImport", + "parameters": [ + { + "name": "agentId", + "in": "query", + "description": "The optional owning agent ID.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "description": "An agentskills.io ZIP package or standalone SKILL.md file.", + "format": "binary" + }, + "content": { + "type": "string", + "description": "Standalone SKILL.md content used by agent and MCP callers.", + "format": "binary" + }, + "fileName": { + "type": "string", + "description": "The file name used when content is supplied, for example SKILL.md." + } + }, + "description": "Upload either file or content. When content is used, fileName must identify the imported file." + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SkillResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/skills/secretvalues": { + "delete": { + "tags": [ + "Agent Skills" + ], + "summary": "Deletes a skill secret value.", + "description": "Deletes a stored skill secret value. Workspace-scoped values require admin permissions; user-scoped values affect only the requesting user.\r\n\r\nAny authenticated user.", + "operationId": "DeleteSkillsSecretValues", + "parameters": [ + { + "name": "envVarName", + "in": "query", + "description": "The env var name of the value.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "scope", + "in": "query", + "description": "The scope of the value (\"workspace\" or \"user\").", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "get": { + "tags": [ + "Agent Skills" + ], + "summary": "Lists skill secret statuses.", + "description": "Lists which secrets have saved values for the workspace or the requesting user. The secret values themselves are never returned.\r\n\r\nAny authenticated user.", + "operationId": "GetSkillsSecretValues", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SkillSecretValueStatusResponseModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "Agent Skills" + ], + "summary": "Sets a skill secret value.", + "description": "Sets a skill secret value. Workspace-scoped values require admin permissions; user-scoped values are stored for the requesting user only.\r\n\r\nAny authenticated user.", + "operationId": "PutSkillsSecretValues", + "requestBody": { + "description": "The request payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetSkillSecretValueRequestModel" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/skills/{skillId}": { + "delete": { + "tags": [ + "Agent Skills" + ], + "summary": "Deletes a skill.", + "description": "Deletes a shared skill when the caller has manage access.\r\n\r\nAny authenticated user.", + "operationId": "DeleteSkillsBySkillId", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "get": { + "tags": [ + "Agent Skills" + ], + "summary": "Gets an accessible skill.", + "description": "Returns one skill when the caller has read access directly or through the optional linked agent.\r\n\r\nAny authenticated user.", + "operationId": "GetSkillsBySkillId", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "agentId", + "in": "query", + "description": "The optional linked agent through which read access is requested.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SkillResponseModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "Agent Skills" + ], + "summary": "Updates a skill.", + "description": "Updates a shared skill when the caller has manage access.\r\n\r\nAny authenticated user.", + "operationId": "PutSkillsBySkillId", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The request payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateSkillRequestModel" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SkillResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/skills/{skillId}/export": { + "get": { + "tags": [ + "Agent Skills" + ], + "summary": "Exports a skill package.", + "description": "Exports a skill as an agentskills.io ZIP package containing SKILL.md and bundled files.\r\n\r\nAny authenticated user.", + "operationId": "GetSkillsExportBySkillId", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "agentId", + "in": "query", + "description": "The optional linked agent through which read access is requested.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/zip": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/skills/{skillId}/files": { + "delete": { + "tags": [ + "Agent Skills" + ], + "summary": "Deletes a skill file.", + "description": "Deletes one bundled file by its path relative to the skill root.\r\n\r\nAny authenticated user.", + "operationId": "DeleteSkillsFilesBySkillId", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "relativePath", + "in": "query", + "description": "The path of the file relative to the skill root.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "get": { + "tags": [ + "Agent Skills" + ], + "summary": "Lists skill files.", + "description": "Returns the bundled files for a skill after checking read access directly or through the optional linked agent.\r\n\r\nAny authenticated user.", + "operationId": "GetSkillsFilesBySkillId", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "agentId", + "in": "query", + "description": "The optional linked agent through which read access is requested.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SkillFileResponseModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "Agent Skills" + ], + "summary": "Uploads a skill file.", + "description": "Uploads or replaces a bundled file. The relative path defaults to the uploaded file name and can be overridden with the relativePath query parameter, for example scripts/sync.py.\r\n\r\nAny authenticated user.", + "operationId": "PostSkillsFilesBySkillId", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "relativePath", + "in": "query", + "description": "The optional target path relative to the skill root.", + "schema": { + "type": "string", + "default": "" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "required": [ + "file" + ], + "type": "object", + "properties": { + "file": { + "type": "string", + "description": "The bundled skill file to upload.", + "format": "binary" + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SkillFileResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/skills/{skillId}/files/download": { + "get": { + "tags": [ + "Agent Skills" + ], + "summary": "Downloads a skill file.", + "description": "Downloads one bundled file by its path relative to the skill root after checking read access.\r\n\r\nAny authenticated user.", + "operationId": "GetSkillsFilesDownloadBySkillId", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "relativePath", + "in": "query", + "description": "The path of the file relative to the skill root.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "agentId", + "in": "query", + "description": "The optional linked agent through which read access is requested.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/skills/{skillId}/secrets": { + "get": { + "tags": [ + "Agent Skills" + ], + "summary": "Lists skill secret requirements.", + "description": "Lists the secrets a skill needs and whether they are set for the user. Secret values are never returned.\r\n\r\nAny authenticated user.", + "operationId": "GetSkillsSecretsBySkillId", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "agentId", + "in": "query", + "description": "The optional linked agent through which read access is requested.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SkillSecretRequirementResponseModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "Agent Skills" + ], + "summary": "Updates skill secret requirements.", + "description": "Replaces the list of secrets a skill needs and returns the resulting requirements.\r\n\r\nAny authenticated user.", + "operationId": "PutSkillsSecretsBySkillId", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The request payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetSkillSecretRequirementsRequestModel" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SkillSecretRequirementResponseModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/skills/{skillId}/sharing": { + "get": { + "tags": [ + "Agent Skills" + ], + "summary": "Gets skill sharing.", + "description": "Gets the sharing configuration for a manageable, user-owned skill.\r\n\r\nAny authenticated user.", + "operationId": "GetSkillsSharingBySkillId", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SkillSharingResponseModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "Agent Skills" + ], + "summary": "Updates skill sharing.", + "description": "Replaces the sharing configuration for a manageable, user-owned skill.\r\n\r\nAny authenticated user.", + "operationId": "PutSkillsSharingBySkillId", + "parameters": [ + { + "name": "skillId", + "in": "path", + "description": "The skill ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The replacement sharing configuration.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateSkillSharingRequestModel" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SkillSharingResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, "/agents/threads": { "post": { "tags": [ - "AgentThreads" + "AgentThreads" + ], + "summary": "Creates a conversation with the awork Agent or a custom agent.", + "description": "Creates a conversation with the awork Agent or a custom agent and optionally submits the first message.\r\n Supply content or attachments to submit the first message and start processing.\r\n awork Agent threads can be created without a message. Custom Agent threads require text or an attachment.\r\n The response contains the thread and accepted first-message identifiers, not the agent's reply.\r\n See [GET /agents/threads/{threadId}/messages](api:GET/agents/threads/{threadId}/messages) to retrieve replies.\r\n Each request creates a new thread. Retrying after a lost response can create another thread.\r\n\r\nAny authenticated user.", + "operationId": "PostAgentsThreads", + "requestBody": { + "description": "The thread creation payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AiThreadCreateRequestModel" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AiThreadCreatedResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "Service Unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/threads/{threadId}": { + "get": { + "tags": [ + "AgentThreads" + ], + "summary": "Gets an agent thread.", + "description": "Returns details of the specified agent conversation.\r\n Use the thread id returned when creating a conversation. Retrieve its messages separately with [GET /agents/threads/{threadId}/messages](api:GET/agents/threads/{threadId}/messages).\r\n Returns not found if the thread is missing or is not visible to the user.\r\n\r\nAny authenticated user.", + "operationId": "GetAgentsThreadsByThreadId", + "parameters": [ + { + "name": "threadId", + "in": "path", + "description": "The id of the thread to retrieve.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentThreadResponseModel" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/threads/{threadId}/cancel": { + "post": { + "tags": [ + "AgentThreads" + ], + "summary": "Cancels the active run for the specified agent thread.", + "description": "Cancels the active run in the specified personal-agent or custom-agent conversation and returns the thread.\r\n A successful cancellation also pauses dispatch of the next queued message.\r\n The user must have permission to contribute to the thread.", + "operationId": "PostAgentsThreadsCancelByThreadId", + "parameters": [ + { + "name": "threadId", + "in": "path", + "description": "The thread id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentThreadResponseModel" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/threads/{threadId}/files/{fileId}": { + "get": { + "tags": [ + "Agent Thread Files" + ], + "summary": "Returns a file of the specified agent thread.", + "description": "Returns file metadata for a file attached to the specified agent thread.\r\n Both the thread id and file id must match the attachment. Returns not found if the file is not attached to that thread.\r\n The user must have `read` access to the agent thread.", + "operationId": "GetAgentsThreadsFilesByThreadIdAndFileId", + "parameters": [ + { + "name": "threadId", + "in": "path", + "description": "The agent thread id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The file id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/threads/{threadId}/files/{fileId}/download": { + "get": { + "tags": [ + "Agent Thread Files" + ], + "summary": "Returns content from a file attached to the specified agent thread.", + "description": "Returns the binary content of a file attached to the specified agent thread.\r\n Use the thread id and file id from the attachment metadata. For images, width, height, and crop control resizing.\r\n The user must have read access to the agent thread.", + "operationId": "GetAgentsThreadsFilesDownloadByThreadIdAndFileId", + "parameters": [ + { + "name": "threadId", + "in": "path", + "description": "The agent thread id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The file id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "width", + "in": "query", + "description": "The optional image width.", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "height", + "in": "query", + "description": "The optional image height.", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "crop", + "in": "query", + "description": "Whether to crop the image when resizing it.", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/threads/{threadId}/messages": { + "get": { + "tags": [ + "AgentThreads" + ], + "summary": "Lists agent thread messages.", + "description": "Lists messages from the specified personal-agent or custom-agent conversation.\r\n Use this endpoint to retrieve replies after creating a thread or submitting a message.\r\n Returns not found if the thread is missing or the user cannot read it.\r\n\r\nAny authenticated user.", + "operationId": "GetAgentsThreadsMessagesByThreadId", + "parameters": [ + { + "name": "threadId", + "in": "path", + "description": "The thread id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentThreadMessageResponseModel" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "AgentThreads" + ], + "summary": "Submits a message to an agent conversation.", + "description": "Submits a new message to an existing agent conversation for processing.\r\n Provide text, attachments, or both. The message starts processing or enters the thread's queue.\r\n The response confirms acceptance; it does not contain the agent's reply.\r\n Read [GET /agents/threads/{threadId}/messages](api:GET/agents/threads/{threadId}/messages) to retrieve replies.\r\n Each request submits a new message. Retrying after a lost response can submit the message again.\r\n Processing is subject to the workspace's AI availability and usage limits.\r\n The user must have permission to contribute to the thread.", + "operationId": "PostAgentsThreadsMessagesByThreadId", + "parameters": [ + { + "name": "threadId", + "in": "path", + "description": "The id of the thread to send the message in.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model with the content to send to the agent thread.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentThreadMessageRequestModel" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AiThreadMessageAcceptedResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "Service Unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/threads/{threadId}/messages/{messageId}/status": { + "get": { + "tags": [ + "AgentThreads" + ], + "summary": "Gets agent thread message status.", + "description": "Returns the processing status of a submitted agent thread message, including messages still in the queue.\r\n Use the accepted message id returned by the server when creating a thread or submitting a message.\r\n The response indicates whether an agent response exists and includes its id and error details when available.\r\n Retrieve reply content with [GET /agents/threads/{threadId}/messages](api:GET/agents/threads/{threadId}/messages).\r\n\r\nAny authenticated user.", + "operationId": "GetAgentsThreadsMessagesStatusByThreadIdAndMessageId", + "parameters": [ + { + "name": "threadId", + "in": "path", + "description": "The id of the thread that contains the message.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "messageId", + "in": "path", + "description": "The accepted message id returned by the server.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AiThreadMessageProcessingStatusResponseModel" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/{agentId}": { + "get": { + "tags": [ + "Custom Agents" + ], + "summary": "Returns the custom agent's configuration.", + "description": "Returns the specified custom agent's configuration, including the requesting user's access level.\r\n Use this response to inspect the agent's model, prompt, and linked capabilities before working with it.\r\n The user must have read access to the agent.", + "operationId": "GetAgentsByAgentId", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "The agent id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentSummaryResponseModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "Custom Agents" + ], + "summary": "Updates the custom agent's configuration.", + "description": "Updates the custom agent's configuration and returns the saved agent.\r\n Saves a new system prompt version if the prompt changes.\r\n The user must have manage access to the agent. Changing workspace sharing also requires permission to contribute to the agent library.", + "operationId": "PutAgentsByAgentId", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "The agent id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The new agent configuration.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAgentRequestModel" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentSummaryResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/{agentId}/connectors/{connectorId}": { + "delete": { + "tags": [ + "Custom Agents" + ], + "summary": "Unlinks a connector from an agent.", + "description": "Removes the connector link from the specified agent.\r\n Returns no content when the link is removed or is already absent.\r\n The user must have manage access to the agent.", + "operationId": "DeleteConnectorsByConnectorIdAndAgentId", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "The agent id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "connectorId", + "in": "path", + "description": "The connector id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "Custom Agents" + ], + "summary": "Links a connector to an agent.", + "description": "Links an existing connector to the specified agent and returns the linked connector.\r\n Use [GET /agents/connectors](#/AgentRuntime/GetConnectors) to find a connector id.\r\n The user must have manage access to the agent.", + "operationId": "PostConnectorsByConnectorIdAndAgentId", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "The agent id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "connectorId", + "in": "path", + "description": "The connector id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectorResponseModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/{agentId}/copy": { + "post": { + "tags": [ + "Custom Agents" + ], + "summary": "Copies an existing custom agent.", + "description": "Creates a copy of an existing custom agent in the current workspace.\r\n Provide the new name and optional description in the request body. The source agent supplies the initial configuration and system prompt.\r\n Returns the new agent with its own id.\r\n The user must have read access to the source agent.", + "operationId": "PostAgentsCopyByAgentId", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "The source agent id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Creates a conversation with the awork Agent or a custom agent.", - "description": "Creates a conversation with the awork Agent or a custom agent and optionally submits the first message.\r\n Supply content or attachments to submit the first message and start processing.\r\n awork Agent threads can be created without a message. Custom Agent threads require text or an attachment.\r\n The response contains the thread and accepted first-message identifiers, not the agent's reply.\r\n See [GET /agents/threads/{threadId}/messages](api:GET/agents/threads/{threadId}/messages) to retrieve replies.\r\n Each request creates a new thread. Retrying after a lost response can create another thread.\r\n\r\nAny authenticated user.", - "operationId": "PostAgentsThreads", "requestBody": { - "description": "The thread creation payload.", + "description": "The name and description for the copy.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AiThreadCreateRequestModel" + "$ref": "#/components/schemas/CopyAgentRequestModel" } } }, @@ -2079,7 +4495,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AiThreadCreatedResponseModel" + "$ref": "#/components/schemas/AgentSummaryResponseModel" } } } @@ -2093,13 +4509,61 @@ } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/{agentId}/files/byuploadid": { + "post": { + "tags": [ + "FileUpload" + ], + "summary": "Creates a file from an upload id.", + "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file agent from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostUploadByUploadId", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "The id of the agent to attach the file to.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model describing the uploaded file metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadByUploadIdForm" + } + } }, - "401": { - "description": "Unauthorized", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -2113,9 +4577,69 @@ } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/{agentId}/schedules": { + "get": { + "tags": [ + "Agent Schedules" + ], + "summary": "Lists agent schedules.", + "description": "Lists the schedules configured for an agent after checking the caller's read access.\r\n\r\nAny authenticated user.", + "operationId": "GetSchedulesByAgentId", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "The agent id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentScheduleResponseModel" + } + } + } + } }, - "503": { - "description": "Service Unavailable", + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -2138,21 +4662,19 @@ "x-access": { "any": "true" } - } - }, - "/agents/threads/{threadId}": { - "get": { + }, + "post": { "tags": [ - "AgentThreads" + "Agent Schedules" ], - "summary": "Gets an agent thread.", - "description": "Returns details of the specified agent conversation.\r\n Use the thread id returned when creating a conversation. Retrieve its messages separately with [GET /agents/threads/{threadId}/messages](api:GET/agents/threads/{threadId}/messages).\r\n Returns not found if the thread is missing or is not visible to the user.\r\n\r\nAny authenticated user.", - "operationId": "GetAgentsThreadsByThreadId", + "summary": "Creates an agent schedule.", + "description": "Creates a schedule for an agent after validating its cadence, timezone, and optional project or task context.\r\n\r\nAny authenticated user.", + "operationId": "PostSchedulesByAgentId", "parameters": [ { - "name": "threadId", + "name": "agentId", "in": "path", - "description": "The id of the thread to retrieve.", + "description": "The agent id.", "required": true, "schema": { "type": "string", @@ -2160,13 +4682,44 @@ } } ], + "requestBody": { + "description": "The schedule payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAgentScheduleRequestModel" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentThreadResponseModel" + "$ref": "#/components/schemas/AgentScheduleResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -2197,19 +4750,19 @@ } } }, - "/agents/threads/{threadId}/cancel": { + "/agents/{agentId}/schedules/nextoccurrence": { "post": { "tags": [ - "AgentThreads" + "Agent Schedules" ], - "summary": "Cancels the active run for the specified agent thread.", - "description": "Cancels the active run in the specified personal-agent or custom-agent conversation and returns the thread.\r\n A successful cancellation also pauses dispatch of the next queued message.\r\n The user must have permission to contribute to the thread.", - "operationId": "PostAgentsThreadsCancelByThreadId", + "summary": "Previews a schedule occurrence.", + "description": "Calculates the next occurrence for the supplied cadence without changing the schedule.\r\n\r\nAny authenticated user.", + "operationId": "PostSchedulesNextOccurrenceByAgentId", "parameters": [ { - "name": "threadId", + "name": "agentId", "in": "path", - "description": "The thread id.", + "description": "The agent id.", "required": true, "schema": { "type": "string", @@ -2217,13 +4770,44 @@ } } ], + "requestBody": { + "description": "The cadence preview request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentScheduleNextOccurrenceRequestModel" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentThreadResponseModel" + "$ref": "#/components/schemas/AgentScheduleNextOccurrenceResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -2237,6 +4821,16 @@ } } } + }, + "503": { + "description": "Service Unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -2254,19 +4848,19 @@ } } }, - "/agents/threads/{threadId}/files/{fileId}": { - "get": { + "/agents/{agentId}/schedules/{scheduleId}": { + "delete": { "tags": [ - "Agent Thread Files" + "Agent Schedules" ], - "summary": "Returns a file of the specified agent thread.", - "description": "Returns file metadata for a file attached to the specified agent thread.\r\n Both the thread id and file id must match the attachment. Returns not found if the file is not attached to that thread.\r\n The user must have `read` access to the agent thread.", - "operationId": "GetAgentsThreadsFilesByThreadIdAndFileId", + "summary": "Deletes an agent schedule.", + "description": "Deletes a schedule configured for an agent after checking the caller's access.\r\n\r\nAny authenticated user.", + "operationId": "DeleteSchedulesByScheduleIdAndAgentId", "parameters": [ { - "name": "threadId", + "name": "agentId", "in": "path", - "description": "The agent thread id.", + "description": "The agent id.", "required": true, "schema": { "type": "string", @@ -2274,9 +4868,9 @@ } }, { - "name": "fileId", + "name": "scheduleId", "in": "path", - "description": "The file id.", + "description": "The schedule id.", "required": true, "schema": { "type": "string", @@ -2285,12 +4879,15 @@ } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -2329,21 +4926,19 @@ "x-access": { "any": "true" } - } - }, - "/agents/threads/{threadId}/files/{fileId}/download": { - "get": { + }, + "put": { "tags": [ - "Agent Thread Files" + "Agent Schedules" ], - "summary": "Returns content from a file attached to the specified agent thread.", - "description": "Returns the binary content of a file attached to the specified agent thread.\r\n Use the thread id and file id from the attachment metadata. For images, width, height, and crop control resizing.\r\n The user must have read access to the agent thread.", - "operationId": "GetAgentsThreadsFilesDownloadByThreadIdAndFileId", + "summary": "Updates an agent schedule.", + "description": "Updates a schedule configured for an agent after validating its cadence, timezone, and optional context.\r\n\r\nAny authenticated user.", + "operationId": "PutSchedulesByScheduleIdAndAgentId", "parameters": [ { - "name": "threadId", + "name": "agentId", "in": "path", - "description": "The agent thread id.", + "description": "The agent id.", "required": true, "schema": { "type": "string", @@ -2351,50 +4946,34 @@ } }, { - "name": "fileId", + "name": "scheduleId", "in": "path", - "description": "The file id.", + "description": "The schedule id.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "name": "width", - "in": "query", - "description": "The optional image width.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "height", - "in": "query", - "description": "The optional image height.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "crop", - "in": "query", - "description": "Whether to crop the image when resizing it.", - "schema": { - "type": "boolean" - } } ], + "requestBody": { + "description": "The updated schedule payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAgentScheduleRequestModel" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/AgentScheduleResponseModel" } } } @@ -2445,19 +5024,29 @@ } } }, - "/agents/threads/{threadId}/messages": { - "get": { + "/agents/{agentId}/schedules/{scheduleId}/run": { + "post": { "tags": [ - "AgentThreads" + "Agent Schedules" ], - "summary": "Lists agent thread messages.", - "description": "Lists messages from the specified personal-agent or custom-agent conversation.\r\n Use this endpoint to retrieve replies after creating a thread or submitting a message.\r\n Returns not found if the thread is missing or the user cannot read it.\r\n\r\nAny authenticated user.", - "operationId": "GetAgentsThreadsMessagesByThreadId", + "summary": "Runs an agent schedule.", + "description": "Immediately starts a new agent session for the selected schedule.\r\n\r\nAny authenticated user.", + "operationId": "PostSchedulesRunByScheduleIdAndAgentId", "parameters": [ { - "name": "threadId", + "name": "agentId", "in": "path", - "description": "The thread id.", + "description": "The agent id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "scheduleId", + "in": "path", + "description": "The schedule id.", "required": true, "schema": { "type": "string", @@ -2471,10 +5060,27 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AgentThreadMessageResponseModel" - } + "$ref": "#/components/schemas/AiThreadCreatedResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -2503,19 +5109,31 @@ "x-access": { "any": "true" } - }, + } + }, + "/agents/{agentId}/schedules/{scheduleId}/setenabled": { "post": { "tags": [ - "AgentThreads" + "Agent Schedules" ], - "summary": "Submits a message to an agent conversation.", - "description": "Submits a new message to an existing agent conversation for processing.\r\n Provide text, attachments, or both. The message starts processing or enters the thread's queue.\r\n The response confirms acceptance; it does not contain the agent's reply.\r\n Read [GET /agents/threads/{threadId}/messages](api:GET/agents/threads/{threadId}/messages) to retrieve replies.\r\n Each request submits a new message. Retrying after a lost response can submit the message again.\r\n Processing is subject to the workspace's AI availability and usage limits.\r\n The user must have permission to contribute to the thread.", - "operationId": "PostAgentsThreadsMessagesByThreadId", + "summary": "Changes schedule state.", + "description": "Enables or disables the selected agent schedule and returns the updated schedule.\r\n\r\nAny authenticated user.", + "operationId": "PostSchedulesSetEnabledByScheduleIdAndAgentId", "parameters": [ { - "name": "threadId", + "name": "agentId", "in": "path", - "description": "The id of the thread to send the message in.", + "description": "The agent id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "scheduleId", + "in": "path", + "description": "The schedule id.", "required": true, "schema": { "type": "string", @@ -2524,11 +5142,11 @@ } ], "requestBody": { - "description": "The model with the content to send to the agent thread.", + "description": "The requested enabled state.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentThreadMessageRequestModel" + "$ref": "#/components/schemas/SetAgentScheduleEnabledRequestModel" } } }, @@ -2540,7 +5158,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AiThreadMessageAcceptedResponseModel" + "$ref": "#/components/schemas/AgentScheduleResponseModel" } } } @@ -2555,8 +5173,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -2565,8 +5183,8 @@ } } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -2591,29 +5209,19 @@ } } }, - "/agents/threads/{threadId}/messages/{messageId}/status": { - "get": { + "/agents/{agentId}/setarchived": { + "post": { "tags": [ - "AgentThreads" + "Custom Agents" ], - "summary": "Gets agent thread message status.", - "description": "Returns the processing status of a submitted agent thread message, including messages still in the queue.\r\n Use the accepted message id returned by the server when creating a thread or submitting a message.\r\n The response indicates whether an agent response exists and includes its id and error details when available.\r\n Retrieve reply content with [GET /agents/threads/{threadId}/messages](api:GET/agents/threads/{threadId}/messages).\r\n\r\nAny authenticated user.", - "operationId": "GetAgentsThreadsMessagesStatusByThreadIdAndMessageId", + "summary": "Archives or unarchives an agent.", + "description": "Archives or unarchives the specified custom agent and returns its updated configuration.\r\n Set IsArchived to true to archive the agent, or false to unarchive it.\r\n The user must have manage access to the agent.", + "operationId": "PostAgentsSetArchivedByAgentId", "parameters": [ { - "name": "threadId", - "in": "path", - "description": "The id of the thread that contains the message.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "messageId", + "name": "agentId", "in": "path", - "description": "The accepted message id returned by the server.", + "description": "The agent id.", "required": true, "schema": { "type": "string", @@ -2621,13 +5229,44 @@ } } ], + "requestBody": { + "description": "Whether to archive or unarchive the agent.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetAgentArchivedRequestModel" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AiThreadMessageProcessingStatusResponseModel" + "$ref": "#/components/schemas/AgentSummaryResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -2658,14 +5297,14 @@ } } }, - "/agents/{agentId}": { + "/agents/{agentId}/skills": { "get": { "tags": [ "Custom Agents" ], - "summary": "Returns the custom agent's configuration.", - "description": "Returns the specified custom agent's configuration, including the requesting user's access level.\r\n Use this response to inspect the agent's model, prompt, and linked capabilities before working with it.\r\n The user must have read access to the agent.", - "operationId": "GetAgentsByAgentId", + "summary": "Lists agent skills.", + "description": "Returns the skills linked to an agent after checking read access to the agent.\r\n\r\nAny authenticated user.", + "operationId": "GetSkillsByAgentId", "parameters": [ { "name": "agentId", @@ -2684,7 +5323,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentSummaryResponseModel" + "type": "array", + "items": { + "$ref": "#/components/schemas/SkillResponseModel" + } } } } @@ -2724,18 +5366,18 @@ "any": "true" } }, - "put": { + "post": { "tags": [ "Custom Agents" ], - "summary": "Updates the custom agent's configuration.", - "description": "Updates the custom agent's configuration and returns the saved agent.\r\n Saves a new system prompt version if the prompt changes.\r\n The user must have manage access to the agent. Changing workspace sharing also requires permission to contribute to the agent library.", - "operationId": "PutAgentsByAgentId", + "summary": "Creates a private skill for an agent.", + "description": "Creates a private skill owned by the agent and links the new skill to that agent.\r\n\r\nAny authenticated user.", + "operationId": "PostSkillsByAgentId", "parameters": [ { "name": "agentId", "in": "path", - "description": "The agent id.", + "description": "The owning agent id.", "required": true, "schema": { "type": "string", @@ -2744,11 +5386,11 @@ } ], "requestBody": { - "description": "The new agent configuration.", + "description": "The name and content of the new skill.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateAgentRequestModel" + "$ref": "#/components/schemas/CreateSkillRequestModel" } } }, @@ -2760,7 +5402,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentSummaryResponseModel" + "$ref": "#/components/schemas/SkillResponseModel" } } } @@ -2811,14 +5453,14 @@ } } }, - "/agents/{agentId}/connectors/{connectorId}": { + "/agents/{agentId}/skills/{skillId}": { "delete": { "tags": [ "Custom Agents" ], - "summary": "Unlinks a connector from an agent.", - "description": "Removes the connector link from the specified agent.\r\n Returns no content when the link is removed or is already absent.\r\n The user must have manage access to the agent.", - "operationId": "DeleteConnectorsByConnectorIdAndAgentId", + "summary": "Removes a skill from an agent.", + "description": "Also deletes the skill if it is private to the agent.\r\n\r\nAny authenticated user.", + "operationId": "DeleteSkillsBySkillIdAndAgentId", "parameters": [ { "name": "agentId", @@ -2831,9 +5473,9 @@ } }, { - "name": "connectorId", + "name": "skillId", "in": "path", - "description": "The connector id.", + "description": "The skill id.", "required": true, "schema": { "type": "string", @@ -2879,232 +5521,31 @@ "x-access": { "any": "true" } - }, - "post": { - "tags": [ - "Custom Agents" - ], - "summary": "Links a connector to an agent.", - "description": "Links an existing connector to the specified agent and returns the linked connector.\r\n Use [GET /agents/connectors](#/AgentRuntime/GetConnectors) to find a connector id.\r\n The user must have manage access to the agent.", - "operationId": "PostConnectorsByConnectorIdAndAgentId", - "parameters": [ - { - "name": "agentId", - "in": "path", - "description": "The agent id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "connectorId", - "in": "path", - "description": "The connector id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ConnectorResponseModel" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } } }, - "/agents/{agentId}/copy": { + "/agents/{agentId}/skills/{skillId}/link": { "post": { "tags": [ "Custom Agents" ], - "summary": "Copies an existing custom agent.", - "description": "Creates a copy of an existing custom agent in the current workspace.\r\n Provide the new name and optional description in the request body. The source agent supplies the initial configuration and system prompt.\r\n Returns the new agent with its own id.\r\n The user must have read access to the source agent.", - "operationId": "PostAgentsCopyByAgentId", - "parameters": [ - { - "name": "agentId", - "in": "path", - "description": "The source agent id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The name and description for the copy.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CopyAgentRequestModel" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AgentSummaryResponseModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/agents/{agentId}/files/byuploadid": { - "post": { - "tags": [ - "FileUpload" - ], - "summary": "Creates a file from an upload id.", - "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file agent from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", - "operationId": "PostUploadByUploadId", + "summary": "Links a skill to an agent.", + "description": "Links a shared skill to an agent when the caller can manage the agent and read the skill.\r\n\r\nAny authenticated user.", + "operationId": "PostSkillsLinkBySkillIdAndAgentId", "parameters": [ { "name": "agentId", "in": "path", - "description": "The id of the agent to attach the file to.", + "description": "The agent id.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The model describing the uploaded file metadata.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UploadByUploadIdForm" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/agents/{agentId}/setarchived": { - "post": { - "tags": [ - "Custom Agents" - ], - "summary": "Archives or unarchives an agent.", - "description": "Archives or unarchives the specified custom agent and returns its updated configuration.\r\n Set IsArchived to true to archive the agent, or false to unarchive it.\r\n The user must have manage access to the agent.", - "operationId": "PostAgentsSetArchivedByAgentId", - "parameters": [ - { - "name": "agentId", + "name": "skillId", "in": "path", - "description": "The agent id.", + "description": "The skill id.", "required": true, "schema": { "type": "string", @@ -3112,24 +5553,13 @@ } } ], - "requestBody": { - "description": "Whether to archive or unarchive the agent.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SetAgentArchivedRequestModel" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentSummaryResponseModel" + "$ref": "#/components/schemas/AgentSkillLinkResponseModel" } } } @@ -45590,7 +48020,7 @@ "type": "string", "description": "The workspace-wide access level.", "nullable": true, - "example": "manage" + "example": null }, "accessLevel": { "enum": [ @@ -49421,11 +51851,13 @@ "type": "object", "properties": { "key": { + "maxLength": 100, "type": "string", "description": "The stable key used to reference the skill.", "nullable": true }, "name": { + "maxLength": 255, "type": "string", "description": "The name shown in the skill library.", "nullable": true @@ -50563,6 +52995,7 @@ "type": "object", "properties": { "envVarName": { + "maxLength": 100, "minLength": 1, "type": "string", "description": "The environment variable name the value belongs to." @@ -50954,11 +53387,13 @@ "type": "object", "properties": { "envVarName": { + "maxLength": 100, "minLength": 1, "type": "string", "description": "The environment variable name the secret is injected as." }, "description": { + "maxLength": 500, "type": "string", "description": "The description shown to users when providing the secret.", "nullable": true @@ -51421,7 +53856,7 @@ ], "type": "string", "description": "The access level granted to every member of the workspace.", - "example": "manage" + "example": "none" }, "modelProvider": { "type": "string", @@ -51641,11 +54076,13 @@ "type": "object", "properties": { "key": { + "maxLength": 100, "type": "string", "description": "The stable key used to reference the skill.", "nullable": true }, "name": { + "maxLength": 255, "type": "string", "description": "The name shown in the skill library.", "nullable": true @@ -74263,21 +76700,21 @@ "plannedDuration": { "type": "integer", "description": "The planned duration of this project in seconds", - "format": "int32", + "format": "int64", "nullable": true, "example": 28800 }, "timeBudget": { "type": "integer", "description": "The remaining time budget for this project", - "format": "int32", + "format": "int64", "nullable": true, "example": 14400 }, "trackedDuration": { "type": "integer", "description": "The total time tracked for this project (in seconds)", - "format": "int32", + "format": "int64", "nullable": true, "example": 14400 }, @@ -74373,12 +76810,12 @@ }, "trackedDuration": { "type": "integer", - "format": "int32", + "format": "int64", "nullable": true }, "plannedDuration": { "type": "integer", - "format": "int32", + "format": "int64", "nullable": true }, "startOn": { @@ -78623,6 +81060,14 @@ } ], "tags": [ + { + "name": "Agent Schedules", + "description": "Create, manage, preview, and run schedules for accessible agents." + }, + { + "name": "Agent Skills", + "description": "Create and manage reusable skills, sharing, support files, access requirements, and secret values." + }, { "name": "AgentRuntime", "description": "Sandbox-backed generic agent runtime endpoints." From 5300cdec46586443594ea0c4f62c512df07bccc2 Mon Sep 17 00:00:00 2001 From: github-actions Date: Sat, 19 Sep 2026 00:26:03 +0000 Subject: [PATCH 15/16] Update API specifications with fern api update --- fern/apis/v1/openapi/openapi.json | 33798 ++++++++++++++++++---------- 1 file changed, 22161 insertions(+), 11637 deletions(-) diff --git a/fern/apis/v1/openapi/openapi.json b/fern/apis/v1/openapi/openapi.json index e20929e..369cbf3 100644 --- a/fern/apis/v1/openapi/openapi.json +++ b/fern/apis/v1/openapi/openapi.json @@ -1297,7 +1297,7 @@ "Custom Agents" ], "summary": "Returns all custom agents.", - "description": "Lists custom agents visible to the requesting user in the current workspace, including visible global agents.\r\n Results are ordered by name and include the user's access level for each agent.\r\n Use an agent id from this response to retrieve or update its configuration.\r\n\r\nAny authenticated user.", + "description": "Lists custom agents visible to the requesting user in the current workspace, including visible global agents.\r\n Results are ordered by name and include the user's access level for each agent.\r\n Use an agent id from this response to retrieve or update its shared settings.\r\n Read GET /agents/configuration for the current user's selected accounts and connection status.\r\n\r\nAny authenticated user.", "operationId": "GetAgents", "responses": { "200": { @@ -1383,6 +1383,44 @@ } } }, + "/agents/configuration": { + "get": { + "tags": [ + "Custom Agents" + ], + "summary": "Returns connection configuration for the current user's custom agents.", + "description": "Lists the configuration for each custom agent the user can read in the workspace.\r\n Each result contains the linked connector and skill ids, the account selected for each connector,\r\n why that account was selected, and whether it is available.\r\n Uses a saved agent choice, or the enabled awork Agent default when no choice is saved.\r\n An editor-provided account is used when the connector has specificConnection mode.\r\n API-key requests do not inherit awork Agent defaults.\r\n This read does not save or change any choices. An empty list is returned when no agents are visible.\r\n\r\nAny authenticated user.", + "operationId": "GetAgentsConfiguration", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomAgentConfigurationResponseModel" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, "/agents/connectors": { "get": { "tags": [ @@ -4166,7 +4204,7 @@ "Custom Agents" ], "summary": "Returns the custom agent's configuration.", - "description": "Returns the specified custom agent's configuration, including the requesting user's access level.\r\n Use this response to inspect the agent's model, prompt, and linked capabilities before working with it.\r\n The user must have read access to the agent.", + "description": "Returns the agent's shared settings, including the requesting user's access level.\r\n Use this response to inspect the agent's model, prompt, and linked capabilities.\r\n Read GET /agents/{agentId}/configuration for the current user's selected accounts and connection status.\r\n The user must have read access to the agent.", "operationId": "GetAgentsByAgentId", "parameters": [ { @@ -4313,14 +4351,14 @@ } } }, - "/agents/{agentId}/connectors/{connectorId}": { - "delete": { + "/agents/{agentId}/configuration": { + "get": { "tags": [ "Custom Agents" ], - "summary": "Unlinks a connector from an agent.", - "description": "Removes the connector link from the specified agent.\r\n Returns no content when the link is removed or is already absent.\r\n The user must have manage access to the agent.", - "operationId": "DeleteConnectorsByConnectorIdAndAgentId", + "summary": "Returns a custom agent's connection configuration for the current user.", + "description": "Returns the linked connector and skill ids, the account selected for each connector,\r\n why that account was selected, and whether it is available.\r\n Uses a saved agent choice, or the enabled awork Agent default when no choice is saved.\r\n An editor-provided account is used when the connector has specificConnection mode.\r\n API-key requests do not inherit awork Agent defaults.\r\n This read does not save or change any choices.\r\n The user must have read access to the agent.", + "operationId": "GetAgentsConfigurationByAgentId", "parameters": [ { "name": "agentId", @@ -4331,21 +4369,18 @@ "type": "string", "format": "uuid" } - }, - { - "name": "connectorId", - "in": "path", - "description": "The connector id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomAgentConfigurationResponseModel" + } + } + } }, "401": { "description": "Unauthorized", @@ -4381,14 +4416,16 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/agents/{agentId}/connectors/{connectorId}": { + "delete": { "tags": [ "Custom Agents" ], - "summary": "Links a connector to an agent.", - "description": "Links an existing connector to the specified agent and returns the linked connector.\r\n Use [GET /agents/connectors](#/AgentRuntime/GetConnectors) to find a connector id.\r\n The user must have manage access to the agent.", - "operationId": "PostConnectorsByConnectorIdAndAgentId", + "summary": "Unlinks a connector from an agent.", + "description": "Removes the connector link from the specified agent.\r\n Returns no content when the link is removed or is already absent.\r\n The user must have manage access to the agent.", + "operationId": "DeleteConnectorsByConnectorIdAndAgentId", "parameters": [ { "name": "agentId", @@ -4412,15 +4449,8 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ConnectorResponseModel" - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", @@ -4456,21 +4486,29 @@ "x-access": { "any": "true" } - } - }, - "/agents/{agentId}/copy": { + }, "post": { "tags": [ "Custom Agents" ], - "summary": "Copies an existing custom agent.", - "description": "Creates a copy of an existing custom agent in the current workspace.\r\n Provide the new name and optional description in the request body. The source agent supplies the initial configuration and system prompt.\r\n Returns the new agent with its own id.\r\n The user must have read access to the source agent.", - "operationId": "PostAgentsCopyByAgentId", + "summary": "Links a connector to an agent.", + "description": "Links an existing connector to the specified agent and returns the linked connector.\r\n Use [GET /agents/connectors](#/AgentRuntime/GetConnectors) to find a connector id.\r\n The user must have manage access to the agent.", + "operationId": "PostConnectorsByConnectorIdAndAgentId", "parameters": [ { "name": "agentId", "in": "path", - "description": "The source agent id.", + "description": "The agent id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "connectorId", + "in": "path", + "description": "The connector id.", "required": true, "schema": { "type": "string", @@ -4478,30 +4516,29 @@ } } ], - "requestBody": { - "description": "The name and description for the copy.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CopyAgentRequestModel" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentSummaryResponseModel" + "$ref": "#/components/schemas/ConnectorResponseModel" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -4526,19 +4563,19 @@ } } }, - "/agents/{agentId}/files/byuploadid": { + "/agents/{agentId}/copy": { "post": { "tags": [ - "FileUpload" + "Custom Agents" ], - "summary": "Creates a file from an upload id.", - "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file agent from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", - "operationId": "PostUploadByUploadId", + "summary": "Copies an existing custom agent.", + "description": "Creates a copy of an existing custom agent in the current workspace.\r\n Provide the new name and optional description in the request body. The source agent supplies the initial configuration and system prompt.\r\n Returns the new agent with its own id.\r\n The user must have read access to the source agent.", + "operationId": "PostAgentsCopyByAgentId", "parameters": [ { "name": "agentId", "in": "path", - "description": "The id of the agent to attach the file to.", + "description": "The source agent id.", "required": true, "schema": { "type": "string", @@ -4547,11 +4584,11 @@ } ], "requestBody": { - "description": "The model describing the uploaded file metadata.", + "description": "The name and description for the copy.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UploadByUploadIdForm" + "$ref": "#/components/schemas/CopyAgentRequestModel" } } }, @@ -4563,13 +4600,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/AgentSummaryResponseModel" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -4594,122 +4631,47 @@ } } }, - "/agents/{agentId}/schedules": { + "/agents/{agentId}/files": { "get": { "tags": [ - "Agent Schedules" + "Agent Files" ], - "summary": "Lists agent schedules.", - "description": "Lists the schedules configured for an agent after checking the caller's read access.\r\n\r\nAny authenticated user.", - "operationId": "GetSchedulesByAgentId", + "summary": "Returns all files of the specified agent.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByAgentNameAndAgentId", "parameters": [ { "name": "agentId", "in": "path", - "description": "The agent id.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AgentScheduleResponseModel" - } - } - } - } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + { + "$ref": "#/components/parameters/page" }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "Agent Schedules" - ], - "summary": "Creates an agent schedule.", - "description": "Creates a schedule for an agent after validating its cadence, timezone, and optional project or task context.\r\n\r\nAny authenticated user.", - "operationId": "PostSchedulesByAgentId", - "parameters": [ + "$ref": "#/components/parameters/pageSize" + }, { - "name": "agentId", - "in": "path", - "description": "The agent id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The schedule payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateAgentScheduleRequestModel" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentScheduleResponseModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } } } } @@ -4750,19 +4712,19 @@ } } }, - "/agents/{agentId}/schedules/nextoccurrence": { + "/agents/{agentId}/files/byuploadid": { "post": { "tags": [ - "Agent Schedules" + "FileUpload" ], - "summary": "Previews a schedule occurrence.", - "description": "Calculates the next occurrence for the supplied cadence without changing the schedule.\r\n\r\nAny authenticated user.", - "operationId": "PostSchedulesNextOccurrenceByAgentId", + "summary": "Creates a file from an upload id.", + "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file agent from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostUploadByUploadId", "parameters": [ { "name": "agentId", "in": "path", - "description": "The agent id.", + "description": "The id of the agent to attach the file to.", "required": true, "schema": { "type": "string", @@ -4771,11 +4733,11 @@ } ], "requestBody": { - "description": "The cadence preview request.", + "description": "The model describing the uploaded file metadata.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentScheduleNextOccurrenceRequestModel" + "$ref": "#/components/schemas/UploadByUploadIdForm" } } }, @@ -4787,27 +4749,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentScheduleNextOccurrenceResponseModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -4821,16 +4763,6 @@ } } } - }, - "503": { - "description": "Service Unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -4848,14 +4780,14 @@ } } }, - "/agents/{agentId}/schedules/{scheduleId}": { + "/agents/{agentId}/files/{fileId}": { "delete": { "tags": [ - "Agent Schedules" + "Agent Files" ], - "summary": "Deletes an agent schedule.", - "description": "Deletes a schedule configured for an agent after checking the caller's access.\r\n\r\nAny authenticated user.", - "operationId": "DeleteSchedulesByScheduleIdAndAgentId", + "summary": "Deletes the specified agent file and its versions.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesByAgentNameAndAgentIdAndFileId", "parameters": [ { "name": "agentId", @@ -4868,9 +4800,9 @@ } }, { - "name": "scheduleId", + "name": "fileId", "in": "path", - "description": "The schedule id.", + "description": "The file id.", "required": true, "schema": { "type": "string", @@ -4926,14 +4858,16 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/agents/{agentId}/schedules": { + "get": { "tags": [ "Agent Schedules" ], - "summary": "Updates an agent schedule.", - "description": "Updates a schedule configured for an agent after validating its cadence, timezone, and optional context.\r\n\r\nAny authenticated user.", - "operationId": "PutSchedulesByScheduleIdAndAgentId", + "summary": "Lists agent schedules.", + "description": "Lists the schedules configured for an agent after checking the caller's read access.\r\n\r\nAny authenticated user.", + "operationId": "GetSchedulesByAgentId", "parameters": [ { "name": "agentId", @@ -4944,46 +4878,18 @@ "type": "string", "format": "uuid" } - }, - { - "name": "scheduleId", - "in": "path", - "description": "The schedule id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], - "requestBody": { - "description": "The updated schedule payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateAgentScheduleRequestModel" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentScheduleResponseModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentScheduleResponseModel" + } } } } @@ -5022,16 +4928,14 @@ "x-access": { "any": "true" } - } - }, - "/agents/{agentId}/schedules/{scheduleId}/run": { + }, "post": { "tags": [ "Agent Schedules" ], - "summary": "Runs an agent schedule.", - "description": "Immediately starts a new agent session for the selected schedule.\r\n\r\nAny authenticated user.", - "operationId": "PostSchedulesRunByScheduleIdAndAgentId", + "summary": "Creates an agent schedule.", + "description": "Creates a schedule for an agent after validating its cadence, timezone, and optional project or task context.\r\n\r\nAny authenticated user.", + "operationId": "PostSchedulesByAgentId", "parameters": [ { "name": "agentId", @@ -5042,25 +4946,26 @@ "type": "string", "format": "uuid" } - }, - { - "name": "scheduleId", - "in": "path", - "description": "The schedule id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], + "requestBody": { + "description": "The schedule payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAgentScheduleRequestModel" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AiThreadCreatedResponseModel" + "$ref": "#/components/schemas/AgentScheduleResponseModel" } } } @@ -5111,14 +5016,14 @@ } } }, - "/agents/{agentId}/schedules/{scheduleId}/setenabled": { + "/agents/{agentId}/schedules/nextoccurrence": { "post": { "tags": [ "Agent Schedules" ], - "summary": "Changes schedule state.", - "description": "Enables or disables the selected agent schedule and returns the updated schedule.\r\n\r\nAny authenticated user.", - "operationId": "PostSchedulesSetEnabledByScheduleIdAndAgentId", + "summary": "Previews a schedule occurrence.", + "description": "Calculates the next occurrence for the supplied cadence without changing the schedule.\r\n\r\nAny authenticated user.", + "operationId": "PostSchedulesNextOccurrenceByAgentId", "parameters": [ { "name": "agentId", @@ -5129,24 +5034,14 @@ "type": "string", "format": "uuid" } - }, - { - "name": "scheduleId", - "in": "path", - "description": "The schedule id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "requestBody": { - "description": "The requested enabled state.", + "description": "The cadence preview request.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SetAgentScheduleEnabledRequestModel" + "$ref": "#/components/schemas/AgentScheduleNextOccurrenceRequestModel" } } }, @@ -5158,7 +5053,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentScheduleResponseModel" + "$ref": "#/components/schemas/AgentScheduleNextOccurrenceResponseModel" } } } @@ -5192,6 +5087,16 @@ } } } + }, + "503": { + "description": "Service Unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -5209,14 +5114,14 @@ } } }, - "/agents/{agentId}/setarchived": { - "post": { + "/agents/{agentId}/schedules/{scheduleId}": { + "delete": { "tags": [ - "Custom Agents" + "Agent Schedules" ], - "summary": "Archives or unarchives an agent.", - "description": "Archives or unarchives the specified custom agent and returns its updated configuration.\r\n Set IsArchived to true to archive the agent, or false to unarchive it.\r\n The user must have manage access to the agent.", - "operationId": "PostAgentsSetArchivedByAgentId", + "summary": "Deletes an agent schedule.", + "description": "Deletes a schedule configured for an agent after checking the caller's access.\r\n\r\nAny authenticated user.", + "operationId": "DeleteSchedulesByScheduleIdAndAgentId", "parameters": [ { "name": "agentId", @@ -5227,29 +5132,21 @@ "type": "string", "format": "uuid" } + }, + { + "name": "scheduleId", + "in": "path", + "description": "The schedule id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], - "requestBody": { - "description": "Whether to archive or unarchive the agent.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SetAgentArchivedRequestModel" - } - } - }, - "required": true - }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AgentSummaryResponseModel" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -5295,16 +5192,14 @@ "x-access": { "any": "true" } - } - }, - "/agents/{agentId}/skills": { - "get": { + }, + "put": { "tags": [ - "Custom Agents" + "Agent Schedules" ], - "summary": "Lists agent skills.", - "description": "Returns the skills linked to an agent after checking read access to the agent.\r\n\r\nAny authenticated user.", - "operationId": "GetSkillsByAgentId", + "summary": "Updates an agent schedule.", + "description": "Updates a schedule configured for an agent after validating its cadence, timezone, and optional context.\r\n\r\nAny authenticated user.", + "operationId": "PutSchedulesByScheduleIdAndAgentId", "parameters": [ { "name": "agentId", @@ -5315,18 +5210,389 @@ "type": "string", "format": "uuid" } + }, + { + "name": "scheduleId", + "in": "path", + "description": "The schedule id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], + "requestBody": { + "description": "The updated schedule payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAgentScheduleRequestModel" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SkillResponseModel" - } + "$ref": "#/components/schemas/AgentScheduleResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/{agentId}/schedules/{scheduleId}/run": { + "post": { + "tags": [ + "Agent Schedules" + ], + "summary": "Runs an agent schedule.", + "description": "Immediately starts a new agent session for the selected schedule.\r\n\r\nAny authenticated user.", + "operationId": "PostSchedulesRunByScheduleIdAndAgentId", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "The agent id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "scheduleId", + "in": "path", + "description": "The schedule id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AiThreadCreatedResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/{agentId}/schedules/{scheduleId}/setenabled": { + "post": { + "tags": [ + "Agent Schedules" + ], + "summary": "Changes schedule state.", + "description": "Enables or disables the selected agent schedule and returns the updated schedule.\r\n\r\nAny authenticated user.", + "operationId": "PostSchedulesSetEnabledByScheduleIdAndAgentId", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "The agent id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "scheduleId", + "in": "path", + "description": "The schedule id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The requested enabled state.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetAgentScheduleEnabledRequestModel" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentScheduleResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/{agentId}/setarchived": { + "post": { + "tags": [ + "Custom Agents" + ], + "summary": "Archives or unarchives an agent.", + "description": "Archives or unarchives the specified custom agent and returns its updated configuration.\r\n Set IsArchived to true to archive the agent, or false to unarchive it.\r\n The user must have manage access to the agent.", + "operationId": "PostAgentsSetArchivedByAgentId", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "The agent id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Whether to archive or unarchive the agent.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetAgentArchivedRequestModel" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentSummaryResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/{agentId}/skills": { + "get": { + "tags": [ + "Custom Agents" + ], + "summary": "Lists agent skills.", + "description": "Returns the skills linked to an agent after checking read access to the agent.\r\n\r\nAny authenticated user.", + "operationId": "GetSkillsByAgentId", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "The agent id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SkillResponseModel" + } } } } @@ -7694,29 +7960,18 @@ } } }, - "/companies/{companyId}/files/{fileId}": { - "get": { + "/companies/{companyId}/externalfiles": { + "post": { "tags": [ "Company Files" ], - "summary": "Returns the file with the specified id of the company with the specified id.", + "summary": "Creates external file references for the specified company.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByCompanyNameAndCompanyIdAndFileId", + "operationId": "PostExternalFilesByCompanyNameAndCompanyId", "parameters": [ { "name": "companyId", "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -7724,19 +7979,35 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" + } + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -7745,8 +8016,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -7771,39 +8042,19 @@ } } }, - "/companies/{companyId}/files/{fileId}/versions/{versionId}": { - "get": { + "/companies/{companyId}/files": { + "delete": { "tags": [ "Company Files" ], - "summary": "Returns the company file version with the specified id.", + "summary": "Deletes all files and versions for the specified company.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByCompanyNameAndCompanyIdAndFileIdAndVersionId", + "operationId": "DeleteFilesByCompanyNameAndCompanyId", "parameters": [ { "name": "companyId", "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", + "description": "The company id.", "required": true, "schema": { "type": "string", @@ -7812,12 +8063,15 @@ } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -7856,21 +8110,18 @@ "x-access": { "any": "true" } - } - }, - "/companies/{companyId}/tags": { - "get": { + }, + "post": { "tags": [ - "CompanyTags" + "Company Files" ], - "summary": "Returns tags for the specified company.", - "description": "Returns the tags assigned to the specified company.\r\n The user must have `company-master-data:read` permission for the specified company.", - "operationId": "GetCompanyTagsByCompanyId", + "summary": "Uploads a file for the specified company.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesByCompanyNameAndCompanyId", "parameters": [ { "name": "companyId", "in": "path", - "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -7878,16 +8129,32 @@ } } ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/FileUploadModel" + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -7918,67 +8185,30 @@ } } }, - "/customfielddefinitions": { - "get": { + "/companies/{companyId}/files/byurl": { + "post": { "tags": [ - "CustomFields" + "Company Files" ], - "summary": "Returns all custom field definitions.", - "description": "Returns all custom field definitions in the workspace. Set `includeLinkedProjectIds` to include the projects linked to each definition.\r\n\r\nAny authenticated user.", - "operationId": "GetCustomFieldDefinitions", + "summary": "Uploads a file from a public URL for the specified company.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesByUrlByCompanyNameAndCompanyId", "parameters": [ { - "name": "includeLinkedProjectIds", - "in": "query", - "description": "Whether to include linked project Ids in the response.", + "name": "companyId", + "in": "path", + "required": true, "schema": { - "type": "boolean", - "default": false - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptionsAndLinkedProjectIds" - } - } - } + "type": "string", + "format": "uuid" } } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "CustomFields" ], - "summary": "Creates a custom field definition.", - "description": "Creates a custom field definition that can be linked to project templates, projects, or tasks according to its entity type.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostCustomFieldDefinition", "requestBody": { - "description": "The model containing the details for creating a new custom field definition.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldDefinitionPostForm" + "$ref": "#/components/schemas/FilePostForm" } } }, @@ -7990,7 +8220,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" + "$ref": "#/components/schemas/FileInfo" } } } @@ -8004,6 +8234,16 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -8017,24 +8257,33 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/customfielddefinitions/{customFieldDefinitionId}": { + "/companies/{companyId}/files/{fileId}": { "delete": { "tags": [ - "CustomFields" + "Company Files" ], - "summary": "Deletes the specified custom field definition.", - "description": "Deletes the specified custom field definition, its selection options, its links, and all dependent task and task-template values.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "DeleteCustomFieldDefinitionById", + "summary": "Deletes the specified company file and its versions.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesByCompanyNameAndCompanyIdAndFileId", "parameters": [ { - "name": "customFieldDefinitionId", + "name": "companyId", "in": "path", - "description": "The id of the custom field definition to delete.", + "description": "The company id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The file id.", "required": true, "schema": { "type": "string", @@ -8046,6 +8295,26 @@ "204": { "description": "No Content" }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -8068,22 +8337,31 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } }, - "put": { + "get": { "tags": [ - "CustomFields" + "Company Files" ], - "summary": "Updates the specified custom field definition.", - "description": "Updates the definition's name, type, or order. Type changes are limited to compatible date and date-time types or select and colored-select types.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutCustomFieldDefinitionById", + "summary": "Returns the file with the specified id of the company with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByCompanyNameAndCompanyIdAndFileId", "parameters": [ { - "name": "customFieldDefinitionId", + "name": "companyId", "in": "path", - "description": "The id of the custom field definition to update.", + "description": "The id of the company.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -8091,30 +8369,19 @@ } } ], - "requestBody": { - "description": "The model to change the custom field definition.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomFieldDefinitionPutForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldDefinition" + "$ref": "#/components/schemas/FileInfo" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -8145,24 +8412,29 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } - } - }, - "/customfielddefinitions/{customFieldDefinitionId}/selectionoptions": { - "post": { + }, + "put": { "tags": [ - "CustomFields" + "Company Files" ], - "summary": "Creates an option for a custom field.", - "description": "Creates a selection option for the specified custom field definition and places it at the requested order.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostCustomFieldDefinitionSelectionOptionsByCustomFieldDefinitionId", + "summary": "Updates metadata for the specified file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PutFilesByCompanyNameAndCompanyIdAndFileId", "parameters": [ { - "name": "customFieldDefinitionId", + "name": "companyId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", "in": "path", - "description": "The id of the custom field definition to add a selection option to.", "required": true, "schema": { "type": "string", @@ -8171,11 +8443,10 @@ } ], "requestBody": { - "description": "The model describing the selection option to create.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldSelectionOptionsForm" + "$ref": "#/components/schemas/FileInfoUpdateForm" } } }, @@ -8187,7 +8458,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldSelectionOption" + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -8214,24 +8505,22 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/customfielddefinitions/{customFieldDefinitionId}/selectionoptions/{selectionOptionId}": { - "delete": { + "/companies/{companyId}/files/{fileId}/changeentity": { + "post": { "tags": [ - "CustomFields" + "Company Files" ], - "summary": "Deletes a custom field selection option.", - "description": "Deletes the specified selection option from the custom field definition and clears references to that option from existing custom field values.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "DeleteCustomFieldDefinitionSelectionOptionByCustomFieldDefinitionIdAndSelectionOptionId", + "summary": "Changes the company that owns the specified file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesChangeCompanyByCompanyNameAndCompanyIdAndFileId", "parameters": [ { - "name": "customFieldDefinitionId", + "name": "companyId", "in": "path", - "description": "The id of the custom field definition containing the selection option.", "required": true, "schema": { "type": "string", @@ -8239,9 +8528,8 @@ } }, { - "name": "selectionOptionId", + "name": "fileId", "in": "path", - "description": "The id of the selection option to delete.", "required": true, "schema": { "type": "string", @@ -8249,9 +8537,46 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileEntityForm" + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, "404": { "description": "Not Found", @@ -8275,22 +8600,22 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } - }, - "put": { + } + }, + "/companies/{companyId}/files/{fileId}/copy": { + "post": { "tags": [ - "CustomFields" + "Company Files" ], - "summary": "Updates a custom field selection option.", - "description": "Updates the specified selection option's value, color, and order within its custom field definition.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutCustomFieldDefinitionSelectionOptionByCustomFieldDefinitionIdAndSelectionOptionId", + "summary": "Copies the specified file to another company.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesCopyByCompanyNameAndCompanyIdAndFileId", "parameters": [ { - "name": "customFieldDefinitionId", + "name": "companyId", "in": "path", - "description": "The id of the custom field definition containing the selection option.", "required": true, "schema": { "type": "string", @@ -8298,9 +8623,8 @@ } }, { - "name": "selectionOptionId", + "name": "fileId", "in": "path", - "description": "The id of the selection option to update.", "required": true, "schema": { "type": "string", @@ -8309,11 +8633,10 @@ } ], "requestBody": { - "description": "The model describing the updated selection option.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldSelectionOptionsForm" + "$ref": "#/components/schemas/FileCopyForm" } } }, @@ -8325,7 +8648,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldSelectionOption" + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -8352,40 +8695,59 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/documents": { + "/companies/{companyId}/files/{fileId}/download": { "get": { "tags": [ - "Documents" + "Company Files" ], - "summary": "Returns all documents.", - "description": "Returns documents visible to the current user. Set `includeTrashedDocuments` to include documents in the trash.\r\n The user must have at least `read` permission for each returned document.", - "operationId": "GetDocuments", + "summary": "Returns the latest content of the specified company file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesDownloadByCompanyNameAndCompanyIdAndFileId", "parameters": [ { - "name": "includeTrashedDocuments", - "in": "query", - "description": "Whether to include trashed documents in the result.", + "name": "companyId", + "in": "path", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } }, { - "$ref": "#/components/parameters/page" + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, { - "$ref": "#/components/parameters/pageSize" + "name": "width", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } }, { - "$ref": "#/components/parameters/orderby" + "name": "height", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } }, { - "$ref": "#/components/parameters/filterby" + "name": "crop", + "in": "query", + "schema": { + "type": "boolean" + } } ], "responses": { @@ -8394,104 +8756,21 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "type": "string", + "format": "binary" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "Documents" - ], - "summary": "Creates a document.", - "description": "Creates a document with optional HTML or Markdown content. Set `contentFormat` to `html` or `markdown`; HTML is the default. Canonical awork Markdown preserves safe editor structures during re-import.\r\n\r\nAny authenticated user.", - "operationId": "PostDocument", - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/DocumentPostForm" - } - } - } - }, - "responses": { - "200": { - "description": "OK", + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentModel" + "$ref": "#/components/schemas/ErrorResponse" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/documents/trash/{documentId}/restore": { - "post": { - "tags": [ - "Documents" - ], - "summary": "Restores the specified document.", - "description": "Restores the specified document from the trash. Related versions, content, and child documents are restored asynchronously. Restoring an already active document has no effect.\r\n The user must have at least `write` permission for the specified document.", - "operationId": "PostDocumentsTrashRestoreByDocumentId", - "parameters": [ - { - "name": "documentId", - "in": "path", - "description": "The id of the document to restore.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "alsoRestoreChildren", - "in": "query", - "description": "Whether to also restore children documents.", - "schema": { - "type": "boolean", - "default": true - } - } - ], - "responses": { - "204": { - "description": "No Content" }, "401": { "description": "Unauthorized", @@ -8502,6 +8781,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -8519,19 +8808,18 @@ } } }, - "/documents/{documentId}": { - "delete": { + "/companies/{companyId}/files/{fileId}/pdf": { + "get": { "tags": [ - "Documents" + "Company Files" ], - "summary": "Deletes the specified document.", - "description": "Moves the specified document to the trash. The document is moved synchronously; child documents and related entities are moved asynchronously. Set `alsoDeleteChildren` to control whether child documents are included.\r\n The user must have at least `manage` permission for the specified document.", - "operationId": "DeleteDocumentById", + "summary": "Returns the specified company file as PDF.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesPdfByCompanyNameAndCompanyIdAndFileId", "parameters": [ { - "name": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document to delete.", "required": true, "schema": { "type": "string", @@ -8539,31 +8827,37 @@ } }, { - "name": "alsoDeleteChildren", + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "inline", "in": "query", - "description": "Whether to also delete children documents. If false, the children's parent references are updated to point to the deleted document's parent.", "schema": { "type": "boolean", - "default": true + "default": false } } ], "responses": { - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string", + "format": "binary" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -8571,51 +8865,6 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "get": { - "tags": [ - "Documents" - ], - "summary": "Returns the specified document.", - "description": "Returns the specified document when it is visible to the current user.\r\n The user must have at least `read` permission for the specified document.", - "operationId": "GetDocumentById", - "parameters": [ - { - "name": "documentId", - "in": "path", - "description": "The id of the document to retrieve.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DocumentModel" - } - } - } }, "401": { "description": "Unauthorized", @@ -8651,19 +8900,29 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/companies/{companyId}/files/{fileId}/shareurl": { + "get": { "tags": [ - "Documents" + "Company Files" ], - "summary": "Updates the specified document.", - "description": "Updates the specified document's content, location, sharing, or display properties. Moving a document can change its access rules and may be restricted by the workspace plan.\r\n The user must have at least `write` permission for the specified document.", - "operationId": "PutDocumentById", + "summary": "Returns a public URL for the specified file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesShareUrlByCompanyNameAndCompanyIdAndFileId", "parameters": [ { - "name": "documentId", + "name": "companyId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", "in": "path", - "description": "The id of the document to update.", "required": true, "schema": { "type": "string", @@ -8671,34 +8930,13 @@ } } ], - "requestBody": { - "description": "The document form data with the updated information.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DocumentForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string" } } } @@ -8739,67 +8977,27 @@ } } }, - "/documents/{documentId}/comments": { - "delete": { + "/companies/{companyId}/files/{fileId}/versions": { + "get": { "tags": [ - "DocumentComments" + "Company Files" ], - "summary": "Deletes all comments of the specified document.", - "description": "Deletes all comments of the specified document.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCommentsByDocumentNameAndDocumentId", + "summary": "Returns all versions of the specified company file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByCompanyNameAndCompanyIdAndFileId", "parameters": [ { - "name": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "responses": { - "204": { - "description": "No Content" }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "get": { - "tags": [ - "DocumentComments" - ], - "summary": "Returns all comments of the document with the specified id.", - "description": "Returns all comments of the document with the specified id. The user needs read permissions on the document.\r\n\r\nAny authenticated user.", - "operationId": "GetCommentsByDocumentNameAndDocumentId", - "parameters": [ { - "name": "documentId", + "name": "fileId", "in": "path", - "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -8827,14 +9025,14 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/FileVersion" } } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -8843,8 +9041,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -8870,16 +9068,24 @@ }, "post": { "tags": [ - "DocumentComments" + "Company Files" ], - "summary": "Creates a new comment on the document with the specified id.", - "description": "Creates a new comment on the document with the specified id.\r\n A user can only create a comment for him/herself, except for admins and api users.\r\n \r\n To create a comment the user must have at least `read` permissions on the specified document.", - "operationId": "PostCommentsByDocumentNameAndDocumentId", + "summary": "Uploads a new version of the specified company file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesVersionsByCompanyNameAndCompanyIdAndFileId", "parameters": [ { - "name": "documentId", + "name": "companyId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", "in": "path", - "description": "The id of the document to create the comment for.", "required": true, "schema": { "type": "string", @@ -8888,15 +9094,13 @@ } ], "requestBody": { - "description": "The model to create the comment.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/CommentForm" + "$ref": "#/components/schemas/FileUploadModel" } } - }, - "required": true + } }, "responses": { "200": { @@ -8904,7 +9108,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/FileVersion" } } } @@ -8955,19 +9159,19 @@ } } }, - "/documents/{documentId}/comments/{commentId}": { - "delete": { + "/companies/{companyId}/files/{fileId}/versions/{versionId}": { + "get": { "tags": [ - "DocumentComments" + "Company Files" ], - "summary": "Deletes the comment with the specified id on the document with the specified id.", - "description": "Deletes the comment with the specified id on the document with the specified id.\r\n The delete includes the reactions of the comment.\r\n If there are any replies to the comment, they will be deleted as well.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCommentByDocumentNameAndDocumentIdAndCommentId", + "summary": "Returns the company file version with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByCompanyNameAndCompanyIdAndFileIdAndVersionId", "parameters": [ { - "name": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -8975,9 +9179,19 @@ } }, { - "name": "commentId", + "name": "fileId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "versionId", + "in": "path", + "description": "The id of the file version.", "required": true, "schema": { "type": "string", @@ -8986,8 +9200,15 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileVersion" + } + } + } }, "401": { "description": "Unauthorized", @@ -9023,19 +9244,20 @@ "x-access": { "any": "true" } - }, + } + }, + "/companies/{companyId}/files/{fileId}/versions/{versionId}/download": { "get": { "tags": [ - "DocumentComments" + "Company Files" ], - "summary": "Returns the comment with the specified id of the document with the specified id.", - "description": "Returns the comment with the specified id of the document with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetCommentByDocumentNameAndDocumentIdAndCommentId", + "summary": "Returns the content of the specified company file version.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsDownloadByCompanyNameAndCompanyIdAndFileIdAndVersionId", "parameters": [ { - "name": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -9043,9 +9265,17 @@ } }, { - "name": "commentId", + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "versionId", "in": "path", - "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -9059,7 +9289,8 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "type": "string", + "format": "binary" } } } @@ -9073,6 +9304,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -9088,29 +9329,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/companies/{companyId}/tags": { + "get": { "tags": [ - "DocumentComments" + "CompanyTags" ], - "summary": "Updates the comment with the specified id on the document with the specified id.", - "description": "To update a comment the user must either have at least `read` permissions on the specified document, be the creator of the comment or be admin.", - "operationId": "PutCommentByDocumentNameAndDocumentIdAndCommentId", + "summary": "Returns tags for the specified company.", + "description": "Returns the tags assigned to the specified company.\r\n The user must have `company-master-data:read` permission for the specified company.", + "operationId": "GetCompanyTagsByCompanyId", "parameters": [ { - "name": "documentId", - "in": "path", - "description": "The id of the document.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "commentId", + "name": "companyId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -9118,24 +9351,16 @@ } } ], - "requestBody": { - "description": "The model with the updated comment information.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CommentPutForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } } } } @@ -9149,16 +9374,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -9176,63 +9391,85 @@ } } }, - "/documents/{documentId}/comments/{commentId}/react": { - "post": { + "/customfielddefinitions": { + "get": { "tags": [ - "DocumentComments" + "CustomFields" ], - "summary": "Updates the reactions of the comment with the specified id on the document with the specified id.", - "description": "To update a reaction of a comment the user must have at least `read` permissions on the specified document.", - "operationId": "PostCommentReactByDocumentNameAndDocumentIdAndCommentId", + "summary": "Returns all custom field definitions.", + "description": "Returns all custom field definitions in the workspace. Set `includeLinkedProjectIds` to include the projects linked to each definition.\r\n\r\nAny authenticated user.", + "operationId": "GetCustomFieldDefinitions", "parameters": [ { - "name": "documentId", - "in": "path", - "description": "The id of the document.", - "required": true, + "name": "includeLinkedProjectIds", + "in": "query", + "description": "Whether to include linked project Ids in the response.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } - }, - { - "name": "commentId", - "in": "path", - "description": "The id of the comment.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptionsAndLinkedProjectIds" + } + } + } } } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "CustomFields" ], + "summary": "Creates a custom field definition.", + "description": "Creates a custom field definition that can be linked to project templates, projects, or tasks according to its entity type.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostCustomFieldDefinition", "requestBody": { - "description": "The model used to update the reactions of the comment with the specified id.", + "description": "The model containing the details for creating a new custom field definition.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ReactionForm" + "$ref": "#/components/schemas/CustomFieldDefinitionPostForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -9253,33 +9490,73 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/documents/{documentId}/comments/{commentId}/setresolved": { - "post": { + "/customfielddefinitions/{customFieldDefinitionId}": { + "delete": { "tags": [ - "DocumentComments" + "CustomFields" ], - "summary": "Sets the resolved status of a comment.", - "description": "Sets the resolved status of a comment. Users need write permissions on the document to resolve/unresolve comments.\r\n Currently, the IsResolved property is only available for document comments.\r\n\r\nAny authenticated user.", - "operationId": "PostCommentSetResolvedByDocumentNameAndDocumentIdAndCommentId", + "summary": "Deletes the specified custom field definition.", + "description": "Deletes the specified custom field definition, its selection options, its links, and all dependent task and task-template values.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "DeleteCustomFieldDefinitionById", "parameters": [ { - "name": "documentId", + "name": "customFieldDefinitionId", "in": "path", - "description": "The id of the document.", + "description": "The id of the custom field definition to delete.", "required": true, "schema": { "type": "string", "format": "uuid" } + } + ], + "responses": { + "204": { + "description": "No Content" }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ { - "name": "commentId", + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + }, + "put": { + "tags": [ + "CustomFields" + ], + "summary": "Updates the specified custom field definition.", + "description": "Updates the definition's name, type, or order. Type changes are limited to compatible date and date-time types or select and colored-select types.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutCustomFieldDefinitionById", + "parameters": [ + { + "name": "customFieldDefinitionId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the custom field definition to update.", "required": true, "schema": { "type": "string", @@ -9288,11 +9565,11 @@ } ], "requestBody": { - "description": "The resolved status.", + "description": "The model to change the custom field definition.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SetResolvedForm" + "$ref": "#/components/schemas/CustomFieldDefinitionPutForm" } } }, @@ -9304,13 +9581,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/CustomFieldDefinition" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -9341,64 +9618,55 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/documents/{documentId}/content": { - "get": { + "/customfielddefinitions/{customFieldDefinitionId}/selectionoptions": { + "post": { "tags": [ - "Documents" + "CustomFields" ], - "summary": "Returns the current document content.", - "description": "Returns the current version as HTML by default. Use `format=markdown` for canonical Markdown, or `streamAsFile` to receive file content.\r\n The user must have at least `read` permission for the specified document.", - "operationId": "GetDocumentContentByDocumentId", + "summary": "Creates an option for a custom field.", + "description": "Creates a selection option for the specified custom field definition and places it at the requested order.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostCustomFieldDefinitionSelectionOptionsByCustomFieldDefinitionId", "parameters": [ { - "name": "documentId", + "name": "customFieldDefinitionId", "in": "path", - "description": "The id of the document.", + "description": "The id of the custom field definition to add a selection option to.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "name": "streamAsFile", - "in": "query", - "description": "Whether to stream the content as a file. By default, the document's content is returned in a model containing a property `Content` holding the content as a string.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "format", - "in": "query", - "description": "The response format. Supported values are `html` and `markdown`.", - "schema": { - "type": "string", - "default": "html" - } } ], + "requestBody": { + "description": "The model describing the selection option to create.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFieldSelectionOptionsForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/CustomFieldSelectionOption" } } } }, - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -9406,16 +9674,57 @@ } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/customfielddefinitions/{customFieldDefinitionId}/selectionoptions/{selectionOptionId}": { + "delete": { + "tags": [ + "CustomFields" + ], + "summary": "Deletes a custom field selection option.", + "description": "Deletes the specified selection option from the custom field definition and clears references to that option from existing custom field values.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "DeleteCustomFieldDefinitionSelectionOptionByCustomFieldDefinitionIdAndSelectionOptionId", + "parameters": [ + { + "name": "customFieldDefinitionId", + "in": "path", + "description": "The id of the custom field definition containing the selection option.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "selectionOptionId", + "in": "path", + "description": "The id of the selection option to delete.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } + } + ], + "responses": { + "204": { + "description": "No Content" }, "404": { "description": "Not Found", @@ -9439,21 +9748,32 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } }, "put": { "tags": [ - "Documents" + "CustomFields" ], - "summary": "Updates the specified document content.", - "description": "Updates document content using UTF-8 HTML or Markdown. Set `contentFormat` to `html` or `markdown`; HTML is the default. Canonical awork Markdown preserves safe editor structures during re-import.\r\n The user must have at least `write` permission for the specified document.", - "operationId": "PutDocumentContentByDocumentId", + "summary": "Updates a custom field selection option.", + "description": "Updates the specified selection option's value, color, and order within its custom field definition.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutCustomFieldDefinitionSelectionOptionByCustomFieldDefinitionIdAndSelectionOptionId", "parameters": [ { - "name": "documentId", + "name": "customFieldDefinitionId", "in": "path", - "description": "The id of the document to update.", + "description": "The id of the custom field definition containing the selection option.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "selectionOptionId", + "in": "path", + "description": "The id of the selection option to update.", "required": true, "schema": { "type": "string", @@ -9462,13 +9782,15 @@ } ], "requestBody": { + "description": "The model describing the updated selection option.", "content": { - "multipart/form-data": { + "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentContentForm" + "$ref": "#/components/schemas/CustomFieldSelectionOptionsForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -9476,13 +9798,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentModel" + "$ref": "#/components/schemas/CustomFieldSelectionOption" } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -9503,44 +9825,42 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/documents/{documentId}/contributors": { - "post": { + "/documents": { + "get": { "tags": [ "Documents" ], - "summary": "Adds contributors to the specified document.", - "description": "Adds contributors and grants them access to the document. Access for related entities is recalculated asynchronously.\r\n The user must have at least `write` permission for the specified document.", - "operationId": "PostDocumentContributorsByDocumentId", + "summary": "Returns all documents.", + "description": "Returns documents visible to the current user. Set `includeTrashedDocuments` to include documents in the trash.\r\n The user must have at least `read` permission for each returned document.", + "operationId": "GetDocuments", "parameters": [ { - "name": "documentId", - "in": "path", - "description": "The id of the document to add contributors to.", - "required": true, + "name": "includeTrashedDocuments", + "in": "query", + "description": "Whether to include trashed documents in the result.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The model used to add the document contributors.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ContributorPostForm" - } - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", @@ -9549,34 +9869,105 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/MinimalContributorModel" + "$ref": "#/components/schemas/DocumentModel" } } } } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "Documents" + ], + "summary": "Creates a document.", + "description": "Creates a document with optional HTML or Markdown content. Set `contentFormat` to `html` or `markdown`; HTML is the default. Canonical awork Markdown preserves safe editor structures during re-import.\r\n\r\nAny authenticated user.", + "operationId": "PostDocument", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/DocumentPostForm" } } - }, - "401": { - "description": "Unauthorized", + } + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/DocumentModel" } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/documents/trash/{documentId}/restore": { + "post": { + "tags": [ + "Documents" + ], + "summary": "Restores the specified document.", + "description": "Restores the specified document from the trash. Related versions, content, and child documents are restored asynchronously. Restoring an already active document has no effect.\r\n The user must have at least `write` permission for the specified document.", + "operationId": "PostDocumentsTrashRestoreByDocumentId", + "parameters": [ + { + "name": "documentId", + "in": "path", + "description": "The id of the document to restore.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, - "404": { - "description": "Not Found", + { + "name": "alsoRestoreChildren", + "in": "query", + "description": "Whether to also restore children documents.", + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -9601,19 +9992,19 @@ } } }, - "/documents/{documentId}/contributors/{documentContributorId}": { + "/documents/{documentId}": { "delete": { "tags": [ "Documents" ], - "summary": "Deletes a contributor from the specified document.", - "description": "Deletes only explicit contributors; inherited contributors cannot be removed. Access for related entities is recalculated asynchronously.\r\n The user must have at least `write` permission for the specified document.", - "operationId": "DeleteDocumentContributorByDocumentIdAndDocumentContributorId", + "summary": "Deletes the specified document.", + "description": "Moves the specified document to the trash. The document is moved synchronously; child documents and related entities are moved asynchronously. Set `alsoDeleteChildren` to control whether child documents are included.\r\n The user must have at least `manage` permission for the specified document.", + "operationId": "DeleteDocumentById", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document to delete the contributor from.", + "description": "The id of the document to delete.", "required": true, "schema": { "type": "string", @@ -9621,13 +10012,12 @@ } }, { - "name": "documentContributorId", - "in": "path", - "description": "The id of the document contributor to delete.", - "required": true, + "name": "alsoDeleteChildren", + "in": "query", + "description": "Whether to also delete children documents. If false, the children's parent references are updated to point to the deleted document's parent.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": true } } ], @@ -9635,16 +10025,6 @@ "204": { "description": "No Content" }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "401": { "description": "Unauthorized", "content": { @@ -9680,28 +10060,18 @@ "any": "true" } }, - "put": { + "get": { "tags": [ "Documents" ], - "summary": "Updates a document contributor's access.", - "description": "Updates the specified contributor's access to the document. Access for related entities is recalculated asynchronously.\r\n The user must have at least `write` permission for the specified document.", - "operationId": "PutDocumentContributorByDocumentIdAndDocumentContributorId", + "summary": "Returns the specified document.", + "description": "Returns the specified document when it is visible to the current user.\r\n The user must have at least `read` permission for the specified document.", + "operationId": "GetDocumentById", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document to update.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "documentContributorId", - "in": "path", - "description": "The id of the document contributor to update.", + "description": "The id of the document to retrieve.", "required": true, "schema": { "type": "string", @@ -9709,34 +10079,13 @@ } } ], - "requestBody": { - "description": "The model used to update the document contributor's access.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ContributorForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalContributorModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/DocumentModel" } } } @@ -9775,21 +10124,19 @@ "x-access": { "any": "true" } - } - }, - "/documents/{documentId}/duplicate": { - "post": { + }, + "put": { "tags": [ "Documents" ], - "summary": "Duplicates the specified document.", - "description": "Duplicates the document's content, permissions, and child documents. Child duplication may complete asynchronously.\r\n The user must have at least `read` permission for the specified document.", - "operationId": "PostDocumentDuplicateByDocumentId", + "summary": "Updates the specified document.", + "description": "Updates the specified document's content, location, sharing, or display properties. Moving a document can change its access rules and may be restricted by the workspace plan.\r\n The user must have at least `write` permission for the specified document.", + "operationId": "PutDocumentById", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document to duplicate.", + "description": "The id of the document to update.", "required": true, "schema": { "type": "string", @@ -9797,6 +10144,17 @@ } } ], + "requestBody": { + "description": "The document form data with the updated information.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", @@ -9854,19 +10212,19 @@ } } }, - "/documents/{documentId}/files/byuploadid": { - "post": { + "/documents/{documentId}/comments": { + "delete": { "tags": [ - "FileUpload" + "DocumentComments" ], - "summary": "Creates a file from an upload id.", - "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file document from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", - "operationId": "PostUploadByUploadId", + "summary": "Deletes all comments of the specified document.", + "description": "Deletes all comments of the specified document.\r\n\r\nAny authenticated user.", + "operationId": "DeleteCommentsByDocumentNameAndDocumentId", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document to attach the file to.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -9874,30 +10232,12 @@ } } ], - "requestBody": { - "description": "The model describing the uploaded file metadata.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UploadByUploadIdForm" - } - } - }, - "required": true - }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } + "204": { + "description": "No Content" }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -9920,16 +10260,14 @@ "x-access": { "any": "true" } - } - }, - "/documents/{documentId}/files/{fileId}": { + }, "get": { "tags": [ - "Document Files" + "DocumentComments" ], - "summary": "Returns the file with the specified id of the document with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByDocumentNameAndDocumentIdAndFileId", + "summary": "Returns all comments of the document with the specified id.", + "description": "Returns all comments of the document with the specified id. The user needs read permissions on the document.\r\n\r\nAny authenticated user.", + "operationId": "GetCommentsByDocumentNameAndDocumentId", "parameters": [ { "name": "documentId", @@ -9942,14 +10280,16 @@ } }, { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -9958,13 +10298,16 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/Comment" + } } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -9973,8 +10316,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -9997,41 +10340,19 @@ "x-access": { "any": "true" } - } - }, - "/documents/{documentId}/files/{fileId}/versions/{versionId}": { - "get": { + }, + "post": { "tags": [ - "Document Files" + "DocumentComments" ], - "summary": "Returns the document file version with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByDocumentNameAndDocumentIdAndFileIdAndVersionId", + "summary": "Creates a new comment on the document with the specified id.", + "description": "Creates a new comment on the document with the specified id.\r\n A user can only create a comment for him/herself, except for admins and api users.\r\n \r\n To create a comment the user must have at least `read` permissions on the specified document.", + "operationId": "PostCommentsByDocumentNameAndDocumentId", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", + "description": "The id of the document to create the comment for.", "required": true, "schema": { "type": "string", @@ -10039,13 +10360,34 @@ } } ], + "requestBody": { + "description": "The model to create the comment.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/Comment" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -10086,14 +10428,14 @@ } } }, - "/documents/{documentId}/teams": { - "post": { + "/documents/{documentId}/comments/{commentId}": { + "delete": { "tags": [ - "Documents" + "DocumentComments" ], - "summary": "Adds teams to the specified document.", - "description": "Adds teams and changes their access to the document. Access for related entities is recalculated asynchronously.\r\n The user must have at least `write` permission for the specified document.", - "operationId": "PostDocumentTeamsByDocumentId", + "summary": "Deletes the comment with the specified id on the document with the specified id.", + "description": "Deletes the comment with the specified id on the document with the specified id.\r\n The delete includes the reactions of the comment.\r\n If there are any replies to the comment, they will be deleted as well.\r\n\r\nAny authenticated user.", + "operationId": "DeleteCommentByDocumentNameAndDocumentIdAndCommentId", "parameters": [ { "name": "documentId", @@ -10104,45 +10446,21 @@ "type": "string", "format": "uuid" } + }, + { + "name": "commentId", + "in": "path", + "description": "The id of the comment.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], - "requestBody": { - "description": "The model used to add document teams to the document.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityToTeamPostForm" - } - } - } - }, - "required": true - }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MinimalEntityToTeamModel" - } - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", @@ -10178,21 +10496,19 @@ "x-access": { "any": "true" } - } - }, - "/documents/{documentId}/teams/{documentToTeamId}": { - "delete": { + }, + "get": { "tags": [ - "Documents" + "DocumentComments" ], - "summary": "Deletes a team from the specified document.", - "description": "Deletes only explicit document teams; inherited teams cannot be removed. Access for related entities is recalculated asynchronously.\r\n The user must have at least `write` permission for the specified document.", - "operationId": "DeleteDocumentTeamByDocumentIdAndDocumentToTeamId", + "summary": "Returns the comment with the specified id of the document with the specified id.", + "description": "Returns the comment with the specified id of the document with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetCommentByDocumentNameAndDocumentIdAndCommentId", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document to delete the team from.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -10200,9 +10516,9 @@ } }, { - "name": "documentToTeamId", + "name": "commentId", "in": "path", - "description": "The id of the document to team connection.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -10211,15 +10527,12 @@ } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Comment" } } } @@ -10233,16 +10546,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -10261,11 +10564,11 @@ }, "put": { "tags": [ - "Documents" + "DocumentComments" ], - "summary": "Updates a document team's access.", - "description": "Updates the specified team's access to the document. Access for related entities is recalculated asynchronously.\r\n The user must have at least `write` permission for the specified document.", - "operationId": "PutDocumentTeamByDocumentIdAndDocumentToTeamId", + "summary": "Updates the comment with the specified id on the document with the specified id.", + "description": "To update a comment the user must either have at least `read` permissions on the specified document, be the creator of the comment or be admin.", + "operationId": "PutCommentByDocumentNameAndDocumentIdAndCommentId", "parameters": [ { "name": "documentId", @@ -10278,9 +10581,9 @@ } }, { - "name": "documentToTeamId", + "name": "commentId", "in": "path", - "description": "The id of the document to team connection to update.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -10289,11 +10592,11 @@ } ], "requestBody": { - "description": "The model used to update document teams of a document.", + "description": "The model with the updated comment information.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityToTeamForm" + "$ref": "#/components/schemas/CommentPutForm" } } }, @@ -10305,17 +10608,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalEntityToTeamModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Comment" } } } @@ -10356,88 +10649,53 @@ } } }, - "/documentspaces": { - "get": { + "/documents/{documentId}/comments/{commentId}/react": { + "post": { "tags": [ - "DocumentSpaces" + "DocumentComments" ], - "summary": "Returns all document spaces.", - "description": "Returns document spaces visible to the current user.\r\n The user must have at least `read` permission for each returned document space.", - "operationId": "GetDocumentSpaces", + "summary": "Updates the reactions of the comment with the specified id on the document with the specified id.", + "description": "To update a reaction of a comment the user must have at least `read` permissions on the specified document.", + "operationId": "PostCommentReactByDocumentNameAndDocumentIdAndCommentId", "parameters": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" + "name": "documentId", + "in": "path", + "description": "The id of the document.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentSpaceModel" - } - } - } + "name": "commentId", + "in": "path", + "description": "The id of the comment.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "DocumentSpaces" - ], - "summary": "Creates a document space.", - "description": "Creates a document space and assigns the requested workspace access level. The space is inserted into the workspace order.\r\n\r\nThe user must be an admin.", - "operationId": "PostDocumentSpace", "requestBody": { - "description": "The model used to create the document space.", + "description": "The model used to update the reactions of the comment with the specified id.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentSpaceForm" + "$ref": "#/components/schemas/ReactionForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DocumentSpaceModel" - } - } - } + "204": { + "description": "No Content" }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -10446,8 +10704,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -10468,23 +10726,33 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/documentspaces/{documentSpaceId}": { - "delete": { + "/documents/{documentId}/comments/{commentId}/setresolved": { + "post": { "tags": [ - "DocumentSpaces" + "DocumentComments" ], - "summary": "Deletes the specified document space.", - "description": "Deletes the specified document space. Documents in the space and related entities, such as comments, are permanently deleted asynchronously.\r\n\r\nThe user must be an admin.", - "operationId": "DeleteDocumentSpaceById", + "summary": "Sets the resolved status of a comment.", + "description": "Sets the resolved status of a comment. Users need write permissions on the document to resolve/unresolve comments.\r\n Currently, the IsResolved property is only available for document comments.\r\n\r\nAny authenticated user.", + "operationId": "PostCommentSetResolvedByDocumentNameAndDocumentIdAndCommentId", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space to delete.", + "description": "The id of the document.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "commentId", + "in": "path", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -10492,9 +10760,27 @@ } } ], + "requestBody": { + "description": "The resolved status.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetResolvedForm" + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Comment" + } + } + } }, "401": { "description": "Unauthorized", @@ -10528,26 +10814,46 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } - }, + } + }, + "/documents/{documentId}/content": { "get": { "tags": [ - "DocumentSpaces" + "Documents" ], - "summary": "Returns the specified document space.", - "description": "Returns the specified document space when it is visible to the current user.\r\n The user must have at least `read` permission for the specified document space.", - "operationId": "GetDocumentSpaceById", + "summary": "Returns the current document content.", + "description": "Returns the current version as HTML by default. Use `format=markdown` for canonical Markdown, or `streamAsFile` to receive file content.\r\n The user must have at least `read` permission for the specified document.", + "operationId": "GetDocumentContentByDocumentId", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space to retrieve.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "streamAsFile", + "in": "query", + "description": "Whether to stream the content as a file. By default, the document's content is returned in a model containing a property `Content` holding the content as a string.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "format", + "in": "query", + "description": "The response format. Supported values are `html` and `markdown`.", + "schema": { + "type": "string", + "default": "html" + } } ], "responses": { @@ -10556,7 +10862,20 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentModel" + "type": "string" + } + } + } + }, + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -10598,16 +10917,16 @@ }, "put": { "tags": [ - "DocumentSpaces" + "Documents" ], - "summary": "Updates the specified document space.", - "description": "Updates the space name, icon, color, order, or workspace access level and reapplies its position in the workspace order.\r\n\r\nThe user must be an admin.", - "operationId": "PutDocumentSpaceById", + "summary": "Updates the specified document content.", + "description": "Updates document content using UTF-8 HTML or Markdown. Set `contentFormat` to `html` or `markdown`; HTML is the default. Canonical awork Markdown preserves safe editor structures during re-import.\r\n The user must have at least `write` permission for the specified document.", + "operationId": "PutDocumentContentByDocumentId", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space.", + "description": "The id of the document to update.", "required": true, "schema": { "type": "string", @@ -10616,15 +10935,13 @@ } ], "requestBody": { - "description": "The model used to update the document space.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/DocumentSpaceForm" + "$ref": "#/components/schemas/DocumentContentForm" } } - }, - "required": true + } }, "responses": { "200": { @@ -10632,23 +10949,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentSpaceModel" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/DocumentModel" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -10669,23 +10976,23 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/documentspaces/{documentSpaceId}/contributors": { + "/documents/{documentId}/contributors": { "post": { "tags": [ - "DocumentSpaces" + "Documents" ], - "summary": "Adds contributors to the specified document space.", - "description": "Adds contributors and changes their access to the document space and its documents.\r\n\r\nThe user must be an admin.", - "operationId": "PostDocumentSpaceContributorsByDocumentSpaceId", + "summary": "Adds contributors to the specified document.", + "description": "Adds contributors and grants them access to the document. Access for related entities is recalculated asynchronously.\r\n The user must have at least `write` permission for the specified document.", + "operationId": "PostDocumentContributorsByDocumentId", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space.", + "description": "The id of the document to add contributors to.", "required": true, "schema": { "type": "string", @@ -10694,7 +11001,7 @@ } ], "requestBody": { - "description": "The model with the list of contributors to add.", + "description": "The model used to add the document contributors.", "content": { "application/json": { "schema": { @@ -10713,7 +11020,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalContributorModel" + "type": "array", + "items": { + "$ref": "#/components/schemas/MinimalContributorModel" + } } } } @@ -10760,23 +11070,23 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/documentspaces/{documentSpaceId}/contributors/{documentSpaceContributorId}": { + "/documents/{documentId}/contributors/{documentContributorId}": { "delete": { "tags": [ - "DocumentSpaces" + "Documents" ], - "summary": "Deletes a document space contributor.", - "description": "Deletes the specified contributor and removes their access to the document space and its documents.\r\n\r\nThe user must be an admin.", - "operationId": "DeleteDocumentSpaceContributorByDocumentSpaceIdAndDocumentSpaceContributorId", + "summary": "Deletes a contributor from the specified document.", + "description": "Deletes only explicit contributors; inherited contributors cannot be removed. Access for related entities is recalculated asynchronously.\r\n The user must have at least `write` permission for the specified document.", + "operationId": "DeleteDocumentContributorByDocumentIdAndDocumentContributorId", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space.", + "description": "The id of the document to delete the contributor from.", "required": true, "schema": { "type": "string", @@ -10784,9 +11094,9 @@ } }, { - "name": "documentSpaceContributorId", + "name": "documentContributorId", "in": "path", - "description": "The id of the document space contributor to delete.", + "description": "The id of the document contributor to delete.", "required": true, "schema": { "type": "string", @@ -10840,21 +11150,21 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } }, "put": { "tags": [ - "DocumentSpaces" + "Documents" ], - "summary": "Updates a document space contributor's access.", - "description": "Updates the specified contributor's access to the document space and its documents.\r\n\r\nThe user must be an admin.", - "operationId": "PutDocumentSpaceContributorByDocumentSpaceIdAndDocumentSpaceContributorId", + "summary": "Updates a document contributor's access.", + "description": "Updates the specified contributor's access to the document. Access for related entities is recalculated asynchronously.\r\n The user must have at least `write` permission for the specified document.", + "operationId": "PutDocumentContributorByDocumentIdAndDocumentContributorId", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space.", + "description": "The id of the document to update.", "required": true, "schema": { "type": "string", @@ -10862,9 +11172,9 @@ } }, { - "name": "documentSpaceContributorId", + "name": "documentContributorId", "in": "path", - "description": "The id of the document space contributor.", + "description": "The id of the document contributor to update.", "required": true, "schema": { "type": "string", @@ -10873,7 +11183,7 @@ } ], "requestBody": { - "description": "The model with the updated contributor data.", + "description": "The model used to update the document contributor's access.", "content": { "application/json": { "schema": { @@ -10936,40 +11246,28 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/documentspaces/{documentSpaceId}/documents": { - "get": { + "/documents/{documentId}/duplicate": { + "post": { "tags": [ "Documents" ], - "summary": "Returns documents in the specified document space.", - "description": "Returns non-trashed documents visible in the specified document space.\r\n The user must have at least `read` permission for the specified document space.", - "operationId": "GetDocumentSpaceDocumentsByDocumentSpaceId", + "summary": "Duplicates the specified document.", + "description": "Duplicates the document's content, permissions, and child documents. Child duplication may complete asynchronously.\r\n The user must have at least `read` permission for the specified document.", + "operationId": "PostDocumentDuplicateByDocumentId", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space to retrieve documents from.", + "description": "The id of the document to duplicate.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -10978,10 +11276,37 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "$ref": "#/components/schemas/DocumentModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -11002,38 +11327,38 @@ } } }, - "/documentspaces/{documentSpaceId}/documents/trash": { - "get": { + "/documents/{documentId}/externalfiles": { + "post": { "tags": [ - "Documents" + "Document Files" ], - "summary": "Returns trashed documents in a document space.", - "description": "Returns deleted documents visible in the specified document space.\r\n The user must have at least `read` permission for the specified document space.", - "operationId": "GetDocumentSpaceDocumentsTrashByDocumentSpaceId", + "summary": "Creates external file references for the specified document.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostExternalFilesByDocumentNameAndDocumentId", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space to retrieve trashed documents from.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" + } + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", @@ -11042,11 +11367,31 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/DocumentModel" + "$ref": "#/components/schemas/FileInfo" } } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -11064,19 +11409,19 @@ } } }, - "/documentspaces/{documentSpaceId}/teams": { - "post": { + "/documents/{documentId}/files": { + "delete": { "tags": [ - "DocumentSpaces" + "Document Files" ], - "summary": "Adds teams to the specified document space.", - "description": "Adds teams and changes their access to the document space and its documents.\r\n\r\nThe user must be an admin.", - "operationId": "PostDocumentSpaceTeamsByDocumentSpaceId", + "summary": "Deletes all files and versions for the specified document.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesByDocumentNameAndDocumentId", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space.", + "description": "The document id.", "required": true, "schema": { "type": "string", @@ -11084,30 +11429,9 @@ } } ], - "requestBody": { - "description": "The model with the list of teams to add.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityToTeamPostForm" - } - } - } - }, - "required": true - }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MinimalEntityToTeamModel" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -11151,23 +11475,20 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } - } - }, - "/documentspaces/{documentSpaceId}/teams/{documentSpaceToTeamId}": { - "delete": { + }, + "get": { "tags": [ - "DocumentSpaces" + "Document Files" ], - "summary": "Deletes a team from the specified document space.", - "description": "Deletes the specified team and removes its access to the document space and its documents.\r\n\r\nThe user must be an admin.", - "operationId": "DeleteDocumentSpaceTeamByDocumentSpaceIdAndDocumentSpaceToTeamId", + "summary": "Returns all files of the specified document.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByDocumentNameAndDocumentId", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space.", "required": true, "schema": { "type": "string", @@ -11175,26 +11496,28 @@ } }, { - "name": "documentSpaceToTeamId", - "in": "path", - "description": "The id of the document space to team connection.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } } } } @@ -11231,31 +11554,20 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } }, - "put": { + "post": { "tags": [ - "DocumentSpaces" + "Document Files" ], - "summary": "Updates a document space team's access.", - "description": "Updates the specified team's access to the document space and its documents.\r\n\r\nThe user must be an admin.", - "operationId": "PutDocumentSpaceTeamByDocumentSpaceIdAndDocumentSpaceToTeamId", + "summary": "Uploads a file for the specified document.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesByDocumentNameAndDocumentId", "parameters": [ { - "name": "documentSpaceId", - "in": "path", - "description": "The id of the document space.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "documentSpaceToTeamId", + "name": "documentId", "in": "path", - "description": "The id of the document space to team connection.", "required": true, "schema": { "type": "string", @@ -11264,15 +11576,13 @@ } ], "requestBody": { - "description": "The model with the updated team access.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/EntityToTeamForm" + "$ref": "#/components/schemas/FileUploadModel" } } - }, - "required": true + } }, "responses": { "200": { @@ -11280,7 +11590,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalEntityToTeamModel" + "$ref": "#/components/schemas/FileInfo" } } } @@ -11304,6 +11614,64 @@ } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/documents/{documentId}/files/byuploadid": { + "post": { + "tags": [ + "FileUpload" + ], + "summary": "Creates a file from an upload id.", + "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file document from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostUploadByUploadId", + "parameters": [ + { + "name": "documentId", + "in": "path", + "description": "The id of the document to attach the file to.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model describing the uploaded file metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadByUploadIdForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } }, "404": { "description": "Not Found", @@ -11327,25 +11695,66 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/files/generateuploadurl": { + "/documents/{documentId}/files/byurl": { "post": { "tags": [ - "FileUpload" + "Document Files" ], - "summary": "Generates a URL to upload a file to.", - "description": "Generates a URL that can be used to upload a file. Use the returned upload id to create a file entry. See for more information.\r\n\r\nAny authenticated user.", - "operationId": "PostGenerateUploadURL", + "summary": "Uploads a file from a public URL for the specified document.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesByUrlByDocumentNameAndDocumentId", + "parameters": [ + { + "name": "documentId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FilePostForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GenerateUploadUrlResponseModel" + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -11366,27 +11775,29 @@ } } }, - "/files/images/{entityName}/{entityId}": { + "/documents/{documentId}/files/{fileId}": { "delete": { "tags": [ - "Images" + "Document Files" ], - "summary": "Deletes the profile image of the entity with the specified id.", + "summary": "Deletes the specified document file and its versions.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "DeleteFilesImagesByEntityNameAndEntityId", + "operationId": "DeleteFilesByDocumentNameAndDocumentIdAndFileId", "parameters": [ { - "name": "entityName", + "name": "documentId", "in": "path", + "description": "The document id.", "required": true, "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" + "type": "string", + "format": "uuid" } }, { - "name": "entityId", + "name": "fileId", "in": "path", + "description": "The file id.", "required": true, "schema": { "type": "string", @@ -11398,6 +11809,16 @@ "204": { "description": "No Content" }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "401": { "description": "Unauthorized", "content": { @@ -11435,52 +11856,31 @@ }, "get": { "tags": [ - "Images" + "Document Files" ], - "summary": "Returns the image of the entity with the specified id.", - "description": "\r\n\r\nAllows unauthenticated access.", - "operationId": "GetFilesImagesByEntityNameAndEntityId", + "summary": "Returns the file with the specified id of the document with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByDocumentNameAndDocumentIdAndFileId", "parameters": [ { - "name": "entityName", + "name": "documentId", "in": "path", + "description": "The id of the document.", "required": true, "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" + "type": "string", + "format": "uuid" } }, { - "name": "entityId", + "name": "fileId", "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "name": "width", - "in": "query", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "height", - "in": "query", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "crop", - "in": "query", - "schema": { - "type": "boolean" - } } ], "responses": { @@ -11489,28 +11889,7 @@ "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" - } - } - } - }, - "304": { - "description": "Not Modified", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -11547,28 +11926,28 @@ "v1" ], "x-access": { - "anonymous": "true" + "any": "true" } }, - "post": { + "put": { "tags": [ - "Images" + "Document Files" ], - "summary": "Uploads a new profile image.", + "summary": "Updates metadata for the specified file.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostFilesImagesByEntityNameAndEntityId", + "operationId": "PutFilesByDocumentNameAndDocumentIdAndFileId", "parameters": [ { - "name": "entityName", + "name": "documentId", "in": "path", "required": true, "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" + "type": "string", + "format": "uuid" } }, { - "name": "entityId", + "name": "fileId", "in": "path", "required": true, "schema": { @@ -11579,12 +11958,13 @@ ], "requestBody": { "content": { - "multipart/form-data": { + "application/json": { "schema": { - "$ref": "#/components/schemas/FileUploadModel" + "$ref": "#/components/schemas/FileInfoUpdateForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -11616,6 +11996,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -11633,26 +12023,26 @@ } } }, - "/files/images/{entityName}/{entityId}/byuploadid": { + "/documents/{documentId}/files/{fileId}/copy": { "post": { "tags": [ - "Images" + "Document Files" ], - "summary": "Sets a profile image from a previously uploaded file.", - "description": "After an image has been uploaded to an upload URL generated by the /files/generateuploadurl endpoint, this endpoint sets the uploaded image as the profile image of the entity by providing the upload id.\r\n\r\nAny authenticated user.", - "operationId": "PostFilesImagesByUploadIdByEntityNameAndEntityId", + "summary": "Copies the specified file to another document.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesCopyByDocumentNameAndDocumentIdAndFileId", "parameters": [ { - "name": "entityName", + "name": "documentId", "in": "path", "required": true, "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" + "type": "string", + "format": "uuid" } }, { - "name": "entityId", + "name": "fileId", "in": "path", "required": true, "schema": { @@ -11665,7 +12055,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UploadByUploadIdForm" + "$ref": "#/components/schemas/FileCopyForm" } } }, @@ -11701,6 +12091,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -11718,90 +12118,31 @@ } } }, - "/files/images/{entityType}": { + "/documents/{documentId}/files/{fileId}/download": { "get": { "tags": [ - "SharedFiles" + "Document Files" ], - "summary": "Returns the public profile image.", - "description": "\r\n\r\nAllows unauthenticated access.", - "operationId": "GetFilesImagesByEntityType", + "summary": "Returns the latest content of the specified document file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesDownloadByDocumentNameAndDocumentIdAndFileId", "parameters": [ { - "name": "entityType", + "name": "documentId", "in": "path", - "description": "The entity type for which we are requesting the image.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } }, { - "name": "token", - "in": "query", - "description": "The token to allow access.", + "name": "fileId", + "in": "path", "required": true, "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "OK" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "anonymous": "true" - } - } - }, - "/files/{fileId}/download": { - "get": { - "tags": [ - "Files" - ], - "summary": "Returns the latest content of the specified file and supports range requests.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesDownloadByFileId", - "parameters": [ - { - "name": "fileId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "type": "string", + "format": "uuid" } }, { @@ -11826,22 +12167,6 @@ "schema": { "type": "boolean" } - }, - { - "name": "enlarge", - "in": "query", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "name": "inline", - "in": "query", - "schema": { - "type": "boolean", - "default": false - } } ], "responses": { @@ -11856,17 +12181,6 @@ } } }, - "206": { - "description": "Partial Content", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - }, "400": { "description": "Bad Request", "content": { @@ -11896,16 +12210,6 @@ } } } - }, - "416": { - "description": "Range Not Satisfiable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -11923,17 +12227,17 @@ } } }, - "/files/{fileId}/pdf": { + "/documents/{documentId}/files/{fileId}/shareurl": { "get": { "tags": [ - "Files" + "Document Files" ], - "summary": "Returns the latest version of the specified file as PDF.", + "summary": "Returns a public URL for the specified file.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesPdfByFileId", + "operationId": "GetFilesShareUrlByDocumentNameAndDocumentIdAndFileId", "parameters": [ { - "name": "fileId", + "name": "documentId", "in": "path", "required": true, "schema": { @@ -11942,11 +12246,12 @@ } }, { - "name": "inline", - "in": "query", + "name": "fileId", + "in": "path", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } } ], @@ -11956,18 +12261,7 @@ "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string" } } } @@ -12008,84 +12302,31 @@ } } }, - "/filters": { + "/documents/{documentId}/files/{fileId}/versions": { "get": { "tags": [ - "Filters" + "Document Files" ], - "summary": "Returns the current user's filters.", - "description": "Returns the union of filters owned by the requesting user and filters explicitly shared with the requesting user.\r\n Use the specialized created-by-me and shared-with-me endpoints when only one category is needed.\r\n\r\nAny authenticated user.", - "operationId": "GetFilters", + "summary": "Returns all versions of the specified document file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByDocumentNameAndDocumentIdAndFileId", "parameters": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Filter" - } - } - } + "name": "documentId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/filters/{entityType}": { - "get": { - "tags": [ - "Filters" - ], - "summary": "Returns the current user's filters for the specified user type.", - "description": "Returns the union of filters owned by the requesting user and filters explicitly shared with the requesting user\r\n for the requested user type.\r\n Use the specialized created-by-me and shared-with-me endpoints when only one category is needed.\r\n\r\nAny authenticated user.", - "operationId": "GetFiltersByUserType", - "parameters": [ { - "name": "entityType", + "name": "fileId", "in": "path", - "description": "The entity type route value.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } }, { @@ -12109,81 +12350,14 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Filter" + "$ref": "#/components/schemas/FileVersion" } } } } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/filters/{entityType}/evaluate": { - "post": { - "tags": [ - "Filters" - ], - "summary": "Evaluates a filter definition against the specified user type and returns the filtered results without saving the filter.\n This endpoint is designed for quick filters where the frontend builds a FilterDefinition dynamically\n and needs to evaluate it immediately without persisting it to the database.\n Supports standard paging, ordering, and additional query constraints from query parameters.", - "description": "Evaluates an ad-hoc filter without persisting it. Useful for testing filters before saving or for temporary filtering needs.\r\n\r\nAny authenticated user.", - "operationId": "PostFilterEvaluateByUserType", - "parameters": [ - { - "name": "entityType", - "in": "path", - "description": "The entity type name (tasks, projects, companies, users).", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "description": "The filter application form containing the FilterDefinition to evaluate.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApplyFilterForm" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectPagedResult" - } - } - } - }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -12216,21 +12390,27 @@ "x-access": { "any": "true" } - } - }, - "/filters/{filterId}/contributors": { + }, "post": { "tags": [ - "Filters" + "Document Files" ], - "summary": "Adds explicit contributors to the specified filter.", - "description": "Adding filter contributors grants explicit access to the filter with the specified access levels.\r\n Existing explicit contributors are ignored and therefore not recreated.\r\n The filter creator cannot be added as an explicit contributor because ownership is handled implicitly.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "PostFilterContributorsByFilterId", + "summary": "Uploads a new version of the specified document file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesVersionsByDocumentNameAndDocumentIdAndFileId", "parameters": [ { - "name": "filterId", + "name": "documentId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", "in": "path", - "description": "The filter that should receive explicit contributors.", "required": true, "schema": { "type": "string", @@ -12239,18 +12419,13 @@ } ], "requestBody": { - "description": "The contributor permissions to add.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ContributorPostForm" - } + "$ref": "#/components/schemas/FileUploadModel" } } - }, - "required": true + } }, "responses": { "200": { @@ -12258,10 +12433,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MinimalContributorModel" - } + "$ref": "#/components/schemas/FileVersion" } } } @@ -12312,19 +12484,19 @@ } } }, - "/filters/{filterId}/contributors/{filterContributorId}": { - "delete": { + "/documents/{documentId}/files/{fileId}/versions/{versionId}": { + "get": { "tags": [ - "Filters" + "Document Files" ], - "summary": "Removes an explicit contributor from the specified filter.", - "description": "Removing a filter contributor revokes that contributor's explicit access to the filter.\r\n The contributor entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "DeleteFilterContributorByFilterIdAndFilterContributorId", + "summary": "Returns the document file version with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByDocumentNameAndDocumentIdAndFileIdAndVersionId", "parameters": [ { - "name": "filterId", + "name": "documentId", "in": "path", - "description": "The filter that owns the contributor entry.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -12332,9 +12504,19 @@ } }, { - "name": "filterContributorId", + "name": "fileId", "in": "path", - "description": "The contributor entry to delete.", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "versionId", + "in": "path", + "description": "The id of the file version.", "required": true, "schema": { "type": "string", @@ -12343,8 +12525,15 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileVersion" + } + } + } }, "401": { "description": "Unauthorized", @@ -12380,19 +12569,20 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/documents/{documentId}/files/{fileId}/versions/{versionId}/download": { + "get": { "tags": [ - "Filters" + "Document Files" ], - "summary": "Updates the access level of an explicit filter contributor.", - "description": "Updating a filter contributor changes that contributor's explicit access level for the filter.\r\n The contributor entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "PutFilterContributorByFilterIdAndFilterContributorId", + "summary": "Returns the content of the specified document file version.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsDownloadByDocumentNameAndDocumentIdAndFileIdAndVersionId", "parameters": [ { - "name": "filterId", + "name": "documentId", "in": "path", - "description": "The filter that owns the contributor entry.", "required": true, "schema": { "type": "string", @@ -12400,9 +12590,17 @@ } }, { - "name": "filterContributorId", + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "versionId", "in": "path", - "description": "The contributor entry to update.", "required": true, "schema": { "type": "string", @@ -12410,34 +12608,14 @@ } } ], - "requestBody": { - "description": "The new contributor permission payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ContributorForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalContributorModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string", + "format": "binary" } } } @@ -12478,19 +12656,19 @@ } } }, - "/filters/{filterId}/teams": { + "/documents/{documentId}/teams": { "post": { "tags": [ - "Filters" + "Documents" ], - "summary": "Adds explicit team permissions to the specified filter.", - "description": "Adding filter teams grants explicit access to the filter for all members of the specified teams.\r\n Existing explicit team permissions are ignored and therefore not recreated.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "PostFilterTeamsByFilterId", + "summary": "Adds teams to the specified document.", + "description": "Adds teams and changes their access to the document. Access for related entities is recalculated asynchronously.\r\n The user must have at least `write` permission for the specified document.", + "operationId": "PostDocumentTeamsByDocumentId", "parameters": [ { - "name": "filterId", + "name": "documentId", "in": "path", - "description": "The filter that should receive explicit team permissions.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -12499,7 +12677,7 @@ } ], "requestBody": { - "description": "The team permissions to add.", + "description": "The model used to add document teams to the document.", "content": { "application/json": { "schema": { @@ -12572,19 +12750,19 @@ } } }, - "/filters/{filterId}/teams/{filterToTeamId}": { + "/documents/{documentId}/teams/{documentToTeamId}": { "delete": { "tags": [ - "Filters" + "Documents" ], - "summary": "Removes an explicit team permission from the specified filter.", - "description": "Removing a filter team permission revokes that team's explicit access to the filter.\r\n The team permission entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "DeleteFilterTeamByFilterIdAndFilterToTeamId", + "summary": "Deletes a team from the specified document.", + "description": "Deletes only explicit document teams; inherited teams cannot be removed. Access for related entities is recalculated asynchronously.\r\n The user must have at least `write` permission for the specified document.", + "operationId": "DeleteDocumentTeamByDocumentIdAndDocumentToTeamId", "parameters": [ { - "name": "filterId", + "name": "documentId", "in": "path", - "description": "The filter that owns the team permission entry.", + "description": "The id of the document to delete the team from.", "required": true, "schema": { "type": "string", @@ -12592,9 +12770,9 @@ } }, { - "name": "filterToTeamId", + "name": "documentToTeamId", "in": "path", - "description": "The team permission entry to delete.", + "description": "The id of the document to team connection.", "required": true, "schema": { "type": "string", @@ -12606,6 +12784,16 @@ "204": { "description": "No Content" }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "401": { "description": "Unauthorized", "content": { @@ -12643,16 +12831,16 @@ }, "put": { "tags": [ - "Filters" + "Documents" ], - "summary": "Updates the access level of an explicit team permission on the specified filter.", - "description": "Updating a filter team permission changes the explicit access level of the referenced team for the filter.\r\n The team permission entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "PutFilterTeamByFilterIdAndFilterToTeamId", + "summary": "Updates a document team's access.", + "description": "Updates the specified team's access to the document. Access for related entities is recalculated asynchronously.\r\n The user must have at least `write` permission for the specified document.", + "operationId": "PutDocumentTeamByDocumentIdAndDocumentToTeamId", "parameters": [ { - "name": "filterId", + "name": "documentId", "in": "path", - "description": "The filter that owns the team permission entry.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -12660,9 +12848,9 @@ } }, { - "name": "filterToTeamId", + "name": "documentToTeamId", "in": "path", - "description": "The team permission entry to update.", + "description": "The id of the document to team connection to update.", "required": true, "schema": { "type": "string", @@ -12671,7 +12859,7 @@ } ], "requestBody": { - "description": "The new team permission payload.", + "description": "The model used to update document teams of a document.", "content": { "application/json": { "schema": { @@ -12738,21 +12926,38 @@ } } }, - "/invitations": { + "/documentspaces": { "get": { "tags": [ - "Invitations" + "DocumentSpaces" + ], + "summary": "Returns all document spaces.", + "description": "Returns document spaces visible to the current user.\r\n The user must have at least `read` permission for each returned document space.", + "operationId": "GetDocumentSpaces", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } ], - "summary": "Prevents GET requests to the invitations route from throwing errors.", - "description": "\r\n\r\nAllows unauthenticated access.", - "operationId": "GetInvitations", "responses": { - "404": { - "description": "Not Found", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentSpaceModel" + } } } } @@ -12769,22 +12974,22 @@ "v1" ], "x-access": { - "anonymous": "true" + "any": "true" } }, "post": { "tags": [ - "Invitations" + "DocumentSpaces" ], - "summary": "Invites a user to a workspace.", - "description": "\r\n\r\nAllows unauthenticated access.", - "operationId": "PostInvitations", + "summary": "Creates a document space.", + "description": "Creates a document space and assigns the requested workspace access level. The space is inserted into the workspace order.\r\n\r\nThe user must be an admin.", + "operationId": "PostDocumentSpace", "requestBody": { - "description": "The invitation details.", + "description": "The model used to create the document space.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Invitation" + "$ref": "#/components/schemas/DocumentSpaceForm" } } }, @@ -12796,7 +13001,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InvitationResponse" + "$ref": "#/components/schemas/DocumentSpaceModel" } } } @@ -12811,8 +13016,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -12833,38 +13038,46 @@ "v1" ], "x-access": { - "anonymous": "true" + "admin": "true" } } }, - "/invitations/accept": { - "post": { + "/documentspaces/{documentSpaceId}": { + "delete": { "tags": [ - "Invitations" + "DocumentSpaces" ], - "summary": "Accepts an invitation using its invitation code.", - "description": "\r\n\r\nAllows unauthenticated access.", - "operationId": "PostInvitationsAccept", - "requestBody": { - "description": "The invitation code and optional referral code.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AcceptInvitation" - } + "summary": "Deletes the specified document space.", + "description": "Deletes the specified document space. Documents in the space and related entities, such as comments, are permanently deleted asynchronously.\r\n\r\nThe user must be an admin.", + "operationId": "DeleteDocumentSpaceById", + "parameters": [ + { + "name": "documentSpaceId", + "in": "path", + "description": "The id of the document space to delete.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - }, - "required": true - }, + } + ], "responses": { - "200": { - "description": "OK" - }, "204": { "description": "No Content" }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -12885,25 +13098,45 @@ "v1" ], "x-access": { - "anonymous": "true" + "admin": "true" } - } - }, - "/me": { + }, "get": { "tags": [ - "Users" + "DocumentSpaces" + ], + "summary": "Returns the specified document space.", + "description": "Returns the specified document space when it is visible to the current user.\r\n The user must have at least `read` permission for the specified document space.", + "operationId": "GetDocumentSpaceById", + "parameters": [ + { + "name": "documentSpaceId", + "in": "path", + "description": "The id of the document space to retrieve.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Returns the current user and workspace.", - "description": "Returns the current user's profile together with the selected workspace.\r\n\r\nAny authenticated user.", - "operationId": "GetMe", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserAndWorkspace" + "$ref": "#/components/schemas/DocumentModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -12932,40 +13165,64 @@ "x-access": { "any": "true" } - } - }, - "/me/allavailabletasks": { - "get": { + }, + "put": { "tags": [ - "AssignedTasks" + "DocumentSpaces" ], - "summary": "Returns tasks visible to the current user.", - "description": "Returns tasks available to the current user and removes time details when the user lacks the related time-tracking access.\r\n The user must have at least `read` permission for each returned task.", - "operationId": "GetMeAllAvailableTasks", + "summary": "Updates the specified document space.", + "description": "Updates the space name, icon, color, order, or workspace access level and reapplies its position in the workspace order.\r\n\r\nThe user must be an admin.", + "operationId": "PutDocumentSpaceById", "parameters": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "documentSpaceId", + "in": "path", + "description": "The id of the document space.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], + "requestBody": { + "description": "The model used to update the document space.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentSpaceForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } + "$ref": "#/components/schemas/DocumentSpaceModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -12982,69 +13239,51 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/me/assignedtasks": { - "get": { + "/documentspaces/{documentSpaceId}/contributors": { + "post": { "tags": [ - "AssignedTasks" + "DocumentSpaces" ], - "summary": "Returns tasks assigned to the current user.", - "description": "Returns tasks assigned to the current user. Use the assignment date range or `inProgress` to narrow the result.\r\n The user must have permission to view each returned task.", - "operationId": "GetMeAssignedTasks", + "summary": "Adds contributors to the specified document space.", + "description": "Adds contributors and changes their access to the document space and its documents.\r\n\r\nThe user must be an admin.", + "operationId": "PostDocumentSpaceContributorsByDocumentSpaceId", "parameters": [ { - "name": "inProgress", - "in": "query", - "description": "Whether to return only assigned project tasks of running projects. Defaults to true.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "assignedOnFrom", - "in": "query", - "description": "The start date for filtering by assignment date. If set, tasks are returned only when the assignment date is greater or equal than this value.", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "assignedOnTo", - "in": "query", - "description": "The end date for filtering by assignment date. If set, tasks are returned only when the assignment date is less or equal than this value.", + "name": "documentSpaceId", + "in": "path", + "description": "The id of the document space.", + "required": true, "schema": { "type": "string", - "format": "date-time" + "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], + "requestBody": { + "description": "The model with the list of contributors to add.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContributorPostForm" + } + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } + "$ref": "#/components/schemas/MinimalContributorModel" } } } @@ -13058,6 +13297,26 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -13071,23 +13330,33 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/me/assignedtasks/{taskId}": { - "get": { + "/documentspaces/{documentSpaceId}/contributors/{documentSpaceContributorId}": { + "delete": { "tags": [ - "AssignedTasks" + "DocumentSpaces" ], - "summary": "Returns an assigned task for the current user.", - "description": "Returns the specified task when it is assigned to the current user. Time-tracking details are included only when permitted.\r\n The user must have permission to view the assigned task.", - "operationId": "GetMeAssignedTaskByTaskId", + "summary": "Deletes a document space contributor.", + "description": "Deletes the specified contributor and removes their access to the document space and its documents.\r\n\r\nThe user must be an admin.", + "operationId": "DeleteDocumentSpaceContributorByDocumentSpaceIdAndDocumentSpaceContributorId", "parameters": [ { - "name": "taskId", + "name": "documentSpaceId", "in": "path", - "description": "The id of the task to return.", + "description": "The id of the document space.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "documentSpaceContributorId", + "in": "path", + "description": "The id of the document space contributor to delete.", "required": true, "schema": { "type": "string", @@ -13096,12 +13365,25 @@ } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskModel" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -13128,39 +13410,86 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } - } - }, - "/me/dashboards": { - "get": { + }, + "put": { "tags": [ - "Dashboards" + "DocumentSpaces" ], - "summary": "Returns dashboards for the current user.", - "description": "Returns dashboards for the current user. Set `includeWidgets` to include widget details. A default dashboard is created when none exists.\r\n\r\nThe user must be the creator.", - "operationId": "GetMeDashboards", + "summary": "Updates a document space contributor's access.", + "description": "Updates the specified contributor's access to the document space and its documents.\r\n\r\nThe user must be an admin.", + "operationId": "PutDocumentSpaceContributorByDocumentSpaceIdAndDocumentSpaceContributorId", "parameters": [ { - "name": "includeWidgets", - "in": "query", - "description": "Include widgets.", + "name": "documentSpaceId", + "in": "path", + "description": "The id of the document space.", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" + } + }, + { + "name": "documentSpaceContributorId", + "in": "path", + "description": "The id of the document space contributor.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } ], + "requestBody": { + "description": "The model with the updated contributor data.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContributorForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Dashboard" - } + "$ref": "#/components/schemas/MinimalContributorModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -13177,19 +13506,29 @@ "v1" ], "x-access": { - "owner": "true" + "admin": "true" } } }, - "/me/filters": { + "/documentspaces/{documentSpaceId}/documents": { "get": { "tags": [ - "Filters" + "Documents" ], - "summary": "Returns the filters created by the current user.", - "description": "Returns filters that were created by and are owned by the requesting user.\r\n Shared filters are excluded, even if the requesting user also has explicit access through contributor, team, or workspace permissions.\r\n\r\nAny authenticated user.", - "operationId": "GetMeFilters", + "summary": "Returns documents in the specified document space.", + "description": "Returns non-trashed documents visible in the specified document space.\r\n The user must have at least `read` permission for the specified document space.", + "operationId": "GetDocumentSpaceDocumentsByDocumentSpaceId", "parameters": [ + { + "name": "documentSpaceId", + "in": "path", + "description": "The id of the document space to retrieve documents from.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, { "$ref": "#/components/parameters/page" }, @@ -13211,21 +13550,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Filter" + "$ref": "#/components/schemas/DocumentModel" } } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -13243,22 +13572,23 @@ } } }, - "/me/filters/{entityType}": { + "/documentspaces/{documentSpaceId}/documents/trash": { "get": { "tags": [ - "Filters" + "Documents" ], - "summary": "Returns the filters created by the current user for the specified user type.", - "description": "Returns filters that were created by and are owned by the requesting user and match the requested user type.\r\n Shared filters are excluded, even if the requesting user also has explicit access through contributor, team, or workspace permissions.\r\n\r\nAny authenticated user.", - "operationId": "GetMeFiltersByUserType", + "summary": "Returns trashed documents in a document space.", + "description": "Returns deleted documents visible in the specified document space.\r\n The user must have at least `read` permission for the specified document space.", + "operationId": "GetDocumentSpaceDocumentsTrashByDocumentSpaceId", "parameters": [ { - "name": "entityType", + "name": "documentSpaceId", "in": "path", - "description": "The entity type route value.", + "description": "The id of the document space to retrieve trashed documents from.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } }, { @@ -13282,21 +13612,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Filter" + "$ref": "#/components/schemas/DocumentModel" } } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -13312,31 +13632,37 @@ "x-access": { "any": "true" } - }, + } + }, + "/documentspaces/{documentSpaceId}/teams": { "post": { "tags": [ - "Filters" + "DocumentSpaces" ], - "summary": "Creates a persisted filter definition for the specified user type.", - "description": "Creates a new filter owned by the current user.\r\n\r\nAny authenticated user.", - "operationId": "PostMeFilterByUserType", + "summary": "Adds teams to the specified document space.", + "description": "Adds teams and changes their access to the document space and its documents.\r\n\r\nThe user must be an admin.", + "operationId": "PostDocumentSpaceTeamsByDocumentSpaceId", "parameters": [ { - "name": "entityType", + "name": "documentSpaceId", "in": "path", - "description": "Route segment identifying the entity type (tasks, projects, companies, users).", + "description": "The id of the document space.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "requestBody": { - "description": "The filter definition payload supplied by the caller.", + "description": "The model with the list of teams to add.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FilterForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityToTeamPostForm" + } } } }, @@ -13348,7 +13674,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Filter" + "$ref": "#/components/schemas/MinimalEntityToTeamModel" } } } @@ -13363,6 +13689,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -13385,35 +13721,124 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/me/filters/{entityType}/fromquery": { - "post": { + "/documentspaces/{documentSpaceId}/teams/{documentSpaceToTeamId}": { + "delete": { "tags": [ - "Filters" + "DocumentSpaces" ], - "summary": "Creates a persisted filter from an OData query string.\n Convenience endpoint for external API consumers who want to create filters using familiar OData syntax.", - "description": "Creates a filter from an OData filterby query string.\r\n\r\nAny authenticated user.", - "operationId": "PostMeFilterFromQueryByUserType", + "summary": "Deletes a team from the specified document space.", + "description": "Deletes the specified team and removes its access to the document space and its documents.\r\n\r\nThe user must be an admin.", + "operationId": "DeleteDocumentSpaceTeamByDocumentSpaceIdAndDocumentSpaceToTeamId", "parameters": [ { - "name": "entityType", + "name": "documentSpaceId", "in": "path", - "description": "Route segment identifying the entity type (tasks, projects, companies, users).", + "description": "The id of the document space.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } - } - ], - "requestBody": { - "description": "The filter query payload containing the filter name, sharing settings, and query string.", + }, + { + "name": "documentSpaceToTeamId", + "in": "path", + "description": "The id of the document space to team connection.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true" + } + }, + "put": { + "tags": [ + "DocumentSpaces" + ], + "summary": "Updates a document space team's access.", + "description": "Updates the specified team's access to the document space and its documents.\r\n\r\nThe user must be an admin.", + "operationId": "PutDocumentSpaceTeamByDocumentSpaceIdAndDocumentSpaceToTeamId", + "parameters": [ + { + "name": "documentSpaceId", + "in": "path", + "description": "The id of the document space.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "documentSpaceToTeamId", + "in": "path", + "description": "The id of the document space to team connection.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model with the updated team access.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FilterFromQueryForm" + "$ref": "#/components/schemas/EntityToTeamForm" } } }, @@ -13425,7 +13850,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Filter" + "$ref": "#/components/schemas/MinimalEntityToTeamModel" } } } @@ -13440,6 +13865,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -13461,24 +13896,58 @@ "x-api-versions": [ "v1" ], + "x-access": { + "admin": "true" + } + } + }, + "/files/generateuploadurl": { + "post": { + "tags": [ + "FileUpload" + ], + "summary": "Generates a URL to upload a file to.", + "description": "Generates a URL that can be used to upload a file. Use the returned upload id to create a file entry. See for more information.\r\n\r\nAny authenticated user.", + "operationId": "PostGenerateUploadURL", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GenerateUploadUrlResponseModel" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], "x-access": { "any": "true" } } }, - "/me/filters/{filterId}": { + "/files/images/agents/{agentId}": { "delete": { "tags": [ - "Filters" + "Images" ], - "summary": "Deletes a filter.", - "description": "Deletes the filter when the current user has manage access.\r\n\r\nAny authenticated user.", - "operationId": "DeleteMeFilterById", + "summary": "Deletes the profile image of the agent with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesImagesByAgentNameAndAgentId", "parameters": [ { - "name": "filterId", + "name": "agentId", "in": "path", - "description": "Identifier of the filter to delete.", "required": true, "schema": { "type": "string", @@ -13527,21 +13996,43 @@ }, "get": { "tags": [ - "Filters" + "Images" ], - "summary": "Returns a single filter by its identifier for the current user.", - "description": "Returns the filter if the current user has read access.\r\n\r\nAny authenticated user.", - "operationId": "GetMeFilterById", + "summary": "Returns the image of the agent with the specified id.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "GetFilesImagesByAgentNameAndAgentId", "parameters": [ { - "name": "filterId", + "name": "agentId", "in": "path", - "description": "The filter identifier.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "width", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "height", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "crop", + "in": "query", + "schema": { + "type": "boolean" + } } ], "responses": { @@ -13550,7 +14041,28 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Filter" + "type": "string", + "format": "binary" + } + } + } + }, + "304": { + "description": "Not Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -13587,21 +14099,20 @@ "v1" ], "x-access": { - "any": "true" + "anonymous": "true" } }, - "put": { + "post": { "tags": [ - "Filters" + "Images" ], - "summary": "Updates an existing filter definition.", + "summary": "Uploads a new profile image.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "PutMeFilterById", + "operationId": "PostFilesImagesByAgentNameAndAgentId", "parameters": [ { - "name": "filterId", + "name": "agentId", "in": "path", - "description": "Identifier of the filter to update.", "required": true, "schema": { "type": "string", @@ -13610,15 +14121,13 @@ } ], "requestBody": { - "description": "The updated filter definition supplied by the caller.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/FilterForm" + "$ref": "#/components/schemas/FileUploadModel" } } - }, - "required": true + } }, "responses": { "200": { @@ -13626,7 +14135,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Filter" + "$ref": "#/components/schemas/FileInfo" } } } @@ -13650,16 +14159,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -13677,19 +14176,18 @@ } } }, - "/me/filters/{filterId}/copy": { + "/files/images/agents/{agentId}/byuploadid": { "post": { "tags": [ - "Filters" + "Images" ], - "summary": "Creates a copy of an existing filter.", - "description": "Copies the filter definition and query.\r\n The copied filter will be owned only by the requesting user.\r\n The name of the copied filter will be \"{original name} (Copy)\" or \"{original name} (Kopie)\" for German users.\r\n\r\nAny authenticated user.", - "operationId": "PostMeFilterCopyByFilterId", + "summary": "Sets a profile image from a previously uploaded file.", + "description": "After an image has been uploaded to an upload URL generated by the /files/generateuploadurl endpoint, this endpoint sets the uploaded image as the profile image of the agent by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostFilesImagesByUploadIdByAgentNameAndAgentId", "parameters": [ { - "name": "filterId", + "name": "agentId", "in": "path", - "description": "The identifier of the filter to copy.", "required": true, "schema": { "type": "string", @@ -13697,13 +14195,23 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadByUploadIdForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Filter" + "$ref": "#/components/schemas/FileInfo" } } } @@ -13727,16 +14235,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -13754,55 +14252,28 @@ } } }, - "/me/filters/{filterId}/{entityType}": { - "get": { + "/files/images/companies/{companyId}": { + "delete": { "tags": [ - "Filters" + "Images" ], - "summary": "Evaluates a filter by applying it to the specified target user type and returning the filtered results.\n Supports standard paging, ordering, and additional query constraints from query parameters.", - "description": "Retrieves and evaluates a saved filter to return matching entities.\r\n\r\nAny authenticated user.", - "operationId": "GetMeFilterByFilterIdAndUserType", + "summary": "Deletes the profile image of the company with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesImagesByCompanyNameAndCompanyId", "parameters": [ { - "name": "filterId", + "name": "companyId", "in": "path", - "description": "The identifier of the filter to evaluate.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "name": "entityType", - "in": "path", - "description": "The entity type name (tasks, projects, companies, users).", - "required": true, - "schema": { - "type": "string" - } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectPagedResult" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", @@ -13838,28 +14309,46 @@ "x-access": { "any": "true" } - } - }, - "/me/otherprivatetasks": { + }, "get": { "tags": [ - "PrivateTasks" + "Images" ], - "summary": "Returns reassigned private tasks.", - "description": "Returns private tasks originally created by the current user and later assigned to someone else.\r\n\r\nAny authenticated user.", - "operationId": "GetMeOtherPrivateTasks", + "summary": "Returns the image of the company with the specified id.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "GetFilesImagesByCompanyNameAndCompanyId", "parameters": [ { - "$ref": "#/components/parameters/page" + "name": "companyId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, { - "$ref": "#/components/parameters/pageSize" + "name": "width", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } }, { - "$ref": "#/components/parameters/orderby" + "name": "height", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } }, { - "$ref": "#/components/parameters/filterby" + "name": "crop", + "in": "query", + "schema": { + "type": "boolean" + } } ], "responses": { @@ -13868,10 +14357,28 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } + "type": "string", + "format": "binary" + } + } + } + }, + "304": { + "description": "Not Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -13908,23 +14415,20 @@ "v1" ], "x-access": { - "any": "true" + "anonymous": "true" } - } - }, - "/me/otherprivatetasks/{taskId}": { - "get": { + }, + "post": { "tags": [ - "PrivateTasks" + "Images" ], - "summary": "Returns a reassigned private task.", - "description": "Returns the specified private task when it was created by the current user and assigned to someone else.\r\n\r\nAny authenticated user.", - "operationId": "GetMeOtherPrivateTaskByTaskId", + "summary": "Uploads a new profile image.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesImagesByCompanyNameAndCompanyId", "parameters": [ { - "name": "taskId", + "name": "companyId", "in": "path", - "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -13932,19 +14436,28 @@ } } ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/FileUploadModel" + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskModel" + "$ref": "#/components/schemas/FileInfo" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -13953,8 +14466,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -13979,28 +14492,18 @@ } } }, - "/me/otherprivatetasks/{taskId}/checklistitems": { - "get": { + "/files/images/companies/{companyId}/byuploadid": { + "post": { "tags": [ - "ChecklistItems" + "Images" ], - "summary": "Returns the checklist items for a private task.", - "description": "Returns the checklist items for a private task. The checklist belongs to the specified private task. The user must be the creator of the task.", - "operationId": "GetMyOtherPrivateTaskChecklistItemsByUserIdAndTaskId", + "summary": "Sets a profile image from a previously uploaded file.", + "description": "After an image has been uploaded to an upload URL generated by the /files/generateuploadurl endpoint, this endpoint sets the uploaded image as the profile image of the company by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostFilesImagesByUploadIdByCompanyNameAndCompanyId", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskId", + "name": "companyId", "in": "path", - "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -14008,22 +14511,29 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadByUploadIdForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChecklistItem" - } + "$ref": "#/components/schemas/FileInfo" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -14032,8 +14542,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -14058,38 +14568,18 @@ } } }, - "/me/otherprivatetasks/{taskId}/checklistitems/{checklistItemId}": { - "get": { + "/files/images/projects/{projectId}": { + "delete": { "tags": [ - "ChecklistItems" + "Images" ], - "summary": "Returns a checklist item for a private task.", - "description": "Returns a checklist item for a private task. The checklist belongs to the specified private task. The user must be the creator of the task.", - "operationId": "GetMyOtherPrivateTaskChecklistItemByUserIdAndTaskIdAndChecklistItemId", + "summary": "Deletes the profile image of the project with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesImagesByProjectNameAndProjectId", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "checklistItemId", + "name": "projectId", "in": "path", - "description": "The id of the checklist item.", "required": true, "schema": { "type": "string", @@ -14098,15 +14588,8 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChecklistItem" - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", @@ -14142,23 +14625,66 @@ "x-access": { "any": "true" } - } - }, - "/me/permissions": { + }, "get": { "tags": [ - "Permissions" + "Images" ], - "summary": "Returns permissions for the current user.", - "description": "Returns the current user's permissions for the selected workspace.\r\n\r\nAny authenticated user.", - "operationId": "GetMePermissions", - "responses": { - "200": { - "description": "OK", - "content": { + "summary": "Returns the image of the project with the specified id.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "GetFilesImagesByProjectNameAndProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "width", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "height", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "crop", + "in": "query", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserPermissionInfoExternal" + "type": "string", + "format": "binary" + } + } + } + }, + "304": { + "description": "Not Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -14172,107 +14698,23 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/privatedocuments": { - "get": { - "tags": [ - "Documents" - ], - "summary": "Returns private documents for the current user.", - "description": "Returns private documents owned by the current user.\r\n\r\nAny authenticated user.", - "operationId": "GetMePrivateDocuments", - "parameters": [ - { - "$ref": "#/components/parameters/page" }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "$ref": "#/components/schemas/ErrorResponse" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/privatedocuments/trash": { - "get": { - "tags": [ - "Documents" - ], - "summary": "Returns trashed private documents.", - "description": "Returns private documents owned by the current user that are in the trash.\r\n\r\nAny authenticated user.", - "operationId": "GetMePrivateDocumentsTrash", - "parameters": [ - { - "$ref": "#/components/parameters/page" }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -14289,48 +14731,49 @@ "v1" ], "x-access": { - "any": "true" + "anonymous": "true" } - } - }, - "/me/privatetasks": { - "get": { + }, + "post": { "tags": [ - "PrivateTasks" + "Images" ], - "summary": "Returns private tasks for the current user.", - "description": "Returns all private tasks owned by the current user.\r\n\r\nAny authenticated user.", - "operationId": "GetMePrivateTasks", + "summary": "Uploads a new profile image.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesImagesByProjectNameAndProjectId", "parameters": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/FileUploadModel" + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } + "$ref": "#/components/schemas/FileInfo" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -14339,8 +14782,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -14365,28 +14808,45 @@ } } }, - "/me/privatetasks/deletetags": { + "/files/images/projects/{projectId}/byuploadid": { "post": { "tags": [ - "TaskTags" + "Images" + ], + "summary": "Sets a profile image from a previously uploaded file.", + "description": "After an image has been uploaded to an upload URL generated by the /files/generateuploadurl endpoint, this endpoint sets the uploaded image as the profile image of the project by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostFilesImagesByUploadIdByProjectNameAndProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Removes a tag from private tasks.", - "description": "Removes the submitted tag from the current user's private tasks.\r\n The user must have permission to edit the affected private tasks.", - "operationId": "PostMePrivateTasksDeleteTags", "requestBody": { - "description": "The model to remove the tag from all private tasks.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteTagForm" + "$ref": "#/components/schemas/UploadByUploadIdForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } }, "400": { "description": "Bad Request", @@ -14424,24 +14884,45 @@ } } }, - "/me/privatetasks/tags": { - "get": { + "/files/images/projecttemplates/{projecttemplateId}": { + "delete": { "tags": [ - "TaskTags" + "Images" + ], + "summary": "Deletes the profile image of the projecttemplate with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesImagesByProjectTemplateNameAndProjectTemplateId", + "parameters": [ + { + "name": "projecttemplateId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Returns tags for the user's private tasks.", - "description": "Returns tags assigned to the current user's private tasks, including their usage counts.\r\n The user must have permission to view the affected private tasks.", - "operationId": "GetMePrivateTasksTags", "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModelWithCount" - } + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -14460,37 +14941,46 @@ "x-access": { "any": "true" } - } - }, - "/me/privatetasks/taskstatuses": { + }, "get": { "tags": [ - "PrivateTasks" + "Images" ], - "summary": "Returns the task statuses for private tasks for the specified user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMyPrivateTaskStatuses", + "summary": "Returns the image of the projecttemplate with the specified id.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "GetFilesImagesByProjectTemplateNameAndProjectTemplateId", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", + "name": "projecttemplateId", + "in": "path", + "required": true, "schema": { "type": "string", "format": "uuid" } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" + "name": "width", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } }, { - "$ref": "#/components/parameters/orderby" + "name": "height", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } }, { - "$ref": "#/components/parameters/filterby" + "name": "crop", + "in": "query", + "schema": { + "type": "boolean" + } } ], "responses": { @@ -14499,56 +14989,22 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskStatus" - } + "type": "string", + "format": "binary" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/privatetasks/updatetags": { - "post": { - "tags": [ - "TaskTags" - ], - "summary": "Updates a tag for private tasks.", - "description": "Updates the submitted tag across the current user's private tasks.\r\n The user must have permission to edit the affected private tasks.", - "operationId": "PostMePrivateTasksUpdateTags", - "requestBody": { - "description": "The model to update the tag including the old and new tag names.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TagUpdateForm" + }, + "304": { + "description": "Not Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, - "207": { - "description": "Multi-Status" - }, "400": { "description": "Bad Request", "content": { @@ -14558,6 +15014,26 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -14571,23 +15047,20 @@ "v1" ], "x-access": { - "any": "true" + "anonymous": "true" } - } - }, - "/me/privatetasks/{taskId}": { - "get": { + }, + "post": { "tags": [ - "PrivateTasks" + "Images" ], - "summary": "Returns a private task for the current user.", - "description": "Returns the specified private task when it belongs to the current user.\r\n\r\nAny authenticated user.", - "operationId": "GetMePrivateTaskByTaskId", + "summary": "Uploads a new profile image.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesImagesByProjectTemplateNameAndProjectTemplateId", "parameters": [ { - "name": "taskId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -14595,19 +15068,28 @@ } } ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/FileUploadModel" + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskModel" + "$ref": "#/components/schemas/FileInfo" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -14616,8 +15098,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -14642,28 +15124,18 @@ } } }, - "/me/privatetasks/{taskId}/checklistitems": { - "get": { + "/files/images/projecttemplates/{projecttemplateId}/byuploadid": { + "post": { "tags": [ - "ChecklistItems" + "Images" ], - "summary": "Returns the checklist for a private task.", - "description": "Returns the checklist for a private task. The checklist belongs to the specified private task. The user must be be assigned to the task.", - "operationId": "GetMyPrivateTaskChecklistItemsByUserIdAndTaskId", + "summary": "Sets a profile image from a previously uploaded file.", + "description": "After an image has been uploaded to an upload URL generated by the /files/generateuploadurl endpoint, this endpoint sets the uploaded image as the profile image of the projecttemplate by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostFilesImagesByUploadIdByProjectTemplateNameAndProjectTemplateId", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -14671,22 +15143,29 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadByUploadIdForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChecklistItem" - } + "$ref": "#/components/schemas/FileInfo" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -14695,8 +15174,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -14721,38 +15200,18 @@ } } }, - "/me/privatetasks/{taskId}/checklistitems/{checklistItemId}": { - "get": { + "/files/images/users/{userId}": { + "delete": { "tags": [ - "ChecklistItems" + "Images" ], - "summary": "Returns a checklist item from a private task.", - "description": "Returns a checklist item from a private task. The checklist belongs to the specified private task. The user must be assigned to the task.", - "operationId": "GetMyPrivateTaskChecklistItemByUserIdAndTaskIdAndChecklistItemId", + "summary": "Deletes the profile image of the user with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesImagesByUserNameAndUserId", "parameters": [ { "name": "userId", - "in": "query", - "description": "The id of the user.", - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "checklistItemId", "in": "path", - "description": "The id of the checklist item to retrieve.", "required": true, "schema": { "type": "string", @@ -14761,15 +15220,8 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChecklistItem" - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", @@ -14805,28 +15257,46 @@ "x-access": { "any": "true" } - } - }, - "/me/projecttasks": { + }, "get": { "tags": [ - "ProjectTasks" + "Images" ], - "summary": "Returns project tasks for the current user.", - "description": "Returns project tasks visible to the current user.\r\n The user must have `project-planning-data:read` permission; otherwise only assigned tasks are returned.", - "operationId": "GetMeProjectTasks", + "summary": "Returns the image of the user with the specified id.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "GetFilesImagesByUserNameAndUserId", "parameters": [ { - "$ref": "#/components/parameters/page" + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, { - "$ref": "#/components/parameters/pageSize" + "name": "width", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } }, { - "$ref": "#/components/parameters/orderby" + "name": "height", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } }, { - "$ref": "#/components/parameters/filterby" + "name": "crop", + "in": "query", + "schema": { + "type": "boolean" + } } ], "responses": { @@ -14835,114 +15305,38 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } + "type": "string", + "format": "binary" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/shareddocuments": { - "get": { - "tags": [ - "Documents" - ], - "summary": "Returns documents shared with the current user.", - "description": "Returns documents shared directly or through project or document-space membership. Private documents are excluded.\r\n The user must have at least `read` permission for each returned document.", - "operationId": "GetMeSharedDocuments", - "parameters": [ - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", + "304": { + "description": "Not Modified", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "$ref": "#/components/schemas/ErrorResponse" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/sharedfilters": { - "get": { - "tags": [ - "Filters" - ], - "summary": "Returns filters explicitly shared with the current user.", - "description": "Returns filters where the requesting user has been granted explicit access through user permissions,\r\n team permissions, or workspace-wide filter permissions.\r\n Excludes filters owned by the requesting user.\r\n\r\nAny authenticated user.", - "operationId": "GetMeSharedFilters", - "parameters": [ - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" }, - { - "$ref": "#/components/parameters/orderby" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Filter" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -14969,57 +15363,49 @@ "v1" ], "x-access": { - "any": "true" + "anonymous": "true" } - } - }, - "/me/sharedfilters/{entityType}": { - "get": { + }, + "post": { "tags": [ - "Filters" + "Images" ], - "summary": "Returns filters explicitly shared with the current user for the specified user type.", - "description": "Returns filters where the requesting user has been granted explicit access through user permissions,\r\n team permissions, or workspace-wide filter permissions and that match the requested user type.\r\n Excludes filters owned by the requesting user.\r\n\r\nAny authenticated user.", - "operationId": "GetMeSharedFiltersByUserType", + "summary": "Uploads a new profile image.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesImagesByUserNameAndUserId", "parameters": [ { - "name": "entityType", + "name": "userId", "in": "path", - "description": "The entity type route value.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/FileUploadModel" + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Filter" - } + "$ref": "#/components/schemas/FileInfo" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -15027,41 +15413,13 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/tasks/tags": { - "get": { - "tags": [ - "AssignedTasks" - ], - "summary": "Returns tags for tasks visible to the user.", - "description": "Returns tags assigned to tasks visible to the current user. Tags can be filtered by task properties.\r\n The user must have permission to view the affected tasks.", - "operationId": "GetMeTasksTags", - "responses": { - "200": { - "description": "OK", + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -15082,38 +15440,65 @@ } } }, - "/me/timeentries/last": { - "get": { + "/files/images/users/{userId}/byuploadid": { + "post": { "tags": [ - "TimeEntries" + "Images" ], - "summary": "Returns the last time entry of a specified user.", - "description": "The last time entry is always the last one that was started.\r\n Time entries which are started in the future are ignored.\r\n If a time entry does not have a start time, 12.00 am is automatically assumed as the start time\r\n for comparison with other time entries from the same day.\r\n\r\nThe user must be an admin or the creator.", - "operationId": "GetMyLastTimeEntries", + "summary": "Sets a profile image from a previously uploaded file.", + "description": "After an image has been uploaded to an upload URL generated by the /files/generateuploadurl endpoint, this endpoint sets the uploaded image as the profile image of the user by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostFilesImagesByUploadIdByUserNameAndUserId", "parameters": [ { "name": "userId", - "in": "query", - "description": "The id of the user.", + "in": "path", + "required": true, "schema": { "type": "string", "format": "uuid" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadByUploadIdForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "$ref": "#/components/schemas/FileInfo" } } } }, - "204": { - "description": "No Content" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -15127,24 +15512,23 @@ "v1" ], "x-access": { - "admin": "true", - "owner": "true" + "any": "true" } } }, - "/me/timetracking/pause": { - "post": { + "/files/images/workspaces/{workspaceId}": { + "delete": { "tags": [ - "TimeTracking" + "Images" ], - "summary": "Pauses a running time tracking for a user.", - "description": "If there is already a paused time tracking nothing happens. If there is no running time tracking, returns NoContent.\r\n\r\nThe user must be the creator.", - "operationId": "PostPauseMyTimeTracking", + "summary": "Deletes the profile image of the workspace with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesImagesByWorkspaceNameAndWorkspaceId", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", + "name": "workspaceId", + "in": "path", + "required": true, "schema": { "type": "string", "format": "uuid" @@ -15152,18 +15536,28 @@ } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "204": { - "description": "No Content" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -15177,27 +15571,48 @@ "v1" ], "x-access": { - "owner": "true" + "any": "true" } - } - }, - "/me/timetracking/resume": { - "post": { + }, + "get": { "tags": [ - "TimeTracking" + "Images" ], - "summary": "Resumes a paused time tracking for a user.", - "description": "If there is already a running time tracking nothing happens. If there is no running time tracking, returns NoContent.\r\n\r\nThe user must be the creator.", - "operationId": "PostResumeMyTimeTracking", + "summary": "Returns the image of the workspace with the specified id.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "GetFilesImagesByWorkspaceNameAndWorkspaceId", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", + "name": "workspaceId", + "in": "path", + "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "width", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "height", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "crop", + "in": "query", + "schema": { + "type": "boolean" + } } ], "responses": { @@ -15206,13 +15621,51 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "type": "string", + "format": "binary" } } } }, - "204": { - "description": "No Content" + "304": { + "description": "Not Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -15226,23 +15679,21 @@ "v1" ], "x-access": { - "owner": "true" + "anonymous": "true" } - } - }, - "/me/timetracking/start": { + }, "post": { "tags": [ - "TimeTracking" + "Images" ], - "summary": "Starts a new time tracking for a user.", - "description": "If there is already a running/paused time tracking it will be stopped automatically in order to start the new one.\r\n\r\nThe user must be an admin or the creator.", - "operationId": "PostStartMyTimeTracking", + "summary": "Uploads a new profile image.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesImagesByWorkspaceNameAndWorkspaceId", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", + "name": "workspaceId", + "in": "path", + "required": true, "schema": { "type": "string", "format": "uuid" @@ -15250,15 +15701,13 @@ } ], "requestBody": { - "description": "The model describing the time tracking to start.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/StartTimeTrackingForm" + "$ref": "#/components/schemas/FileUploadModel" } } - }, - "required": true + } }, "responses": { "200": { @@ -15266,7 +15715,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -15283,24 +15752,23 @@ "v1" ], "x-access": { - "admin": "true", - "owner": "true" + "any": "true" } } }, - "/me/timetracking/stop": { + "/files/images/workspaces/{workspaceId}/byuploadid": { "post": { "tags": [ - "TimeTracking" + "Images" ], - "summary": "Stops the currently running time tracking of the specified user.", - "description": "The request body is optional. You can provide a stopReason to indicate how the tracking was stopped.\r\n For external API clients, the stopReason is automatically set to \"external-api\" regardless of what is provided.\r\n For this operation to work there must be a running time tracking for the user.\r\n\r\nThe user must be an admin or the creator.", - "operationId": "PostStopMyTimeTracking", + "summary": "Sets a profile image from a previously uploaded file.", + "description": "After an image has been uploaded to an upload URL generated by the /files/generateuploadurl endpoint, this endpoint sets the uploaded image as the profile image of the workspace by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostFilesImagesByUploadIdByWorkspaceNameAndWorkspaceId", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", + "name": "workspaceId", + "in": "path", + "required": true, "schema": { "type": "string", "format": "uuid" @@ -15311,10 +15779,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/StopTimeTrackingForm" + "$ref": "#/components/schemas/UploadByUploadIdForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -15322,13 +15791,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "$ref": "#/components/schemas/FileInfo" } } } }, - "204": { - "description": "No Content" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -15342,74 +15828,9160 @@ "v1" ], "x-access": { - "admin": "true", - "owner": "true" + "any": "true" } } }, - "/permissions/features": { + "/files/images/{entityType}": { "get": { "tags": [ - "Permissions" + "SharedFiles" + ], + "summary": "Returns the public profile image.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "GetFilesImagesByEntityType", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "The entity type for which we are requesting the image.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "token", + "in": "query", + "description": "The token to allow access.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "anonymous": "true" + } + } + }, + "/files/{fileId}/download": { + "get": { + "tags": [ + "Files" + ], + "summary": "Returns the latest content of the specified file and supports range requests.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesDownloadByFileId", + "parameters": [ + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "width", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "height", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "crop", + "in": "query", + "schema": { + "type": "boolean" + } + }, + { + "name": "enlarge", + "in": "query", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "inline", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "206": { + "description": "Partial Content", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "416": { + "description": "Range Not Satisfiable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/files/{fileId}/pdf": { + "get": { + "tags": [ + "Files" + ], + "summary": "Returns the latest version of the specified file as PDF.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesPdfByFileId", + "parameters": [ + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "inline", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/filters": { + "get": { + "tags": [ + "Filters" + ], + "summary": "Returns the current user's filters.", + "description": "Returns the union of filters owned by the requesting user and filters explicitly shared with the requesting user.\r\n Use the specialized created-by-me and shared-with-me endpoints when only one category is needed.\r\n\r\nAny authenticated user.", + "operationId": "GetFilters", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Filter" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/filters/{entityType}": { + "get": { + "tags": [ + "Filters" + ], + "summary": "Returns the current user's filters for the specified user type.", + "description": "Returns the union of filters owned by the requesting user and filters explicitly shared with the requesting user\r\n for the requested user type.\r\n Use the specialized created-by-me and shared-with-me endpoints when only one category is needed.\r\n\r\nAny authenticated user.", + "operationId": "GetFiltersByUserType", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "The entity type route value.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Filter" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/filters/{entityType}/evaluate": { + "post": { + "tags": [ + "Filters" + ], + "summary": "Evaluates a filter definition against the specified user type and returns the filtered results without saving the filter.\n This endpoint is designed for quick filters where the frontend builds a FilterDefinition dynamically\n and needs to evaluate it immediately without persisting it to the database.\n Supports standard paging, ordering, and additional query constraints from query parameters.", + "description": "Evaluates an ad-hoc filter without persisting it. Useful for testing filters before saving or for temporary filtering needs.\r\n\r\nAny authenticated user.", + "operationId": "PostFilterEvaluateByUserType", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "The entity type name (tasks, projects, companies, users).", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "The filter application form containing the FilterDefinition to evaluate.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApplyFilterForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ObjectPagedResult" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/filters/{filterId}/contributors": { + "post": { + "tags": [ + "Filters" + ], + "summary": "Adds explicit contributors to the specified filter.", + "description": "Adding filter contributors grants explicit access to the filter with the specified access levels.\r\n Existing explicit contributors are ignored and therefore not recreated.\r\n The filter creator cannot be added as an explicit contributor because ownership is handled implicitly.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", + "operationId": "PostFilterContributorsByFilterId", + "parameters": [ + { + "name": "filterId", + "in": "path", + "description": "The filter that should receive explicit contributors.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The contributor permissions to add.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContributorPostForm" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MinimalContributorModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/filters/{filterId}/contributors/{filterContributorId}": { + "delete": { + "tags": [ + "Filters" + ], + "summary": "Removes an explicit contributor from the specified filter.", + "description": "Removing a filter contributor revokes that contributor's explicit access to the filter.\r\n The contributor entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", + "operationId": "DeleteFilterContributorByFilterIdAndFilterContributorId", + "parameters": [ + { + "name": "filterId", + "in": "path", + "description": "The filter that owns the contributor entry.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "filterContributorId", + "in": "path", + "description": "The contributor entry to delete.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "Filters" + ], + "summary": "Updates the access level of an explicit filter contributor.", + "description": "Updating a filter contributor changes that contributor's explicit access level for the filter.\r\n The contributor entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", + "operationId": "PutFilterContributorByFilterIdAndFilterContributorId", + "parameters": [ + { + "name": "filterId", + "in": "path", + "description": "The filter that owns the contributor entry.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "filterContributorId", + "in": "path", + "description": "The contributor entry to update.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The new contributor permission payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContributorForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MinimalContributorModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/filters/{filterId}/teams": { + "post": { + "tags": [ + "Filters" + ], + "summary": "Adds explicit team permissions to the specified filter.", + "description": "Adding filter teams grants explicit access to the filter for all members of the specified teams.\r\n Existing explicit team permissions are ignored and therefore not recreated.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", + "operationId": "PostFilterTeamsByFilterId", + "parameters": [ + { + "name": "filterId", + "in": "path", + "description": "The filter that should receive explicit team permissions.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The team permissions to add.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityToTeamPostForm" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MinimalEntityToTeamModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/filters/{filterId}/teams/{filterToTeamId}": { + "delete": { + "tags": [ + "Filters" + ], + "summary": "Removes an explicit team permission from the specified filter.", + "description": "Removing a filter team permission revokes that team's explicit access to the filter.\r\n The team permission entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", + "operationId": "DeleteFilterTeamByFilterIdAndFilterToTeamId", + "parameters": [ + { + "name": "filterId", + "in": "path", + "description": "The filter that owns the team permission entry.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "filterToTeamId", + "in": "path", + "description": "The team permission entry to delete.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "Filters" + ], + "summary": "Updates the access level of an explicit team permission on the specified filter.", + "description": "Updating a filter team permission changes the explicit access level of the referenced team for the filter.\r\n The team permission entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", + "operationId": "PutFilterTeamByFilterIdAndFilterToTeamId", + "parameters": [ + { + "name": "filterId", + "in": "path", + "description": "The filter that owns the team permission entry.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "filterToTeamId", + "in": "path", + "description": "The team permission entry to update.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The new team permission payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityToTeamForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MinimalEntityToTeamModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/invitations": { + "get": { + "tags": [ + "Invitations" + ], + "summary": "Prevents GET requests to the invitations route from throwing errors.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "GetInvitations", + "responses": { + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "anonymous": "true" + } + }, + "post": { + "tags": [ + "Invitations" + ], + "summary": "Invites a user to a workspace.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "PostInvitations", + "requestBody": { + "description": "The invitation details.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Invitation" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvitationResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "anonymous": "true" + } + } + }, + "/invitations/accept": { + "post": { + "tags": [ + "Invitations" + ], + "summary": "Accepts an invitation using its invitation code.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "PostInvitationsAccept", + "requestBody": { + "description": "The invitation code and optional referral code.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AcceptInvitation" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK" + }, + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "anonymous": "true" + } + } + }, + "/me": { + "get": { + "tags": [ + "Users" + ], + "summary": "Returns the current user and workspace.", + "description": "Returns the current user's profile together with the selected workspace.\r\n\r\nAny authenticated user.", + "operationId": "GetMe", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserAndWorkspace" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/allavailabletasks": { + "get": { + "tags": [ + "AssignedTasks" + ], + "summary": "Returns tasks visible to the current user.", + "description": "Returns tasks available to the current user and removes time details when the user lacks the related time-tracking access.\r\n The user must have at least `read` permission for each returned task.", + "operationId": "GetMeAllAvailableTasks", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskModel" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/assignedtasks": { + "get": { + "tags": [ + "AssignedTasks" + ], + "summary": "Returns tasks assigned to the current user.", + "description": "Returns tasks assigned to the current user. Use the assignment date range or `inProgress` to narrow the result.\r\n The user must have permission to view each returned task.", + "operationId": "GetMeAssignedTasks", + "parameters": [ + { + "name": "inProgress", + "in": "query", + "description": "Whether to return only assigned project tasks of running projects. Defaults to true.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "assignedOnFrom", + "in": "query", + "description": "The start date for filtering by assignment date. If set, tasks are returned only when the assignment date is greater or equal than this value.", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "assignedOnTo", + "in": "query", + "description": "The end date for filtering by assignment date. If set, tasks are returned only when the assignment date is less or equal than this value.", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/assignedtasks/{taskId}": { + "get": { + "tags": [ + "AssignedTasks" + ], + "summary": "Returns an assigned task for the current user.", + "description": "Returns the specified task when it is assigned to the current user. Time-tracking details are included only when permitted.\r\n The user must have permission to view the assigned task.", + "operationId": "GetMeAssignedTaskByTaskId", + "parameters": [ + { + "name": "taskId", + "in": "path", + "description": "The id of the task to return.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskModel" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/dashboards": { + "get": { + "tags": [ + "Dashboards" + ], + "summary": "Returns dashboards for the current user.", + "description": "Returns dashboards for the current user. Set `includeWidgets` to include widget details. A default dashboard is created when none exists.\r\n\r\nThe user must be the creator.", + "operationId": "GetMeDashboards", + "parameters": [ + { + "name": "includeWidgets", + "in": "query", + "description": "Include widgets.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Dashboard" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "owner": "true" + } + } + }, + "/me/filters": { + "get": { + "tags": [ + "Filters" + ], + "summary": "Returns the filters created by the current user.", + "description": "Returns filters that were created by and are owned by the requesting user.\r\n Shared filters are excluded, even if the requesting user also has explicit access through contributor, team, or workspace permissions.\r\n\r\nAny authenticated user.", + "operationId": "GetMeFilters", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Filter" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/filters/{entityType}": { + "get": { + "tags": [ + "Filters" + ], + "summary": "Returns the filters created by the current user for the specified user type.", + "description": "Returns filters that were created by and are owned by the requesting user and match the requested user type.\r\n Shared filters are excluded, even if the requesting user also has explicit access through contributor, team, or workspace permissions.\r\n\r\nAny authenticated user.", + "operationId": "GetMeFiltersByUserType", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "The entity type route value.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Filter" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "Filters" + ], + "summary": "Creates a persisted filter definition for the specified user type.", + "description": "Creates a new filter owned by the current user.\r\n\r\nAny authenticated user.", + "operationId": "PostMeFilterByUserType", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "Route segment identifying the entity type (tasks, projects, companies, users).", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "The filter definition payload supplied by the caller.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FilterForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Filter" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/filters/{entityType}/fromquery": { + "post": { + "tags": [ + "Filters" + ], + "summary": "Creates a persisted filter from an OData query string.\n Convenience endpoint for external API consumers who want to create filters using familiar OData syntax.", + "description": "Creates a filter from an OData filterby query string.\r\n\r\nAny authenticated user.", + "operationId": "PostMeFilterFromQueryByUserType", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "Route segment identifying the entity type (tasks, projects, companies, users).", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "The filter query payload containing the filter name, sharing settings, and query string.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FilterFromQueryForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Filter" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/filters/{filterId}": { + "delete": { + "tags": [ + "Filters" + ], + "summary": "Deletes a filter.", + "description": "Deletes the filter when the current user has manage access.\r\n\r\nAny authenticated user.", + "operationId": "DeleteMeFilterById", + "parameters": [ + { + "name": "filterId", + "in": "path", + "description": "Identifier of the filter to delete.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "get": { + "tags": [ + "Filters" + ], + "summary": "Returns a single filter by its identifier for the current user.", + "description": "Returns the filter if the current user has read access.\r\n\r\nAny authenticated user.", + "operationId": "GetMeFilterById", + "parameters": [ + { + "name": "filterId", + "in": "path", + "description": "The filter identifier.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Filter" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "Filters" + ], + "summary": "Updates an existing filter definition.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PutMeFilterById", + "parameters": [ + { + "name": "filterId", + "in": "path", + "description": "Identifier of the filter to update.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The updated filter definition supplied by the caller.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FilterForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Filter" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/filters/{filterId}/copy": { + "post": { + "tags": [ + "Filters" + ], + "summary": "Creates a copy of an existing filter.", + "description": "Copies the filter definition and query.\r\n The copied filter will be owned only by the requesting user.\r\n The name of the copied filter will be \"{original name} (Copy)\" or \"{original name} (Kopie)\" for German users.\r\n\r\nAny authenticated user.", + "operationId": "PostMeFilterCopyByFilterId", + "parameters": [ + { + "name": "filterId", + "in": "path", + "description": "The identifier of the filter to copy.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Filter" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/filters/{filterId}/{entityType}": { + "get": { + "tags": [ + "Filters" + ], + "summary": "Evaluates a filter by applying it to the specified target user type and returning the filtered results.\n Supports standard paging, ordering, and additional query constraints from query parameters.", + "description": "Retrieves and evaluates a saved filter to return matching entities.\r\n\r\nAny authenticated user.", + "operationId": "GetMeFilterByFilterIdAndUserType", + "parameters": [ + { + "name": "filterId", + "in": "path", + "description": "The identifier of the filter to evaluate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "entityType", + "in": "path", + "description": "The entity type name (tasks, projects, companies, users).", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ObjectPagedResult" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/otherprivatetasks": { + "get": { + "tags": [ + "PrivateTasks" + ], + "summary": "Returns reassigned private tasks.", + "description": "Returns private tasks originally created by the current user and later assigned to someone else.\r\n\r\nAny authenticated user.", + "operationId": "GetMeOtherPrivateTasks", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/otherprivatetasks/{taskId}": { + "get": { + "tags": [ + "PrivateTasks" + ], + "summary": "Returns a reassigned private task.", + "description": "Returns the specified private task when it was created by the current user and assigned to someone else.\r\n\r\nAny authenticated user.", + "operationId": "GetMeOtherPrivateTaskByTaskId", + "parameters": [ + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/otherprivatetasks/{taskId}/checklistitems": { + "get": { + "tags": [ + "ChecklistItems" + ], + "summary": "Returns the checklist items for a private task.", + "description": "Returns the checklist items for a private task. The checklist belongs to the specified private task. The user must be the creator of the task.", + "operationId": "GetMyOtherPrivateTaskChecklistItemsByUserIdAndTaskId", + "parameters": [ + { + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChecklistItem" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/otherprivatetasks/{taskId}/checklistitems/{checklistItemId}": { + "get": { + "tags": [ + "ChecklistItems" + ], + "summary": "Returns a checklist item for a private task.", + "description": "Returns a checklist item for a private task. The checklist belongs to the specified private task. The user must be the creator of the task.", + "operationId": "GetMyOtherPrivateTaskChecklistItemByUserIdAndTaskIdAndChecklistItemId", + "parameters": [ + { + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "checklistItemId", + "in": "path", + "description": "The id of the checklist item.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChecklistItem" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/permissions": { + "get": { + "tags": [ + "Permissions" + ], + "summary": "Returns permissions for the current user.", + "description": "Returns the current user's permissions for the selected workspace.\r\n\r\nAny authenticated user.", + "operationId": "GetMePermissions", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserPermissionInfoExternal" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/privatedocuments": { + "get": { + "tags": [ + "Documents" + ], + "summary": "Returns private documents for the current user.", + "description": "Returns private documents owned by the current user.\r\n\r\nAny authenticated user.", + "operationId": "GetMePrivateDocuments", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentModel" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/privatedocuments/trash": { + "get": { + "tags": [ + "Documents" + ], + "summary": "Returns trashed private documents.", + "description": "Returns private documents owned by the current user that are in the trash.\r\n\r\nAny authenticated user.", + "operationId": "GetMePrivateDocumentsTrash", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentModel" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/privatetasks": { + "get": { + "tags": [ + "PrivateTasks" + ], + "summary": "Returns private tasks for the current user.", + "description": "Returns all private tasks owned by the current user.\r\n\r\nAny authenticated user.", + "operationId": "GetMePrivateTasks", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/privatetasks/deletetags": { + "post": { + "tags": [ + "TaskTags" + ], + "summary": "Removes a tag from private tasks.", + "description": "Removes the submitted tag from the current user's private tasks.\r\n The user must have permission to edit the affected private tasks.", + "operationId": "PostMePrivateTasksDeleteTags", + "requestBody": { + "description": "The model to remove the tag from all private tasks.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteTagForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/privatetasks/tags": { + "get": { + "tags": [ + "TaskTags" + ], + "summary": "Returns tags for the user's private tasks.", + "description": "Returns tags assigned to the current user's private tasks, including their usage counts.\r\n The user must have permission to view the affected private tasks.", + "operationId": "GetMePrivateTasksTags", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModelWithCount" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/privatetasks/taskstatuses": { + "get": { + "tags": [ + "PrivateTasks" + ], + "summary": "Returns the task statuses for private tasks for the specified user.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetMyPrivateTaskStatuses", + "parameters": [ + { + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskStatus" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/privatetasks/updatetags": { + "post": { + "tags": [ + "TaskTags" + ], + "summary": "Updates a tag for private tasks.", + "description": "Updates the submitted tag across the current user's private tasks.\r\n The user must have permission to edit the affected private tasks.", + "operationId": "PostMePrivateTasksUpdateTags", + "requestBody": { + "description": "The model to update the tag including the old and new tag names.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagUpdateForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "207": { + "description": "Multi-Status" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/privatetasks/{taskId}": { + "get": { + "tags": [ + "PrivateTasks" + ], + "summary": "Returns a private task for the current user.", + "description": "Returns the specified private task when it belongs to the current user.\r\n\r\nAny authenticated user.", + "operationId": "GetMePrivateTaskByTaskId", + "parameters": [ + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/privatetasks/{taskId}/checklistitems": { + "get": { + "tags": [ + "ChecklistItems" + ], + "summary": "Returns the checklist for a private task.", + "description": "Returns the checklist for a private task. The checklist belongs to the specified private task. The user must be be assigned to the task.", + "operationId": "GetMyPrivateTaskChecklistItemsByUserIdAndTaskId", + "parameters": [ + { + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChecklistItem" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/privatetasks/{taskId}/checklistitems/{checklistItemId}": { + "get": { + "tags": [ + "ChecklistItems" + ], + "summary": "Returns a checklist item from a private task.", + "description": "Returns a checklist item from a private task. The checklist belongs to the specified private task. The user must be assigned to the task.", + "operationId": "GetMyPrivateTaskChecklistItemByUserIdAndTaskIdAndChecklistItemId", + "parameters": [ + { + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "checklistItemId", + "in": "path", + "description": "The id of the checklist item to retrieve.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChecklistItem" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/projecttasks": { + "get": { + "tags": [ + "ProjectTasks" + ], + "summary": "Returns project tasks for the current user.", + "description": "Returns project tasks visible to the current user.\r\n The user must have `project-planning-data:read` permission; otherwise only assigned tasks are returned.", + "operationId": "GetMeProjectTasks", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskModel" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/shareddocuments": { + "get": { + "tags": [ + "Documents" + ], + "summary": "Returns documents shared with the current user.", + "description": "Returns documents shared directly or through project or document-space membership. Private documents are excluded.\r\n The user must have at least `read` permission for each returned document.", + "operationId": "GetMeSharedDocuments", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentModel" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/sharedfilters": { + "get": { + "tags": [ + "Filters" + ], + "summary": "Returns filters explicitly shared with the current user.", + "description": "Returns filters where the requesting user has been granted explicit access through user permissions,\r\n team permissions, or workspace-wide filter permissions.\r\n Excludes filters owned by the requesting user.\r\n\r\nAny authenticated user.", + "operationId": "GetMeSharedFilters", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Filter" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/sharedfilters/{entityType}": { + "get": { + "tags": [ + "Filters" + ], + "summary": "Returns filters explicitly shared with the current user for the specified user type.", + "description": "Returns filters where the requesting user has been granted explicit access through user permissions,\r\n team permissions, or workspace-wide filter permissions and that match the requested user type.\r\n Excludes filters owned by the requesting user.\r\n\r\nAny authenticated user.", + "operationId": "GetMeSharedFiltersByUserType", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "The entity type route value.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Filter" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/tasks/tags": { + "get": { + "tags": [ + "AssignedTasks" + ], + "summary": "Returns tags for tasks visible to the user.", + "description": "Returns tags assigned to tasks visible to the current user. Tags can be filtered by task properties.\r\n The user must have permission to view the affected tasks.", + "operationId": "GetMeTasksTags", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/timeentries/last": { + "get": { + "tags": [ + "TimeEntries" + ], + "summary": "Returns the last time entry of a specified user.", + "description": "The last time entry is always the last one that was started.\r\n Time entries which are started in the future are ignored.\r\n If a time entry does not have a start time, 12.00 am is automatically assumed as the start time\r\n for comparison with other time entries from the same day.\r\n\r\nThe user must be an admin or the creator.", + "operationId": "GetMyLastTimeEntries", + "parameters": [ + { + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TimeTracking" + } + } + } + }, + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "owner": "true" + } + } + }, + "/me/timetracking/pause": { + "post": { + "tags": [ + "TimeTracking" + ], + "summary": "Pauses a running time tracking for a user.", + "description": "If there is already a paused time tracking nothing happens. If there is no running time tracking, returns NoContent.\r\n\r\nThe user must be the creator.", + "operationId": "PostPauseMyTimeTracking", + "parameters": [ + { + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TimeTracking" + } + } + } + }, + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "owner": "true" + } + } + }, + "/me/timetracking/resume": { + "post": { + "tags": [ + "TimeTracking" + ], + "summary": "Resumes a paused time tracking for a user.", + "description": "If there is already a running time tracking nothing happens. If there is no running time tracking, returns NoContent.\r\n\r\nThe user must be the creator.", + "operationId": "PostResumeMyTimeTracking", + "parameters": [ + { + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TimeTracking" + } + } + } + }, + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "owner": "true" + } + } + }, + "/me/timetracking/start": { + "post": { + "tags": [ + "TimeTracking" + ], + "summary": "Starts a new time tracking for a user.", + "description": "If there is already a running/paused time tracking it will be stopped automatically in order to start the new one.\r\n\r\nThe user must be an admin or the creator.", + "operationId": "PostStartMyTimeTracking", + "parameters": [ + { + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model describing the time tracking to start.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StartTimeTrackingForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TimeTracking" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "owner": "true" + } + } + }, + "/me/timetracking/stop": { + "post": { + "tags": [ + "TimeTracking" + ], + "summary": "Stops the currently running time tracking of the specified user.", + "description": "The request body is optional. You can provide a stopReason to indicate how the tracking was stopped.\r\n For external API clients, the stopReason is automatically set to \"external-api\" regardless of what is provided.\r\n For this operation to work there must be a running time tracking for the user.\r\n\r\nThe user must be an admin or the creator.", + "operationId": "PostStopMyTimeTracking", + "parameters": [ + { + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StopTimeTrackingForm" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TimeTracking" + } + } + } + }, + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "owner": "true" + } + } + }, + "/permissions/features": { + "get": { + "tags": [ + "Permissions" + ], + "summary": "Returns available workspace features.", + "description": "Returns feature keys available in the selected workspace, including AI features when available to the workspace.\r\n\r\nAny authenticated user.", + "operationId": "GetPermissionsFeatures", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + "https://www.awork.com" + ] + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/permissions/projectfeatures": { + "get": { + "tags": [ + "Permissions" + ], + "summary": "Returns available project features.", + "description": "Returns project feature keys available in the selected workspace, including AI features when available to the workspace.\r\n\r\nAny authenticated user.", + "operationId": "GetPermissionsProjectFeatures", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + "https://www.awork.com" + ] + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projectmilestones": { + "get": { + "tags": [ + "ProjectMilestones" + ], + "summary": "Returns visible project milestones.", + "description": "Returns project milestones visible to the current user.\r\n The user must have `project-planning-data:read` permission for each returned project.", + "operationId": "GetProjectMilestones", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectMilestone" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "ProjectMilestones" + ], + "summary": "Creates a project milestone.", + "description": "Creates a milestone in the specified project.\r\n The user must be the project creator or have `project-planning-data:write` permission for the project.", + "operationId": "PostProjectMilestone", + "requestBody": { + "description": "The model containing milestone details.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectMilestonePostForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectMilestone" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projectmilestones/{milestoneId}": { + "get": { + "tags": [ + "ProjectMilestones" + ], + "summary": "Returns the specified project milestone.", + "description": "Returns the specified milestone when its project is visible to the current user.\r\n The user must have `project-planning-data:read` permission for the project.", + "operationId": "GetProjectMilestoneByMilestoneId", + "parameters": [ + { + "name": "milestoneId", + "in": "path", + "description": "The id of the milestone.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectMilestone" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projectmilestones/{projectMilestoneId}": { + "delete": { + "tags": [ + "ProjectMilestones" + ], + "summary": "Deletes the specified project milestone.", + "description": "Deletes the specified milestone from its project.\r\n The user must be the project creator or have `project-planning-data:write` permission for the project.", + "operationId": "DeleteProjectMilestoneById", + "parameters": [ + { + "name": "projectMilestoneId", + "in": "path", + "description": "The id of the project milestone to delete.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "ProjectMilestones" + ], + "summary": "Updates the specified project milestone.", + "description": "Updates the specified milestone in its project.\r\n The user must be the project creator or have `project-planning-data:write` permission for the project.", + "operationId": "PutProjectMilestoneById", + "parameters": [ + { + "name": "projectMilestoneId", + "in": "path", + "description": "The id of the project milestone.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model containing milestone details.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectMilestonePutForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectMilestone" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projectroles": { + "get": { + "tags": [ + "ProjectRoles" + ], + "summary": "Returns project roles in the workspace.", + "description": "Returns project roles in the workspace. Set `includeMembers` to include each role's members.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectRoles", + "parameters": [ + { + "name": "includeMembers", + "in": "query", + "description": "Whether to include the members of each project role in the response.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectRole" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "ProjectRoles" + ], + "summary": "Creates a project role.", + "description": "Creates a project role with the submitted name and settings.\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostProjectRole", + "requestBody": { + "description": "The model to create the project role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectRoleForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectRole" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "workspace-manage-config": "write" + }, + "x-subscriptionlevel": { + "minimumPlan": "standard" + } + } + }, + "/projectroles/byuserid/{userId}": { + "get": { + "tags": [ + "ProjectRoles" + ], + "summary": "Returns roles assigned to the specified user.", + "description": "Returns project roles assigned to the specified user in the workspace.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectRolesByUserIdByUserId", + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "The id of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectRole" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projectroles/{projectRoleId}": { + "get": { + "tags": [ + "ProjectRoles" + ], + "summary": "Returns the specified project role.", + "description": "Returns the project role with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectRoleById", + "parameters": [ + { + "name": "projectRoleId", + "in": "path", + "description": "The id of the project role.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectRole" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "ProjectRoles" + ], + "summary": "Updates the specified project role.", + "description": "Updates the specified role's name or default status. Changing the default role updates the previous default role.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PutProjectRoleById", + "parameters": [ + { + "name": "projectRoleId", + "in": "path", + "description": "The id of the project role.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model to update the project role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectRoleForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectRole" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "workspace-manage-config": "write" + } + } + }, + "/projectroles/{projectRoleId}/delete": { + "post": { + "tags": [ + "ProjectRoles" + ], + "summary": "Deletes a project role and migrates members.", + "description": "Deletes the specified project role and moves its members to the role selected in the request.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostProjectRoleDeleteByProjectRoleId", + "parameters": [ + { + "name": "projectRoleId", + "in": "path", + "description": "The id of the project role.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model to delete the project role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectRoleDeleteForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "workspace-manage-config": "write" + } + } + }, + "/projectroles/{projectRoleId}/permissions": { + "get": { + "tags": [ + "ProjectRoles" + ], + "summary": "Returns permissions for the specified project role.", + "description": "Returns permissions assigned to the specified project role. AI role permissions are included only when available to the workspace.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectRolePermissionsByProjectRoleId", + "parameters": [ + { + "name": "projectRoleId", + "in": "path", + "description": "The id of the project role.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PermissionOfProjectRole" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "ProjectRoles" + ], + "summary": "Updates a permission for a project role.", + "description": "Creates, updates, or removes the submitted permission for the specified project role. AI role permissions require an eligible workspace plan.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectRolePermissionsByProjectRoleId", + "parameters": [ + { + "name": "projectRoleId", + "in": "path", + "description": "The id of the project role.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model to create or update the project role permission.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PermissionOfProjectRoleForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PermissionOfProjectRole" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/projects": { + "get": { + "tags": [ + "Projects" + ], + "summary": "Returns projects visible to the current user.", + "description": "Returns projects visible to the current user.\r\n The user must have `read` permission for each returned project.", + "operationId": "GetProjects", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Project" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "Projects" + ], + "summary": "Creates a project.", + "description": "Creates a project in the selected workspace and returns it.\r\n\r\nThe user must be an admin or have `project-create:write` permissions.", + "operationId": "PostProject", + "requestBody": { + "description": "The model to create the project.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExtendedProjectForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-create": "write" + } + } + }, + "/projects/batch/{operation}": { + "post": { + "tags": [ + "Projects" + ], + "summary": "Applies an operation to selected projects.", + "description": "Applies the selected operation to each project and returns successful and failed results. Supported operations include changing status or type, linking workflows, updating clients, leads, dates, teams, and tags, and deleting projects.\r\n The user must have `write` permission for all projects and related entities modified by the operation.", + "operationId": "PostProjectsBatchByOperation", + "parameters": [ + { + "name": "operation", + "in": "path", + "description": "Batch operation route key.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Validated request body for the selected operation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectBatchOperationForm" + } + } + }, + "required": true + }, + "responses": { + "207": { + "description": "Multi-Status", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MultiStatusResult" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/deletetags": { + "post": { + "tags": [ + "ProjectTags" + ], + "summary": "Removes a tag from all projects.", + "description": "Removes the submitted tag from every project in the workspace.\r\n\r\nThe user must be an admin or have `project-master-data:write` permissions.", + "operationId": "PostProjectsDeleteTags", + "requestBody": { + "description": "The model to remove the tag from all projects.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteTagForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-master-data": "write" + } + } + }, + "/projects/key/{projectKey}": { + "get": { + "tags": [ + "Projects" + ], + "summary": "Returns the project with the specified key.", + "description": "Returns the project matching the specified key after normalizing its case and surrounding spaces.\r\n The user must have `project-master-data:read` permission for the project.", + "operationId": "GetProjectsKeyByProjectKey", + "parameters": [ + { + "name": "projectKey", + "in": "path", + "description": "The project key to lookup.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/projecttasks/tags": { + "get": { + "tags": [ + "ProjectTasks" + ], + "summary": "Returns tags for project tasks.", + "description": "Returns tags currently assigned to tasks in projects visible to the current user.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectsProjectTasksTags", + "parameters": [ + { + "name": "projectId", + "in": "query", + "description": "The id of the project to filter tags by. Returns tags of all projects if not provided.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/tags": { + "get": { + "tags": [ + "ProjectTags" + ], + "summary": "Returns tags used by projects.", + "description": "Returns tags currently assigned to projects.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectsTags", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModelWithCount" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/updatetags": { + "post": { + "tags": [ + "ProjectTags" + ], + "summary": "Updates a tag for all projects.", + "description": "Updates a tag across all projects. The submitted options can rename or merge the tag.\r\n\r\nThe user must be an admin or have `project-master-data:write` permissions.", + "operationId": "PostProjectsUpdateTags", + "requestBody": { + "description": "The model containing the tag updates.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagUpdateForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-master-data": "write" + } + } + }, + "/projects/{projectId}": { + "get": { + "tags": [ + "Projects" + ], + "summary": "Returns the specified project.", + "description": "Returns the specified project's details and applies the user's visibility rules.\r\n The user must be the project creator or have `project-master-data:read` permission.", + "operationId": "GetProjectById", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "Projects" + ], + "summary": "Updates the specified project.", + "description": "Updates the specified project's details. Retainer projects derive their time budget from retainer budgets, and changing the description can clear its live-editing document.\r\n \r\n The user must be the project creator or have `project-master-data:write` permission.", + "operationId": "PutProjectById", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model containing the new project details.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectPutForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/activities": { + "get": { + "tags": [ + "Project Activities" + ], + "summary": "Returns all activities of the project with the specified id.", + "description": "The activities contain information about the type of the activity, which property was changed and by whom.\r\n This contains changes to first-level properties of the project, like name, description, status, etc., as well as several related entities, such as tags, assignments, etc.\r\n This does not include activities of sub-entities, like tasks of a project or comments on a task.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectActivities", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ActivityModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/addprojectmember": { + "post": { + "tags": [ + "ProjectMembers" + ], + "summary": "Adds a member to the specified project.", + "description": "Adds a member to the specified project. The member can be responsible when no other responsible member exists, and the selected role must be available for the project's type.\r\n The user must be the project creator or have `project-master-data:manage` permission for the project.", + "operationId": "PostProjectAddProjectMemberByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model containing project member details.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectMemberForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectMember" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/addtags": { + "post": { + "tags": [ + "ProjectTags" + ], + "summary": "Adds tags to the specified project.", + "description": "Adds the submitted tags and returns the tags assigned to the specified project.\r\n The user must have `project-master-data:write` permission for the specified project.", + "operationId": "PostProjectAddTagsByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project to add tags for.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model containing the tags to add.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TagForm" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/addtaskbundle": { + "post": { + "tags": [ + "TaskBundles" + ], + "summary": "Adds a task bundle to the specified project.", + "description": "Adds the submitted task bundle and its tasks to the specified project.\r\n The user must have `project-planning-data:write` permission for the project.", + "operationId": "PostProjectAddTaskBundleByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The add Task Bundle form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddTaskBundleForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/allfiles": { + "get": { + "tags": [ + "Entity Files" + ], + "summary": "Returns project files and files of tasks linked to the project.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectsAllFilesByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/automations": { + "get": { + "tags": [ + "Project Automations" + ], + "summary": "Returns all automations of the specified project.", + "description": "The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", + "operationId": "GetProjectAutomations", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Automation" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "Project Automations" + ], + "summary": "Creates a new automation for the specified project.", + "description": "Creates a new automation for the project with the specified id.\r\n The user needs to be the owner of the project or have 'write' permissions of\r\n the feature 'project-master-data' globally or in the project.\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nAny authenticated user.", + "operationId": "PostProjectAutomation", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model to create the automation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutomationTriggerForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Automation" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + }, + "x-subscriptionlevel": { + "minimumPlan": "standard" + } + } + }, + "/projects/{projectId}/automations/{automationId}": { + "delete": { + "tags": [ + "Project Automations" + ], + "summary": "Deletes the specified automation for a given project.", + "description": "Deletes the specified automation for a given project.\r\n Also deletes all actions connected to the automation.\r\n The user needs to be the owner of the project or have 'write' permissions of\r\n the feature 'project-master-data' globally or in the project.\r\n Automations created from a workflow cannot be deleted via this endpoint.\r\n\r\nAny authenticated user.", + "operationId": "DeleteProjectAutomation", + "parameters": [ + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "get": { + "tags": [ + "Project Automations" + ], + "summary": "Returns a specific automation from a project.", + "description": "Returns a specific automation of the project with the specified id.\r\n Returns NotFound if the automation doesnt exist.\r\n To get the the automation data the user needs to be the owner of the project or\r\n have 'read' permissions of the feature 'project-master-data' globally or in his project role.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectAutomation", + "parameters": [ + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Automation" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "Project Automations" + ], + "summary": "Updates the automation with the specified id.", + "description": "Updates the automation with the specified id.\r\n The user needs to be the owner of the project or have 'write' permissions of\r\n the feature 'project-master-data' globally or in the project.\r\n If the automation was created from a workflow, only the Enabled flag can be changed.\r\n\r\nAny authenticated user.", + "operationId": "PutProjectAutomation", + "parameters": [ + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model to update the automation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutomationPutForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Automation" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/automations/{automationId}/actions": { + "get": { + "tags": [ + "Project Automations" + ], + "summary": "Gets the actions of a project automation.", + "description": "Gets all actions including their values of an automation.\r\n The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", + "operationId": "GetProjectAutomationActions", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Action" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "Project Automations" + ], + "summary": "Creates a new action for an automation.", + "description": "Creates a new action including its values for an automation. Actions cannot be added to automations created from a workflow.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", + "operationId": "PostProjectAutomationAction", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model to create an action.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActionForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Action" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/automations/{automationId}/actions/{actionId}": { + "delete": { + "tags": [ + "Project Automations" + ], + "summary": "Deletes an action for a project automation.", + "description": "Deletes an action for an automation including all its values. Actions of automations created from a workflow cannot be deleted.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", + "operationId": "DeleteProjectAutomationAction", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "description": "The id of the action.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "get": { + "tags": [ + "Project Automations" + ], + "summary": "Gets a specific action for a project automation.", + "description": "The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", + "operationId": "GetProjectAutomationAction", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "description": "The id of the action.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Action" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "Project Automations" + ], + "summary": "Updates a specifc action of a project automation.", + "description": "Updates an exsting action including its values for an automation. Actions of automations created from a workflow cannot be modified.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", + "operationId": "PutProjectAutomationAction", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "description": "The id of the action.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model to update an action.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActionForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Action" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/automations/{automationId}/actions/{actionId}/updateorder": { + "post": { + "tags": [ + "Project Automations" + ], + "summary": "Updates the order of a given action of a project automation.", + "description": "Updates the order of a given action in the list of actions of the specific project automation. Actions of automations created from a workflow cannot be modified.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", + "operationId": "PostUpdateProjectAutomationActionOrder", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "description": "The id of the action.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model to update the order.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrderForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/automations/{automationId}/execute": { + "post": { + "tags": [ + "Project Automations" + ], + "summary": "Executes a manual automation for a task.", + "description": "Can be used to trigger an automation that uses a manual trigger for a specific task.\r\n The calling user becomes the initiator of the automation execution.\r\n The user must have write permissions on the specified task.", + "operationId": "PostExecuteProjectAutomation", + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutomationExecuteForm" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Accepted" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/autopilot": { + "delete": { + "tags": [ + "Autopilot" + ], + "summary": "Deletes the autopilot of the project with the specified id.", + "description": "Deletes the autopilot of the project with the specified id.\r\n To access and modify the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", + "operationId": "DeleteProjectsAutopilotByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "get": { + "tags": [ + "Autopilot" + ], + "summary": "Returns the autopilot of the project with the specified id.", + "description": "Returns NoContent if the project does not have an autopilot setup.\r\n To get the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectsAutopilotByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Autopilot" + } + } + } + }, + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "Autopilot" + ], + "summary": "Creates a new autopilot for the project with the specified id.", + "description": "Creates a new autopilot for the project with the specified id.\r\n Also creates and enables all alerts for the new autopilot.\r\n For this action, the user needs to be the owner of the project or must have 'read' permissions\r\n of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", + "operationId": "PostProjectsAutopilotByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model used to create the autopilot.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutopilotPostForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Autopilot" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "Autopilot" + ], + "summary": "Updates the autopilot of the project with the specified id.", + "description": "Updates the autopilot of the project with the specified id.\r\n To access and modify the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", + "operationId": "PutProjectsAutopilotByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model used to update the autopilot.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutopilotPutForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Autopilot" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/changeprojecttype": { + "post": { + "tags": [ + "Projects" + ], + "summary": "Changes the specified project's type.", + "description": "Changes the specified project's type and applies the new type settings.\r\n The user must be the project creator or have `project-master-data:write` permission.", + "operationId": "PostProjectChangeProjectTypeByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model to change the project type.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChangeProjectTypeForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/changestatus": { + "post": { + "tags": [ + "Projects" + ], + "summary": "Changes the specified project's status.", + "description": "Changes the specified project's status. The status must belong to the project's type; changing status can add task bundles and notify project members. Repeating the current status has no effect.\r\n The user must be the project creator or have `project-master-data:write` permission.", + "operationId": "PostProjectChangeStatusByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model to change the project status.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChangeProjectStatusForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/comments": { + "delete": { + "tags": [ + "ProjectComments" + ], + "summary": "Deletes all comments of the specified project.", + "description": "Deletes all comments of the specified project.\r\n\r\nAny authenticated user.", + "operationId": "DeleteCommentsByProjectNameAndProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "get": { + "tags": [ + "ProjectComments" + ], + "summary": "Returns all comments of the project with the specified id.", + "description": "Returns all comments of the project with the specified id. The user needs read permissions on the project.\r\n\r\nAny authenticated user.", + "operationId": "GetCommentsByProjectNameAndProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Comment" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "ProjectComments" + ], + "summary": "Creates a new comment on the project with the specified id.", + "description": "Creates a new comment on the project with the specified id.\r\n A user can only create a comment for him/herself, except for admins and api users.\r\n \r\n To create a comment the user must have at least `read` permissions on the specified project.", + "operationId": "PostCommentsByProjectNameAndProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project to create the comment for.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model to create the comment.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Comment" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/comments/{commentId}": { + "delete": { + "tags": [ + "ProjectComments" + ], + "summary": "Deletes the comment with the specified id on the project with the specified id.", + "description": "Deletes the comment with the specified id on the project with the specified id.\r\n The delete includes the reactions of the comment.\r\n If there are any replies to the comment, they will be deleted as well.\r\n\r\nAny authenticated user.", + "operationId": "DeleteCommentByProjectNameAndProjectIdAndCommentId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "commentId", + "in": "path", + "description": "The id of the comment.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "get": { + "tags": [ + "ProjectComments" + ], + "summary": "Returns the comment with the specified id of the project with the specified id.", + "description": "Returns the comment with the specified id of the project with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetCommentByProjectNameAndProjectIdAndCommentId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "commentId", + "in": "path", + "description": "The id of the comment.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Comment" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "ProjectComments" + ], + "summary": "Updates the comment with the specified id on the project with the specified id.", + "description": "To update a comment the user must either have at least `read` permissions on the specified project, be the creator of the comment or be admin.", + "operationId": "PutCommentByProjectNameAndProjectIdAndCommentId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "commentId", + "in": "path", + "description": "The id of the comment.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model with the updated comment information.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommentPutForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Comment" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/comments/{commentId}/react": { + "post": { + "tags": [ + "ProjectComments" + ], + "summary": "Updates the reactions of the comment with the specified id on the project with the specified id.", + "description": "To update a reaction of a comment the user must have at least `read` permissions on the specified project.", + "operationId": "PostCommentReactByProjectNameAndProjectIdAndCommentId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "commentId", + "in": "path", + "description": "The id of the comment.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model used to update the reactions of the comment with the specified id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReactionForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/customfielddefinitions": { + "get": { + "tags": [ + "CustomFields" + ], + "summary": "Returns custom fields for the specified project.", + "description": "Returns definitions linked directly to the project or through a workflow.\r\n The user must have `project-master-data:read` permission or access to at least one task in the project.", + "operationId": "GetProjectCustomFieldDefinitionsByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/customfielddefinitions/{customFieldDefinitionId}": { + "put": { + "tags": [ + "CustomFields" + ], + "summary": "Updates custom field order in a project.", + "description": "Updates the order of a custom field definition linked to the specified project.\r\n The user must have `project-master-data:write` permission or `write` permission on the specified project.", + "operationId": "PutProjectCustomFieldDefinitionByProjectIdAndCustomFieldDefinitionId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "customFieldDefinitionId", + "in": "path", + "description": "The id of the custom field definition.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model used to update the order of the custom field definition.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFieldOrderPutForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFieldOrderForm" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/delete": { + "post": { + "tags": [ + "Projects" + ], + "summary": "Deletes the specified project.", + "description": "Deletes the specified project. Related tasks are deleted by default, while related time entries lose their project and task links. Set `deleteTimeTrackings` to delete those time entries as well.\r\n \r\n The user must be the project creator or have `project-master-data:write` permission.", + "operationId": "PostProjectDeleteByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model containing deletion options.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectDeleteForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/deletetags": { + "post": { + "tags": [ + "ProjectTags" + ], + "summary": "Removes tags from the specified project.", + "description": "Removes the submitted tags from the specified project.\r\n The user must have `project-master-data:write` permission for the specified project.", + "operationId": "PostProjectDeleteTagsByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project to remove tags from.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model containing the tags to remove.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DeleteTagForm" + } + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "207": { + "description": "Multi-Status" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/documents": { + "get": { + "tags": [ + "Documents" + ], + "summary": "Returns documents in the specified project.", + "description": "Returns non-trashed documents visible in the specified project.\r\n The user must have permission to view the returned documents.", + "operationId": "GetProjectDocumentsByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentModel" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/documents/trash": { + "get": { + "tags": [ + "Documents" + ], + "summary": "Returns trashed documents in the specified project.", + "description": "Returns deleted documents visible in the specified project.\r\n The user must have permission to view the returned documents.", + "operationId": "GetProjectDocumentsTrashByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentModel" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/externalfiles": { + "post": { + "tags": [ + "Project Files" + ], + "summary": "Creates external file references for the specified project.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostExternalFilesByProjectNameAndProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/files": { + "delete": { + "tags": [ + "Project Files" + ], + "summary": "Deletes all files and versions for the specified project.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesByProjectNameAndProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The project id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "get": { + "tags": [ + "Project Files" + ], + "summary": "Returns all files of the specified project.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByProjectNameAndProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "Project Files" + ], + "summary": "Uploads a file for the specified project.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesByProjectNameAndProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/FileUploadModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/files/byuploadid": { + "post": { + "tags": [ + "FileUpload" + ], + "summary": "Creates a file from an upload id.", + "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file project from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostUploadByUploadId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project to attach the file to.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model describing the uploaded file metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadByUploadIdForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/files/byurl": { + "post": { + "tags": [ + "Project Files" + ], + "summary": "Uploads a file from a public URL for the specified project.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesByUrlByProjectNameAndProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FilePostForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/files/{fileId}": { + "delete": { + "tags": [ + "Project Files" + ], + "summary": "Deletes the specified project file and its versions.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesByProjectNameAndProjectIdAndFileId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The project id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The file id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "get": { + "tags": [ + "Project Files" + ], + "summary": "Returns the file with the specified id of the project with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByProjectNameAndProjectIdAndFileId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "Project Files" + ], + "summary": "Updates metadata for the specified file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PutFilesByProjectNameAndProjectIdAndFileId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfoUpdateForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/files/{fileId}/changeentity": { + "post": { + "tags": [ + "Project Files" + ], + "summary": "Changes the project that owns the specified file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesChangeProjectByProjectNameAndProjectIdAndFileId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileEntityForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/files/{fileId}/copy": { + "post": { + "tags": [ + "Project Files" + ], + "summary": "Copies the specified file to another project.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesCopyByProjectNameAndProjectIdAndFileId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileCopyForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/files/{fileId}/download": { + "get": { + "tags": [ + "Project Files" + ], + "summary": "Returns the latest content of the specified project file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesDownloadByProjectNameAndProjectIdAndFileId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "width", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "height", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "crop", + "in": "query", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/files/{fileId}/pdf": { + "get": { + "tags": [ + "Project Files" + ], + "summary": "Returns the specified project file as PDF.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesPdfByProjectNameAndProjectIdAndFileId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "inline", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/files/{fileId}/shareurl": { + "get": { + "tags": [ + "Project Files" + ], + "summary": "Returns a public URL for the specified file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesShareUrlByProjectNameAndProjectIdAndFileId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/files/{fileId}/versions": { + "get": { + "tags": [ + "Project Files" + ], + "summary": "Returns all versions of the specified project file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByProjectNameAndProjectIdAndFileId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FileVersion" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "Project Files" + ], + "summary": "Uploads a new version of the specified project file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesVersionsByProjectNameAndProjectIdAndFileId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/FileUploadModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileVersion" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/files/{fileId}/versions/{versionId}": { + "get": { + "tags": [ + "Project Files" + ], + "summary": "Returns the project file version with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByProjectNameAndProjectIdAndFileIdAndVersionId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "versionId", + "in": "path", + "description": "The id of the file version.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Returns available workspace features.", - "description": "Returns feature keys available in the selected workspace, including AI features when available to the workspace.\r\n\r\nAny authenticated user.", - "operationId": "GetPermissionsFeatures", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } - }, - "example": [ - "https://www.awork.com" - ] + "$ref": "#/components/schemas/FileVersion" + } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/permissions/projectfeatures": { - "get": { - "tags": [ - "Permissions" - ], - "summary": "Returns available project features.", - "description": "Returns project feature keys available in the selected workspace, including AI features when available to the workspace.\r\n\r\nAny authenticated user.", - "operationId": "GetPermissionsProjectFeatures", - "responses": { - "200": { - "description": "OK", + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } - }, - "example": [ - "https://www.awork.com" - ] + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } } @@ -15429,26 +25001,41 @@ } } }, - "/projectmilestones": { + "/projects/{projectId}/files/{fileId}/versions/{versionId}/download": { "get": { "tags": [ - "ProjectMilestones" + "Project Files" ], - "summary": "Returns visible project milestones.", - "description": "Returns project milestones visible to the current user.\r\n The user must have `project-planning-data:read` permission for each returned project.", - "operationId": "GetProjectMilestones", + "summary": "Returns the content of the specified project file version.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsDownloadByProjectNameAndProjectIdAndFileIdAndVersionId", "parameters": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, { - "$ref": "#/components/parameters/orderby" + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, { - "$ref": "#/components/parameters/filterby" + "name": "versionId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -15457,10 +25044,28 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectMilestone" - } + "type": "string", + "format": "binary" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -15479,38 +25084,65 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/linkcustomfielddefinition": { "post": { "tags": [ - "ProjectMilestones" + "CustomFields" + ], + "summary": "Links a custom field to the specified project.", + "description": "Links the specified custom field definition to the project.\r\n The user must have `project-master-data:write` permission or `write` permission on the specified project.", + "operationId": "PostProjectLinkCustomFieldDefinitionByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Creates a project milestone.", - "description": "Creates a milestone in the specified project.\r\n The user must be the project creator or have `project-planning-data:write` permission for the project.", - "operationId": "PostProjectMilestone", "requestBody": { - "description": "The model containing milestone details.", + "description": "The model used to link the custom field definition.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestonePostForm" + "$ref": "#/components/schemas/LinkCustomFieldDefinitionForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestone" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -15535,19 +25167,19 @@ } } }, - "/projectmilestones/{milestoneId}": { - "get": { + "/projects/{projectId}/linkworkflow": { + "post": { "tags": [ - "ProjectMilestones" + "Workflows" ], - "summary": "Returns the specified project milestone.", - "description": "Returns the specified milestone when its project is visible to the current user.\r\n The user must have `project-planning-data:read` permission for the project.", - "operationId": "GetProjectMilestoneByMilestoneId", + "summary": "Links a workflow to the specified project.", + "description": "Links the specified workflow to the project and migrates existing statuses using the provided mapping. If the project has no statuses, workflow statuses are assigned automatically. Switching workflows requires mappings for existing statuses.\r\n The user must be the project creator or have `project-master-data:write` permission for the project.", + "operationId": "PostProjectLinkWorkflowByProjectId", "parameters": [ { - "name": "milestoneId", + "name": "projectId", "in": "path", - "description": "The id of the milestone.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -15555,13 +25187,34 @@ } } ], + "requestBody": { + "description": "The link workflow form.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LinkWorkflowForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestone" + "$ref": "#/components/schemas/Project" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -15602,19 +25255,19 @@ } } }, - "/projectmilestones/{projectMilestoneId}": { - "delete": { + "/projects/{projectId}/members": { + "get": { "tags": [ - "ProjectMilestones" + "Projects" ], - "summary": "Deletes the specified project milestone.", - "description": "Deletes the specified milestone from its project.\r\n The user must be the project creator or have `project-planning-data:write` permission for the project.", - "operationId": "DeleteProjectMilestoneById", + "summary": "Returns members of the specified project.", + "description": "Returns members assigned to the specified project.\r\n The user must be the project creator or have `project-master-data:read` permission.", + "operationId": "GetProjectMembersByProjectId", "parameters": [ { - "name": "projectMilestoneId", + "name": "projectId", "in": "path", - "description": "The id of the project milestone to delete.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -15623,11 +25276,21 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectMember" + } + } + } + } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -15660,19 +25323,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projects/{projectId}/milestones": { + "get": { "tags": [ "ProjectMilestones" ], - "summary": "Updates the specified project milestone.", - "description": "Updates the specified milestone in its project.\r\n The user must be the project creator or have `project-planning-data:write` permission for the project.", - "operationId": "PutProjectMilestoneById", + "summary": "Returns milestones for the specified project.", + "description": "Returns milestones assigned to the specified project.\r\n The user must have `project-planning-data:read` permission for the project.", + "operationId": "GetProjectMilestonesByProjectId", "parameters": [ { - "name": "projectMilestoneId", + "name": "projectId", "in": "path", - "description": "The id of the project milestone.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -15680,40 +25345,22 @@ } } ], - "requestBody": { - "description": "The model containing milestone details.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectMilestonePutForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestone" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectMilestone" + } } } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -15738,22 +25385,22 @@ } } }, - "/projectroles": { + "/projects/{projectId}/projectstatuses": { "get": { "tags": [ - "ProjectRoles" + "ProjectStatuses" ], - "summary": "Returns project roles in the workspace.", - "description": "Returns project roles in the workspace. Set `includeMembers` to include each role's members.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectRoles", + "summary": "Returns statuses for the specified project.", + "description": "Returns statuses relevant to the specified project. If the project is linked to a workflow, the workflow's statuses are returned.\r\n The user must be the project creator or have `project-master-data:read` permission.", + "operationId": "GetProjectProjectStatusesByProjectId", "parameters": [ { - "name": "includeMembers", - "in": "query", - "description": "Whether to include the members of each project role in the response.", + "name": "projectId", + "in": "path", + "required": true, "schema": { - "type": "boolean", - "default": true + "type": "string", + "format": "uuid" } }, { @@ -15777,11 +25424,31 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ProjectRole" + "$ref": "#/components/schemas/ProjectStatus" } } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -15800,17 +25467,29 @@ }, "post": { "tags": [ - "ProjectRoles" + "ProjectStatuses" + ], + "summary": "Creates a status for the specified project.", + "description": "Creates a project status. Projects linked to a workflow must manage statuses through that workflow.\r\n The user must be the project owner or have `project-manage-config:write` permission.", + "operationId": "PostProjectProjectStatusesByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Creates a project role.", - "description": "Creates a project role with the submitted name and settings.\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostProjectRole", "requestBody": { - "description": "The model to create the project role.", + "description": "The model to create the project status.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectRoleForm" + "$ref": "#/components/schemas/ProjectStatusForm" } } }, @@ -15822,7 +25501,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectRole" + "$ref": "#/components/schemas/ProjectStatus" } } } @@ -15836,6 +25515,26 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -15849,32 +25548,40 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" - }, - "x-subscriptionlevel": { - "minimumPlan": "standard" + "any": "true" } } }, - "/projectroles/byuserid/{userId}": { + "/projects/{projectId}/projecttasks": { "get": { "tags": [ - "ProjectRoles" + "ProjectTasks" ], - "summary": "Returns roles assigned to the specified user.", - "description": "Returns project roles assigned to the specified user in the workspace.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectRolesByUserIdByUserId", + "summary": "Returns tasks for the specified project.", + "description": "Returns project tasks visible to the current user.\r\n The user must have `project-planning-data:read` permission; otherwise only assigned tasks are returned.", + "operationId": "GetProjectProjectTasksByProjectId", "parameters": [ { - "name": "userId", + "name": "projectId", "in": "path", - "description": "The id of the user.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -15885,7 +25592,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ProjectRole" + "$ref": "#/components/schemas/TaskModel" } } } @@ -15917,19 +25624,29 @@ } } }, - "/projectroles/{projectRoleId}": { + "/projects/{projectId}/projecttasks/{taskId}": { "get": { "tags": [ - "ProjectRoles" + "ProjectTasks" ], - "summary": "Returns the specified project role.", - "description": "Returns the project role with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectRoleById", + "summary": "Returns the specified project task.", + "description": "Returns the specified task when it belongs to the project.\r\n The user must have `project-planning-data:read` permission or be assigned to the task.", + "operationId": "GetProjectProjectTaskByProjectIdAndTaskId", "parameters": [ { - "name": "projectRoleId", + "name": "projectId", "in": "path", - "description": "The id of the project role.", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -15943,7 +25660,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectRole" + "$ref": "#/components/schemas/TaskModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -15972,19 +25699,31 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projects/{projectId}/projecttasks/{taskId}/changeproject": { + "post": { "tags": [ - "ProjectRoles" + "ProjectTasks" ], - "summary": "Updates the specified project role.", - "description": "Updates the specified role's name or default status. Changing the default role updates the previous default role.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PutProjectRoleById", + "summary": "Moves a task to another project.", + "description": "Moves the specified task and its subtasks, related time entries, and tracked-time totals to another project.\r\n The user must have `project-planning-data:write` permission on both projects.", + "operationId": "PostProjectProjectTaskChangeProjectByProjectIdAndTaskId", "parameters": [ { - "name": "projectRoleId", + "name": "projectId", "in": "path", - "description": "The id of the project role.", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -15993,29 +25732,32 @@ } ], "requestBody": { - "description": "The model to update the project role.", + "description": "The model to change the project of the task.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectRoleForm" + "$ref": "#/components/schemas/ChangeProjectForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectRole" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -16046,24 +25788,33 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } } }, - "/projectroles/{projectRoleId}/delete": { - "post": { + "/projects/{projectId}/projecttasks/{taskId}/checklistitems": { + "get": { "tags": [ - "ProjectRoles" + "ChecklistItems" ], - "summary": "Deletes a project role and migrates members.", - "description": "Deletes the specified project role and moves its members to the role selected in the request.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostProjectRoleDeleteByProjectRoleId", + "summary": "Returns checklist items for a project task.", + "description": "Returns checklist items for the specified project task.\r\n The user must have `project-planning-data:read` permission or be assigned to the task.", + "operationId": "GetProjectProjectTaskChecklistItemsByProjectIdAndTaskId", "parameters": [ { - "name": "projectRoleId", + "name": "projectId", "in": "path", - "description": "The id of the project role.", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -16071,23 +25822,22 @@ } } ], - "requestBody": { - "description": "The model to delete the project role.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectRoleDeleteForm" - } - } - }, - "required": true - }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChecklistItem" + } + } + } + } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -16118,24 +25868,23 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } } }, - "/projectroles/{projectRoleId}/permissions": { + "/projects/{projectId}/projecttasks/{taskId}/checklistitems/{checklistItemId}": { "get": { "tags": [ - "ProjectRoles" + "ChecklistItems" ], - "summary": "Returns permissions for the specified project role.", - "description": "Returns permissions assigned to the specified project role. AI role permissions are included only when available to the workspace.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectRolePermissionsByProjectRoleId", + "summary": "Returns a checklist item for a project task.", + "description": "Returns the specified checklist item for the project task.\r\n The user must have `project-planning-data:read` permission or be assigned to the task.", + "operationId": "GetProjectProjectTaskChecklistItemByProjectIdAndTaskIdAndChecklistItemId", "parameters": [ { - "name": "projectRoleId", + "name": "projectId", "in": "path", - "description": "The id of the project role.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -16143,16 +25892,24 @@ } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, { - "$ref": "#/components/parameters/filterby" + "name": "checklistItemId", + "in": "path", + "description": "The id of the checklist item.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -16161,10 +25918,17 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/PermissionOfProjectRole" - } + "$ref": "#/components/schemas/ChecklistItem" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -16193,19 +25957,21 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/removeprojectmember": { "post": { "tags": [ - "ProjectRoles" + "Projects" ], - "summary": "Updates a permission for a project role.", - "description": "Creates, updates, or removes the submitted permission for the specified project role. AI role permissions require an eligible workspace plan.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectRolePermissionsByProjectRoleId", + "summary": "Removes a member from the specified project.", + "description": "Removes the specified member from the project.\r\n The user must be the project creator or have `project-master-data:manage` permission.", + "operationId": "PostProjectRemoveProjectMemberByProjectId", "parameters": [ { - "name": "projectRoleId", + "name": "projectId", "in": "path", - "description": "The id of the project role.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -16214,29 +25980,32 @@ } ], "requestBody": { - "description": "The model to create or update the project role permission.", + "description": "The model to remove the project member.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PermissionOfProjectRoleForm" + "$ref": "#/components/schemas/ProjectMemberRemoveForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PermissionOfProjectRole" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -16267,20 +26036,29 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projects": { + "/projects/{projectId}/retainers": { "get": { "tags": [ - "Projects" + "Retainers" ], - "summary": "Returns projects visible to the current user.", - "description": "Returns projects visible to the current user.\r\n The user must have `read` permission for each returned project.", - "operationId": "GetProjects", + "summary": "Returns retainers for the specified project.", + "description": "Returns retainers associated with the specified project.\r\n The user must have `project-master-data:read` permission for the project.", + "operationId": "GetProjectRetainersByProjectId", "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, { "$ref": "#/components/parameters/page" }, @@ -16302,7 +26080,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Project" + "$ref": "#/components/schemas/Retainer" } } } @@ -16325,97 +26103,41 @@ }, "post": { "tags": [ - "Projects" - ], - "summary": "Creates a project.", - "description": "Creates a project in the selected workspace and returns it.\r\n\r\nThe user must be an admin or have `project-create:write` permissions.", - "operationId": "PostProject", - "requestBody": { - "description": "The model to create the project.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExtendedProjectForm" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "project-create": "write" - } - } - }, - "/projects/batch/{operation}": { - "post": { - "tags": [ - "Projects" + "Retainers" ], - "summary": "Applies an operation to selected projects.", - "description": "Applies the selected operation to each project and returns successful and failed results. Supported operations include changing status or type, linking workflows, updating clients, leads, dates, teams, and tags, and deleting projects.\r\n The user must have `write` permission for all projects and related entities modified by the operation.", - "operationId": "PostProjectsBatchByOperation", + "summary": "Creates a retainer for the specified project.", + "description": "Creates a retainer and marks the project as a retainer project. Retainer budgets are created from its dates. Retainers cannot overlap, and only one active retainer is allowed per project.\r\n The user must have `project-master-data:write` permission for the project.", + "operationId": "PostProjectRetainersByProjectId", "parameters": [ { - "name": "operation", + "name": "projectId", "in": "path", - "description": "Batch operation route key.", + "description": "The id of the project to create a retainer for.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "requestBody": { - "description": "Validated request body for the selected operation.", + "description": "The model to create a retainer.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectBatchOperationForm" + "$ref": "#/components/schemas/RetainerForm" } } }, "required": true }, "responses": { - "207": { - "description": "Multi-Status", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MultiStatusResult" + "$ref": "#/components/schemas/Retainer" } } } @@ -16430,8 +26152,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -16456,25 +26178,36 @@ } } }, - "/projects/deletetags": { - "post": { + "/projects/{projectId}/retainers/{retainerId}": { + "delete": { "tags": [ - "ProjectTags" + "Retainers" ], - "summary": "Removes a tag from all projects.", - "description": "Removes the submitted tag from every project in the workspace.\r\n\r\nThe user must be an admin or have `project-master-data:write` permissions.", - "operationId": "PostProjectsDeleteTags", - "requestBody": { - "description": "The model to remove the tag from all projects.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteTagForm" - } + "summary": "Deletes a retainer from the specified project.", + "description": "Deletes the specified retainer and its related budgets.\r\n The user must have `project-master-data:write` permission for the project.", + "operationId": "DeleteProjectRetainerByProjectIdAndRetainerId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "retainerId", + "in": "path", + "description": "The id of the retainer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "responses": { "204": { "description": "No Content" @@ -16489,8 +26222,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -16511,27 +26244,35 @@ "v1" ], "x-access": { - "admin": "true", - "project-master-data": "write" + "any": "true" } - } - }, - "/projects/key/{projectKey}": { + }, "get": { "tags": [ - "Projects" + "Retainers" ], - "summary": "Returns the project with the specified key.", - "description": "Returns the project matching the specified key after normalizing its case and surrounding spaces.\r\n The user must have `project-master-data:read` permission for the project.", - "operationId": "GetProjectsKeyByProjectKey", + "summary": "Returns the specified project retainer.", + "description": "Returns the specified retainer for the project.\r\n The user must have `project-master-data:read` permission for the project.", + "operationId": "GetProjectRetainerByProjectIdAndRetainerId", "parameters": [ { - "name": "projectKey", + "name": "projectId", "in": "path", - "description": "The project key to lookup.", + "description": "The id of the project.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" + } + }, + { + "name": "retainerId", + "in": "path", + "description": "The id of the retainer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } ], @@ -16541,27 +26282,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Retainer" } } } @@ -16590,75 +26311,54 @@ "x-access": { "any": "true" } - } - }, - "/projects/projecttasks/tags": { - "get": { + }, + "put": { "tags": [ - "ProjectTasks" + "Retainers" ], - "summary": "Returns tags for project tasks.", - "description": "Returns tags currently assigned to tasks in projects visible to the current user.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectsProjectTasksTags", + "summary": "Updates the specified project retainer.", + "description": "Updates the retainer settings. Date changes cannot overlap another retainer, and the retainer period cannot be changed.\r\n The user must have `project-master-data:write` permission for the project.", + "operationId": "PutProjectRetainerByProjectIdAndRetainerId", "parameters": [ { "name": "projectId", - "in": "query", - "description": "The id of the project to filter tags by. Returns tags of all projects if not provided.", + "in": "path", + "description": "The id of the project to update the retainer for.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "retainerId", + "in": "path", + "description": "The id of the retainer.", + "required": true, "schema": { "type": "string", "format": "uuid" } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } - } + "requestBody": { + "description": "The model to update the retainer.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RetainerForm" } } - } + }, + "required": true }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/projects/tags": { - "get": { - "tags": [ - "ProjectTags" - ], - "summary": "Returns tags used by projects.", - "description": "Returns tags currently assigned to projects.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectsTags", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModelWithCount" - } + "$ref": "#/components/schemas/Retainer" } } } @@ -16673,8 +26373,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -16699,20 +26399,35 @@ } } }, - "/projects/updatetags": { + "/projects/{projectId}/setcustomfields": { "post": { "tags": [ - "ProjectTags" + "CustomFields" + ], + "summary": "Sets custom field values for a project.", + "description": "Sets the submitted custom field values on the specified project.\r\n The user must have `project-master-data:write` permission for the project.", + "operationId": "PostProjectSetCustomFieldsByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Updates a tag for all projects.", - "description": "Updates a tag across all projects. The submitted options can rename or merge the tag.\r\n\r\nThe user must be an admin or have `project-master-data:write` permissions.", - "operationId": "PostProjectsUpdateTags", "requestBody": { - "description": "The model containing the tag updates.", + "description": "The list of custom field values to set.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TagUpdateForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFieldPostForm" + } } } }, @@ -16732,64 +26447,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "project-master-data": "write" - } - } - }, - "/projects/{projectId}": { - "get": { - "tags": [ - "Projects" - ], - "summary": "Returns the specified project.", - "description": "Returns the specified project's details and applies the user's visibility rules.\r\n The user must be the project creator or have `project-master-data:read` permission.", - "operationId": "GetProjectById", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, "401": { "description": "Unauthorized", "content": { @@ -16824,14 +26481,16 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projects/{projectId}/setprojectkey": { + "post": { "tags": [ "Projects" ], - "summary": "Updates the specified project.", - "description": "Updates the specified project's details. Retainer projects derive their time budget from retainer budgets, and changing the description can clear its live-editing document.\r\n \r\n The user must be the project creator or have `project-master-data:write` permission.", - "operationId": "PutProjectById", + "summary": "Updates the specified project's key.", + "description": "Updates the project key and the identifiers of tasks in that project. The key must be unique in the workspace and use uppercase letters, numbers, or dashes.\r\n\r\nThe user must be an admin or have `project-master-data:write` permissions.", + "operationId": "PostProjectSetProjectKeyByProjectId", "parameters": [ { "name": "projectId", @@ -16845,11 +26504,10 @@ } ], "requestBody": { - "description": "The model containing the new project details.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectPutForm" + "$ref": "#/components/schemas/UpdateProjectKeyForm" } } }, @@ -16876,16 +26534,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -16908,23 +26556,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-master-data": "write" } } }, - "/projects/{projectId}/activities": { + "/projects/{projectId}/tags": { "get": { "tags": [ - "Project Activities" + "ProjectTags" ], - "summary": "Returns all activities of the project with the specified id.", - "description": "The activities contain information about the type of the activity, which property was changed and by whom.\r\n This contains changes to first-level properties of the project, like name, description, status, etc., as well as several related entities, such as tags, assignments, etc.\r\n This does not include activities of sub-entities, like tasks of a project or comments on a task.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectActivities", + "summary": "Returns tags for the specified project.", + "description": "Returns tags assigned to the specified project.\r\n The user must have `project-master-data:read` permission for the specified project.", + "operationId": "GetProjectTagsByProjectId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project to get tags for.", "required": true, "schema": { "type": "string", @@ -16952,7 +26601,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ActivityModel" + "$ref": "#/components/schemas/BaseTagModel" } } } @@ -17004,14 +26653,14 @@ } } }, - "/projects/{projectId}/addprojectmember": { - "post": { + "/projects/{projectId}/taskdependencies": { + "get": { "tags": [ - "ProjectMembers" + "TaskDependencies" ], - "summary": "Adds a member to the specified project.", - "description": "Adds a member to the specified project. The member can be responsible when no other responsible member exists, and the selected role must be available for the project's type.\r\n The user must be the project creator or have `project-master-data:manage` permission for the project.", - "operationId": "PostProjectAddProjectMemberByProjectId", + "summary": "Returns task dependencies for a project.", + "description": "Returns dependencies involving tasks in the specified project.\r\n The user must have `project-planning-data:read` permission for the project.", + "operationId": "GetProjectTaskdependenciesByProjectId", "parameters": [ { "name": "projectId", @@ -17024,24 +26673,26 @@ } } ], - "requestBody": { - "description": "The model containing project member details.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectMemberForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMember" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskDependency" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -17062,40 +26713,47 @@ } } }, - "/projects/{projectId}/addtags": { - "post": { + "/projects/{projectId}/tasklists": { + "get": { "tags": [ - "ProjectTags" + "TaskLists" ], - "summary": "Adds tags to the specified project.", - "description": "Adds the submitted tags and returns the tags assigned to the specified project.\r\n The user must have `project-master-data:write` permission for the specified project.", - "operationId": "PostProjectAddTagsByProjectId", + "summary": "Returns task lists for the specified project.", + "description": "Returns task lists visible in the specified project.\r\n The user must have `project-planning-data:read` permission for the project.", + "operationId": "GetProjectTaskListsByProjectId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project to add tags for.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The model containing the tags to add.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TagForm" - } - } + }, + { + "name": "showArchived", + "in": "query", + "description": "The show Archived.", + "schema": { + "type": "boolean", + "default": false } }, - "required": true - }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], "responses": { "200": { "description": "OK", @@ -17104,22 +26762,12 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/BaseTagModel" + "$ref": "#/components/schemas/TaskList" } } } } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "401": { "description": "Unauthorized", "content": { @@ -17129,16 +26777,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -17154,16 +26792,14 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/addtaskbundle": { + }, "post": { "tags": [ - "TaskBundles" + "TaskLists" ], - "summary": "Adds a task bundle to the specified project.", - "description": "Adds the submitted task bundle and its tasks to the specified project.\r\n The user must have `project-planning-data:write` permission for the project.", - "operationId": "PostProjectAddTaskBundleByProjectId", + "summary": "Creates a task list in the specified project.", + "description": "Creates a task list in the specified project.\r\n The user must have `project-planning-data:manage` permission for the project.", + "operationId": "PostProjectTaskListsByProjectId", "parameters": [ { "name": "projectId", @@ -17177,19 +26813,26 @@ } ], "requestBody": { - "description": "The add Task Bundle form payload.", + "description": "The task List form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AddTaskBundleForm" + "$ref": "#/components/schemas/TaskListForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskList" + } + } + } }, "400": { "description": "Bad Request", @@ -17237,18 +26880,19 @@ } } }, - "/projects/{projectId}/allfiles": { + "/projects/{projectId}/tasklists/{taskListId}": { "get": { "tags": [ - "Entity Files" + "TaskLists" ], - "summary": "Returns project files and files of tasks linked to the project.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectsAllFilesByProjectId", + "summary": "Returns the specified task list.", + "description": "Returns the specified task list when it is visible in the project.\r\n The user must have `project-planning-data:read` permission for the project.", + "operationId": "GetProjectTaskListByProjectIdAndTaskListId", "parameters": [ { "name": "projectId", "in": "path", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -17256,28 +26900,99 @@ } }, { - "$ref": "#/components/parameters/page" - }, + "name": "taskListId", + "in": "path", + "description": "The id of the task list.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskList" + } + } + } + } + }, + "security": [ { - "$ref": "#/components/parameters/pageSize" - }, + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "TaskLists" + ], + "summary": "Updates the specified task list.", + "description": "Updates the specified task list's name and settings.\r\n The user must have `project-planning-data:manage` permission for the project.", + "operationId": "PutProjectTaskListByProjectIdAndTaskListId", + "parameters": [ { - "$ref": "#/components/parameters/orderby" + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, { - "$ref": "#/components/parameters/filterby" + "name": "taskListId", + "in": "path", + "description": "The id of the task list.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], + "requestBody": { + "description": "The task List Put form.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskListPutForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileInfo" - } + "$ref": "#/components/schemas/TaskList" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -17308,14 +27023,14 @@ } } }, - "/projects/{projectId}/automations": { - "get": { + "/projects/{projectId}/tasklists/{taskListId}/addtasks": { + "post": { "tags": [ - "Project Automations" + "TaskLists" ], - "summary": "Returns all automations of the specified project.", - "description": "The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", - "operationId": "GetProjectAutomations", + "summary": "Adds tasks to the specified task list.", + "description": "Adds the submitted tasks to the specified task list and returns their resulting order.\r\n The user must have `project-planning-data:write` permission for the project and tasks.", + "operationId": "PostProjectTaskListAddTasksByProjectIdAndTaskListId", "parameters": [ { "name": "projectId", @@ -17326,8 +27041,32 @@ "type": "string", "format": "uuid" } + }, + { + "name": "taskListId", + "in": "path", + "description": "The id of the task list.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], + "requestBody": { + "description": "The task To Task List list.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskToTaskList" + } + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", @@ -17336,11 +27075,21 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Automation" + "$ref": "#/components/schemas/ReorderingResult" } } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -17356,14 +27105,16 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/tasklists/{taskListId}/changeproject": { "post": { "tags": [ - "Project Automations" + "TaskLists" ], - "summary": "Creates a new automation for the specified project.", - "description": "Creates a new automation for the project with the specified id.\r\n The user needs to be the owner of the project or have 'write' permissions of\r\n the feature 'project-master-data' globally or in the project.\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nAny authenticated user.", - "operationId": "PostProjectAutomation", + "summary": "Moves a task list to another project.", + "description": "Moves the task list, its tasks, and related time entries to another project. A status mapping can move tasks to replacement statuses.\r\n The user must have `project-planning-data:write` permission on both projects.", + "operationId": "PostProjectTaskListChangeProjectByProjectIdAndTaskListId", "parameters": [ { "name": "projectId", @@ -17374,32 +27125,102 @@ "type": "string", "format": "uuid" } + }, + { + "name": "taskListId", + "in": "path", + "description": "The id of the task list.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "requestBody": { - "description": "The model to create the automation.", + "description": "The change Project form For Task Lists.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AutomationTriggerForm" + "$ref": "#/components/schemas/ChangeProjectFormForTaskLists" } } }, "required": true }, + "responses": { + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/tasklists/{taskListId}/copy": { + "post": { + "tags": [ + "TaskLists" + ], + "summary": "Copies the specified task list.", + "description": "Creates a task list with the same name and copies its tasks and subtasks. Comments, files, and activity logs are not copied.\r\n The user must have `project-planning-data:write` permission for the project.", + "operationId": "PostProjectTaskListCopyByProjectIdAndTaskListId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskListId", + "in": "path", + "description": "The id of the task list.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" + "$ref": "#/components/schemas/TaskList" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -17421,25 +27242,22 @@ ], "x-access": { "any": "true" - }, - "x-subscriptionlevel": { - "minimumPlan": "standard" } } }, - "/projects/{projectId}/automations/{automationId}": { - "delete": { + "/projects/{projectId}/tasklists/{taskListId}/delete": { + "post": { "tags": [ - "Project Automations" + "TaskLists" ], - "summary": "Deletes the specified automation for a given project.", - "description": "Deletes the specified automation for a given project.\r\n Also deletes all actions connected to the automation.\r\n The user needs to be the owner of the project or have 'write' permissions of\r\n the feature 'project-master-data' globally or in the project.\r\n Automations created from a workflow cannot be deleted via this endpoint.\r\n\r\nAny authenticated user.", - "operationId": "DeleteProjectAutomation", + "summary": "Deletes the specified task list.", + "description": "Deletes the specified task list and removes its task assignments.\r\n The user must have `project-planning-data:manage` permission for the project.", + "operationId": "PostProjectTaskListDeleteByProjectIdAndTaskListId", "parameters": [ { - "name": "automationId", + "name": "projectId", "in": "path", - "description": "The id of the automation.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -17447,9 +27265,9 @@ } }, { - "name": "projectId", + "name": "taskListId", "in": "path", - "description": "The id of the project.", + "description": "The id of the task list.", "required": true, "schema": { "type": "string", @@ -17457,12 +27275,33 @@ } } ], + "requestBody": { + "description": "The task List Delete form.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskListDeleteForm" + } + } + }, + "required": true + }, "responses": { "204": { "description": "No Content" }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -17485,19 +27324,21 @@ "x-access": { "any": "true" } - }, - "get": { + } + }, + "/projects/{projectId}/tasklists/{taskListId}/removetasks": { + "post": { "tags": [ - "Project Automations" + "TaskLists" ], - "summary": "Returns a specific automation from a project.", - "description": "Returns a specific automation of the project with the specified id.\r\n Returns NotFound if the automation doesnt exist.\r\n To get the the automation data the user needs to be the owner of the project or\r\n have 'read' permissions of the feature 'project-master-data' globally or in his project role.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectAutomation", + "summary": "Removes tasks from the specified task list.", + "description": "Removes the submitted tasks from the specified task list.\r\n The user must have `project-planning-data:write` permission for the project and tasks.", + "operationId": "PostProjectTaskListRemoveTasksByProjectIdAndTaskListId", "parameters": [ { - "name": "automationId", + "name": "projectId", "in": "path", - "description": "The id of the automation.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -17505,9 +27346,9 @@ } }, { - "name": "projectId", + "name": "taskListId", "in": "path", - "description": "The id of the project.", + "description": "The id of the task list.", "required": true, "schema": { "type": "string", @@ -17515,16 +27356,24 @@ } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Automation" + "requestBody": { + "description": "The id of the tasks.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" } } } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" } }, "security": [ @@ -17540,19 +27389,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projects/{projectId}/tasklists/{taskListId}/setarchived": { + "post": { "tags": [ - "Project Automations" + "TaskLists" ], - "summary": "Updates the automation with the specified id.", - "description": "Updates the automation with the specified id.\r\n The user needs to be the owner of the project or have 'write' permissions of\r\n the feature 'project-master-data' globally or in the project.\r\n If the automation was created from a workflow, only the Enabled flag can be changed.\r\n\r\nAny authenticated user.", - "operationId": "PutProjectAutomation", + "summary": "Archives or restores the specified task list.", + "description": "Archives or restores the specified task list. An archived task list remains available but cannot be edited.\r\n The user must have `project-planning-data:manage` permission for the project.", + "operationId": "PostProjectTaskListSetArchivedByProjectIdAndTaskListId", "parameters": [ { - "name": "automationId", + "name": "projectId", "in": "path", - "description": "The id of the automation.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -17560,9 +27411,9 @@ } }, { - "name": "projectId", + "name": "taskListId", "in": "path", - "description": "The id of the project.", + "description": "The id of the task list.", "required": true, "schema": { "type": "string", @@ -17571,11 +27422,11 @@ } ], "requestBody": { - "description": "The model to update the automation.", + "description": "The archived Task List form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AutomationPutForm" + "$ref": "#/components/schemas/ArchivedTaskListForm" } } }, @@ -17587,7 +27438,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" + "$ref": "#/components/schemas/TaskList" } } } @@ -17601,6 +27452,26 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -17618,19 +27489,19 @@ } } }, - "/projects/{projectId}/automations/{automationId}/actions": { + "/projects/{projectId}/tasklists/{taskListId}/tasks/{taskId}": { "get": { "tags": [ - "Project Automations" + "TaskLists" ], - "summary": "Gets the actions of a project automation.", - "description": "Gets all actions including their values of an automation.\r\n The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", - "operationId": "GetProjectAutomationActions", + "summary": "Returns a task in the specified task list.", + "description": "Returns the specified task when it belongs to the task list.\r\n The user must have `project-planning-data:read` permission for the project.", + "operationId": "GetProjectTaskListTaskByProjectIdAndTaskListIdAndTaskId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project of the automation.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -17638,9 +27509,19 @@ } }, { - "name": "automationId", + "name": "taskListId", "in": "path", - "description": "The id of the automation.", + "description": "The id of the task list.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -17654,10 +27535,37 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Action" - } + "$ref": "#/components/schemas/TaskModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -17676,19 +27584,21 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/tasklists/{taskListId}/tasks/{taskId}/updateorder": { "post": { "tags": [ - "Project Automations" + "TaskLists" ], - "summary": "Creates a new action for an automation.", - "description": "Creates a new action including its values for an automation. Actions cannot be added to automations created from a workflow.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", - "operationId": "PostProjectAutomationAction", + "summary": "Updates a task's order in a task list.", + "description": "Updates the specified task's position in the task list.\r\n The user must have `project-planning-data:write` permission for the project and task.", + "operationId": "PostProjectTaskListTaskUpdateOrderByProjectIdAndTaskListIdAndTaskId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project of the automation.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -17696,9 +27606,19 @@ } }, { - "name": "automationId", + "name": "taskListId", "in": "path", - "description": "The id of the automation.", + "description": "The id of the task list.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -17707,11 +27627,11 @@ } ], "requestBody": { - "description": "The model to create an action.", + "description": "The task In Task List Update Order form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ActionForm" + "$ref": "#/components/schemas/TaskInTaskListUpdateOrderForm" } } }, @@ -17723,7 +27643,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" + "type": "array", + "items": { + "$ref": "#/components/schemas/ReorderingResult" + } } } } @@ -17737,6 +27660,16 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -17754,29 +27687,19 @@ } } }, - "/projects/{projectId}/automations/{automationId}/actions/{actionId}": { - "delete": { + "/projects/{projectId}/tasklists/{taskListId}/updateorder": { + "post": { "tags": [ - "Project Automations" + "TaskLists" ], - "summary": "Deletes an action for a project automation.", - "description": "Deletes an action for an automation including all its values. Actions of automations created from a workflow cannot be deleted.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", - "operationId": "DeleteProjectAutomationAction", + "summary": "Updates the order of the specified task list.", + "description": "Updates the specified task list's position within the project.\r\n The user must have `project-planning-data:manage` permission for the project.", + "operationId": "PostProjectTaskListUpdateOrderByProjectIdAndTaskListId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -17784,9 +27707,9 @@ } }, { - "name": "actionId", + "name": "taskListId", "in": "path", - "description": "The id of the action.", + "description": "The id of the task list.", "required": true, "schema": { "type": "string", @@ -17794,12 +27717,33 @@ } } ], + "requestBody": { + "description": "The update Order form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrderForm" + } + } + }, + "required": true + }, "responses": { "204": { "description": "No Content" }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -17822,19 +27766,21 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/taskstatuses": { "get": { "tags": [ - "Project Automations" + "TaskStatuses" ], - "summary": "Gets a specific action for a project automation.", - "description": "The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", - "operationId": "GetProjectAutomationAction", + "summary": "Returns task statuses for the specified project.", + "description": "Returns statuses relevant to the specified project. If the project is linked to a workflow, the workflow's statuses are returned.\r\n The user must have `project-master-data:read` permission or be assigned to a task on the project.", + "operationId": "GetProjectTaskStatusesByProjectId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project of the automation.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -17842,24 +27788,16 @@ } }, { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" }, { - "name": "actionId", - "in": "path", - "description": "The id of the action.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -17868,7 +27806,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskStatus" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -17888,38 +27849,18 @@ "any": "true" } }, - "put": { + "post": { "tags": [ - "Project Automations" + "TaskStatuses" ], - "summary": "Updates a specifc action of a project automation.", - "description": "Updates an exsting action including its values for an automation. Actions of automations created from a workflow cannot be modified.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", - "operationId": "PutProjectAutomationAction", + "summary": "Creates a task status for the specified project.", + "description": "Creates a task status for the specified project.\r\n The user must be the project creator or have `project-planning-data:write` permission.", + "operationId": "PostProjectTaskStatusesByProjectId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "actionId", - "in": "path", - "description": "The id of the action.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -17928,11 +27869,11 @@ } ], "requestBody": { - "description": "The model to update an action.", + "description": "The model used to create the task status.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ActionForm" + "$ref": "#/components/schemas/TaskStatusForm" } } }, @@ -17944,7 +27885,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" + "$ref": "#/components/schemas/TaskStatus" } } } @@ -17958,6 +27899,26 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -17975,19 +27936,19 @@ } } }, - "/projects/{projectId}/automations/{automationId}/actions/{actionId}/updateorder": { - "post": { + "/projects/{projectId}/taskstatuses/{taskStatusId}": { + "get": { "tags": [ - "Project Automations" + "TaskStatuses" ], - "summary": "Updates the order of a given action of a project automation.", - "description": "Updates the order of a given action in the list of actions of the specific project automation. Actions of automations created from a workflow cannot be modified.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", - "operationId": "PostUpdateProjectAutomationActionOrder", + "summary": "Returns the specified project task status.", + "description": "Returns the specified status for the project.\r\n The user must have `project-master-data:read` permission or be the project creator.", + "operationId": "GetProjectTaskStatusByProjectIdAndTaskStatusId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project of the automation.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -17995,19 +27956,84 @@ } }, { - "name": "automationId", + "name": "taskStatusId", "in": "path", - "description": "The id of the automation.", + "description": "The id of the task status.", "required": true, "schema": { "type": "string", "format": "uuid" } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskStatus" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ { - "name": "actionId", + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "TaskStatuses" + ], + "summary": "Updates a task status for the specified project.", + "description": "Updates the specified status. Its type cannot change when it is the last `todo` or `done` status in the project.\r\n The user must be the project creator or have `project-planning-data:write` permission.", + "operationId": "PutProjectTaskStatusByProjectIdAndTaskStatusId", + "parameters": [ + { + "name": "projectId", "in": "path", - "description": "The id of the action.", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskStatusId", + "in": "path", + "description": "The id of the task status to update.", "required": true, "schema": { "type": "string", @@ -18016,19 +28042,26 @@ } ], "requestBody": { - "description": "The model to update the order.", + "description": "The tmodel containing the task status data.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateOrderForm" + "$ref": "#/components/schemas/TaskStatusForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskStatus" + } + } + } }, "400": { "description": "Bad Request", @@ -18039,6 +28072,26 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -18056,18 +28109,19 @@ } } }, - "/projects/{projectId}/automations/{automationId}/execute": { + "/projects/{projectId}/taskstatuses/{taskStatusId}/delete": { "post": { "tags": [ - "Project Automations" + "TaskStatuses" ], - "summary": "Executes a manual automation for a task.", - "description": "Can be used to trigger an automation that uses a manual trigger for a specific task.\r\n The calling user becomes the initiator of the automation execution.\r\n The user must have write permissions on the specified task.", - "operationId": "PostExecuteProjectAutomation", + "summary": "Deletes the specified project task status.", + "description": "Deletes the specified status. If tasks still use it, provide another status to receive those tasks. The last `todo` or `done` status cannot be deleted.\r\n The user must be the project creator or have `project-planning-data:write` permission.", + "operationId": "PostProjectTaskStatusDeleteByProjectIdAndTaskStatusId", "parameters": [ { "name": "projectId", "in": "path", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -18075,8 +28129,9 @@ } }, { - "name": "automationId", + "name": "taskStatusId", "in": "path", + "description": "The id of the task status.", "required": true, "schema": { "type": "string", @@ -18085,18 +28140,19 @@ } ], "requestBody": { + "description": "The model containing the id of the new task status to move tasks to.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AutomationExecuteForm" + "$ref": "#/components/schemas/TaskStatusDeleteForm" } } }, "required": true }, "responses": { - "202": { - "description": "Accepted" + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -18144,14 +28200,14 @@ } } }, - "/projects/{projectId}/autopilot": { - "delete": { + "/projects/{projectId}/timeentries": { + "get": { "tags": [ - "Autopilot" + "TimeEntries" ], - "summary": "Deletes the autopilot of the project with the specified id.", - "description": "Deletes the autopilot of the project with the specified id.\r\n To access and modify the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", - "operationId": "DeleteProjectsAutopilotByProjectId", + "summary": "Returns all time entries of the specified project.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTimeEntries", "parameters": [ { "name": "projectId", @@ -18162,11 +28218,33 @@ "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TimeTracking" + } + } + } + } } }, "security": [ @@ -18182,14 +28260,16 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/typeofwork": { "get": { "tags": [ - "Autopilot" + "ProjectTasks" ], - "summary": "Returns the autopilot of the project with the specified id.", - "description": "Returns NoContent if the project does not have an autopilot setup.\r\n To get the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectsAutopilotByProjectId", + "summary": "Returns types of work for the specified project.", + "description": "Returns types of work for connected or workspace projects.\r\n The user must have `project-planning-data:read` permission for the project.", + "operationId": "GetProjectTypesOfWorkByProjectId", "parameters": [ { "name": "projectId", @@ -18208,13 +28288,33 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Autopilot" + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeOfWork" + } } } } }, - "204": { - "description": "No Content" + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -18230,19 +28330,21 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/unlinkcustomfielddefinition": { "post": { "tags": [ - "Autopilot" + "CustomFields" ], - "summary": "Creates a new autopilot for the project with the specified id.", - "description": "Creates a new autopilot for the project with the specified id.\r\n Also creates and enables all alerts for the new autopilot.\r\n For this action, the user needs to be the owner of the project or must have 'read' permissions\r\n of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", - "operationId": "PostProjectsAutopilotByProjectId", + "summary": "Unlinks a custom field from the specified project.", + "description": "Unlinking the definition removes its values from tasks in the project.\r\n The user must have `project-master-data:write` permission or `write` permission on the specified project.", + "operationId": "PostProjectUnlinkCustomFieldDefinitionByProjectId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project to unlink the custom field definition from.", "required": true, "schema": { "type": "string", @@ -18251,23 +28353,46 @@ } ], "requestBody": { - "description": "The model used to create the autopilot.", + "description": "The model describing the custom field definition to unlink.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AutopilotPostForm" + "$ref": "#/components/schemas/UnlinkCustomFieldDefinitionForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Autopilot" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -18286,14 +28411,16 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projects/{projectId}/unlinkworkflow": { + "post": { "tags": [ - "Autopilot" + "Workflows" ], - "summary": "Updates the autopilot of the project with the specified id.", - "description": "Updates the autopilot of the project with the specified id.\r\n To access and modify the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", - "operationId": "PutProjectsAutopilotByProjectId", + "summary": "Unlinks a workflow from the specified project.", + "description": "Unlinks the workflow and clones its statuses into project-specific statuses. Custom fields and automations remain but are no longer synchronized with the workflow.\r\n The user must be the project creator or have `project-master-data:write` permission for the project.", + "operationId": "PostProjectUnlinkWorkflowByProjectId", "parameters": [ { "name": "projectId", @@ -18306,24 +28433,43 @@ } } ], - "requestBody": { - "description": "The model used to update the autopilot.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AutopilotPutForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Autopilot" + "$ref": "#/components/schemas/Project" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -18344,14 +28490,14 @@ } } }, - "/projects/{projectId}/changeprojecttype": { + "/projects/{projectId}/updateprojectmember": { "post": { "tags": [ - "Projects" + "ProjectMembers" ], - "summary": "Changes the specified project's type.", - "description": "Changes the specified project's type and applies the new type settings.\r\n The user must be the project creator or have `project-master-data:write` permission.", - "operationId": "PostProjectChangeProjectTypeByProjectId", + "summary": "Updates a member of the specified project.", + "description": "Changes the member's role or responsible status. The selected role must be available for the project's type, and only one responsible member is allowed.\r\n The user must be the project creator or have `project-master-data:manage` permission for the project.", + "operationId": "PostProjectUpdateProjectMemberByProjectId", "parameters": [ { "name": "projectId", @@ -18365,46 +28511,23 @@ } ], "requestBody": { - "description": "The model to change the project type.", + "description": "The model containing updated project member details.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChangeProjectTypeForm" + "$ref": "#/components/schemas/ProjectMemberForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectMember" } } } @@ -18425,14 +28548,14 @@ } } }, - "/projects/{projectId}/changestatus": { + "/projects/{projectId}/updateprojectstatusorder": { "post": { "tags": [ "Projects" ], - "summary": "Changes the specified project's status.", - "description": "Changes the specified project's status. The status must belong to the project's type; changing status can add task bundles and notify project members. Repeating the current status has no effect.\r\n The user must be the project creator or have `project-master-data:write` permission.", - "operationId": "PostProjectChangeStatusByProjectId", + "summary": "Updates a project's status order.", + "description": "Updates the order of statuses for the specified project.\r\n The user must be the project owner or have `project-manage-config:write` permission.", + "operationId": "PostProjectUpdateProjectStatusOrderByProjectId", "parameters": [ { "name": "projectId", @@ -18446,11 +28569,11 @@ } ], "requestBody": { - "description": "The model to change the project status.", + "description": "The model to update the project status order.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChangeProjectStatusForm" + "$ref": "#/components/schemas/UpdateProjectStatusOrderForm" } } }, @@ -18496,29 +28619,60 @@ } } }, - "/projects/{projectId}/comments": { - "delete": { + "/projectstatuses": { + "get": { "tags": [ - "ProjectComments" + "ProjectStatuses" ], - "summary": "Deletes all comments of the specified project.", - "description": "Deletes all comments of the specified project.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCommentsByProjectNameAndProjectId", + "summary": "Returns project statuses in the workspace.", + "description": "Returns active project statuses by default. Set `showArchived` to include archived statuses visible to the current user.\r\n The user must have access to each returned project status.", + "operationId": "GetProjectStatuses", "parameters": [ { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, + "name": "showArchived", + "in": "query", + "description": "Whether to include archived project statuses.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectStatus" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, "401": { "description": "Unauthorized", @@ -18544,36 +28698,26 @@ "x-access": { "any": "true" } - }, + } + }, + "/projectstatuses/{projectStatusId}": { "get": { "tags": [ - "ProjectComments" + "ProjectStatuses" ], - "summary": "Returns all comments of the project with the specified id.", - "description": "Returns all comments of the project with the specified id. The user needs read permissions on the project.\r\n\r\nAny authenticated user.", - "operationId": "GetCommentsByProjectNameAndProjectId", + "summary": "Returns the specified project status.", + "description": "Returns the project status with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectStatusById", "parameters": [ { - "name": "projectId", + "name": "projectStatusId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project status.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -18582,10 +28726,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Comment" - } + "$ref": "#/components/schemas/ProjectStatus" } } } @@ -18609,6 +28750,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -18625,18 +28776,18 @@ "any": "true" } }, - "post": { + "put": { "tags": [ - "ProjectComments" + "ProjectStatuses" ], - "summary": "Creates a new comment on the project with the specified id.", - "description": "Creates a new comment on the project with the specified id.\r\n A user can only create a comment for him/herself, except for admins and api users.\r\n \r\n To create a comment the user must have at least `read` permissions on the specified project.", - "operationId": "PostCommentsByProjectNameAndProjectId", + "summary": "Updates the specified project status.", + "description": "Updates the specified project status and returns the saved status.\r\n The user must be the project creator or have `project-master-data:write` permission.", + "operationId": "PutProjectStatusById", "parameters": [ { - "name": "projectId", + "name": "projectStatusId", "in": "path", - "description": "The id of the project to create the comment for.", + "description": "The id of the project status.", "required": true, "schema": { "type": "string", @@ -18645,11 +28796,11 @@ } ], "requestBody": { - "description": "The model to create the comment.", + "description": "The model to update the project status.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CommentForm" + "$ref": "#/components/schemas/ProjectStatusForm" } } }, @@ -18661,7 +28812,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/ProjectStatus" } } } @@ -18712,29 +28863,19 @@ } } }, - "/projects/{projectId}/comments/{commentId}": { - "delete": { + "/projectstatuses/{projectStatusId}/delete": { + "post": { "tags": [ - "ProjectComments" + "ProjectStatuses" ], - "summary": "Deletes the comment with the specified id on the project with the specified id.", - "description": "Deletes the comment with the specified id on the project with the specified id.\r\n The delete includes the reactions of the comment.\r\n If there are any replies to the comment, they will be deleted as well.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCommentByProjectNameAndProjectIdAndCommentId", + "summary": "Deletes the specified project status.", + "description": "Deletes the specified status. Project statuses in use must be replaced, and workflow statuses must be managed through the workflow.\r\n The user must be the project owner or have `project-manage-config:write` permission for the project.", + "operationId": "PostProjectStatusDeleteByProjectStatusId", "parameters": [ { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "commentId", + "name": "projectStatusId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the project status to delete.", "required": true, "schema": { "type": "string", @@ -18742,10 +28883,31 @@ } } ], + "requestBody": { + "description": "The model to delete the project status.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectStatusDeleteForm" + } + } + }, + "required": true + }, "responses": { "204": { "description": "No Content" }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "401": { "description": "Unauthorized", "content": { @@ -18780,29 +28942,21 @@ "x-access": { "any": "true" } - }, - "get": { + } + }, + "/projectstatuses/{projectStatusId}/setarchived": { + "post": { "tags": [ - "ProjectComments" + "ProjectStatuses" ], - "summary": "Returns the comment with the specified id of the project with the specified id.", - "description": "Returns the comment with the specified id of the project with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetCommentByProjectNameAndProjectIdAndCommentId", + "summary": "Sets the archived flag for a project status.", + "description": "Sets the archived flag for a project status. Archived statuses remain available for existing projects. The user must have permission to access the requested resource.", + "operationId": "PostProjectStatusSetArchivedByProjectStatusId", "parameters": [ { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "commentId", + "name": "projectStatusId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the project status.", "required": true, "schema": { "type": "string", @@ -18810,13 +28964,34 @@ } } ], + "requestBody": { + "description": "The model to set the archived flag for the project status.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ArchivedForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/ProjectStatus" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -18830,6 +29005,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -18845,70 +29030,90 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projecttemplates": { + "get": { "tags": [ - "ProjectComments" + "ProjectTemplates" ], - "summary": "Updates the comment with the specified id on the project with the specified id.", - "description": "To update a comment the user must either have at least `read` permissions on the specified project, be the creator of the comment or be admin.", - "operationId": "PutCommentByProjectNameAndProjectIdAndCommentId", + "summary": "Returns project templates.", + "description": "Returns project templates. Each template includes its configured project defaults. The user must have permission to access the requested resource.", + "operationId": "GetProjectTemplates", "parameters": [ { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" }, { - "name": "commentId", - "in": "path", - "description": "The id of the comment.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The model with the updated comment information.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CommentPutForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectTemplate" + } } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "ProjectTemplates" + ], + "summary": "Creates a new project template.", + "description": "Creates a new project template. The new template supplies defaults for future projects.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplate", + "requestBody": { + "description": "The model to create the project template.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectTemplateForm" + } + } }, - "401": { - "description": "Unauthorized", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectTemplate" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -18929,46 +29134,25 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/comments/{commentId}/react": { + "/projecttemplates/deletetags": { "post": { "tags": [ - "ProjectComments" - ], - "summary": "Updates the reactions of the comment with the specified id on the project with the specified id.", - "description": "To update a reaction of a comment the user must have at least `read` permissions on the specified project.", - "operationId": "PostCommentReactByProjectNameAndProjectIdAndCommentId", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "commentId", - "in": "path", - "description": "The id of the comment.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "ProjectTemplateTags" ], + "summary": "Removes a tag from project templates.", + "description": "Removes a tag from project templates. The submitted tags are applied to the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplatesDeleteTags", "requestBody": { - "description": "The model used to update the reactions of the comment with the specified id.", + "description": "The model to remove the tag from all project templates.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ReactionForm" + "$ref": "#/components/schemas/DeleteTagForm" } } }, @@ -18978,8 +29162,8 @@ "204": { "description": "No Content" }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -18988,8 +29172,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -19010,30 +29194,19 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/customfielddefinitions": { + "/projecttemplates/tags": { "get": { "tags": [ - "CustomFields" - ], - "summary": "Returns custom fields for the specified project.", - "description": "Returns definitions linked directly to the project or through a workflow.\r\n The user must have `project-master-data:read` permission or access to at least one task in the project.", - "operationId": "GetProjectCustomFieldDefinitionsByProjectId", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "ProjectTemplateTags" ], + "summary": "Returns tags in use by project templates.", + "description": "Returns tags in use by project templates. The result includes tags shared by project templates. The user must have permission to access the requested resource.", + "operationId": "GetProjectTemplatesTags", "responses": { "200": { "description": "OK", @@ -19042,7 +29215,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" + "$ref": "#/components/schemas/BaseTagModel" } } } @@ -19057,16 +29230,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -19084,60 +29247,31 @@ } } }, - "/projects/{projectId}/customfielddefinitions/{customFieldDefinitionId}": { - "put": { + "/projecttemplates/updatetags": { + "post": { "tags": [ - "CustomFields" - ], - "summary": "Updates custom field order in a project.", - "description": "Updates the order of a custom field definition linked to the specified project.\r\n The user must have `project-master-data:write` permission or `write` permission on the specified project.", - "operationId": "PutProjectCustomFieldDefinitionByProjectIdAndCustomFieldDefinitionId", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "customFieldDefinitionId", - "in": "path", - "description": "The id of the custom field definition.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "ProjectTemplateTags" ], + "summary": "Updates a tag globally for project templates.", + "description": "Updates a tag globally for project templates. The submitted tags are applied to the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateUpdateTags", "requestBody": { - "description": "The model used to update the order of the custom field definition.", + "description": "The model containing the tag updates.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldOrderPutForm" + "$ref": "#/components/schemas/TagUpdateForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomFieldOrderForm" - } - } - } + "204": { + "description": "No Content" }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -19146,8 +29280,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -19168,23 +29302,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/delete": { - "post": { + "/projecttemplates/{projectTemplateId}": { + "delete": { "tags": [ - "Projects" + "ProjectTemplates" ], - "summary": "Deletes the specified project.", - "description": "Deletes the specified project. Related tasks are deleted by default, while related time entries lose their project and task links. Set `deleteTimeTrackings` to delete those time entries as well.\r\n \r\n The user must be the project creator or have `project-master-data:write` permission.", - "operationId": "PostProjectDeleteByProjectId", + "summary": "Deletes a project template.", + "description": "Deletes a project template. Projects already created from the template are not changed.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "DeleteProjectTemplateById", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template to delete.", "required": true, "schema": { "type": "string", @@ -19192,27 +29327,52 @@ } } ], - "requestBody": { - "description": "The model containing deletion options.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectDeleteForm" - } - } - }, - "required": true - }, "responses": { "204": { "description": "No Content" - }, - "401": { - "description": "Unauthorized", + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + }, + "get": { + "tags": [ + "ProjectTemplates" + ], + "summary": "Returns a specific project template.", + "description": "Returns a specific project template. The response includes the template's project configuration. The user must have permission to access the requested resource.", + "operationId": "GetProjectTemplateById", + "parameters": [ + { + "name": "projectTemplateId", + "in": "path", + "description": "The id of the project template to retrieve.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectTemplate" } } } @@ -19241,21 +29401,19 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/deletetags": { - "post": { + }, + "put": { "tags": [ - "ProjectTags" + "ProjectTemplates" ], - "summary": "Removes tags from the specified project.", - "description": "Removes the submitted tags from the specified project.\r\n The user must have `project-master-data:write` permission for the specified project.", - "operationId": "PostProjectDeleteTagsByProjectId", + "summary": "Updates project template.", + "description": "Updates project template. The template defaults are changed for future projects.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutProjectTemplateById", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project to remove tags from.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -19264,38 +29422,29 @@ } ], "requestBody": { - "description": "The model containing the tags to remove.", + "description": "The model to update the project template.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DeleteTagForm" - } + "$ref": "#/components/schemas/ProjectTemplateForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "207": { - "description": "Multi-Status" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectTemplate" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -19326,42 +29475,45 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/documents": { - "get": { + "/projecttemplates/{projectTemplateId}/addtags": { + "post": { "tags": [ - "Documents" + "ProjectTemplateTags" ], - "summary": "Returns documents in the specified project.", - "description": "Returns non-trashed documents visible in the specified project.\r\n The user must have permission to view the returned documents.", - "operationId": "GetProjectDocumentsByProjectId", + "summary": "Adds a batch of tags to the project template.", + "description": "Adds a batch of tags to the project template. The submitted tags are applied to the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateAddTagsByProjectTemplateId", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template to add tags to.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], + "requestBody": { + "description": "The model containing the tags to add.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TagForm" + } + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", @@ -19370,11 +29522,41 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/DocumentModel" + "$ref": "#/components/schemas/BaseTagModel" } } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -19388,40 +29570,29 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/documents/trash": { + "/projecttemplates/{projectTemplateId}/automations": { "get": { "tags": [ - "Documents" + "Project Template Automations" ], - "summary": "Returns trashed documents in the specified project.", - "description": "Returns deleted documents visible in the specified project.\r\n The user must have permission to view the returned documents.", - "operationId": "GetProjectDocumentsTrashByProjectId", + "summary": "Returns all automations for a project template.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTemplateAutomations", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -19432,7 +29603,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/DocumentModel" + "$ref": "#/components/schemas/Automation" } } } @@ -19452,21 +29623,19 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/files/byuploadid": { + }, "post": { "tags": [ - "FileUpload" + "Project Template Automations" ], - "summary": "Creates a file from an upload id.", - "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file project from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", - "operationId": "PostUploadByUploadId", + "summary": "Creates a new automation for a given project template.", + "description": "Creates a new automation of the project template with the specified id.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateAutomation", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project to attach the file to.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -19475,11 +29644,11 @@ } ], "requestBody": { - "description": "The model describing the uploaded file metadata.", + "description": "The model to create the automation.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UploadByUploadIdForm" + "$ref": "#/components/schemas/AutomationTriggerForm" } } }, @@ -19491,13 +29660,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/Automation" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -19518,23 +29687,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/files/{fileId}": { - "get": { + "/projecttemplates/{projectTemplateId}/automations/{automationId}": { + "delete": { "tags": [ - "Project Files" + "Project Template Automations" ], - "summary": "Returns the file with the specified id of the project with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByProjectNameAndProjectIdAndFileId", + "summary": "Deletes the specified automation for a given projecttemplate.", + "description": "Deletes the specified automation with its trigger and all its values.\r\n To delete the the automation the user needs to have 'write' permissions of\r\n the feature 'project-manage-config' globally.\r\n If the 'removeFromProject' boolean is set to true, all automations in projects of that\r\n project template created from that automation template are deleted aswell.\r\n Automations created from a workflow cannot be deleted via this endpoint.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "DeleteProjectTemplateAutomation", "parameters": [ { - "name": "projectId", + "name": "automationId", "in": "path", - "description": "The id of the project.", + "description": "The id of the automation.", "required": true, "schema": { "type": "string", @@ -19542,39 +29712,31 @@ } }, { - "name": "fileId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the file.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "removeFromProjects", + "in": "query", + "description": "Whether to delete the automation also from all projects of the projecttemplate.", + "required": true, + "schema": { + "type": "boolean" + } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -19595,33 +29757,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } - } - }, - "/projects/{projectId}/files/{fileId}/versions/{versionId}": { + }, "get": { "tags": [ - "Project Files" + "Project Template Automations" ], - "summary": "Returns the project file version with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByProjectNameAndProjectIdAndFileIdAndVersionId", + "summary": "Returns a specific automation for a projecttemplate.", + "description": "Returns a specific automation of the projecttemplate with the specified id.\r\n Returns NotFound if the automation doesnt exist.\r\n To get the the automation data the user needs to have 'read' permissions of\r\n the feature 'project-manage-config' globally.\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", + "operationId": "GetProjectTemplateAutomation", "parameters": [ { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "automationId", "in": "path", - "description": "The id of the file.", + "description": "The id of the automation.", "required": true, "schema": { "type": "string", @@ -19629,43 +29780,23 @@ } }, { - "name": "versionId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the file version.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileVersion" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + "format": "uuid" } - }, - "404": { - "description": "Not Found", + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Automation" } } } @@ -19682,23 +29813,30 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "read" } - } - }, - "/projects/{projectId}/linkcustomfielddefinition": { - "post": { + }, + "put": { "tags": [ - "CustomFields" + "Project Template Automations" ], - "summary": "Links a custom field to the specified project.", - "description": "Links the specified custom field definition to the project.\r\n The user must have `project-master-data:write` permission or `write` permission on the specified project.", - "operationId": "PostProjectLinkCustomFieldDefinitionByProjectId", + "summary": "Updates the automation with the specified id for a given projecttemplate.", + "description": "Updates the specified automation for a specific projecttemplate.\r\n If the automation was created from a workflow, only the Enabled flag can be changed.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutProjectTemplateAutomation", "parameters": [ { - "name": "projectId", + "name": "automationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -19707,42 +29845,28 @@ } ], "requestBody": { - "description": "The model used to link the custom field definition.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LinkCustomFieldDefinitionForm" + "$ref": "#/components/schemas/AutomationPutForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Automation" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -19763,23 +29887,34 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/linkworkflow": { - "post": { + "/projecttemplates/{projectTemplateId}/automations/{automationId}/actions": { + "get": { "tags": [ - "Workflows" + "Project Template Automations" ], - "summary": "Links a workflow to the specified project.", - "description": "Links the specified workflow to the project and migrates existing statuses using the provided mapping. If the project has no statuses, workflow statuses are assigned automatically. Switching workflows requires mappings for existing statuses.\r\n The user must be the project creator or have `project-master-data:write` permission for the project.", - "operationId": "PostProjectLinkWorkflowByProjectId", + "summary": "Gets the actions of an automation of a project template.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", + "operationId": "GetProjectTemplateAutomationActions", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", "required": true, "schema": { "type": "string", @@ -19787,54 +29922,16 @@ } } ], - "requestBody": { - "description": "The link workflow form.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LinkWorkflowForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/Action" + } } } } @@ -19851,23 +29948,32 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "read" } - } - }, - "/projects/{projectId}/members": { - "get": { + }, + "post": { "tags": [ - "Projects" + "Project Template Automations" ], - "summary": "Returns members of the specified project.", - "description": "Returns members assigned to the specified project.\r\n The user must be the project creator or have `project-master-data:read` permission.", - "operationId": "GetProjectMembersByProjectId", + "summary": "Creates a new action for an automation of a project template.", + "description": "Creates an action for a specific automation of a project template including all its values. Actions cannot be added to automations created from a workflow.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateAutomationAction", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", "required": true, "schema": { "type": "string", @@ -19875,32 +29981,30 @@ } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectMember" - } - } + "requestBody": { + "description": "The model to create an action.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActionForm" } } }, - "401": { - "description": "Unauthorized", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Action" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -19921,23 +30025,44 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/milestones": { - "get": { + "/projecttemplates/{projectTemplateId}/automations/{automationId}/actions/{actionId}": { + "delete": { "tags": [ - "ProjectMilestones" + "Project Template Automations" ], - "summary": "Returns milestones for the specified project.", - "description": "Returns milestones assigned to the specified project.\r\n The user must have `project-planning-data:read` permission for the project.", - "operationId": "GetProjectMilestonesByProjectId", + "summary": "Deletes an action for an automation of a project template.", + "description": "Deletes an action for a specific automation of a project template including all its values. Actions of automations created from a workflow cannot be deleted.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "DeleteProjectTemplateAutomationAction", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "description": "The id of the action.", "required": true, "schema": { "type": "string", @@ -19946,21 +30071,11 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectMilestone" - } - } - } - } + "204": { + "description": "No Content" }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -19981,22 +30096,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } - } - }, - "/projects/{projectId}/projectstatuses": { + }, "get": { "tags": [ - "ProjectStatuses" + "Project Template Automations" ], - "summary": "Returns statuses for the specified project.", - "description": "Returns statuses relevant to the specified project. If the project is linked to a workflow, the workflow's statuses are returned.\r\n The user must be the project creator or have `project-master-data:read` permission.", - "operationId": "GetProjectProjectStatusesByProjectId", + "summary": "Gets a specific action for an automation of a projecttemplate.", + "description": "Returns a specific action for a specific automation of a project template including all its values.\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", + "operationId": "GetProjectTemplateAutomationAction", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -20004,16 +30119,24 @@ } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, { - "$ref": "#/components/parameters/filterby" + "name": "actionId", + "in": "path", + "description": "The id of the action.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -20022,30 +30145,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectStatus" - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Action" } } } @@ -20062,21 +30162,42 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "read" } }, - "post": { + "put": { "tags": [ - "ProjectStatuses" + "Project Template Automations" ], - "summary": "Creates a status for the specified project.", - "description": "Creates a project status. Projects linked to a workflow must manage statuses through that workflow.\r\n The user must be the project owner or have `project-manage-config:write` permission.", - "operationId": "PostProjectProjectStatusesByProjectId", + "summary": "Updates a specifc action of an automation of a project template.", + "description": "Returns an updated action for a specific automation of a project template including all its values. Actions of automations created from a workflow cannot be modified.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutProjectTemplateAutomationAction", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "description": "The id of the action.", "required": true, "schema": { "type": "string", @@ -20085,11 +30206,11 @@ } ], "requestBody": { - "description": "The model to create the project status.", + "description": "The model to update an action.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectStatusForm" + "$ref": "#/components/schemas/ActionForm" } } }, @@ -20101,7 +30222,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectStatus" + "$ref": "#/components/schemas/Action" } } } @@ -20115,26 +30236,6 @@ } } } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -20148,23 +30249,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/projecttasks": { - "get": { + "/projecttemplates/{projectTemplateId}/automations/{automationId}/actions/{actionId}/updateorder": { + "post": { "tags": [ - "ProjectTasks" + "Project Template Automations" ], - "summary": "Returns tasks for the specified project.", - "description": "Returns project tasks visible to the current user.\r\n The user must have `project-planning-data:read` permission; otherwise only assigned tasks are returned.", - "operationId": "GetProjectProjectTasksByProjectId", + "summary": "Updates the order of a project template automation action.", + "description": "Actions of automations created from a workflow cannot be modified.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostUpdateProjectTemplateAutomationActionOrder", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -20172,34 +30274,43 @@ } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, { - "$ref": "#/components/parameters/filterby" + "name": "actionId", + "in": "path", + "description": "The id of the action.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } - } + "requestBody": { + "description": "The model to update the order.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrderForm" } } }, - "404": { - "description": "Not Found", + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -20220,23 +30331,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/projecttasks/{taskId}": { - "get": { + "/projecttemplates/{projectTemplateId}/automations/{automationId}/reapply": { + "post": { "tags": [ - "ProjectTasks" + "Project Template Automations" ], - "summary": "Returns the specified project task.", - "description": "Returns the specified task when it belongs to the project.\r\n The user must have `project-planning-data:read` permission or be assigned to the task.", - "operationId": "GetProjectProjectTaskByProjectIdAndTaskId", + "summary": "Reapplies the automation to all projects of this specific project template.", + "description": "Returns NotFound if the automation doesnt exist.\r\n To execute this you need to have 'write' permissions of\r\n the feature 'project-manage-config' globally.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostReapplyProjectTemplateAutomation", "parameters": [ { - "name": "projectId", + "name": "automationId", "in": "path", - "description": "The id of the project.", + "description": "The id of the automation.", "required": true, "schema": { "type": "string", @@ -20244,9 +30356,9 @@ } }, { - "name": "taskId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the task.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -20254,36 +30366,9 @@ } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskModel" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "responses": { + "204": { + "description": "No Content" } }, "security": [ @@ -20297,33 +30382,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/projecttasks/{taskId}/changeproject": { - "post": { + "/projecttemplates/{projectTemplateId}/customfielddefinitions": { + "get": { "tags": [ - "ProjectTasks" + "CustomFields" ], - "summary": "Moves a task to another project.", - "description": "Moves the specified task and its subtasks, related time entries, and tracked-time totals to another project.\r\n The user must have `project-planning-data:write` permission on both projects.", - "operationId": "PostProjectProjectTaskChangeProjectByProjectIdAndTaskId", + "summary": "Returns custom fields.", + "description": "Returns custom fields. The result includes fields linked directly or through its workflow. The user must have permission to access the requested resource.", + "operationId": "GetProjectTemplateCustomFieldDefinitionsByProjectTemplateId", "parameters": [ { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the task.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -20331,37 +30407,16 @@ } } ], - "requestBody": { - "description": "The model to change the project of the task.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChangeProjectForm" - } - } - }, - "required": true - }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" + } } } } @@ -20392,19 +30447,19 @@ } } }, - "/projects/{projectId}/projecttasks/{taskId}/checklistitems": { - "get": { + "/projecttemplates/{projectTemplateId}/customfielddefinitions/{customFieldDefinitionId}": { + "put": { "tags": [ - "ChecklistItems" + "CustomFields" ], - "summary": "Returns checklist items for a project task.", - "description": "Returns checklist items for the specified project task.\r\n The user must have `project-planning-data:read` permission or be assigned to the task.", - "operationId": "GetProjectProjectTaskChecklistItemsByProjectIdAndTaskId", + "summary": "Updates custom field order in a template.", + "description": "Updates custom field order in a template. The custom field order is stored for the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutProjectTemplateCustomFieldDefinitionByProjectTemplateIdAndCustomFieldDefinitionId", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -20412,9 +30467,9 @@ } }, { - "name": "taskId", + "name": "customFieldDefinitionId", "in": "path", - "description": "The id of the task.", + "description": "The id of the custom field definition.", "required": true, "schema": { "type": "string", @@ -20422,26 +30477,24 @@ } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChecklistItem" - } - } + "requestBody": { + "description": "The model used to update the order of the custom field definition.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFieldOrderPutForm" } } }, - "401": { - "description": "Unauthorized", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/CustomFieldOrderForm" } } } @@ -20468,43 +30521,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/projecttasks/{taskId}/checklistitems/{checklistItemId}": { - "get": { + "/projecttemplates/{projectTemplateId}/deletetags": { + "post": { "tags": [ - "ChecklistItems" + "ProjectTemplateTags" ], - "summary": "Returns a checklist item for a project task.", - "description": "Returns the specified checklist item for the project task.\r\n The user must have `project-planning-data:read` permission or be assigned to the task.", - "operationId": "GetProjectProjectTaskChecklistItemByProjectIdAndTaskIdAndChecklistItemId", + "summary": "Removes tags from the project template.", + "description": "Removes tags from the project template. The submitted tags are applied to the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateDeleteTagsByProjectTemplateId", "parameters": [ { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "checklistItemId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the checklist item.", + "description": "The id of the project template to remove tags from.", "required": true, "schema": { "type": "string", @@ -20512,13 +30546,33 @@ } } ], + "requestBody": { + "description": "The model containing the tags to delete.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DeleteTagForm" + } + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "207": { + "description": "Multi-Status" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItem" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -20555,23 +30609,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/removeprojectmember": { + "/projecttemplates/{projectTemplateId}/linkcustomfielddefinition": { "post": { "tags": [ - "Projects" + "CustomFields" ], - "summary": "Removes a member from the specified project.", - "description": "Removes the specified member from the project.\r\n The user must be the project creator or have `project-master-data:manage` permission.", - "operationId": "PostProjectRemoveProjectMemberByProjectId", + "summary": "Links a custom field definition to the template.", + "description": "Links a custom field definition to the template. The custom field is available on tasks created from the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateLinkCustomFieldDefinitionByProjectTemplateId", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -20580,11 +30635,11 @@ } ], "requestBody": { - "description": "The model to remove the project member.", + "description": "The model used to link the custom field definition.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMemberRemoveForm" + "$ref": "#/components/schemas/LinkCustomFieldDefinitionForm" } } }, @@ -20604,16 +30659,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -20636,23 +30681,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/retainers": { + "/projecttemplates/{projectTemplateId}/milestones": { "get": { "tags": [ - "Retainers" + "ProjectMilestoneTemplates" ], - "summary": "Returns retainers for the specified project.", - "description": "Returns retainers associated with the specified project.\r\n The user must have `project-master-data:read` permission for the project.", - "operationId": "GetProjectRetainersByProjectId", + "summary": "Returns milestone templates of the given template.", + "description": "Returns milestone templates of the given template. Each milestone template belongs to the selected project template.\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", + "operationId": "GetProjectTemplateMilestonesByProjectTemplateId", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -20680,7 +30726,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Retainer" + "$ref": "#/components/schemas/ProjectMilestoneTemplate" } } } @@ -20698,21 +30744,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "read" } }, "post": { "tags": [ - "Retainers" + "ProjectMilestoneTemplates" ], - "summary": "Creates a retainer for the specified project.", - "description": "Creates a retainer and marks the project as a retainer project. Retainer budgets are created from its dates. Retainers cannot overlap, and only one active retainer is allowed per project.\r\n The user must have `project-master-data:write` permission for the project.", - "operationId": "PostProjectRetainersByProjectId", + "summary": "Creates milestone template for the template.", + "description": "Creates milestone template for the template. Projects created from the template can use this milestone.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateMilestonesByProjectTemplateId", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project to create a retainer for.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -20721,11 +30768,11 @@ } ], "requestBody": { - "description": "The model to create a retainer.", + "description": "The model containing milestone template details.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RetainerForm" + "$ref": "#/components/schemas/ProjectMilestoneTemplateForm" } } }, @@ -20737,27 +30784,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Retainer" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectMilestoneTemplate" } } } @@ -20774,23 +30801,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/retainers/{retainerId}": { + "/projecttemplates/{projectTemplateId}/milestones/{milestoneId}": { "delete": { "tags": [ - "Retainers" + "ProjectMilestoneTemplates" ], - "summary": "Deletes a retainer from the specified project.", - "description": "Deletes the specified retainer and its related budgets.\r\n The user must have `project-master-data:write` permission for the project.", - "operationId": "DeleteProjectRetainerByProjectIdAndRetainerId", + "summary": "Deletes a milestone for the project template.", + "description": "Deletes a milestone for the project template. The milestone is removed from the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "DeleteProjectTemplateMilestoneByProjectTemplateIdAndMilestoneId", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -20798,9 +30826,9 @@ } }, { - "name": "retainerId", + "name": "milestoneId", "in": "path", - "description": "The id of the retainer.", + "description": "The id of the milestone.", "required": true, "schema": { "type": "string", @@ -20811,26 +30839,6 @@ "responses": { "204": { "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -20844,21 +30852,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } }, "get": { "tags": [ - "Retainers" + "ProjectMilestoneTemplates" ], - "summary": "Returns the specified project retainer.", - "description": "Returns the specified retainer for the project.\r\n The user must have `project-master-data:read` permission for the project.", - "operationId": "GetProjectRetainerByProjectIdAndRetainerId", + "summary": "Returns a milestone by id for the project template.", + "description": "Returns a milestone by id for the project template. The response includes the milestone's dates and status.\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", + "operationId": "GetProjectTemplateMilestoneByProjectTemplateIdAndMilestoneId", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -20866,9 +30875,9 @@ } }, { - "name": "retainerId", + "name": "milestoneId", "in": "path", - "description": "The id of the retainer.", + "description": "The id of the milestone.", "required": true, "schema": { "type": "string", @@ -20882,17 +30891,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Retainer" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectMilestoneTemplate" } } } @@ -20909,21 +30908,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "read" } }, "put": { "tags": [ - "Retainers" + "ProjectMilestoneTemplates" ], - "summary": "Updates the specified project retainer.", - "description": "Updates the retainer settings. Date changes cannot overlap another retainer, and the retainer period cannot be changed.\r\n The user must have `project-master-data:write` permission for the project.", - "operationId": "PutProjectRetainerByProjectIdAndRetainerId", + "summary": "Updates a milestone template for the template.", + "description": "Updates a milestone template for the template. The submitted dates and status replace the existing values.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutProjectTemplateMilestoneByProjectTemplateIdAndMilestoneId", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project to update the retainer for.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -20931,9 +30931,9 @@ } }, { - "name": "retainerId", + "name": "milestoneId", "in": "path", - "description": "The id of the retainer.", + "description": "The id of the milestone.", "required": true, "schema": { "type": "string", @@ -20942,11 +30942,11 @@ } ], "requestBody": { - "description": "The model to update the retainer.", + "description": "The model containing updated milestone template details.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RetainerForm" + "$ref": "#/components/schemas/ProjectMilestoneTemplateForm" } } }, @@ -20958,17 +30958,58 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Retainer" + "$ref": "#/components/schemas/ProjectMilestoneTemplate" } } } - }, - "400": { - "description": "Bad Request", + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/projecttemplates/{projectTemplateId}/projectstatuses": { + "get": { + "tags": [ + "ProjectTemplates" + ], + "summary": "Returns project statuses of a project template.", + "description": "Returns project statuses of a project template. The result includes statuses available to the template. The user must have permission to access the requested resource.", + "operationId": "GetProjectTemplateProjectStatusesByProjectTemplateId", + "parameters": [ + { + "name": "projectTemplateId", + "in": "path", + "description": "The id of the project template to retrieve statuses for.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectStatus" + } } } } @@ -20997,21 +31038,19 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/setcustomfields": { + }, "post": { "tags": [ - "CustomFields" + "ProjectTemplates" ], - "summary": "Sets custom field values for a project.", - "description": "Sets the submitted custom field values on the specified project.\r\n The user must have `project-master-data:write` permission for the project.", - "operationId": "PostProjectSetCustomFieldsByProjectId", + "summary": "Adds a project status to a project template.", + "description": "Adds a project status to a project template. Projects created from the template can use this status.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateProjectStatusesByProjectTemplateId", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -21020,22 +31059,26 @@ } ], "requestBody": { - "description": "The list of custom field values to set.", + "description": "The model to add the project status to the template.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomFieldPostForm" - } + "$ref": "#/components/schemas/ProjectStatusForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectStatus" + } + } + } }, "400": { "description": "Bad Request", @@ -21079,23 +31122,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/setprojectkey": { + "/projecttemplates/{projectTemplateId}/setcustomfields": { "post": { "tags": [ - "Projects" + "CustomFields" ], - "summary": "Updates the specified project's key.", - "description": "Updates the project key and the identifiers of tasks in that project. The key must be unique in the workspace and use uppercase letters, numbers, or dashes.\r\n\r\nThe user must be an admin or have `project-master-data:write` permissions.", - "operationId": "PostProjectSetProjectKeyByProjectId", + "summary": "Sets the custom fields for a project template.", + "description": "Sets the custom fields for a project template. The custom fields become available to tasks created from the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateSetCustomFieldsByProjectTemplateId", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -21104,45 +31148,22 @@ } ], "requestBody": { + "description": "The list of custom field values to set.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateProjectKeyForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFieldPostForm" + } } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -21157,23 +31178,23 @@ ], "x-access": { "admin": "true", - "project-master-data": "write" + "project-manage-config": "write" } } }, - "/projects/{projectId}/tags": { + "/projecttemplates/{projectTemplateId}/tags": { "get": { "tags": [ - "ProjectTags" + "ProjectTemplateTags" ], - "summary": "Returns tags for the specified project.", - "description": "Returns tags assigned to the specified project.\r\n The user must have `project-master-data:read` permission for the specified project.", - "operationId": "GetProjectTagsByProjectId", + "summary": "Returns the tags of the project template.", + "description": "Returns the tags of the project template. The result includes tags currently used by that template.\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", + "operationId": "GetProjectTemplateTagsByProjectTemplateId", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project to get tags for.", + "description": "The id of the project template to get tags for.", "required": true, "schema": { "type": "string", @@ -21207,16 +31228,6 @@ } } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "401": { "description": "Unauthorized", "content": { @@ -21249,23 +31260,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "read" } } }, - "/projects/{projectId}/taskdependencies": { + "/projecttemplates/{projectTemplateId}/taskbundle": { "get": { "tags": [ - "TaskDependencies" + "ProjectTemplates" ], - "summary": "Returns task dependencies for a project.", - "description": "Returns dependencies involving tasks in the specified project.\r\n The user must have `project-planning-data:read` permission for the project.", - "operationId": "GetProjectTaskdependenciesByProjectId", + "summary": "Returns the bundle associated with a template.", + "description": "Returns the bundle associated with a template. The response includes the task bundle linked to the template. The user must have permission to access the requested resource.", + "operationId": "GetProjectTemplateTaskBundleByProjectTemplateId", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -21279,10 +31291,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskDependency" - } + "$ref": "#/components/schemas/TaskBundleResult" } } } @@ -21313,34 +31322,25 @@ } } }, - "/projects/{projectId}/tasklists": { + "/projecttemplates/{projectTemplateId}/taskstatuses": { "get": { "tags": [ - "TaskLists" + "ProjectTemplates" ], - "summary": "Returns task lists for the specified project.", - "description": "Returns task lists visible in the specified project.\r\n The user must have `project-planning-data:read` permission for the project.", - "operationId": "GetProjectTaskListsByProjectId", + "summary": "Returns task statuses of the project template.", + "description": "Returns task statuses of the project template. The result includes statuses available to the template. The user must have permission to access the requested resource.", + "operationId": "GetProjectTemplateTaskStatusesByProjectTemplateId", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", "format": "uuid" } }, - { - "name": "showArchived", - "in": "query", - "description": "The show Archived.", - "schema": { - "type": "boolean", - "default": false - } - }, { "$ref": "#/components/parameters/page" }, @@ -21362,14 +31362,14 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TaskList" + "$ref": "#/components/schemas/TaskStatus" } } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -21395,16 +31395,16 @@ }, "post": { "tags": [ - "TaskLists" + "ProjectTemplates" ], - "summary": "Creates a task list in the specified project.", - "description": "Creates a task list in the specified project.\r\n The user must have `project-planning-data:manage` permission for the project.", - "operationId": "PostProjectTaskListsByProjectId", + "summary": "Creates a task status for the template.", + "description": "Creates a task status for the template. Tasks created from the template can use this status.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateTaskStatusesByProjectTemplateId", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -21413,11 +31413,11 @@ } ], "requestBody": { - "description": "The task List form.", + "description": "The task Status form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskListForm" + "$ref": "#/components/schemas/TaskStatusForm" } } }, @@ -21429,7 +31429,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskList" + "$ref": "#/components/schemas/TaskStatus" } } } @@ -21444,16 +31444,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -21476,78 +31466,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/tasklists/{taskListId}": { - "get": { - "tags": [ - "TaskLists" - ], - "summary": "Returns the specified task list.", - "description": "Returns the specified task list when it is visible in the project.\r\n The user must have `project-planning-data:read` permission for the project.", - "operationId": "GetProjectTaskListByProjectIdAndTaskListId", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListId", - "in": "path", - "description": "The id of the task list.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskList" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "put": { + "/projecttemplates/{projectTemplateId}/taskstatuses/{taskStatusId}": { + "delete": { "tags": [ - "TaskLists" + "ProjectTemplates" ], - "summary": "Updates the specified task list.", - "description": "Updates the specified task list's name and settings.\r\n The user must have `project-planning-data:manage` permission for the project.", - "operationId": "PutProjectTaskListByProjectIdAndTaskListId", + "summary": "Deletes the task status of the project template.", + "description": "Deletes the task status of the project template. The last status of type 'todo' or 'done' cannot be deleted.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "DeleteProjectTemplateTaskStatusByProjectTemplateIdAndTaskStatusId", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -21555,9 +31491,9 @@ } }, { - "name": "taskListId", + "name": "taskStatusId", "in": "path", - "description": "The id of the task list.", + "description": "The id of the task status.", "required": true, "schema": { "type": "string", @@ -21565,27 +31501,9 @@ } } ], - "requestBody": { - "description": "The task List Put form.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskListPutForm" - } - } - }, - "required": true - }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskList" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -21597,8 +31515,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -21619,23 +31537,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } - } - }, - "/projects/{projectId}/tasklists/{taskListId}/addtasks": { - "post": { + }, + "get": { "tags": [ - "TaskLists" + "ProjectTemplates" ], - "summary": "Adds tasks to the specified task list.", - "description": "Adds the submitted tasks to the specified task list and returns their resulting order.\r\n The user must have `project-planning-data:write` permission for the project and tasks.", - "operationId": "PostProjectTaskListAddTasksByProjectIdAndTaskListId", + "summary": "Returns the task status of the project template.", + "description": "Returns the task status of the project template. The result includes statuses available to the template. The user must have permission to access the requested resource.", + "operationId": "GetProjectTemplateTaskStatusByProjectTemplateIdAndTaskStatusId", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -21643,9 +31560,9 @@ } }, { - "name": "taskListId", + "name": "taskStatusId", "in": "path", - "description": "The id of the task list.", + "description": "The id of the task status.", "required": true, "schema": { "type": "string", @@ -21653,36 +31570,19 @@ } } ], - "requestBody": { - "description": "The task To Task List list.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskToTaskList" - } - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ReorderingResult" - } + "$ref": "#/components/schemas/TaskStatus" } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -21705,21 +31605,19 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/tasklists/{taskListId}/changeproject": { - "post": { + }, + "put": { "tags": [ - "TaskLists" + "ProjectTemplates" ], - "summary": "Moves a task list to another project.", - "description": "Moves the task list, its tasks, and related time entries to another project. A status mapping can move tasks to replacement statuses.\r\n The user must have `project-planning-data:write` permission on both projects.", - "operationId": "PostProjectTaskListChangeProjectByProjectIdAndTaskListId", + "summary": "Updates a task status for the template.", + "description": "Updates a task status for the template. The template uses the submitted status settings.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutProjectTemplateTaskStatusByProjectTemplateIdAndTaskStatusId", "parameters": [ { - "name": "projectId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -21727,9 +31625,9 @@ } }, { - "name": "taskListId", + "name": "taskStatusId", "in": "path", - "description": "The id of the task list.", + "description": "The id of the task status to update.", "required": true, "schema": { "type": "string", @@ -21738,79 +31636,29 @@ } ], "requestBody": { - "description": "The change Project form For Task Lists.", + "description": "The model used to update the task status.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChangeProjectFormForTaskLists" + "$ref": "#/components/schemas/TaskStatusForm" } } }, "required": true }, - "responses": { - "204": { - "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/projects/{projectId}/tasklists/{taskListId}/copy": { - "post": { - "tags": [ - "TaskLists" - ], - "summary": "Copies the specified task list.", - "description": "Creates a task list with the same name and copies its tasks and subtasks. Comments, files, and activity logs are not copied.\r\n The user must have `project-planning-data:write` permission for the project.", - "operationId": "PostProjectTaskListCopyByProjectIdAndTaskListId", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListId", - "in": "path", - "description": "The id of the task list.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskList" + "$ref": "#/components/schemas/TaskStatus" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -21841,33 +31689,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/tasklists/{taskListId}/delete": { + "/projecttemplates/{projectTemplateId}/unlinkcustomfielddefinition": { "post": { "tags": [ - "TaskLists" + "CustomFields" ], - "summary": "Deletes the specified task list.", - "description": "Deletes the specified task list and removes its task assignments.\r\n The user must have `project-planning-data:manage` permission for the project.", - "operationId": "PostProjectTaskListDeleteByProjectIdAndTaskListId", + "summary": "Unlinks a custom field from a template.", + "description": "Unlinks a custom field from a template. When the definition is unlinked from a project template, all values of the custom field will be removed from the task templates within that project template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateUnlinkCustomFieldDefinitionByProjectTemplateId", "parameters": [ { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the task list.", + "description": "The id of the project template to unlink the custom field definition from.", "required": true, "schema": { "type": "string", @@ -21876,11 +31715,11 @@ } ], "requestBody": { - "description": "The task List Delete form.", + "description": "The model used to unlink the custom field definition.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskListDeleteForm" + "$ref": "#/components/schemas/UnlinkCustomFieldDefinitionForm" } } }, @@ -21890,8 +31729,8 @@ "204": { "description": "No Content" }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -21922,98 +31761,24 @@ "v1" ], "x-access": { - "any": "true" - } - } - }, - "/projects/{projectId}/tasklists/{taskListId}/removetasks": { - "post": { - "tags": [ - "TaskLists" - ], - "summary": "Removes tasks from the specified task list.", - "description": "Removes the submitted tasks from the specified task list.\r\n The user must have `project-planning-data:write` permission for the project and tasks.", - "operationId": "PostProjectTaskListRemoveTasksByProjectIdAndTaskListId", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListId", - "in": "path", - "description": "The id of the task list.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The id of the tasks.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/tasklists/{taskListId}/setarchived": { + "/projecttemplates/{projectTemplateId}/unlinkworkflow": { "post": { "tags": [ - "TaskLists" + "Workflows" ], - "summary": "Archives or restores the specified task list.", - "description": "Archives or restores the specified task list. An archived task list remains available but cannot be edited.\r\n The user must have `project-planning-data:manage` permission for the project.", - "operationId": "PostProjectTaskListSetArchivedByProjectIdAndTaskListId", + "summary": "Unlinks a workflow from a project template.", + "description": "Unlinks a workflow from a project template. Custom fields and automations remain but become editable (no longer synced with workflow).\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateUnlinkWorkflowByProjectTemplateId", "parameters": [ { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the task list.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -22021,24 +31786,13 @@ } } ], - "requestBody": { - "description": "The archived Task List form.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArchivedTaskListForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskList" + "$ref": "#/components/schemas/ProjectTemplate" } } } @@ -22053,16 +31807,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -22085,43 +31829,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/tasklists/{taskListId}/tasks/{taskId}": { - "get": { - "tags": [ - "TaskLists" - ], - "summary": "Returns a task in the specified task list.", - "description": "Returns the specified task when it belongs to the task list.\r\n The user must have `project-planning-data:read` permission for the project.", - "operationId": "GetProjectTaskListTaskByProjectIdAndTaskListIdAndTaskId", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListId", - "in": "path", - "description": "The id of the task list.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, + "/projecttemplates/{projectTemplateId}/updateprojectstatusorder": { + "post": { + "tags": [ + "ProjectTemplates" + ], + "summary": "Updates project status order in a template.", + "description": "Updates project status order in a template. The selected status is moved within the template configuration.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateUpdateProjectStatusOrderByProjectTemplateId", + "parameters": [ { - "name": "taskId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the task.", + "description": "The id of the project template to update the status order for.", "required": true, "schema": { "type": "string", @@ -22129,17 +31854,21 @@ } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskModel" - } + "requestBody": { + "description": "The model to update the project template status order.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateProjectStatusOrderForm" } } }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, "400": { "description": "Bad Request", "content": { @@ -22150,16 +31879,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -22182,43 +31901,23 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/tasklists/{taskListId}/tasks/{taskId}/updateorder": { + "/projecttemplates/{projecttemplateId}/externalfiles": { "post": { "tags": [ - "TaskLists" + "ProjectTemplate Files" ], - "summary": "Updates a task's order in a task list.", - "description": "Updates the specified task's position in the task list.\r\n The user must have `project-planning-data:write` permission for the project and task.", - "operationId": "PostProjectTaskListTaskUpdateOrderByProjectIdAndTaskListIdAndTaskId", + "summary": "Creates external file references for the specified projecttemplate.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostExternalFilesByProjectTemplateNameAndProjectTemplateId", "parameters": [ { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListId", - "in": "path", - "description": "The id of the task list.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -22227,11 +31926,13 @@ } ], "requestBody": { - "description": "The task In Task List Update Order form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskInTaskListUpdateOrderForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" + } } } }, @@ -22245,7 +31946,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ReorderingResult" + "$ref": "#/components/schemas/FileInfo" } } } @@ -22287,29 +31988,19 @@ } } }, - "/projects/{projectId}/tasklists/{taskListId}/updateorder": { - "post": { + "/projecttemplates/{projecttemplateId}/files": { + "delete": { "tags": [ - "TaskLists" + "ProjectTemplate Files" ], - "summary": "Updates the order of the specified task list.", - "description": "Updates the specified task list's position within the project.\r\n The user must have `project-planning-data:manage` permission for the project.", - "operationId": "PostProjectTaskListUpdateOrderByProjectIdAndTaskListId", + "summary": "Deletes all files and versions for the specified projecttemplate.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesByProjectTemplateNameAndProjectTemplateId", "parameters": [ { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the task list.", + "description": "The projecttemplate id.", "required": true, "schema": { "type": "string", @@ -22317,21 +32008,20 @@ } } ], - "requestBody": { - "description": "The update Order form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateOrderForm" - } - } - }, - "required": true - }, "responses": { "204": { "description": "No Content" }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "401": { "description": "Unauthorized", "content": { @@ -22366,21 +32056,18 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/taskstatuses": { + }, "get": { "tags": [ - "TaskStatuses" + "ProjectTemplate Files" ], - "summary": "Returns task statuses for the specified project.", - "description": "Returns statuses relevant to the specified project. If the project is linked to a workflow, the workflow's statuses are returned.\r\n The user must have `project-master-data:read` permission or be assigned to a task on the project.", - "operationId": "GetProjectTaskStatusesByProjectId", + "summary": "Returns all files of the specified projecttemplate.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByProjectTemplateNameAndProjectTemplateId", "parameters": [ { - "name": "projectId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -22408,7 +32095,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TaskStatus" + "$ref": "#/components/schemas/FileInfo" } } } @@ -22451,16 +32138,15 @@ }, "post": { "tags": [ - "TaskStatuses" + "ProjectTemplate Files" ], - "summary": "Creates a task status for the specified project.", - "description": "Creates a task status for the specified project.\r\n The user must be the project creator or have `project-planning-data:write` permission.", - "operationId": "PostProjectTaskStatusesByProjectId", + "summary": "Uploads a file for the specified projecttemplate.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesByProjectTemplateNameAndProjectTemplateId", "parameters": [ { - "name": "projectId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -22469,15 +32155,13 @@ } ], "requestBody": { - "description": "The model used to create the task status.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/TaskStatusForm" + "$ref": "#/components/schemas/FileUploadModel" } } - }, - "required": true + } }, "responses": { "200": { @@ -22485,7 +32169,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatus" + "$ref": "#/components/schemas/FileInfo" } } } @@ -22509,16 +32193,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -22536,29 +32210,18 @@ } } }, - "/projects/{projectId}/taskstatuses/{taskStatusId}": { - "get": { + "/projecttemplates/{projecttemplateId}/files/byurl": { + "post": { "tags": [ - "TaskStatuses" + "ProjectTemplate Files" ], - "summary": "Returns the specified project task status.", - "description": "Returns the specified status for the project.\r\n The user must have `project-master-data:read` permission or be the project creator.", - "operationId": "GetProjectTaskStatusByProjectIdAndTaskStatusId", + "summary": "Uploads a file from a public URL for the specified projecttemplate.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesByUrlByProjectTemplateNameAndProjectTemplateId", "parameters": [ { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskStatusId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the task status.", "required": true, "schema": { "type": "string", @@ -22566,19 +32229,29 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FilePostForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatus" + "$ref": "#/components/schemas/FileInfo" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -22587,8 +32260,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -22611,19 +32284,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projecttemplates/{projecttemplateId}/files/{fileId}": { + "delete": { "tags": [ - "TaskStatuses" + "ProjectTemplate Files" ], - "summary": "Updates a task status for the specified project.", - "description": "Updates the specified status. Its type cannot change when it is the last `todo` or `done` status in the project.\r\n The user must be the project creator or have `project-planning-data:write` permission.", - "operationId": "PutProjectTaskStatusByProjectIdAndTaskStatusId", + "summary": "Deletes the specified projecttemplate file and its versions.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesByProjectTemplateNameAndProjectTemplateIdAndFileId", "parameters": [ { - "name": "projectId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the project.", + "description": "The projecttemplate id.", "required": true, "schema": { "type": "string", @@ -22631,9 +32306,9 @@ } }, { - "name": "taskStatusId", + "name": "fileId", "in": "path", - "description": "The id of the task status to update.", + "description": "The file id.", "required": true, "schema": { "type": "string", @@ -22641,27 +32316,9 @@ } } ], - "requestBody": { - "description": "The tmodel containing the task status data.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskStatusForm" - } - } - }, - "required": true - }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskStatus" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -22707,21 +32364,19 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/taskstatuses/{taskStatusId}/delete": { - "post": { + }, + "get": { "tags": [ - "TaskStatuses" + "ProjectTemplate Files" ], - "summary": "Deletes the specified project task status.", - "description": "Deletes the specified status. If tasks still use it, provide another status to receive those tasks. The last `todo` or `done` status cannot be deleted.\r\n The user must be the project creator or have `project-planning-data:write` permission.", - "operationId": "PostProjectTaskStatusDeleteByProjectIdAndTaskStatusId", + "summary": "Returns the file with the specified id of the projecttemplate with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByProjectTemplateNameAndProjectTemplateIdAndFileId", "parameters": [ { - "name": "projectId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the project.", + "description": "The id of the projecttemplate.", "required": true, "schema": { "type": "string", @@ -22729,9 +32384,9 @@ } }, { - "name": "taskStatusId", + "name": "fileId", "in": "path", - "description": "The id of the task status.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -22739,27 +32394,13 @@ } } ], - "requestBody": { - "description": "The model containing the id of the new task status to move tasks to.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskStatusDeleteForm" - } - } - }, - "required": true - }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -22798,21 +32439,18 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/timeentries": { - "get": { + }, + "put": { "tags": [ - "TimeEntries" + "ProjectTemplate Files" ], - "summary": "Returns all time entries of the specified project.", + "summary": "Updates metadata for the specified file.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTimeEntries", + "operationId": "PutFilesByProjectTemplateNameAndProjectTemplateIdAndFileId", "parameters": [ { - "name": "projectId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -22820,61 +32458,8 @@ } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TimeTracking" - } - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/projects/{projectId}/typeofwork": { - "get": { - "tags": [ - "ProjectTasks" - ], - "summary": "Returns types of work for the specified project.", - "description": "Returns types of work for connected or workspace projects.\r\n The user must have `project-planning-data:read` permission for the project.", - "operationId": "GetProjectTypesOfWorkByProjectId", - "parameters": [ - { - "name": "projectId", + "name": "fileId", "in": "path", - "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -22882,16 +32467,33 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfoUpdateForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TypeOfWork" - } + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -22932,19 +32534,27 @@ } } }, - "/projects/{projectId}/unlinkcustomfielddefinition": { + "/projecttemplates/{projecttemplateId}/files/{fileId}/changeentity": { "post": { "tags": [ - "CustomFields" + "ProjectTemplate Files" ], - "summary": "Unlinks a custom field from the specified project.", - "description": "Unlinking the definition removes its values from tasks in the project.\r\n The user must have `project-master-data:write` permission or `write` permission on the specified project.", - "operationId": "PostProjectUnlinkCustomFieldDefinitionByProjectId", + "summary": "Changes the projecttemplate that owns the specified file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesChangeProjectTemplateByProjectTemplateNameAndProjectTemplateIdAndFileId", "parameters": [ { - "name": "projectId", + "name": "projecttemplateId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", "in": "path", - "description": "The id of the project to unlink the custom field definition from.", "required": true, "schema": { "type": "string", @@ -22953,19 +32563,25 @@ } ], "requestBody": { - "description": "The model describing the custom field definition to unlink.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UnlinkCustomFieldDefinitionForm" + "$ref": "#/components/schemas/FileEntityForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } }, "400": { "description": "Bad Request", @@ -23013,19 +32629,27 @@ } } }, - "/projects/{projectId}/unlinkworkflow": { + "/projecttemplates/{projecttemplateId}/files/{fileId}/copy": { "post": { "tags": [ - "Workflows" + "ProjectTemplate Files" ], - "summary": "Unlinks a workflow from the specified project.", - "description": "Unlinks the workflow and clones its statuses into project-specific statuses. Custom fields and automations remain but are no longer synchronized with the workflow.\r\n The user must be the project creator or have `project-master-data:write` permission for the project.", - "operationId": "PostProjectUnlinkWorkflowByProjectId", + "summary": "Copies the specified file to another projecttemplate.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesCopyByProjectTemplateNameAndProjectTemplateIdAndFileId", "parameters": [ { - "name": "projectId", + "name": "projecttemplateId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", "in": "path", - "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -23033,13 +32657,23 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileCopyForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" + "$ref": "#/components/schemas/FileInfo" } } } @@ -23090,44 +32724,95 @@ } } }, - "/projects/{projectId}/updateprojectmember": { - "post": { + "/projecttemplates/{projecttemplateId}/files/{fileId}/download": { + "get": { "tags": [ - "ProjectMembers" + "ProjectTemplate Files" ], - "summary": "Updates a member of the specified project.", - "description": "Changes the member's role or responsible status. The selected role must be available for the project's type, and only one responsible member is allowed.\r\n The user must be the project creator or have `project-master-data:manage` permission for the project.", - "operationId": "PostProjectUpdateProjectMemberByProjectId", + "summary": "Returns the latest content of the specified projecttemplate file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesDownloadByProjectTemplateNameAndProjectTemplateIdAndFileId", "parameters": [ { - "name": "projectId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the project.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The model containing updated project member details.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectMemberForm" + }, + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "width", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "height", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "crop", + "in": "query", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } }, - "required": true - }, - "responses": { - "200": { - "description": "OK", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMember" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -23148,41 +32833,54 @@ } } }, - "/projects/{projectId}/updateprojectstatusorder": { - "post": { + "/projecttemplates/{projecttemplateId}/files/{fileId}/pdf": { + "get": { "tags": [ - "Projects" + "ProjectTemplate Files" ], - "summary": "Updates a project's status order.", - "description": "Updates the order of statuses for the specified project.\r\n The user must be the project owner or have `project-manage-config:write` permission.", - "operationId": "PostProjectUpdateProjectStatusOrderByProjectId", + "summary": "Returns the specified projecttemplate file as PDF.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesPdfByProjectTemplateNameAndProjectTemplateIdAndFileId", "parameters": [ { - "name": "projectId", + "name": "projecttemplateId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", "in": "path", - "description": "The id of the project.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "inline", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } } ], - "requestBody": { - "description": "The model to update the project status order.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateProjectStatusOrderForm" + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } } } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, "400": { "description": "Bad Request", "content": { @@ -23193,6 +32891,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -23219,35 +32927,32 @@ } } }, - "/projectstatuses": { + "/projecttemplates/{projecttemplateId}/files/{fileId}/shareurl": { "get": { "tags": [ - "ProjectStatuses" + "ProjectTemplate Files" ], - "summary": "Returns project statuses in the workspace.", - "description": "Returns active project statuses by default. Set `showArchived` to include archived statuses visible to the current user.\r\n The user must have access to each returned project status.", - "operationId": "GetProjectStatuses", + "summary": "Returns a public URL for the specified file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesShareUrlByProjectTemplateNameAndProjectTemplateIdAndFileId", "parameters": [ { - "name": "showArchived", - "in": "query", - "description": "Whether to include archived project statuses.", + "name": "projecttemplateId", + "in": "path", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -23256,16 +32961,13 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectStatus" - } + "type": "string" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -23274,8 +32976,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -23300,24 +33002,44 @@ } } }, - "/projectstatuses/{projectStatusId}": { + "/projecttemplates/{projecttemplateId}/files/{fileId}/versions": { "get": { "tags": [ - "ProjectStatuses" + "ProjectTemplate Files" ], - "summary": "Returns the specified project status.", - "description": "Returns the project status with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectStatusById", + "summary": "Returns all versions of the specified projecttemplate file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByProjectTemplateNameAndProjectTemplateIdAndFileId", "parameters": [ { - "name": "projectStatusId", + "name": "projecttemplateId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", "in": "path", - "description": "The id of the project status.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -23326,17 +33048,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectStatus" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileVersion" + } } } } @@ -23376,18 +33091,26 @@ "any": "true" } }, - "put": { + "post": { "tags": [ - "ProjectStatuses" + "ProjectTemplate Files" ], - "summary": "Updates the specified project status.", - "description": "Updates the specified project status and returns the saved status.\r\n The user must be the project creator or have `project-master-data:write` permission.", - "operationId": "PutProjectStatusById", + "summary": "Uploads a new version of the specified projecttemplate file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesVersionsByProjectTemplateNameAndProjectTemplateIdAndFileId", "parameters": [ { - "name": "projectStatusId", + "name": "projecttemplateId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", "in": "path", - "description": "The id of the project status.", "required": true, "schema": { "type": "string", @@ -23396,15 +33119,13 @@ } ], "requestBody": { - "description": "The model to update the project status.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/ProjectStatusForm" + "$ref": "#/components/schemas/FileUploadModel" } } - }, - "required": true + } }, "responses": { "200": { @@ -23412,7 +33133,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectStatus" + "$ref": "#/components/schemas/FileVersion" } } } @@ -23463,47 +33184,53 @@ } } }, - "/projectstatuses/{projectStatusId}/delete": { - "post": { + "/projecttemplates/{projecttemplateId}/files/{fileId}/versions/{versionId}": { + "get": { "tags": [ - "ProjectStatuses" + "ProjectTemplate Files" ], - "summary": "Deletes the specified project status.", - "description": "Deletes the specified status. Project statuses in use must be replaced, and workflow statuses must be managed through the workflow.\r\n The user must be the project owner or have `project-manage-config:write` permission for the project.", - "operationId": "PostProjectStatusDeleteByProjectStatusId", + "summary": "Returns the projecttemplate file version with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByProjectTemplateNameAndProjectTemplateIdAndFileIdAndVersionId", "parameters": [ { - "name": "projectStatusId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the project status to delete.", + "description": "The id of the projecttemplate.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The model to delete the project status.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectStatusDeleteForm" - } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "versionId", + "in": "path", + "description": "The id of the file version.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileVersion" } } } @@ -23544,54 +33271,51 @@ } } }, - "/projectstatuses/{projectStatusId}/setarchived": { - "post": { + "/projecttemplates/{projecttemplateId}/files/{fileId}/versions/{versionId}/download": { + "get": { "tags": [ - "ProjectStatuses" + "ProjectTemplate Files" ], - "summary": "Sets the archived flag for a project status.", - "description": "Sets the archived flag for a project status. Archived statuses remain available for existing projects. The user must have permission to access the requested resource.", - "operationId": "PostProjectStatusSetArchivedByProjectStatusId", + "summary": "Returns the content of the specified projecttemplate file version.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsDownloadByProjectTemplateNameAndProjectTemplateIdAndFileIdAndVersionId", "parameters": [ { - "name": "projectStatusId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the project status.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The model to set the archived flag for the project status.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArchivedForm" - } + }, + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "versionId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectStatus" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string", + "format": "binary" } } } @@ -23632,14 +33356,14 @@ } } }, - "/projecttemplates": { + "/projecttimebookings": { "get": { "tags": [ - "ProjectTemplates" + "TimeBookings" ], - "summary": "Returns project templates.", - "description": "Returns project templates. Each template includes its configured project defaults. The user must have permission to access the requested resource.", - "operationId": "GetProjectTemplates", + "summary": "Returns a list of time bookings.", + "description": "Returns a list of time bookings. Each booking includes its project, user, and tracked duration. The user must have permission to access the requested resource.", + "operationId": "GetProjectTimeBookings", "parameters": [ { "$ref": "#/components/parameters/page" @@ -23662,7 +33386,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ProjectTemplate" + "$ref": "#/components/schemas/TimeBooking" } } } @@ -23685,17 +33409,17 @@ }, "post": { "tags": [ - "ProjectTemplates" + "TimeBookings" ], - "summary": "Creates a new project template.", - "description": "Creates a new project template. The new template supplies defaults for future projects.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplate", + "summary": "Creates a time booking for a project and user.", + "description": "Creates a time booking for a project and user. The booking records time for the submitted project and user. The user must have permission to access the requested resource.", + "operationId": "PostProjectTimeBooking", "requestBody": { - "description": "The model to create the project template.", + "description": "The model to create the time booking.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectTemplateForm" + "$ref": "#/components/schemas/TimeBookingForm" } } }, @@ -23707,7 +33431,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectTemplate" + "$ref": "#/components/schemas/TimeBooking" } } } @@ -23721,6 +33445,16 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -23734,30 +33468,30 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/deletetags": { - "post": { + "/projecttimebookings/{timeBookingId}": { + "delete": { "tags": [ - "ProjectTemplateTags" + "TimeBookings" ], - "summary": "Removes a tag from project templates.", - "description": "Removes a tag from project templates. The submitted tags are applied to the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplatesDeleteTags", - "requestBody": { - "description": "The model to remove the tag from all project templates.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteTagForm" - } + "summary": "Deletes a time booking by id.", + "description": "Deletes a time booking by id. The booking is removed from the selected project. The user must have permission to access the requested resource.", + "operationId": "DeleteProjectTimeBooking", + "parameters": [ + { + "name": "timeBookingId", + "in": "path", + "description": "The id of the time booking to delete.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - }, - "required": true - }, + } + ], "responses": { "204": { "description": "No Content" @@ -23794,29 +33528,56 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } - } - }, - "/projecttemplates/tags": { - "get": { + }, + "put": { "tags": [ - "ProjectTemplateTags" + "TimeBookings" ], - "summary": "Returns tags in use by project templates.", - "description": "Returns tags in use by project templates. The result includes tags shared by project templates. The user must have permission to access the requested resource.", - "operationId": "GetProjectTemplatesTags", + "summary": "Updates a given time booking.", + "description": "Updates a given time booking. The saved booking reflects the submitted duration and assignment. The user must have permission to access the requested resource.", + "operationId": "PutProjectTimeBooking", + "parameters": [ + { + "name": "timeBookingId", + "in": "path", + "description": "The id of the time booking.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model to update the time booking.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TimeBookingForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "$ref": "#/components/schemas/TimeBooking" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -23847,45 +33608,90 @@ } } }, - "/projecttemplates/updatetags": { + "/projecttypes": { + "get": { + "tags": [ + "ProjectTypes" + ], + "summary": "Returns existing project types.", + "description": "Returns existing project types. Each type includes its name, icon, and archived state. The user must have permission to access the requested resource.", + "operationId": "GetProjectTypes", + "parameters": [ + { + "name": "showArchived", + "in": "query", + "description": "Whether to include archived project types in the results. Default is false.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectType" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, "post": { "tags": [ - "ProjectTemplateTags" + "ProjectTypes" ], - "summary": "Updates a tag globally for project templates.", - "description": "Updates a tag globally for project templates. The submitted tags are applied to the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateUpdateTags", + "summary": "Creates a new project type.", + "description": "Creates a new project type. The new type can be selected when projects are created.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectType", "requestBody": { - "description": "The model containing the tag updates.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TagUpdateForm" + "$ref": "#/components/schemas/ProjectTypeForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectType" } } } @@ -23907,29 +33713,27 @@ } } }, - "/projecttemplates/{projectTemplateId}": { - "delete": { + "/projecttypes/icons": { + "get": { "tags": [ - "ProjectTemplates" - ], - "summary": "Deletes a project template.", - "description": "Deletes a project template. Projects already created from the template are not changed.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "DeleteProjectTemplateById", - "parameters": [ - { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template to delete.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "ProjectTypes" ], + "summary": "Returns available project type icons.", + "description": "Returns available project type icons. These icons can be assigned to project types. The user must have permission to access the requested resource.", + "operationId": "GetProjectTypesIcons", "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } } }, "security": [ @@ -23943,22 +33747,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } - }, + } + }, + "/projecttypes/{projectTypeId}": { "get": { "tags": [ - "ProjectTemplates" + "ProjectTypes" ], - "summary": "Returns a specific project template.", - "description": "Returns a specific project template. The response includes the template's project configuration. The user must have permission to access the requested resource.", - "operationId": "GetProjectTemplateById", + "summary": "Returns a project type by its ID.", + "description": "Returns a project type by its ID. The response includes the type's name, icon, and settings. The user must have permission to access the requested resource.", + "operationId": "GetProjectTypeById", "parameters": [ { - "name": "projectTemplateId", + "name": "projectTypeId", "in": "path", - "description": "The id of the project template to retrieve.", + "description": "The id of the project type.", "required": true, "schema": { "type": "string", @@ -23972,7 +33777,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectTemplate" + "$ref": "#/components/schemas/ProjectType" } } } @@ -24004,16 +33809,16 @@ }, "put": { "tags": [ - "ProjectTemplates" + "ProjectTypes" ], - "summary": "Updates project template.", - "description": "Updates project template. The template defaults are changed for future projects.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutProjectTemplateById", + "summary": "Updates project type.", + "description": "Updates project type. The submitted name, icon, and settings replace the existing values.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutProjectTypeById", "parameters": [ { - "name": "projectTemplateId", + "name": "projectTypeId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project type.", "required": true, "schema": { "type": "string", @@ -24022,11 +33827,11 @@ } ], "requestBody": { - "description": "The model to update the project template.", + "description": "The model to update the project type.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectTemplateForm" + "$ref": "#/components/schemas/ProjectTypeForm" } } }, @@ -24038,7 +33843,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectTemplate" + "$ref": "#/components/schemas/ProjectType" } } } @@ -24080,19 +33885,19 @@ } } }, - "/projecttemplates/{projectTemplateId}/addtags": { + "/projecttypes/{projectTypeId}/delete": { "post": { "tags": [ - "ProjectTemplateTags" + "ProjectTypes" ], - "summary": "Adds a batch of tags to the project template.", - "description": "Adds a batch of tags to the project template. The submitted tags are applied to the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateAddTagsByProjectTemplateId", + "summary": "Deletes project types.", + "description": "Deletes project types. Projects using the type are reassigned before it is removed.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTypeDeleteByProjectTypeId", "parameters": [ { - "name": "projectTemplateId", + "name": "projectTypeId", "in": "path", - "description": "The id of the project template to add tags to.", + "description": "The id of the project type.", "required": true, "schema": { "type": "string", @@ -24101,32 +33906,19 @@ } ], "requestBody": { - "description": "The model containing the tags to add.", + "description": "The model to delete the project type.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TagForm" - } + "$ref": "#/components/schemas/DeleteProjectTypeForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -24138,16 +33930,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -24175,67 +33957,19 @@ } } }, - "/projecttemplates/{projectTemplateId}/automations": { - "get": { - "tags": [ - "Project Template Automations" - ], - "summary": "Returns all automations for a project template.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateAutomations", - "parameters": [ - { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Automation" - } - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, + "/projecttypes/{projectTypeId}/setarchived": { "post": { "tags": [ - "Project Template Automations" + "ProjectTypes" ], - "summary": "Creates a new automation for a given project template.", - "description": "Creates a new automation of the project template with the specified id.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateAutomation", + "summary": "Archives or unarchives the project type.", + "description": "Archives or unarchives the project type. Archived types remain available for existing projects.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTypeSetArchivedByProjectTypeId", "parameters": [ { - "name": "projectTemplateId", + "name": "projectTypeId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project type.", "required": true, "schema": { "type": "string", @@ -24244,11 +33978,10 @@ } ], "requestBody": { - "description": "The model to create the automation.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AutomationTriggerForm" + "$ref": "#/components/schemas/ArchivedForm" } } }, @@ -24260,17 +33993,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectType" } } } @@ -24292,101 +34015,22 @@ } } }, - "/projecttemplates/{projectTemplateId}/automations/{automationId}": { - "delete": { - "tags": [ - "Project Template Automations" - ], - "summary": "Deletes the specified automation for a given projecttemplate.", - "description": "Deletes the specified automation with its trigger and all its values.\r\n To delete the the automation the user needs to have 'write' permissions of\r\n the feature 'project-manage-config' globally.\r\n If the 'removeFromProject' boolean is set to true, all automations in projects of that\r\n project template created from that automation template are deleted aswell.\r\n Automations created from a workflow cannot be deleted via this endpoint.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "DeleteProjectTemplateAutomation", - "parameters": [ - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "removeFromProjects", - "in": "query", - "description": "Whether to delete the automation also from all projects of the projecttemplate.", - "required": true, - "schema": { - "type": "boolean" - } - } - ], - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "project-manage-config": "write" - } - }, + "/roles": { "get": { "tags": [ - "Project Template Automations" + "Roles" ], - "summary": "Returns a specific automation for a projecttemplate.", - "description": "Returns a specific automation of the projecttemplate with the specified id.\r\n Returns NotFound if the automation doesnt exist.\r\n To get the the automation data the user needs to have 'read' permissions of\r\n the feature 'project-manage-config' globally.\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", - "operationId": "GetProjectTemplateAutomation", + "summary": "Returns roles of the workspace.", + "description": "Returns roles of the workspace. Each role includes its name and status.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "operationId": "GetRoles", "parameters": [ { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, + "name": "showArchived", + "in": "query", + "description": "Whether to show archived roles.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } } ], @@ -24396,7 +34040,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" + "type": "array", + "items": { + "$ref": "#/components/schemas/Role" + } } } } @@ -24414,41 +34061,22 @@ ], "x-access": { "admin": "true", - "project-manage-config": "read" + "workspace-manage-config": "read" } }, - "put": { + "post": { "tags": [ - "Project Template Automations" - ], - "summary": "Updates the automation with the specified id for a given projecttemplate.", - "description": "Updates the specified automation for a specific projecttemplate.\r\n If the automation was created from a workflow, only the Enabled flag can be changed.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutProjectTemplateAutomation", - "parameters": [ - { - "name": "automationId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "projectTemplateId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Roles" ], + "summary": "Creates a workspace role.", + "description": "Creates a workspace role. The role starts with the submitted settings.\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostRole", "requestBody": { + "description": "The role form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AutomationPutForm" + "$ref": "#/components/schemas/RoleForm" } } }, @@ -24460,7 +34088,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" + "$ref": "#/components/schemas/Role" } } } @@ -24488,105 +34116,27 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "workspace-manage-config": "write" + }, + "x-subscriptionlevel": { + "minimumPlan": "standard" } } }, - "/projecttemplates/{projectTemplateId}/automations/{automationId}/actions": { - "get": { - "tags": [ - "Project Template Automations" - ], - "summary": "Gets the actions of an automation of a project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", - "operationId": "GetProjectTemplateAutomationActions", - "parameters": [ - { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Action" - } - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "project-manage-config": "read" - } - }, + "/roles/moveuser": { "post": { "tags": [ - "Project Template Automations" - ], - "summary": "Creates a new action for an automation of a project template.", - "description": "Creates an action for a specific automation of a project template including all its values. Actions cannot be added to automations created from a workflow.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateAutomationAction", - "parameters": [ - { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Roles" ], + "summary": "Moves a user to another role.", + "description": "Moves a user to another role. The user keeps workspace access under the new role.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostRolesMoveUser", "requestBody": { - "description": "The model to create an action.", + "description": "The move user in role payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ActionForm" + "$ref": "#/components/schemas/MoveUserInRole" } } }, @@ -24594,17 +34144,20 @@ }, "responses": { "200": { - "description": "OK", + "description": "OK" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -24626,60 +34179,52 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "workspace-manage-config": "write" } } }, - "/projecttemplates/{projectTemplateId}/automations/{automationId}/actions/{actionId}": { - "delete": { + "/roles/users": { + "get": { "tags": [ - "Project Template Automations" + "Roles" ], - "summary": "Deletes an action for an automation of a project template.", - "description": "Deletes an action for a specific automation of a project template including all its values. Actions of automations created from a workflow cannot be deleted.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "DeleteProjectTemplateAutomationAction", + "summary": "Returns all users in roles of the workspace.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "operationId": "GetRolesUsers", "parameters": [ { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" }, { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/filterby" }, { - "name": "actionId", - "in": "path", - "description": "The id of the action.", + "name": "aw-internal-request", + "in": "header", + "description": "Marks this request as an internal request. Only allowed by the awork app or internally.", "required": true, "schema": { "type": "string", - "format": "uuid" + "default": "true" } } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/UserInRole" + } } } } @@ -24697,41 +34242,24 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" - } - }, + "workspace-manage-config": "read" + }, + "x-internal": true + } + }, + "/roles/{roleId}": { "get": { "tags": [ - "Project Template Automations" + "Roles" ], - "summary": "Gets a specific action for an automation of a projecttemplate.", - "description": "Returns a specific action for a specific automation of a project template including all its values.\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", - "operationId": "GetProjectTemplateAutomationAction", + "summary": "Returns the role.", + "description": "Returns the role. The returned role includes its workspace settings.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "operationId": "GetRoleById", "parameters": [ { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "actionId", + "name": "roleId", "in": "path", - "description": "The id of the action.", + "description": "The id of the role.", "required": true, "schema": { "type": "string", @@ -24745,7 +34273,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" + "$ref": "#/components/schemas/Role" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -24763,41 +34301,21 @@ ], "x-access": { "admin": "true", - "project-manage-config": "read" + "workspace-manage-config": "read" } }, "put": { "tags": [ - "Project Template Automations" + "Roles" ], - "summary": "Updates a specifc action of an automation of a project template.", - "description": "Returns an updated action for a specific automation of a project template including all its values. Actions of automations created from a workflow cannot be modified.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutProjectTemplateAutomationAction", + "summary": "Updates the role.", + "description": "Updates the role. The submitted settings replace the existing values.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PutRoleById", "parameters": [ { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "actionId", + "name": "roleId", "in": "path", - "description": "The id of the action.", + "description": "The id of the role.", "required": true, "schema": { "type": "string", @@ -24806,11 +34324,11 @@ } ], "requestBody": { - "description": "The model to update an action.", + "description": "The role form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ActionForm" + "$ref": "#/components/schemas/RoleForm" } } }, @@ -24822,7 +34340,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" + "$ref": "#/components/schemas/Role" } } } @@ -24836,6 +34354,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -24850,43 +34378,23 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "workspace-manage-config": "write" } } }, - "/projecttemplates/{projectTemplateId}/automations/{automationId}/actions/{actionId}/updateorder": { + "/roles/{roleId}/adduser": { "post": { "tags": [ - "Project Template Automations" + "Roles" ], - "summary": "Updates the order of a project template automation action.", - "description": "Actions of automations created from a workflow cannot be modified.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostUpdateProjectTemplateAutomationActionOrder", + "summary": "Adds the user to the role.", + "description": "Adds the user to the role. The user is added to the role membership.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostRoleAddUserByRoleId", "parameters": [ { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "actionId", + "name": "roleId", "in": "path", - "description": "The id of the action.", + "description": "The id of the role.", "required": true, "schema": { "type": "string", @@ -24895,19 +34403,19 @@ } ], "requestBody": { - "description": "The model to update the order.", + "description": "The user in role form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateOrderForm" + "$ref": "#/components/schemas/UserInRoleForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK" }, "400": { "description": "Bad Request", @@ -24918,58 +34426,27 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "project-manage-config": "write" - } - } - }, - "/projecttemplates/{projectTemplateId}/automations/{automationId}/reapply": { - "post": { - "tags": [ - "Project Template Automations" - ], - "summary": "Reapplies the automation to all projects of this specific project template.", - "description": "Returns NotFound if the automation doesnt exist.\r\n To execute this you need to have 'write' permissions of\r\n the feature 'project-manage-config' globally.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostReapplyProjectTemplateAutomation", - "parameters": [ - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } }, - { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } } - ], - "responses": { - "204": { - "description": "No Content" - } }, "security": [ { @@ -24983,23 +34460,23 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "workspace-manage-config": "write" } } }, - "/projecttemplates/{projectTemplateId}/customfielddefinitions": { + "/roles/{roleId}/deactivatedmenuitems": { "get": { "tags": [ - "CustomFields" + "Roles" ], - "summary": "Returns custom fields.", - "description": "Returns custom fields. The result includes fields linked directly or through its workflow. The user must have permission to access the requested resource.", - "operationId": "GetProjectTemplateCustomFieldDefinitionsByProjectTemplateId", + "summary": "Returns deactivated menu items for the role.", + "description": "Returns deactivated menu items for the role. The result lists menu items disabled for the role.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "operationId": "GetRoleDeactivatedMenuItemsByRoleId", "parameters": [ { - "name": "projectTemplateId", + "name": "roleId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the role.", "required": true, "schema": { "type": "string", @@ -25015,14 +34492,17 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" + "type": "string" } - } + }, + "example": [ + "https://www.awork.com" + ] } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -25043,33 +34523,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "read" } - } - }, - "/projecttemplates/{projectTemplateId}/customfielddefinitions/{customFieldDefinitionId}": { - "put": { + }, + "post": { "tags": [ - "CustomFields" + "Roles" ], - "summary": "Updates custom field order in a template.", - "description": "Updates custom field order in a template. The custom field order is stored for the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutProjectTemplateCustomFieldDefinitionByProjectTemplateIdAndCustomFieldDefinitionId", + "summary": "Updates deactivated menu items for a role.", + "description": "Updates deactivated menu items for a role. The submitted menu settings replace the role's disabled items.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostRoleDeactivatedMenuItemsByRoleId", "parameters": [ { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "customFieldDefinitionId", + "name": "roleId", "in": "path", - "description": "The id of the custom field definition.", + "description": "The id of the role.", "required": true, "schema": { "type": "string", @@ -25078,23 +34547,29 @@ } ], "requestBody": { - "description": "The model used to update the order of the custom field definition.", + "description": "The list of menu item keys.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldOrderPutForm" + "type": "array", + "items": { + "type": "string" + } } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldOrderForm" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -25122,23 +34597,23 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "workspace-manage-config": "write" } } }, - "/projecttemplates/{projectTemplateId}/deletetags": { + "/roles/{roleId}/delete": { "post": { "tags": [ - "ProjectTemplateTags" + "Roles" ], - "summary": "Removes tags from the project template.", - "description": "Removes tags from the project template. The submitted tags are applied to the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateDeleteTagsByProjectTemplateId", + "summary": "Deletes the role.", + "description": "Deletes the role. Users assigned to the role must be moved before it is removed.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostRoleDeleteByRoleId", "parameters": [ { - "name": "projectTemplateId", + "name": "roleId", "in": "path", - "description": "The id of the project template to remove tags from.", + "description": "The id of the role.", "required": true, "schema": { "type": "string", @@ -25147,14 +34622,11 @@ } ], "requestBody": { - "description": "The model containing the tags to delete.", + "description": "The delete role form payload.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DeleteTagForm" - } + "$ref": "#/components/schemas/DeleteRoleForm" } } }, @@ -25164,9 +34636,6 @@ "204": { "description": "No Content" }, - "207": { - "description": "Multi-Status" - }, "400": { "description": "Bad Request", "content": { @@ -25177,8 +34646,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -25187,8 +34656,8 @@ } } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { @@ -25210,51 +34679,52 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "workspace-manage-config": "write" } } }, - "/projecttemplates/{projectTemplateId}/linkcustomfielddefinition": { - "post": { + "/roles/{roleId}/permissions": { + "get": { "tags": [ - "CustomFields" + "Roles" ], - "summary": "Links a custom field definition to the template.", - "description": "Links a custom field definition to the template. The custom field is available on tasks created from the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateLinkCustomFieldDefinitionByProjectTemplateId", + "summary": "Returns permissions of the specified role.", + "description": "Returns permissions of the specified role. The result lists permissions assigned to the role.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "operationId": "GetRolePermissionsByRoleId", "parameters": [ { - "name": "projectTemplateId", + "name": "roleId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the role.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The model used to link the custom field definition.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LinkCustomFieldDefinitionForm" - } - } - }, - "required": true - }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/PermissionOfGlobalRole" + } } } } @@ -25282,52 +34752,69 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "workspace-manage-config": "read" } - } - }, - "/projecttemplates/{projectTemplateId}/milestones": { - "get": { + }, + "post": { "tags": [ - "ProjectMilestoneTemplates" + "Roles" ], - "summary": "Returns milestone templates of the given template.", - "description": "Returns milestone templates of the given template. Each milestone template belongs to the selected project template.\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", - "operationId": "GetProjectTemplateMilestonesByProjectTemplateId", + "summary": "Updates permissions for a role.", + "description": "Updates permissions for a role. The submitted permission is added, changed, or removed for the role.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostRolePermissionsByRoleId", "parameters": [ { - "name": "projectTemplateId", + "name": "roleId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the role.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], + "requestBody": { + "description": "The permission of role form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PermissionOfRoleForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectMilestoneTemplate" - } + "$ref": "#/components/schemas/PermissionOfProjectRole" + } + } + } + }, + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -25345,21 +34832,23 @@ ], "x-access": { "admin": "true", - "project-manage-config": "read" + "project-manage-config": "write" } - }, + } + }, + "/roles/{roleId}/setarchived": { "post": { "tags": [ - "ProjectMilestoneTemplates" + "Roles" ], - "summary": "Creates milestone template for the template.", - "description": "Creates milestone template for the template. Projects created from the template can use this milestone.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateMilestonesByProjectTemplateId", + "summary": "Archives or unarchives the role.", + "description": "Archives or unarchives the role. An archived role still exists for all users currently using it, but users can no longer be assigned to this role.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostRoleSetArchivedByRoleId", "parameters": [ { - "name": "projectTemplateId", + "name": "roleId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the role.", "required": true, "schema": { "type": "string", @@ -25368,11 +34857,11 @@ } ], "requestBody": { - "description": "The model containing milestone template details.", + "description": "The archived form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestoneTemplateForm" + "$ref": "#/components/schemas/ArchivedForm" } } }, @@ -25384,7 +34873,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestoneTemplate" + "$ref": "#/components/schemas/Role" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -25402,23 +34911,23 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "task-manage-config": "write" } } }, - "/projecttemplates/{projectTemplateId}/milestones/{milestoneId}": { - "delete": { + "/roles/{roleId}/users": { + "get": { "tags": [ - "ProjectMilestoneTemplates" + "Roles" ], - "summary": "Deletes a milestone for the project template.", - "description": "Deletes a milestone for the project template. The milestone is removed from the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "DeleteProjectTemplateMilestoneByProjectTemplateIdAndMilestoneId", + "summary": "Returns users of the specified role.", + "description": "Returns users of the specified role. The result lists users assigned to the role.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "operationId": "GetRoleUsersByRoleId", "parameters": [ { - "name": "projectTemplateId", + "name": "roleId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the role.", "required": true, "schema": { "type": "string", @@ -25426,19 +34935,50 @@ } }, { - "name": "milestoneId", - "in": "path", - "description": "The id of the milestone.", - "required": true, + "name": "showArchived", + "in": "query", + "description": "Whether to show archived users.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserInRole" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -25453,21 +34993,23 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "workspace-manage-config": "read" } - }, - "get": { + } + }, + "/roles/{roleId}/users/{userId}/activate": { + "post": { "tags": [ - "ProjectMilestoneTemplates" + "Roles" ], - "summary": "Returns a milestone by id for the project template.", - "description": "Returns a milestone by id for the project template. The response includes the milestone's dates and status.\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", - "operationId": "GetProjectTemplateMilestoneByProjectTemplateIdAndMilestoneId", + "summary": "Activates the user.", + "description": "Activates the user. The user's sign-in status changes for the workspace.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostRoleUserActivateByRoleIdAndUserId", "parameters": [ { - "name": "projectTemplateId", + "name": "roleId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the role.", "required": true, "schema": { "type": "string", @@ -25475,9 +35017,9 @@ } }, { - "name": "milestoneId", + "name": "userId", "in": "path", - "description": "The id of the milestone.", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -25487,11 +35029,24 @@ ], "responses": { "200": { - "description": "OK", + "description": "OK" + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestoneTemplate" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -25509,21 +35064,23 @@ ], "x-access": { "admin": "true", - "project-manage-config": "read" + "workspace-manage-config": "write" } - }, - "put": { + } + }, + "/roles/{roleId}/users/{userId}/deactivate": { + "post": { "tags": [ - "ProjectMilestoneTemplates" + "Roles" ], - "summary": "Updates a milestone template for the template.", - "description": "Updates a milestone template for the template. The submitted dates and status replace the existing values.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutProjectTemplateMilestoneByProjectTemplateIdAndMilestoneId", + "summary": "Deactivates the user.", + "description": "Deactivates the user. The user's sign-in status changes for the workspace.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostRoleUserDeactivateByRoleIdAndUserId", "parameters": [ { - "name": "projectTemplateId", + "name": "roleId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the role.", "required": true, "schema": { "type": "string", @@ -25531,9 +35088,9 @@ } }, { - "name": "milestoneId", + "name": "userId", "in": "path", - "description": "The id of the milestone.", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -25541,24 +35098,26 @@ } } ], - "requestBody": { - "description": "The model containing updated milestone template details.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectMilestoneTemplateForm" + "responses": { + "200": { + "description": "OK" + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } }, - "required": true - }, - "responses": { - "200": { - "description": "OK", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestoneTemplate" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -25576,27 +35135,26 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "workspace-manage-config": "write" } } }, - "/projecttemplates/{projectTemplateId}/projectstatuses": { + "/roles/{roleName}": { "get": { "tags": [ - "ProjectTemplates" + "Roles" ], - "summary": "Returns project statuses of a project template.", - "description": "Returns project statuses of a project template. The result includes statuses available to the template. The user must have permission to access the requested resource.", - "operationId": "GetProjectTemplateProjectStatusesByProjectTemplateId", + "summary": "Returns the role for the name.", + "description": "Returns the role for the name. The name match is evaluated within the current workspace.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "operationId": "GetRoleByRoleName", "parameters": [ { - "name": "projectTemplateId", + "name": "roleName", "in": "path", - "description": "The id of the project template to retrieve statuses for.", + "description": "The name of the role.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -25606,16 +35164,13 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectStatus" - } + "$ref": "#/components/schemas/Role" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -25636,46 +35191,61 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "read" } - }, - "post": { + } + }, + "/search": { + "get": { "tags": [ - "ProjectTemplates" + "Search" ], - "summary": "Adds a project status to a project template.", - "description": "Adds a project status to a project template. Projects created from the template can use this status.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateProjectStatusesByProjectTemplateId", + "summary": "Performs a full-text search across workspace entities.", + "description": "This endpoint enables powerful full-text search capabilities across multiple types.\r\n It returns a ranked list of matching entities based on relevance and respects user permissions.\r\n \r\n The search functionality includes:\r\n - Cross-entity search across various entity types in the workspace.\r\n - Relevance-based scoring and ranking of results.\r\n - Respecting user access permissions for all returned results.\r\n - Customizable result filtering by entity type and status.\r\n\r\nAny authenticated user.", + "operationId": "GetSearch", "parameters": [ { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, + "name": "searchTerm", + "in": "query", + "description": "The term to search for. Max. 50 characters. Required.", "schema": { - "type": "string", - "format": "uuid" + "type": "string" } - } - ], - "requestBody": { - "description": "The model to add the project status to the template.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectStatusForm" - } + }, + { + "name": "searchTypes", + "in": "query", + "description": "Comma-separated list of types to search for, or 'all'. Supported types: task, project, user, company, comment, timeentry, timereport, file, document, tasklist, dashboardnote.", + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "top", + "in": "query", + "description": "Count of top results. Default: 20. Must be between 1 and the configured maximum (SearchMaximumResults).", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "includeClosedAndStuck", + "in": "query", + "description": "If true, the result will include entities where the status is closed, stuck and done.", + "schema": { + "type": "boolean" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectStatus" + "$ref": "#/components/schemas/SearchResults" } } } @@ -25699,16 +35269,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -25722,48 +35282,52 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}/setcustomfields": { - "post": { + "/sharedfiles": { + "get": { "tags": [ - "CustomFields" + "SharedFiles" ], - "summary": "Sets the custom fields for a project template.", - "description": "Sets the custom fields for a project template. The custom fields become available to tasks created from the template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateSetCustomFieldsByProjectTemplateId", + "summary": "Returns a shared file.", + "description": "Returns the shared file for the provided token.\r\n\r\nAllows unauthenticated access.", + "operationId": "GetSharedFiles", "parameters": [ { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", + "name": "token", + "in": "query", + "description": "The token to allow access.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], - "requestBody": { - "description": "The list of custom field values to set.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomFieldPostForm" + "responses": { + "200": { + "description": "OK" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -25777,30 +35341,19 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "anonymous": "true" } } }, - "/projecttemplates/{projectTemplateId}/tags": { + "/taskbundles": { "get": { "tags": [ - "ProjectTemplateTags" + "TaskBundles" ], - "summary": "Returns the tags of the project template.", - "description": "Returns the tags of the project template. The result includes tags currently used by that template.\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", - "operationId": "GetProjectTemplateTagsByProjectTemplateId", + "summary": "Returns task bundles.", + "description": "Returns task bundles. Each bundle includes its task and list templates. The user must have permission to access the requested resource.", + "operationId": "GetTaskBundles", "parameters": [ - { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template to get tags for.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, { "$ref": "#/components/parameters/page" }, @@ -25822,24 +35375,58 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/BaseTagModel" + "$ref": "#/components/schemas/TaskBundle" } } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "TaskBundles" + ], + "summary": "Creates a task bundle.", + "description": "Creates a task bundle. It groups reusable task and list templates.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundle", + "requestBody": { + "description": "The task bundle form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskBundleForm" + } + } }, - "401": { - "description": "Unauthorized", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TaskBundle" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -25861,23 +35448,23 @@ ], "x-access": { "admin": "true", - "project-manage-config": "read" + "task-manage-config": "write" } } }, - "/projecttemplates/{projectTemplateId}/taskbundle": { - "get": { + "/taskbundles/fromproject/{projectId}": { + "post": { "tags": [ - "ProjectTemplates" + "TaskBundles" ], - "summary": "Returns the bundle associated with a template.", - "description": "Returns the bundle associated with a template. The response includes the task bundle linked to the template. The user must have permission to access the requested resource.", - "operationId": "GetProjectTemplateTaskBundleByProjectTemplateId", + "summary": "Creates a task bundle from a project.", + "description": "Creates a task bundle from a project. The bundle is created from the selected project.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundlesFromProjectByProjectId", "parameters": [ { - "name": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -25885,19 +35472,30 @@ } } ], + "requestBody": { + "description": "The model to create a task bundle from a project.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTaskBundleFromProjectForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskBundleResult" + "$ref": "#/components/schemas/TaskBundle" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -25918,58 +35516,55 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/projecttemplates/{projectTemplateId}/taskstatuses": { - "get": { + "/taskbundles/fromtasklist/{taskListId}": { + "post": { "tags": [ - "ProjectTemplates" + "TaskBundles" ], - "summary": "Returns task statuses of the project template.", - "description": "Returns task statuses of the project template. The result includes statuses available to the template. The user must have permission to access the requested resource.", - "operationId": "GetProjectTemplateTaskStatusesByProjectTemplateId", + "summary": "Creates a task bundle from a task list.", + "description": "Creates a task bundle from a task list. The bundle is created from the selected task list.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundlesFromTaskListByTaskListId", "parameters": [ { - "name": "projectTemplateId", + "name": "taskListId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the task list.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], + "requestBody": { + "description": "The form to create a task bundle from a task list.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskBundleFromTaskListForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskStatus" - } + "$ref": "#/components/schemas/TaskBundle" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -25990,66 +35585,29 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } - }, - "post": { + } + }, + "/taskbundles/icons": { + "get": { "tags": [ - "ProjectTemplates" - ], - "summary": "Creates a task status for the template.", - "description": "Creates a task status for the template. Tasks created from the template can use this status.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateTaskStatusesByProjectTemplateId", - "parameters": [ - { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The task Status form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskStatusForm" - } - } - }, - "required": true - }, + "TaskBundles" + ], + "summary": "Returns available task bundle icons.", + "description": "Returns available task bundle icons. These icons can be assigned to task bundles. The user must have permission to access the requested resource.", + "operationId": "GetTaskBundlesIcons", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatus" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "type": "string" + } } } } @@ -26066,34 +35624,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}/taskstatuses/{taskStatusId}": { + "/taskbundles/{taskBundleId}": { "delete": { "tags": [ - "ProjectTemplates" + "TaskBundles" ], - "summary": "Deletes the task status of the project template.", - "description": "Deletes the task status of the project template. The last status of type 'todo' or 'done' cannot be deleted.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "DeleteProjectTemplateTaskStatusByProjectTemplateIdAndTaskStatusId", + "summary": "Deletes a task bundle.", + "description": "Deletes a task bundle. The bundle is removed with its task templates.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "DeleteTaskBundleById", "parameters": [ { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskStatusId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task status.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -26104,26 +35651,6 @@ "responses": { "204": { "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -26138,31 +35665,21 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "task-manage-config": "write" } }, "get": { "tags": [ - "ProjectTemplates" + "TaskBundles" ], - "summary": "Returns the task status of the project template.", - "description": "Returns the task status of the project template. The result includes statuses available to the template. The user must have permission to access the requested resource.", - "operationId": "GetProjectTemplateTaskStatusByProjectTemplateIdAndTaskStatusId", + "summary": "Returns a task bundle by id.", + "description": "Returns a task bundle by id. The response includes the bundle's configuration. The user must have permission to access the requested resource.", + "operationId": "GetTaskBundleById", "parameters": [ { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskStatusId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task status.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -26176,7 +35693,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatus" + "$ref": "#/components/schemas/TaskBundle" } } } @@ -26208,26 +35725,16 @@ }, "put": { "tags": [ - "ProjectTemplates" + "TaskBundles" ], - "summary": "Updates a task status for the template.", - "description": "Updates a task status for the template. The template uses the submitted status settings.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutProjectTemplateTaskStatusByProjectTemplateIdAndTaskStatusId", + "summary": "Updates a task bundle.", + "description": "Updates a task bundle. The submitted templates and settings replace the existing values.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PutTaskBundleById", "parameters": [ { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskStatusId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task status to update.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -26236,11 +35743,11 @@ } ], "requestBody": { - "description": "The model used to update the task status.", + "description": "The task bundle form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatusForm" + "$ref": "#/components/schemas/TaskBundleForm" } } }, @@ -26252,17 +35759,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatus" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TaskBundle" } } } @@ -26290,23 +35787,23 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "task-manage-config": "write" } } }, - "/projecttemplates/{projectTemplateId}/unlinkcustomfielddefinition": { + "/taskbundles/{taskBundleId}/copy": { "post": { "tags": [ - "CustomFields" + "TaskBundles" ], - "summary": "Unlinks a custom field from a template.", - "description": "Unlinks a custom field from a template. When the definition is unlinked from a project template, all values of the custom field will be removed from the task templates within that project template.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateUnlinkCustomFieldDefinitionByProjectTemplateId", + "summary": "Creates a copy of a task bundle.", + "description": "Creates a copy of a task bundle. The copy receives a new identity and keeps the bundle configuration.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundleCopyByTaskBundleId", "parameters": [ { - "name": "projectTemplateId", + "name": "taskBundleId", "in": "path", - "description": "The id of the project template to unlink the custom field definition from.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -26315,32 +35812,29 @@ } ], "requestBody": { - "description": "The model used to unlink the custom field definition.", + "description": "The model containing the data to copy the task bundle.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UnlinkCustomFieldDefinitionForm" + "$ref": "#/components/schemas/CopyTaskBundleForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TaskBundle" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -26362,23 +35856,23 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "task-manage-config": "write" } } }, - "/projecttemplates/{projectTemplateId}/unlinkworkflow": { - "post": { + "/taskbundles/{taskBundleId}/taskdependencytemplates": { + "get": { "tags": [ - "Workflows" + "TaskDependencyTemplates" ], - "summary": "Unlinks a workflow from a project template.", - "description": "Unlinks a workflow from a project template. Custom fields and automations remain but become editable (no longer synced with workflow).\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateUnlinkWorkflowByProjectTemplateId", + "summary": "Returns dependency templates for a task bundle.", + "description": "Returns dependency templates for a task bundle. Each entry identifies a predecessor and successor task template.\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", + "operationId": "GetTaskBundleTaskDependencyTemplatesByTaskBundleId", "parameters": [ { - "name": "projectTemplateId", + "name": "taskBundleId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -26392,7 +35886,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectTemplate" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskDependencyTemplate" + } } } } @@ -26407,6 +35904,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -26430,23 +35937,21 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "task-manage-config": "read" } - } - }, - "/projecttemplates/{projectTemplateId}/updateprojectstatusorder": { + }, "post": { "tags": [ - "ProjectTemplates" + "TaskDependencyTemplates" ], - "summary": "Updates project status order in a template.", - "description": "Updates project status order in a template. The selected status is moved within the template configuration.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateUpdateProjectStatusOrderByProjectTemplateId", + "summary": "Creates a dependency template for a bundle.", + "description": "Creates a dependency template for a bundle. The result describes dependencies configured for the bundle.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundleTaskDependencyTemplatesByTaskBundleId", "parameters": [ { - "name": "projectTemplateId", + "name": "taskBundleId", "in": "path", - "description": "The id of the project template to update the status order for.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -26455,19 +35960,26 @@ } ], "requestBody": { - "description": "The model to update the project template status order.", + "description": "The model describing the task dependency template to create.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateProjectStatusOrderForm" + "$ref": "#/components/schemas/TaskDependencyTemplateForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskDependencyTemplate" + } + } + } }, "400": { "description": "Bad Request", @@ -26479,6 +35991,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -26502,23 +36024,23 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "task-manage-config": "write" } } }, - "/projecttemplates/{projecttemplateId}/files/{fileId}": { - "get": { + "/taskbundles/{taskBundleId}/taskdependencytemplates/{taskDependencyTemplateId}": { + "delete": { "tags": [ - "ProjectTemplate Files" + "TaskDependencyTemplates" ], - "summary": "Returns the file with the specified id of the projecttemplate with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByProjectTemplateNameAndProjectTemplateIdAndFileId", + "summary": "Deletes a dependency template from a bundle.", + "description": "Deletes a dependency template from a bundle. The result describes dependencies configured for the bundle.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "DeleteTaskBundleTaskDependencyTemplateByTaskBundleIdAndTaskDependencyTemplateId", "parameters": [ { - "name": "projecttemplateId", + "name": "taskBundleId", "in": "path", - "description": "The id of the projecttemplate.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -26526,9 +36048,9 @@ } }, { - "name": "fileId", + "name": "taskDependencyTemplateId", "in": "path", - "description": "The id of the file.", + "description": "The task Dependency Template Id.", "required": true, "schema": { "type": "string", @@ -26537,15 +36059,8 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", @@ -26579,33 +36094,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } - } - }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/versions/{versionId}": { + }, "get": { "tags": [ - "ProjectTemplate Files" + "TaskDependencyTemplates" ], - "summary": "Returns the projecttemplate file version with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByProjectTemplateNameAndProjectTemplateIdAndFileIdAndVersionId", + "summary": "Returns a dependency template from a bundle.", + "description": "Returns a dependency template from a bundle. The result describes dependencies configured for the bundle.\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", + "operationId": "GetTaskBundleTaskDependencyTemplateByTaskBundleIdAndTaskDependencyTemplateId", "parameters": [ { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "taskBundleId", "in": "path", - "description": "The id of the file.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -26613,9 +36117,9 @@ } }, { - "name": "versionId", + "name": "taskDependencyTemplateId", "in": "path", - "description": "The id of the file version.", + "description": "The task Dependency Template Id.", "required": true, "schema": { "type": "string", @@ -26629,7 +36133,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/TaskDependencyTemplate" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -26666,19 +36180,30 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "read" } } }, - "/projecttimebookings": { + "/taskbundles/{taskBundleId}/tasklisttemplates": { "get": { "tags": [ - "TimeBookings" + "TaskBundles" ], - "summary": "Returns a list of time bookings.", - "description": "Returns a list of time bookings. Each booking includes its project, user, and tracked duration. The user must have permission to access the requested resource.", - "operationId": "GetProjectTimeBookings", + "summary": "Returns task list templates for a task bundle.", + "description": "Returns task list templates for a task bundle. The response includes the list template configuration. The user must have permission to access the requested resource.", + "operationId": "GetTaskBundleTaskListTemplatesByTaskBundleId", "parameters": [ + { + "name": "taskBundleId", + "in": "path", + "description": "The id of the task bundle.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, { "$ref": "#/components/parameters/page" }, @@ -26700,11 +36225,21 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TimeBooking" + "$ref": "#/components/schemas/NestedTaskList" } } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -26723,17 +36258,29 @@ }, "post": { "tags": [ - "TimeBookings" + "TaskBundles" + ], + "summary": "Creates a task list template for a bundle.", + "description": "Creates a task list template for a bundle. It is included when the bundle is applied.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundleTaskListTemplatesByTaskBundleId", + "parameters": [ + { + "name": "taskBundleId", + "in": "path", + "description": "The id of the task bundle to create the task list template for.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Creates a time booking for a project and user.", - "description": "Creates a time booking for a project and user. The booking records time for the submitted project and user. The user must have permission to access the requested resource.", - "operationId": "PostProjectTimeBooking", "requestBody": { - "description": "The model to create the time booking.", + "description": "The model to create a task list template.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeBookingForm" + "$ref": "#/components/schemas/TaskListForm" } } }, @@ -26745,23 +36292,140 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeBooking" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/NestedTaskList" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "task-manage-config": "write" + } + } + }, + "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}": { + "delete": { + "tags": [ + "TaskBundles" + ], + "summary": "Deletes a task list template.", + "description": "Deletes a task list template. The response includes the list template configuration.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "DeleteTaskBundleTaskListTemplateByTaskBundleIdAndTaskListTemplateId", + "parameters": [ + { + "name": "taskBundleId", + "in": "path", + "description": "The id of the task bundle.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskListTemplateId", + "in": "path", + "description": "The task List Template Id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "task-manage-config": "write" + } + }, + "get": { + "tags": [ + "TaskBundles" + ], + "summary": "Returns a task list template.", + "description": "Returns a task list template. The response includes the list template configuration. The user must have permission to access the requested resource.", + "operationId": "GetTaskBundleTaskListTemplateByTaskBundleIdAndTaskListTemplateId", + "parameters": [ + { + "name": "taskBundleId", + "in": "path", + "description": "The id of the task bundle.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskListTemplateId", + "in": "path", + "description": "The task list template id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NestedTaskList" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -26784,21 +36448,29 @@ "x-access": { "any": "true" } - } - }, - "/projecttimebookings/{timeBookingId}": { - "delete": { + }, + "put": { "tags": [ - "TimeBookings" + "TaskBundles" ], - "summary": "Deletes a time booking by id.", - "description": "Deletes a time booking by id. The booking is removed from the selected project. The user must have permission to access the requested resource.", - "operationId": "DeleteProjectTimeBooking", + "summary": "Updates a task list template.", + "description": "Updates a task list template.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PutTaskBundleTaskListTemplateByTaskBundleIdAndTaskListTemplateId", "parameters": [ { - "name": "timeBookingId", + "name": "taskBundleId", "in": "path", - "description": "The id of the time booking to delete.", + "description": "The id of the task bundle.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskListTemplateId", + "in": "path", + "description": "The task list template id.", "required": true, "schema": { "type": "string", @@ -26806,22 +36478,30 @@ } } ], - "responses": { - "204": { - "description": "No Content" + "requestBody": { + "description": "The task list bundle put form.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskListBundlePutForm" + } + } }, - "400": { - "description": "Bad Request", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/NestedTaskList" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -26842,21 +36522,34 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } - }, - "put": { + } + }, + "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/addtasktemplates": { + "post": { "tags": [ - "TimeBookings" + "TaskBundles" ], - "summary": "Updates a given time booking.", - "description": "Updates a given time booking. The saved booking reflects the submitted duration and assignment. The user must have permission to access the requested resource.", - "operationId": "PutProjectTimeBooking", + "summary": "Adds task templates to a task list template.", + "description": "Adds task templates to a task list template. The listed task templates are added to the bundle list.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundleTaskListTemplateAddTaskTemplatesByTaskBundleIdAndTaskListTemplateId", "parameters": [ { - "name": "timeBookingId", + "name": "taskBundleId", "in": "path", - "description": "The id of the time booking.", + "description": "The id of the task bundle.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskListTemplateId", + "in": "path", + "description": "The task List Template Id.", "required": true, "schema": { "type": "string", @@ -26865,11 +36558,14 @@ } ], "requestBody": { - "description": "The model to update the time booking.", + "description": "The task Template To Task List Template list.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeBookingForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskTemplateToTaskListTemplate" + } } } }, @@ -26881,7 +36577,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeBooking" + "type": "array", + "items": { + "$ref": "#/components/schemas/ReorderingResult" + } } } } @@ -26896,8 +36595,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -26918,133 +36617,76 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/projecttypes": { - "get": { + "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/removetasktemplates": { + "post": { "tags": [ - "ProjectTypes" + "TaskBundles" ], - "summary": "Returns existing project types.", - "description": "Returns existing project types. Each type includes its name, icon, and archived state. The user must have permission to access the requested resource.", - "operationId": "GetProjectTypes", + "summary": "Removes task templates from a task list template.", + "description": "Removes task templates from a task list template. The listed task templates are removed from the bundle list.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundleTaskListTemplateRemoveTaskTemplatesByTaskBundleIdAndTaskListTemplateId", "parameters": [ { - "name": "showArchived", - "in": "query", - "description": "Whether to include archived project types in the results. Default is false.", + "name": "taskBundleId", + "in": "path", + "description": "The id of the task bundle.", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectType" - } - } - } + "name": "taskListTemplateId", + "in": "path", + "description": "The task List Template Id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "ProjectTypes" ], - "summary": "Creates a new project type.", - "description": "Creates a new project type. The new type can be selected when projects are created.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectType", "requestBody": { + "description": "The guid list.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectTypeForm" + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectType" + "$ref": "#/components/schemas/ErrorResponse" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "project-manage-config": "write" - } - } - }, - "/projecttypes/icons": { - "get": { - "tags": [ - "ProjectTypes" - ], - "summary": "Returns available project type icons.", - "description": "Returns available project type icons. These icons can be assigned to project types. The user must have permission to access the requested resource.", - "operationId": "GetProjectTypesIcons", - "responses": { - "200": { - "description": "OK", + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -27061,23 +36703,34 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/projecttypes/{projectTypeId}": { + "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/tasktemplates": { "get": { "tags": [ - "ProjectTypes" + "TaskBundles" ], - "summary": "Returns a project type by its ID.", - "description": "Returns a project type by its ID. The response includes the type's name, icon, and settings. The user must have permission to access the requested resource.", - "operationId": "GetProjectTypeById", + "summary": "Returns task templates inside a task list template.", + "description": "Returns task templates inside a task list template. The response includes task templates assigned to the list. The user must have permission to access the requested resource.", + "operationId": "GetTaskBundleTaskListTemplateTaskTemplatesByTaskBundleIdAndTaskListTemplateId", "parameters": [ { - "name": "projectTypeId", + "name": "taskBundleId", "in": "path", - "description": "The id of the project type.", + "description": "The id of the task bundle.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskListTemplateId", + "in": "path", + "description": "The task list template id.", "required": true, "schema": { "type": "string", @@ -27091,7 +36744,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectType" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskTemplate" + } } } } @@ -27120,54 +36776,55 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/tasktemplates/{taskTemplateId}": { + "get": { "tags": [ - "ProjectTypes" + "TaskBundles" ], - "summary": "Updates project type.", - "description": "Updates project type. The submitted name, icon, and settings replace the existing values.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutProjectTypeById", + "summary": "Returns a task template from a list.", + "description": "Returns a task template from a list. The response includes task templates assigned to the list. The user must have permission to access the requested resource.", + "operationId": "GetTaskBundleTaskListTemplateTaskTemplateByTaskBundleIdAndTaskListTemplateIdAndTaskTemplateId", "parameters": [ { - "name": "projectTypeId", + "name": "taskBundleId", "in": "path", - "description": "The id of the project type.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The model to update the project type.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectTypeForm" - } + }, + { + "name": "taskListTemplateId", + "in": "path", + "description": "The task list template id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "taskTemplateId", + "in": "path", + "description": "The id of the task template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectType" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TaskTemplate" } } } @@ -27194,24 +36851,43 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttypes/{projectTypeId}/delete": { + "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/tasktemplates/{taskTemplateId}/updateorder": { "post": { "tags": [ - "ProjectTypes" + "TaskBundles" ], - "summary": "Deletes project types.", - "description": "Deletes project types. Projects using the type are reassigned before it is removed.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTypeDeleteByProjectTypeId", + "summary": "Updates task template order in a list.", + "description": "Updates task template order in a list. The selected task template is moved within the list.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundleTaskListTemplateTaskTemplateUpdateOrderByTaskBundleIdAndTaskListTemplateIdAndTaskTemplateId", "parameters": [ { - "name": "projectTypeId", + "name": "taskBundleId", "in": "path", - "description": "The id of the project type.", + "description": "The id of the task bundle.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskListTemplateId", + "in": "path", + "description": "The task List Template Id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskTemplateId", + "in": "path", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -27220,11 +36896,11 @@ } ], "requestBody": { - "description": "The model to delete the project type.", + "description": "The task In Task List Update Order form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteProjectTypeForm" + "$ref": "#/components/schemas/TaskInTaskListUpdateOrderForm" } } }, @@ -27267,23 +36943,33 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "task-manage-config": "write" } } }, - "/projecttypes/{projectTypeId}/setarchived": { + "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/updateorder": { "post": { "tags": [ - "ProjectTypes" + "TaskBundles" ], - "summary": "Archives or unarchives the project type.", - "description": "Archives or unarchives the project type. Archived types remain available for existing projects.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTypeSetArchivedByProjectTypeId", + "summary": "Updates task template order in a list.", + "description": "Updates task template order in a list. The task list template order is stored on the bundle.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundleTaskListTemplateUpdateOrderByTaskBundleIdAndTaskListTemplateId", "parameters": [ { - "name": "projectTypeId", + "name": "taskBundleId", "in": "path", - "description": "The id of the project type.", + "description": "The id of the task bundle.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskListTemplateId", + "in": "path", + "description": "The task List Template Id.", "required": true, "schema": { "type": "string", @@ -27292,22 +36978,26 @@ } ], "requestBody": { + "description": "The update Order form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ArchivedForm" + "$ref": "#/components/schemas/UpdateOrderForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectType" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -27325,27 +37015,40 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "task-manage-config": "write" } } }, - "/roles": { + "/taskbundles/{taskBundleId}/tasktemplates": { "get": { "tags": [ - "Roles" + "TaskTemplates" ], - "summary": "Returns roles of the workspace.", - "description": "Returns roles of the workspace. Each role includes its name and status.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetRoles", + "summary": "Returns task templates of the task bundle.", + "description": "Returns task templates of the task bundle. The response includes the task template configuration. The user must have permission to access the requested resource.", + "operationId": "GetTaskBundleTaskTemplatesByTaskBundleId", "parameters": [ { - "name": "showArchived", - "in": "query", - "description": "Whether to show archived roles.", + "name": "taskBundleId", + "in": "path", + "description": "The id of the task bundle.", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -27356,59 +37059,14 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Role" + "$ref": "#/components/schemas/TaskTemplate" } } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "workspace-manage-config": "read" - } - }, - "post": { - "tags": [ - "Roles" - ], - "summary": "Creates a workspace role.", - "description": "Creates a workspace role. The role starts with the submitted settings.\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostRole", - "requestBody": { - "description": "The role form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RoleForm" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Role" - } - } - } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -27427,30 +37085,36 @@ ], "x-api-versions": [ "v1" - ], - "x-access": { - "admin": "true", - "workspace-manage-config": "write" - }, - "x-subscriptionlevel": { - "minimumPlan": "standard" + ], + "x-access": { + "any": "true" } - } - }, - "/roles/moveuser": { + }, "post": { "tags": [ - "Roles" + "TaskTemplates" + ], + "summary": "Creates a task template for the task bundle.", + "description": "Creates a task template for the task bundle. It is included when the bundle is applied.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundleTaskTemplatesByTaskBundleId", + "parameters": [ + { + "name": "taskBundleId", + "in": "path", + "description": "The id of the task bundle.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Moves a user to another role.", - "description": "Moves a user to another role. The user keeps workspace access under the new role.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostRolesMoveUser", "requestBody": { - "description": "The move user in role payload.", + "description": "The task Template form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MoveUserInRole" + "$ref": "#/components/schemas/TaskTemplateForm" } } }, @@ -27458,7 +37122,14 @@ }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskTemplate" + } + } + } }, "400": { "description": "Bad Request", @@ -27493,52 +37164,50 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "write" + "task-manage-config": "write" } } }, - "/roles/users": { - "get": { + "/taskbundles/{taskBundleId}/tasktemplates/{taskTemplateId}": { + "delete": { "tags": [ - "Roles" + "TaskTemplates" ], - "summary": "Returns all users in roles of the workspace.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetRolesUsers", + "summary": "Deletes the task template for the task bundle.", + "description": "Deletes the task template for the task bundle. The task template is removed from the bundle.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "DeleteTaskBundleTaskTemplateByTaskBundleIdAndTaskTemplateId", "parameters": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "taskBundleId", + "in": "path", + "description": "The id of the task bundle.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, { - "name": "aw-internal-request", - "in": "header", - "description": "Marks this request as an internal request. Only allowed by the awork app or internally.", + "name": "taskTemplateId", + "in": "path", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", - "default": "true" + "format": "uuid" } } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/UserInRole" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -27556,24 +37225,31 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "read" - }, - "x-internal": true - } - }, - "/roles/{roleId}": { + "task-manage-config": "write" + } + }, "get": { "tags": [ - "Roles" + "TaskTemplates" ], - "summary": "Returns the role.", - "description": "Returns the role. The returned role includes its workspace settings.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetRoleById", + "summary": "Returns the task template of the task bundle.", + "description": "Returns the task template of the task bundle. The response includes the task template configuration. The user must have permission to access the requested resource.", + "operationId": "GetTaskBundleTaskTemplateByTaskBundleIdAndTaskTemplateId", "parameters": [ { - "name": "roleId", + "name": "taskBundleId", "in": "path", - "description": "The id of the role.", + "description": "The id of the task bundle.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskTemplateId", + "in": "path", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -27587,7 +37263,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Role" + "$ref": "#/components/schemas/TaskTemplate" } } } @@ -27614,22 +37290,31 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "read" + "any": "true" } }, "put": { "tags": [ - "Roles" + "TaskTemplates" ], - "summary": "Updates the role.", - "description": "Updates the role. The submitted settings replace the existing values.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PutRoleById", + "summary": "Updates the task template for the task bundle.", + "description": "Updates the task template for the task bundle. The updated task template is stored in the bundle.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PutTaskBundleTaskTemplateByTaskBundleIdAndTaskTemplateId", "parameters": [ { - "name": "roleId", + "name": "taskBundleId", "in": "path", - "description": "The id of the role.", + "description": "The id of the task bundle.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskTemplateId", + "in": "path", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -27638,11 +37323,11 @@ } ], "requestBody": { - "description": "The role form payload.", + "description": "The task Template form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RoleForm" + "$ref": "#/components/schemas/TaskTemplateForm" } } }, @@ -27654,17 +37339,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Role" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TaskTemplate" } } } @@ -27692,23 +37367,23 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "write" + "task-manage-config": "write" } } }, - "/roles/{roleId}/adduser": { + "/taskbundles/{taskBundleId}/tasktemplates/{taskTemplateId}/setassignees": { "post": { "tags": [ - "Roles" + "TaskTemplates" ], - "summary": "Adds the user to the role.", - "description": "Adds the user to the role. The user is added to the role membership.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostRoleAddUserByRoleId", + "summary": "Assigns a list of users to task templates.", + "description": "Assigns a list of users to task templates. Users that are not passed and are already assigned will be removed. Removes existing task template assignments and adds the new assignment.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundlesTaskTemplatesSetAssigneesByTaskBundleIdAndTaskTemplateId", "parameters": [ { - "name": "roleId", + "name": "taskTemplateId", "in": "path", - "description": "The id of the role.", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -27717,22 +37392,26 @@ } ], "requestBody": { - "description": "The user in role form payload.", + "description": "The id of the users.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserInRoleForm" + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } } } }, "required": true }, "responses": { - "200": { - "description": "OK" + "204": { + "description": "No Content" }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -27740,9 +37419,56 @@ } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "task-manage-config": "write" + } + } + }, + "/taskdependencies": { + "post": { + "tags": [ + "TaskDependencies" + ], + "summary": "Creates task dependency.", + "description": "Creates task dependency. The dependency links the selected tasks. To create a task dependency, the user needs to be the assignee of both tasks or have `ProjectPlanning`\r\n permissions in general or in the project the tasks are related to.", + "operationId": "PostTaskDependency", + "requestBody": { + "description": "The task Dependency form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskDependencyForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskDependency" + } + } + } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -27751,8 +37477,8 @@ } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -27773,24 +37499,23 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } } }, - "/roles/{roleId}/deactivatedmenuitems": { - "get": { + "/taskdependencies/{taskDependencyId}": { + "delete": { "tags": [ - "Roles" + "TaskDependencies" ], - "summary": "Returns deactivated menu items for the role.", - "description": "Returns deactivated menu items for the role. The result lists menu items disabled for the role.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetRoleDeactivatedMenuItemsByRoleId", + "summary": "Deletes a task dependency.", + "description": "Deletes a task dependency. The dependency is removed from both related tasks. To delete a task dependency, the User needs to be the assignee of both tasks or have 'ProjectPlanning'\r\n permissions in general or in the project the task are related to.", + "operationId": "DeleteTaskdependencyByTaskDependencyId", "parameters": [ { - "name": "roleId", + "name": "taskDependencyId", "in": "path", - "description": "The id of the role.", + "description": "The id of the task dependency.", "required": true, "schema": { "type": "string", @@ -27798,20 +37523,73 @@ } } ], + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/tasks": { + "post": { + "tags": [ + "Tasks" + ], + "summary": "Creates a project or private task.", + "description": "Creates a project or private task. The created task is returned with its project or private-task scope. The user mast either have `project-planning-data:write` permissions, be assigned to the parent task (if a parent task is specified) or create a private task.", + "operationId": "PostTask", + "requestBody": { + "description": "The general Task Post form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GeneralTaskPostForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } - }, - "example": [ - "https://www.awork.com" - ] + "$ref": "#/components/schemas/TaskModel" + } } } }, @@ -27824,6 +37602,16 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -27837,46 +37625,32 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "read" + "any": "true" } - }, + } + }, + "/tasks/assignuserbyemail": { "post": { "tags": [ - "Roles" - ], - "summary": "Updates deactivated menu items for a role.", - "description": "Updates deactivated menu items for a role. The submitted menu settings replace the role's disabled items.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostRoleDeactivatedMenuItemsByRoleId", - "parameters": [ - { - "name": "roleId", - "in": "path", - "description": "The id of the role.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Tasks" ], + "summary": "Invites a user by email and assigns them to a task.", + "description": "Invites a user by email and assigns them to a task. The invited user is added to the task's assignees. The user must have permission to access the requested resource.", + "operationId": "PostTasksAssignUserByEmail", "requestBody": { - "description": "The list of menu item keys.", + "description": "The assign By Email form payload.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/AssignByEmailForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK" }, "400": { "description": "Bad Request", @@ -27910,58 +37684,53 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } } }, - "/roles/{roleId}/delete": { + "/tasks/batch/{operation}": { "post": { "tags": [ - "Roles" + "Tasks" ], - "summary": "Deletes the role.", - "description": "Deletes the role. Users assigned to the role must be moved before it is removed.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostRoleDeleteByRoleId", + "summary": "Updates multiple tasks with the selected operation.", + "description": "Updates multiple tasks with the selected operation. Supported operations move tasks, change dates, manage tags, change status or type, assign users, copy tasks, and delete tasks.\r\n The user must have `write` permission for the requested tasks and related entities.", + "operationId": "PostTasksBatchByOperation", "parameters": [ { - "name": "roleId", + "name": "operation", "in": "path", - "description": "The id of the role.", + "description": "The operation to perform on all tasks.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "requestBody": { - "description": "The delete role form payload.", + "description": "The model describing the batch task operation.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteRoleForm" + "$ref": "#/components/schemas/BatchOperationForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "207": { + "description": "Multi-Status", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/MultiStatusResult" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -27970,8 +37739,8 @@ } } }, - "500": { - "description": "Internal Server Error", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -27992,43 +37761,84 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } } }, - "/roles/{roleId}/permissions": { - "get": { + "/tasks/changebasetypes": { + "post": { "tags": [ - "Roles" + "Tasks" ], - "summary": "Returns permissions of the specified role.", - "description": "Returns permissions of the specified role. The result lists permissions assigned to the role.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetRolePermissionsByRoleId", - "parameters": [ - { - "name": "roleId", - "in": "path", - "description": "The id of the role.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Updates the base type for multiple tasks.", + "description": "Updates the base type for multiple tasks. The task becomes available with the selected base type. The user must have permission to access the requested resource.", + "operationId": "PostTasksChangeBaseTypes", + "requestBody": { + "description": "The tasks Change Base Types form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TasksChangeBaseTypesForm" + } } }, - { - "$ref": "#/components/parameters/page" + "required": true + }, + "responses": { + "204": { + "description": "No Content" }, - { - "$ref": "#/components/parameters/pageSize" + "207": { + "description": "Multi-Status" }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ { - "$ref": "#/components/parameters/orderby" + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/tasks/changelists": { + "post": { + "tags": [ + "Tasks" + ], + "summary": "Updates the task lists of tasks.", + "description": "Updates the task lists of tasks. The listed tasks are assigned to the selected lists. The user must have permission to access the requested resource.", + "operationId": "PostTasksChangeLists", + "requestBody": { + "description": "The change Task List forms.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChangeTaskListsForm" + } + } + } }, - { - "$ref": "#/components/parameters/filterby" - } - ], + "required": true + }, "responses": { "200": { "description": "OK", @@ -28037,14 +37847,14 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/PermissionOfGlobalRole" + "$ref": "#/components/schemas/ChangeTaskListsForm" } } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -28065,54 +37875,39 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "read" + "any": "true" } - }, + } + }, + "/tasks/changestatuses": { "post": { "tags": [ - "Roles" - ], - "summary": "Updates permissions for a role.", - "description": "Updates permissions for a role. The submitted permission is added, changed, or removed for the role.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostRolePermissionsByRoleId", - "parameters": [ - { - "name": "roleId", - "in": "path", - "description": "The id of the role.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Tasks" ], + "summary": "Updates the statuses of tasks.", + "description": "Updates the statuses of tasks. The selected status is applied to the listed tasks. The user must have permission to access the requested resource.", + "operationId": "PostTasksChangeStatuses", "requestBody": { - "description": "The permission of role form payload.", + "description": "The change Status form list.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PermissionOfRoleForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/ChangeStatusForm" + } } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PermissionOfProjectRole" - } - } - } - }, "204": { "description": "No Content" }, + "207": { + "description": "Multi-Status" + }, "400": { "description": "Bad Request", "content": { @@ -28122,16 +37917,6 @@ } } } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -28145,52 +37930,35 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/roles/{roleId}/setarchived": { + "/tasks/changesubtasks": { "post": { "tags": [ - "Roles" - ], - "summary": "Archives or unarchives the role.", - "description": "Archives or unarchives the role. An archived role still exists for all users currently using it, but users can no longer be assigned to this role.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostRoleSetArchivedByRoleId", - "parameters": [ - { - "name": "roleId", - "in": "path", - "description": "The id of the role.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Tasks" ], + "summary": "Updates task hierarchy and subtask order.", + "description": "Updates task hierarchy and subtask order. A moved subtask adopts the parent task's list and type, and tasks with subtasks cannot become subtasks. The user must have permission to access the requested resource.", + "operationId": "PostTasksChangeSubtasks", "requestBody": { - "description": "The archived form payload.", + "description": "The subtask Changes model.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ArchivedForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/ChangeSubtasksPostForm" + } } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Role" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -28201,16 +37969,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -28224,68 +37982,38 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/roles/{roleId}/users": { - "get": { + "/tasks/changesubtaskstoparent": { + "post": { "tags": [ - "Roles" - ], - "summary": "Returns users of the specified role.", - "description": "Returns users of the specified role. The result lists users assigned to the role.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetRoleUsersByRoleId", - "parameters": [ - { - "name": "roleId", - "in": "path", - "description": "The id of the role.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "showArchived", - "in": "query", - "description": "Whether to show archived users.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } + "Tasks" ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/UserInRole" - } + "summary": "Converts subtasks to a parent task.", + "description": "Converts subtasks to a parent task. Convert subtasks to a parent task. If list ids are not provided it will keep the same lists as the old parent task, placing the task as last item in the lists. If multiple list ids are provided per task, the lists will be overwritten with the lists provided. In this case, if an order is not provided, it will be put as the last item in the list. The user must have permission to access the requested resource.", + "operationId": "PostTasksChangeSubtasksToParent", + "requestBody": { + "description": "The change Subtasks To Parent Post form list.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChangeSubtasksToParentPostForm" } } } }, - "404": { - "description": "Not Found", + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -28306,57 +38034,38 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "read" + "any": "true" } } }, - "/roles/{roleId}/users/{userId}/activate": { + "/tasks/changetypeofwork": { "post": { "tags": [ - "Roles" + "Tasks" ], - "summary": "Activates the user.", - "description": "Activates the user. The user's sign-in status changes for the workspace.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostRoleUserActivateByRoleIdAndUserId", - "parameters": [ - { - "name": "roleId", - "in": "path", - "description": "The id of the role.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Updates the type of work for multiple tasks.", + "description": "Updates the type of work for multiple tasks. The selected work type is applied to the listed tasks. The user must have permission to access the requested resource.", + "operationId": "PostTasksChangeTypeOfWork", + "requestBody": { + "description": "The tasks Change Types form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TasksChangeTypesForm" + } } }, - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], + "required": true + }, "responses": { - "200": { - "description": "OK" + "204": { + "description": "No Content" }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "207": { + "description": "Multi-Status" }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -28377,57 +38086,38 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } } }, - "/roles/{roleId}/users/{userId}/deactivate": { + "/tasks/delete": { "post": { "tags": [ - "Roles" + "Tasks" ], - "summary": "Deactivates the user.", - "description": "Deactivates the user. The user's sign-in status changes for the workspace.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostRoleUserDeactivateByRoleIdAndUserId", - "parameters": [ - { - "name": "roleId", - "in": "path", - "description": "The id of the role.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Deletes tasks and optionally related time entries.", + "description": "Deletes tasks and optionally related time entries. Related time entries are removed when requested. The user must have permission to access the requested resource.", + "operationId": "PostTasksDelete", + "requestBody": { + "description": "The model describing the task deletion request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TasksDeleteForm" + } } }, - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], + "required": true + }, "responses": { - "200": { - "description": "OK" + "204": { + "description": "No Content" }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "207": { + "description": "Multi-Status" }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -28448,43 +38138,45 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } } }, - "/roles/{roleName}": { - "get": { + "/tasks/deletetags": { + "post": { "tags": [ - "Roles" + "TaskTags" ], - "summary": "Returns the role for the name.", - "description": "Returns the role for the name. The name match is evaluated within the current workspace.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetRoleByRoleName", - "parameters": [ - { - "name": "roleName", - "in": "path", - "description": "The name of the role.", - "required": true, - "schema": { - "type": "string" + "summary": "Removes a tag from project tasks.", + "description": "Removes a tag from project tasks. The tag is removed from matching project tasks.\r\n\r\nThe user must be an admin or have `project-planning-data:write` permissions.", + "operationId": "PostTasksDeleteTags", + "requestBody": { + "description": "The model to delete the tag from all tasks.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteTagForm" + } } - } - ], + }, + "required": true + }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Role" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -28506,51 +38198,27 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "read" + "project-planning-data": "write" } } }, - "/search": { + "/tasks/key/{taskIdentifier}": { "get": { "tags": [ - "Search" + "Tasks" ], - "summary": "Performs a full-text search across workspace entities.", - "description": "This endpoint enables powerful full-text search capabilities across multiple types.\r\n It returns a ranked list of matching entities based on relevance and respects user permissions.\r\n \r\n The search functionality includes:\r\n - Cross-entity search across various entity types in the workspace.\r\n - Relevance-based scoring and ranking of results.\r\n - Respecting user access permissions for all returned results.\r\n - Customizable result filtering by entity type and status.\r\n\r\nAny authenticated user.", - "operationId": "GetSearch", + "summary": "Returns the task for the key.", + "description": "Returns the task for the key. The key is matched within the current workspace. The user must have permission to access the requested resource.", + "operationId": "GetTasksKeyByTaskIdentifier", "parameters": [ { - "name": "searchTerm", - "in": "query", - "description": "The term to search for. Max. 50 characters. Required.", - "schema": { - "type": "string" - } - }, - { - "name": "searchTypes", - "in": "query", - "description": "Comma-separated list of types to search for, or 'all'. Supported types: task, project, user, company, comment, timeentry, timereport, file, document, tasklist, dashboardnote.", + "name": "taskIdentifier", + "in": "path", + "description": "The task identifier to lookup (for example, KEY-123).", + "required": true, "schema": { "type": "string" } - }, - { - "name": "top", - "in": "query", - "description": "Count of top results. Default: 20.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "includeClosedAndStuck", - "in": "query", - "description": "If true, the result will include entities where the status is closed, stuck and done.", - "schema": { - "type": "boolean" - } } ], "responses": { @@ -28559,7 +38227,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchResults" + "$ref": "#/components/schemas/TaskModel" } } } @@ -28583,6 +38251,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -28600,28 +38278,28 @@ } } }, - "/sharedfiles": { - "get": { + "/tasks/settaskpriority": { + "post": { "tags": [ - "SharedFiles" + "Tasks" ], - "summary": "Returns a shared file.", - "description": "Returns the shared file for the provided token.\r\n\r\nAllows unauthenticated access.", - "operationId": "GetSharedFiles", - "parameters": [ - { - "name": "token", - "in": "query", - "description": "The token to allow access.", - "required": true, - "schema": { - "type": "string" + "summary": "Sets the priority flag for a task.", + "description": "Sets the priority flag for a task. The task priority flag is stored on the task. The user must have permission to access the requested resource.", + "operationId": "PostTasksSetTaskPriority", + "requestBody": { + "description": "The task Set Prio form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskSetPrioForm" + } } - } - ], + }, + "required": true + }, "responses": { - "200": { - "description": "OK" + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -28655,32 +38333,18 @@ "v1" ], "x-access": { - "anonymous": "true" + "any": "true" } } }, - "/taskbundles": { + "/tasks/tags": { "get": { "tags": [ - "TaskBundles" - ], - "summary": "Returns task bundles.", - "description": "Returns task bundles. Each bundle includes its task and list templates. The user must have permission to access the requested resource.", - "operationId": "GetTaskBundles", - "parameters": [ - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } + "TaskTags" ], + "summary": "Returns task tags that are in use by tasks.", + "description": "Returns task tags that are in use by tasks. The result includes tags used by visible tasks. The user must have permission to access the requested resource.", + "operationId": "GetTasksTags", "responses": { "200": { "description": "OK", @@ -28689,11 +38353,21 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TaskBundle" + "$ref": "#/components/schemas/BaseTagModel" } } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -28709,35 +38383,33 @@ "x-access": { "any": "true" } - }, + } + }, + "/tasks/updatetags": { "post": { "tags": [ - "TaskBundles" + "TaskTags" ], - "summary": "Creates a task bundle.", - "description": "Creates a task bundle. It groups reusable task and list templates.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundle", + "summary": "Updates a tag globally for project tasks.", + "description": "Updates a tag globally for project tasks. The renamed or merged tag is applied to matching project tasks.\r\n\r\nThe user must be an admin or have `project-planning-data:write` permissions.", + "operationId": "PostTasksUpdateTags", "requestBody": { - "description": "The task bundle form payload.", + "description": "The model to update the tag including the old and new tag names.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskBundleForm" + "$ref": "#/components/schemas/TagUpdateForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskBundle" - } - } - } + "204": { + "description": "No Content" + }, + "207": { + "description": "Multi-Status" }, "400": { "description": "Bad Request", @@ -28762,23 +38434,23 @@ ], "x-access": { "admin": "true", - "task-manage-config": "write" + "project-planning-data": "write" } } }, - "/taskbundles/fromproject/{projectId}": { - "post": { + "/tasks/{taskId}": { + "get": { "tags": [ - "TaskBundles" + "Tasks" ], - "summary": "Creates a task bundle from a project.", - "description": "Creates a task bundle from a project. The bundle is created from the selected project.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundlesFromProjectByProjectId", + "summary": "Returns the specified task.", + "description": "Returns the specified task. The response includes the task's current assignments and status. The user must have permission to access the requested resource.", + "operationId": "GetTaskById", "parameters": [ { - "name": "projectId", + "name": "taskId", "in": "path", - "description": "The id of the project.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -28786,30 +38458,29 @@ } } ], - "requestBody": { - "description": "The model to create a task bundle from a project.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateTaskBundleFromProjectForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskBundle" + "$ref": "#/components/schemas/TaskModel" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -28830,24 +38501,21 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } - } - }, - "/taskbundles/fromtasklist/{taskListId}": { - "post": { + }, + "put": { "tags": [ - "TaskBundles" + "Tasks" ], - "summary": "Creates a task bundle from a task list.", - "description": "Creates a task bundle from a task list. The bundle is created from the selected task list.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundlesFromTaskListByTaskListId", + "summary": "Updates the task.", + "description": "Updates the task. The updated task is returned with its changed fields. The user must have permission to access the requested resource.", + "operationId": "PutTaskById", "parameters": [ { - "name": "taskListId", + "name": "taskId", "in": "path", - "description": "The id of the task list.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -28856,11 +38524,11 @@ } ], "requestBody": { - "description": "The form to create a task bundle from a task list.", + "description": "The model describing the task updates.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskBundleFromTaskListForm" + "$ref": "#/components/schemas/GeneralTaskForm" } } }, @@ -28872,7 +38540,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskBundle" + "$ref": "#/components/schemas/TaskModel" } } } @@ -28886,6 +38554,26 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -28899,19 +38587,42 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/taskbundles/icons": { + "/tasks/{taskId}/activities": { "get": { "tags": [ - "TaskBundles" + "Task Activities" + ], + "summary": "Returns all activities of the task with the specified id.", + "description": "The activities contain information about the type of the activity, which property was changed and by whom.\r\n This contains changes to first-level properties of the task, like name, description, status, etc., as well as several related entities, such as tags, assignments, etc.\r\n This does not include activities of sub-entities, like tasks of a project or comments on a task.\r\n\r\nAny authenticated user.", + "operationId": "GetTaskActivities", + "parameters": [ + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } ], - "summary": "Returns available task bundle icons.", - "description": "Returns available task bundle icons. These icons can be assigned to task bundles. The user must have permission to access the requested resource.", - "operationId": "GetTaskBundlesIcons", "responses": { "200": { "description": "OK", @@ -28920,11 +38631,41 @@ "schema": { "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/ActivityModel" } } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -28942,19 +38683,19 @@ } } }, - "/taskbundles/{taskBundleId}": { - "delete": { + "/tasks/{taskId}/addtags": { + "post": { "tags": [ - "TaskBundles" + "TaskTags" ], - "summary": "Deletes a task bundle.", - "description": "Deletes a task bundle. The bundle is removed with its task templates.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "DeleteTaskBundleById", + "summary": "Adds a batch of tags to the task.", + "description": "Adds a batch of tags to the task. The request fails if one of the tags is invalid (e.g. empty or duplicate). To add tags to a task the user must have `write` permissions on the specified task.", + "operationId": "PostTaskAddTagsByTaskId", "parameters": [ { - "name": "taskBundleId", + "name": "taskId", "in": "path", - "description": "The id of the task bundle.", + "description": "The id of the task to add the tags to.", "required": true, "schema": { "type": "string", @@ -28962,9 +38703,53 @@ } } ], + "requestBody": { + "description": "The model with the tags to be added.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TagForm" + } + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -28978,22 +38763,23 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } - }, + } + }, + "/tasks/{taskId}/checklistitems": { "get": { "tags": [ - "TaskBundles" + "ChecklistItems" ], - "summary": "Returns a task bundle by id.", - "description": "Returns a task bundle by id. The response includes the bundle's configuration. The user must have permission to access the requested resource.", - "operationId": "GetTaskBundleById", + "summary": "Returns the checklist items for the task.", + "description": "Returns the checklist items for the task. The checklist belongs to the specified task. The user must have at least `read` permissions on the specified task.", + "operationId": "GetTaskChecklistItemsByTaskId", "parameters": [ { - "name": "taskBundleId", + "name": "taskId", "in": "path", - "description": "The id of the task bundle.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -29007,7 +38793,20 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskBundle" + "type": "array", + "items": { + "$ref": "#/components/schemas/ChecklistItem" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -29037,18 +38836,18 @@ "any": "true" } }, - "put": { + "post": { "tags": [ - "TaskBundles" + "ChecklistItems" ], - "summary": "Updates a task bundle.", - "description": "Updates a task bundle. The submitted templates and settings replace the existing values.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PutTaskBundleById", + "summary": "Creates a checklist item for a task.", + "description": "Creates a checklist item for a task. The new item is added to the task checklist. The required permissions depend on the base type of the task. If the task is a project task, the user must have either `project-master-data:write` permissions or be assigned to the task. For a user's private task, no special permissions are required.", + "operationId": "PostTaskChecklistItemsByTaskId", "parameters": [ { - "name": "taskBundleId", + "name": "taskId", "in": "path", - "description": "The id of the task bundle.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -29057,11 +38856,11 @@ } ], "requestBody": { - "description": "The task bundle form payload.", + "description": "The checklist item form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskBundleForm" + "$ref": "#/components/schemas/ChecklistItemForm" } } }, @@ -29073,7 +38872,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskBundle" + "$ref": "#/components/schemas/ChecklistItem" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -29100,24 +38909,23 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/taskbundles/{taskBundleId}/copy": { + "/tasks/{taskId}/checklistitems/tosubtasks": { "post": { "tags": [ - "TaskBundles" + "ChecklistItems" ], - "summary": "Creates a copy of a task bundle.", - "description": "Creates a copy of a task bundle. The copy receives a new identity and keeps the bundle configuration.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundleCopyByTaskBundleId", + "summary": "Converts checklist items of the task to subtasks.", + "description": "Converts checklist items of the task to subtasks. Each checklist item becomes a subtask of the task. The user must have at least `write` permissions on the specified task.", + "operationId": "PostTaskChecklistItemsToSubtasksByTaskId", "parameters": [ { - "name": "taskBundleId", + "name": "taskId", "in": "path", - "description": "The id of the task bundle.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -29125,24 +38933,16 @@ } } ], - "requestBody": { - "description": "The model containing the data to copy the task bundle.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CopyTaskBundleForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskBundle" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskModel" + } } } } @@ -29156,6 +38956,26 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -29169,24 +38989,33 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/taskbundles/{taskBundleId}/taskdependencytemplates": { - "get": { + "/tasks/{taskId}/checklistitems/{checklistItemId}": { + "delete": { "tags": [ - "TaskDependencyTemplates" + "ChecklistItems" ], - "summary": "Returns dependency templates for a task bundle.", - "description": "Returns dependency templates for a task bundle. Each entry identifies a predecessor and successor task template.\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", - "operationId": "GetTaskBundleTaskDependencyTemplatesByTaskBundleId", + "summary": "Deletes a checklist item from a task.", + "description": "Deletes a checklist item from a task. The selected checklist item is removed from the task. The user must have at least `write` permissions on the specified task.", + "operationId": "DeleteTaskChecklistItemByTaskIdAndChecklistItemId", "parameters": [ { - "name": "taskBundleId", + "name": "taskId", "in": "path", - "description": "The id of the task bundle.", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "checklistItemId", + "in": "path", + "description": "The id of the checklist item to delete.", "required": true, "schema": { "type": "string", @@ -29195,28 +39024,8 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskDependencyTemplate" - } - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", @@ -29250,22 +39059,31 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "read" + "any": "true" } }, - "post": { + "get": { "tags": [ - "TaskDependencyTemplates" + "ChecklistItems" ], - "summary": "Creates a dependency template for a bundle.", - "description": "Creates a dependency template for a bundle. The result describes dependencies configured for the bundle.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundleTaskDependencyTemplatesByTaskBundleId", + "summary": "Returns the checklist item for a task.", + "description": "Returns the checklist item for a task. The checklist belongs to the specified task. The user must have at least `read` permissions on the specified task.", + "operationId": "GetTaskChecklistItemByTaskIdAndChecklistItemId", "parameters": [ { - "name": "taskBundleId", + "name": "taskId", "in": "path", - "description": "The id of the task bundle.", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "checklistItemId", + "in": "path", + "description": "The id of the checklist item.", "required": true, "schema": { "type": "string", @@ -29273,34 +39091,13 @@ } } ], - "requestBody": { - "description": "The model describing the task dependency template to create.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskDependencyTemplateForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskDependencyTemplate" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ChecklistItem" } } } @@ -29337,24 +39134,21 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } - } - }, - "/taskbundles/{taskBundleId}/taskdependencytemplates/{taskDependencyTemplateId}": { - "delete": { + }, + "put": { "tags": [ - "TaskDependencyTemplates" + "ChecklistItems" ], - "summary": "Deletes a dependency template from a bundle.", - "description": "Deletes a dependency template from a bundle. The result describes dependencies configured for the bundle.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "DeleteTaskBundleTaskDependencyTemplateByTaskBundleIdAndTaskDependencyTemplateId", + "summary": "Updates a checklist item for a task.", + "description": "Updates a checklist item for a task. The submitted item fields are stored on the checklist item. The required permissions depend on the base type of the task. If the task is a project task, the user must have either `project-master-data:write` permissions or be assigned to the task. For a user's private task, no special permissions are required.", + "operationId": "PutTaskChecklistItemByTaskIdAndChecklistItemId", "parameters": [ { - "name": "taskBundleId", + "name": "taskId", "in": "path", - "description": "The id of the task bundle.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -29362,19 +39156,37 @@ } }, { - "name": "taskDependencyTemplateId", + "name": "checklistItemId", "in": "path", - "description": "The task Dependency Template Id.", + "description": "The id of the checklist item.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "responses": { - "204": { - "description": "No Content" + } + ], + "requestBody": { + "description": "The checklist item form.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChecklistItemForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChecklistItem" + } + } + } }, "401": { "description": "Unauthorized", @@ -29408,32 +39220,23 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } - }, - "get": { + } + }, + "/tasks/{taskId}/comments": { + "delete": { "tags": [ - "TaskDependencyTemplates" + "TaskComments" ], - "summary": "Returns a dependency template from a bundle.", - "description": "Returns a dependency template from a bundle. The result describes dependencies configured for the bundle.\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", - "operationId": "GetTaskBundleTaskDependencyTemplateByTaskBundleIdAndTaskDependencyTemplateId", + "summary": "Deletes all comments of the specified task.", + "description": "Deletes all comments of the specified task.\r\n\r\nAny authenticated user.", + "operationId": "DeleteCommentsByTaskNameAndTaskId", "parameters": [ { - "name": "taskBundleId", - "in": "path", - "description": "The id of the task bundle.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskDependencyTemplateId", + "name": "taskId", "in": "path", - "description": "The task Dependency Template Id.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -29442,25 +39245,8 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskDependencyTemplate" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", @@ -29471,16 +39257,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -29494,24 +39270,21 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "read" + "any": "true" } - } - }, - "/taskbundles/{taskBundleId}/tasklisttemplates": { + }, "get": { "tags": [ - "TaskBundles" + "TaskComments" ], - "summary": "Returns task list templates for a task bundle.", - "description": "Returns task list templates for a task bundle. The response includes the list template configuration. The user must have permission to access the requested resource.", - "operationId": "GetTaskBundleTaskListTemplatesByTaskBundleId", + "summary": "Returns all comments of the task with the specified id.", + "description": "Returns all comments of the task with the specified id. The user needs read permissions on the task.\r\n\r\nAny authenticated user.", + "operationId": "GetCommentsByTaskNameAndTaskId", "parameters": [ { - "name": "taskBundleId", + "name": "taskId", "in": "path", - "description": "The id of the task bundle.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -29539,14 +39312,24 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/NestedTaskList" + "$ref": "#/components/schemas/Comment" } } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -29572,16 +39355,16 @@ }, "post": { "tags": [ - "TaskBundles" + "TaskComments" ], - "summary": "Creates a task list template for a bundle.", - "description": "Creates a task list template for a bundle. It is included when the bundle is applied.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundleTaskListTemplatesByTaskBundleId", + "summary": "Creates a new comment on the task with the specified id.", + "description": "Creates a new comment on the task with the specified id.\r\n A user can only create a comment for him/herself, except for admins and api users.\r\n \r\n To create a comment the user must have at least `read` permissions on the specified task.", + "operationId": "PostCommentsByTaskNameAndTaskId", "parameters": [ { - "name": "taskBundleId", + "name": "taskId", "in": "path", - "description": "The id of the task bundle to create the task list template for.", + "description": "The id of the task to create the comment for.", "required": true, "schema": { "type": "string", @@ -29590,11 +39373,11 @@ } ], "requestBody": { - "description": "The model to create a task list template.", + "description": "The model to create the comment.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskListForm" + "$ref": "#/components/schemas/CommentForm" } } }, @@ -29606,7 +39389,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NestedTaskList" + "$ref": "#/components/schemas/Comment" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -29633,24 +39436,23 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}": { + "/tasks/{taskId}/comments/{commentId}": { "delete": { "tags": [ - "TaskBundles" + "TaskComments" ], - "summary": "Deletes a task list template.", - "description": "Deletes a task list template. The response includes the list template configuration.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "DeleteTaskBundleTaskListTemplateByTaskBundleIdAndTaskListTemplateId", + "summary": "Deletes the comment with the specified id on the task with the specified id.", + "description": "Deletes the comment with the specified id on the task with the specified id.\r\n The delete includes the reactions of the comment.\r\n If there are any replies to the comment, they will be deleted as well.\r\n\r\nAny authenticated user.", + "operationId": "DeleteCommentByTaskNameAndTaskIdAndCommentId", "parameters": [ { - "name": "taskBundleId", + "name": "taskId", "in": "path", - "description": "The id of the task bundle.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -29658,9 +39460,9 @@ } }, { - "name": "taskListTemplateId", + "name": "commentId", "in": "path", - "description": "The task List Template Id.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -29672,6 +39474,16 @@ "204": { "description": "No Content" }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -29694,22 +39506,21 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } }, "get": { "tags": [ - "TaskBundles" + "TaskComments" ], - "summary": "Returns a task list template.", - "description": "Returns a task list template. The response includes the list template configuration. The user must have permission to access the requested resource.", - "operationId": "GetTaskBundleTaskListTemplateByTaskBundleIdAndTaskListTemplateId", + "summary": "Returns the comment with the specified id of the task with the specified id.", + "description": "Returns the comment with the specified id of the task with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetCommentByTaskNameAndTaskIdAndCommentId", "parameters": [ { - "name": "taskBundleId", + "name": "taskId", "in": "path", - "description": "The id of the task bundle.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -29717,9 +39528,9 @@ } }, { - "name": "taskListTemplateId", + "name": "commentId", "in": "path", - "description": "The task list template id.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -29733,13 +39544,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NestedTaskList" + "$ref": "#/components/schemas/Comment" } } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -29765,16 +39576,16 @@ }, "put": { "tags": [ - "TaskBundles" + "TaskComments" ], - "summary": "Updates a task list template.", - "description": "Updates a task list template.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PutTaskBundleTaskListTemplateByTaskBundleIdAndTaskListTemplateId", + "summary": "Updates the comment with the specified id on the task with the specified id.", + "description": "To update a comment the user must either have at least `read` permissions on the specified task, be the creator of the comment or be admin.", + "operationId": "PutCommentByTaskNameAndTaskIdAndCommentId", "parameters": [ { - "name": "taskBundleId", + "name": "taskId", "in": "path", - "description": "The id of the task bundle.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -29782,9 +39593,9 @@ } }, { - "name": "taskListTemplateId", + "name": "commentId", "in": "path", - "description": "The task list template id.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -29793,11 +39604,11 @@ } ], "requestBody": { - "description": "The task list bundle put form.", + "description": "The model with the updated comment information.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskListBundlePutForm" + "$ref": "#/components/schemas/CommentPutForm" } } }, @@ -29809,7 +39620,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NestedTaskList" + "$ref": "#/components/schemas/Comment" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -29836,24 +39657,23 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/addtasktemplates": { + "/tasks/{taskId}/comments/{commentId}/react": { "post": { "tags": [ - "TaskBundles" + "TaskComments" ], - "summary": "Adds task templates to a task list template.", - "description": "Adds task templates to a task list template. The listed task templates are added to the bundle list.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundleTaskListTemplateAddTaskTemplatesByTaskBundleIdAndTaskListTemplateId", + "summary": "Updates the reactions of the comment with the specified id on the task with the specified id.", + "description": "To update a reaction of a comment the user must have at least `read` permissions on the specified task.", + "operationId": "PostCommentReactByTaskNameAndTaskIdAndCommentId", "parameters": [ { - "name": "taskBundleId", + "name": "taskId", "in": "path", - "description": "The id of the task bundle.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -29861,9 +39681,9 @@ } }, { - "name": "taskListTemplateId", + "name": "commentId", "in": "path", - "description": "The task List Template Id.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -29872,35 +39692,89 @@ } ], "requestBody": { - "description": "The task Template To Task List Template list.", + "description": "The model used to update the reactions of the comment with the specified id.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskTemplateToTaskListTemplate" - } + "$ref": "#/components/schemas/ReactionForm" } } }, "required": true }, + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/tasks/{taskId}/copy": { + "post": { + "tags": [ + "Tasks" + ], + "summary": "Creates a copy of the specified task.", + "description": "Creates a copy of the specified task. Comments, files and activity logs are not copied. If the task is a parent task, it will also copy its subtasks. The user must have permission to access the requested resource.", + "operationId": "PostTaskCopyByTaskId", + "parameters": [ + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ReorderingResult" - } + "$ref": "#/components/schemas/TaskModel" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -29931,34 +39805,83 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/removetasktemplates": { + "/tasks/{taskId}/deleterecurrency": { "post": { "tags": [ - "TaskBundles" + "Tasks" ], - "summary": "Removes task templates from a task list template.", - "description": "Removes task templates from a task list template. The listed task templates are removed from the bundle list.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundleTaskListTemplateRemoveTaskTemplatesByTaskBundleIdAndTaskListTemplateId", + "summary": "Deletes the recurrence rule for a task.", + "description": "Deletes the recurrence rule for a task. The task no longer repeats after the rule is removed. The user must have permission to access the requested resource.", + "operationId": "PostTaskDeleteRecurrencyByTaskId", "parameters": [ { - "name": "taskBundleId", + "name": "taskId", "in": "path", - "description": "The id of the task bundle.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", "format": "uuid" } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ { - "name": "taskListTemplateId", + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/tasks/{taskId}/deletetags": { + "post": { + "tags": [ + "TaskTags" + ], + "summary": "Removes tags from the task.", + "description": "Removes tags from the task. Returns 207 MultiStatus if at least one tag could not be removed, including the reasons. To remove tags from a task the user must have `write` permissions on the specified task.", + "operationId": "PostTaskDeleteTagsByTaskId", + "parameters": [ + { + "name": "taskId", "in": "path", - "description": "The task List Template Id.", + "description": "The id of the task to remove the tags from.", "required": true, "schema": { "type": "string", @@ -29967,14 +39890,13 @@ } ], "requestBody": { - "description": "The guid list.", + "description": "The model with the tags to be removed.", "content": { "application/json": { "schema": { "type": "array", "items": { - "type": "string", - "format": "uuid" + "$ref": "#/components/schemas/DeleteTagForm" } } } @@ -29985,6 +39907,9 @@ "204": { "description": "No Content" }, + "207": { + "description": "Multi-Status" + }, "400": { "description": "Bad Request", "content": { @@ -29995,8 +39920,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -30017,34 +39942,22 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/tasktemplates": { - "get": { + "/tasks/{taskId}/externalfiles": { + "post": { "tags": [ - "TaskBundles" + "Task Files" ], - "summary": "Returns task templates inside a task list template.", - "description": "Returns task templates inside a task list template. The response includes task templates assigned to the list. The user must have permission to access the requested resource.", - "operationId": "GetTaskBundleTaskListTemplateTaskTemplatesByTaskBundleIdAndTaskListTemplateId", + "summary": "Creates external file references for the specified task.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostExternalFilesByTaskNameAndTaskId", "parameters": [ { - "name": "taskBundleId", - "in": "path", - "description": "The id of the task bundle.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListTemplateId", + "name": "taskId", "in": "path", - "description": "The task list template id.", "required": true, "schema": { "type": "string", @@ -30052,6 +39965,19 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" + } + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", @@ -30060,14 +39986,24 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TaskTemplate" + "$ref": "#/components/schemas/FileInfo" } } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -30092,39 +40028,19 @@ } } }, - "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/tasktemplates/{taskTemplateId}": { - "get": { + "/tasks/{taskId}/files": { + "delete": { "tags": [ - "TaskBundles" + "Task Files" ], - "summary": "Returns a task template from a list.", - "description": "Returns a task template from a list. The response includes task templates assigned to the list. The user must have permission to access the requested resource.", - "operationId": "GetTaskBundleTaskListTemplateTaskTemplateByTaskBundleIdAndTaskListTemplateIdAndTaskTemplateId", + "summary": "Deletes all files and versions for the specified task.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesByTaskNameAndTaskId", "parameters": [ { - "name": "taskBundleId", - "in": "path", - "description": "The id of the task bundle.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListTemplateId", - "in": "path", - "description": "The task list template id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskTemplateId", + "name": "taskId", "in": "path", - "description": "The id of the task template.", + "description": "The task id.", "required": true, "schema": { "type": "string", @@ -30133,12 +40049,25 @@ } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskTemplate" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -30167,21 +40096,18 @@ "x-access": { "any": "true" } - } - }, - "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/tasktemplates/{taskTemplateId}/updateorder": { - "post": { + }, + "get": { "tags": [ - "TaskBundles" + "Task Files" ], - "summary": "Updates task template order in a list.", - "description": "Updates task template order in a list. The selected task template is moved within the list.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundleTaskListTemplateTaskTemplateUpdateOrderByTaskBundleIdAndTaskListTemplateIdAndTaskTemplateId", + "summary": "Returns all files of the specified task.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByTaskNameAndTaskId", "parameters": [ { - "name": "taskBundleId", + "name": "taskId", "in": "path", - "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -30189,43 +40115,34 @@ } }, { - "name": "taskListTemplateId", - "in": "path", - "description": "The task List Template Id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" }, { - "name": "taskTemplateId", - "in": "path", - "description": "The id of the task template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The task In Task List Update Order form.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskInTaskListUpdateOrderForm" + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } + } } } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -30256,34 +40173,20 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } - } - }, - "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/updateorder": { + }, "post": { "tags": [ - "TaskBundles" + "Task Files" ], - "summary": "Updates task template order in a list.", - "description": "Updates task template order in a list. The task list template order is stored on the bundle.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundleTaskListTemplateUpdateOrderByTaskBundleIdAndTaskListTemplateId", + "summary": "Uploads a file for the specified task.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesByTaskNameAndTaskId", "parameters": [ { - "name": "taskBundleId", - "in": "path", - "description": "The id of the task bundle.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListTemplateId", + "name": "taskId", "in": "path", - "description": "The task List Template Id.", "required": true, "schema": { "type": "string", @@ -30292,22 +40195,37 @@ } ], "requestBody": { - "description": "The update Order form payload.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/UpdateOrderForm" + "$ref": "#/components/schemas/FileUploadModel" } } - }, - "required": true + } }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -30328,53 +40246,48 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/taskbundles/{taskBundleId}/tasktemplates": { - "get": { + "/tasks/{taskId}/files/byuploadid": { + "post": { "tags": [ - "TaskTemplates" + "FileUpload" ], - "summary": "Returns task templates of the task bundle.", - "description": "Returns task templates of the task bundle. The response includes the task template configuration. The user must have permission to access the requested resource.", - "operationId": "GetTaskBundleTaskTemplatesByTaskBundleId", + "summary": "Creates a file from an upload id.", + "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file task from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostUploadByUploadId", "parameters": [ { - "name": "taskBundleId", + "name": "taskId", "in": "path", - "description": "The id of the task bundle.", + "description": "The id of the task to attach the file to.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], + "requestBody": { + "description": "The model describing the uploaded file metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadByUploadIdForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskTemplate" - } + "$ref": "#/components/schemas/FileInfo" } } } @@ -30403,19 +40316,20 @@ "x-access": { "any": "true" } - }, + } + }, + "/tasks/{taskId}/files/byurl": { "post": { "tags": [ - "TaskTemplates" + "Task Files" ], - "summary": "Creates a task template for the task bundle.", - "description": "Creates a task template for the task bundle. It is included when the bundle is applied.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundleTaskTemplatesByTaskBundleId", + "summary": "Uploads a file from a public URL for the specified task.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesByUrlByTaskNameAndTaskId", "parameters": [ { - "name": "taskBundleId", + "name": "taskId", "in": "path", - "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -30424,11 +40338,10 @@ } ], "requestBody": { - "description": "The task Template form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskTemplateForm" + "$ref": "#/components/schemas/FilePostForm" } } }, @@ -30440,7 +40353,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskTemplate" + "$ref": "#/components/schemas/FileInfo" } } } @@ -30455,8 +40368,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -30477,24 +40390,23 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/taskbundles/{taskBundleId}/tasktemplates/{taskTemplateId}": { + "/tasks/{taskId}/files/{fileId}": { "delete": { "tags": [ - "TaskTemplates" + "Task Files" ], - "summary": "Deletes the task template for the task bundle.", - "description": "Deletes the task template for the task bundle. The task template is removed from the bundle.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "DeleteTaskBundleTaskTemplateByTaskBundleIdAndTaskTemplateId", + "summary": "Deletes the specified task file and its versions.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesByTaskNameAndTaskIdAndFileId", "parameters": [ { - "name": "taskBundleId", + "name": "taskId", "in": "path", - "description": "The id of the task bundle.", + "description": "The task id.", "required": true, "schema": { "type": "string", @@ -30502,9 +40414,9 @@ } }, { - "name": "taskTemplateId", + "name": "fileId", "in": "path", - "description": "The id of the task template.", + "description": "The file id.", "required": true, "schema": { "type": "string", @@ -30516,6 +40428,26 @@ "204": { "description": "No Content" }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -30538,22 +40470,21 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } }, "get": { "tags": [ - "TaskTemplates" + "Task Files" ], - "summary": "Returns the task template of the task bundle.", - "description": "Returns the task template of the task bundle. The response includes the task template configuration. The user must have permission to access the requested resource.", - "operationId": "GetTaskBundleTaskTemplateByTaskBundleIdAndTaskTemplateId", + "summary": "Returns the file with the specified id of the task with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByTaskNameAndTaskIdAndFileId", "parameters": [ { - "name": "taskBundleId", + "name": "taskId", "in": "path", - "description": "The id of the task bundle.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -30561,9 +40492,9 @@ } }, { - "name": "taskTemplateId", + "name": "fileId", "in": "path", - "description": "The id of the task template.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -30577,7 +40508,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskTemplate" + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -30609,16 +40550,15 @@ }, "put": { "tags": [ - "TaskTemplates" + "Task Files" ], - "summary": "Updates the task template for the task bundle.", - "description": "Updates the task template for the task bundle. The updated task template is stored in the bundle.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PutTaskBundleTaskTemplateByTaskBundleIdAndTaskTemplateId", + "summary": "Updates metadata for the specified file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PutFilesByTaskNameAndTaskIdAndFileId", "parameters": [ { - "name": "taskBundleId", + "name": "taskId", "in": "path", - "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -30626,9 +40566,8 @@ } }, { - "name": "taskTemplateId", + "name": "fileId", "in": "path", - "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -30637,11 +40576,10 @@ } ], "requestBody": { - "description": "The task Template form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskTemplateForm" + "$ref": "#/components/schemas/FileInfoUpdateForm" } } }, @@ -30653,7 +40591,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskTemplate" + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -30680,24 +40638,31 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/taskbundles/{taskBundleId}/tasktemplates/{taskTemplateId}/setassignees": { + "/tasks/{taskId}/files/{fileId}/changeentity": { "post": { "tags": [ - "TaskTemplates" + "Task Files" ], - "summary": "Assigns a list of users to task templates.", - "description": "Assigns a list of users to task templates. Users that are not passed and are already assigned will be removed. Removes existing task template assignments and adds the new assignment.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundlesTaskTemplatesSetAssigneesByTaskBundleIdAndTaskTemplateId", + "summary": "Changes the task that owns the specified file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesChangeTaskByTaskNameAndTaskIdAndFileId", "parameters": [ { - "name": "taskTemplateId", + "name": "taskId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", "in": "path", - "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -30706,23 +40671,45 @@ } ], "requestBody": { - "description": "The id of the users.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/schemas/FileEntityForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, "404": { "description": "Not Found", @@ -30746,25 +40733,43 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/taskdependencies": { + "/tasks/{taskId}/files/{fileId}/copy": { "post": { "tags": [ - "TaskDependencies" + "Task Files" + ], + "summary": "Copies the specified file to another task.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesCopyByTaskNameAndTaskIdAndFileId", + "parameters": [ + { + "name": "taskId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Creates task dependency.", - "description": "Creates task dependency. The dependency links the selected tasks. To create a task dependency, the user needs to be the assignee of both tasks or have `ProjectPlanning`\r\n permissions in general or in the project the tasks are related to.", - "operationId": "PostTaskDependency", "requestBody": { - "description": "The task Dependency form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskDependencyForm" + "$ref": "#/components/schemas/FileCopyForm" } } }, @@ -30776,7 +40781,116 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskDependency" + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/tasks/{taskId}/files/{fileId}/download": { + "get": { + "tags": [ + "Task Files" + ], + "summary": "Returns the latest content of the specified task file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesDownloadByTaskNameAndTaskIdAndFileId", + "parameters": [ + { + "name": "taskId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "width", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "height", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "crop", + "in": "query", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" } } } @@ -30791,6 +40905,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -30817,29 +40941,63 @@ } } }, - "/taskdependencies/{taskDependencyId}": { - "delete": { + "/tasks/{taskId}/files/{fileId}/pdf": { + "get": { "tags": [ - "TaskDependencies" + "Task Files" ], - "summary": "Deletes a task dependency.", - "description": "Deletes a task dependency. The dependency is removed from both related tasks. To delete a task dependency, the User needs to be the assignee of both tasks or have 'ProjectPlanning'\r\n permissions in general or in the project the task are related to.", - "operationId": "DeleteTaskdependencyByTaskDependencyId", + "summary": "Returns the specified task file as PDF.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesPdfByTaskNameAndTaskIdAndFileId", "parameters": [ { - "name": "taskDependencyId", + "name": "taskId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", "in": "path", - "description": "The id of the task dependency.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "inline", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, "401": { "description": "Unauthorized", @@ -30877,38 +41035,47 @@ } } }, - "/tasks": { - "post": { + "/tasks/{taskId}/files/{fileId}/shareurl": { + "get": { "tags": [ - "Tasks" + "Task Files" ], - "summary": "Creates a project or private task.", - "description": "Creates a project or private task. The created task is returned with its project or private-task scope. The user mast either have `project-planning-data:write` permissions, be assigned to the parent task (if a parent task is specified) or create a private task.", - "operationId": "PostTask", - "requestBody": { - "description": "The general Task Post form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GeneralTaskPostForm" - } + "summary": "Returns a public URL for the specified file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesShareUrlByTaskNameAndTaskIdAndFileId", + "parameters": [ + { + "name": "taskId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskModel" + "type": "string" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -30917,8 +41084,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -30943,31 +41110,62 @@ } } }, - "/tasks/assignuserbyemail": { - "post": { + "/tasks/{taskId}/files/{fileId}/versions": { + "get": { "tags": [ - "Tasks" + "Task Files" ], - "summary": "Invites a user by email and assigns them to a task.", - "description": "Invites a user by email and assigns them to a task. The invited user is added to the task's assignees. The user must have permission to access the requested resource.", - "operationId": "PostTasksAssignUserByEmail", - "requestBody": { - "description": "The assign By Email form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AssignByEmailForm" - } + "summary": "Returns all versions of the specified task file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByTaskNameAndTaskIdAndFileId", + "parameters": [ + { + "name": "taskId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FileVersion" + } + } + } + } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -31000,45 +41198,50 @@ "x-access": { "any": "true" } - } - }, - "/tasks/batch/{operation}": { + }, "post": { "tags": [ - "Tasks" + "Task Files" ], - "summary": "Updates multiple tasks with the selected operation.", - "description": "Updates multiple tasks with the selected operation. Supported operations move tasks, change dates, manage tags, change status or type, assign users, copy tasks, and delete tasks.\r\n The user must have `write` permission for the requested tasks and related entities.", - "operationId": "PostTasksBatchByOperation", + "summary": "Uploads a new version of the specified task file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesVersionsByTaskNameAndTaskIdAndFileId", "parameters": [ { - "name": "operation", + "name": "taskId", "in": "path", - "description": "The operation to perform on all tasks.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } ], "requestBody": { - "description": "The model describing the batch task operation.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/BatchOperationForm" + "$ref": "#/components/schemas/FileUploadModel" } } - }, - "required": true + } }, "responses": { - "207": { - "description": "Multi-Status", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MultiStatusResult" + "$ref": "#/components/schemas/FileVersion" } } } @@ -31062,51 +41265,9 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasks/changebasetypes": { - "post": { - "tags": [ - "Tasks" - ], - "summary": "Updates the base type for multiple tasks.", - "description": "Updates the base type for multiple tasks. The task becomes available with the selected base type. The user must have permission to access the requested resource.", - "operationId": "PostTasksChangeBaseTypes", - "requestBody": { - "description": "The tasks Change Base Types form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TasksChangeBaseTypesForm" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, - "207": { - "description": "Multi-Status" }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -31131,44 +41292,59 @@ } } }, - "/tasks/changelists": { - "post": { + "/tasks/{taskId}/files/{fileId}/versions/{versionId}": { + "get": { "tags": [ - "Tasks" + "Task Files" ], - "summary": "Updates the task lists of tasks.", - "description": "Updates the task lists of tasks. The listed tasks are assigned to the selected lists. The user must have permission to access the requested resource.", - "operationId": "PostTasksChangeLists", - "requestBody": { - "description": "The change Task List forms.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChangeTaskListsForm" - } - } + "summary": "Returns the task file version with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByTaskNameAndTaskIdAndFileIdAndVersionId", + "parameters": [ + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "versionId", + "in": "path", + "description": "The id of the file version.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChangeTaskListsForm" - } + "$ref": "#/components/schemas/FileVersion" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -31176,54 +41352,9 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasks/changestatuses": { - "post": { - "tags": [ - "Tasks" - ], - "summary": "Updates the statuses of tasks.", - "description": "Updates the statuses of tasks. The selected status is applied to the listed tasks. The user must have permission to access the requested resource.", - "operationId": "PostTasksChangeStatuses", - "requestBody": { - "description": "The change Status form list.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChangeStatusForm" - } - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, - "207": { - "description": "Multi-Status" }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -31248,86 +41379,67 @@ } } }, - "/tasks/changesubtasks": { - "post": { + "/tasks/{taskId}/files/{fileId}/versions/{versionId}/download": { + "get": { "tags": [ - "Tasks" + "Task Files" ], - "summary": "Updates task hierarchy and subtask order.", - "description": "Updates task hierarchy and subtask order. A moved subtask adopts the parent task's list and type, and tasks with subtasks cannot become subtasks. The user must have permission to access the requested resource.", - "operationId": "PostTasksChangeSubtasks", - "requestBody": { - "description": "The subtask Changes model.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChangeSubtasksPostForm" - } - } + "summary": "Returns the content of the specified task file version.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsDownloadByTaskNameAndTaskIdAndFileIdAndVersionId", + "parameters": [ + { + "name": "taskId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, - "400": { - "description": "Bad Request", + { + "name": "versionId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string", + "format": "binary" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasks/changesubtaskstoparent": { - "post": { - "tags": [ - "Tasks" - ], - "summary": "Converts subtasks to a parent task.", - "description": "Converts subtasks to a parent task. Convert subtasks to a parent task. If list ids are not provided it will keep the same lists as the old parent task, placing the task as last item in the lists. If multiple list ids are provided per task, the lists will be overwritten with the lists provided. In this case, if an order is not provided, it will be put as the last item in the list. The user must have permission to access the requested resource.", - "operationId": "PostTasksChangeSubtasksToParent", - "requestBody": { - "description": "The change Subtasks To Parent Post form list.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChangeSubtasksToParentPostForm" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -31352,34 +41464,49 @@ } } }, - "/tasks/changetypeofwork": { - "post": { + "/tasks/{taskId}/recurrency": { + "get": { "tags": [ "Tasks" ], - "summary": "Updates the type of work for multiple tasks.", - "description": "Updates the type of work for multiple tasks. The selected work type is applied to the listed tasks. The user must have permission to access the requested resource.", - "operationId": "PostTasksChangeTypeOfWork", - "requestBody": { - "description": "The tasks Change Types form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TasksChangeTypesForm" + "summary": "Returns the recurrence rule of a task.", + "description": "Returns the recurrence rule of a task. The response includes the task's recurrence settings. The user must have permission to access the requested resource.", + "operationId": "GetTaskRecurrencyByTaskId", + "parameters": [ + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RecurrencyModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, - "207": { - "description": "Multi-Status" - }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -31404,20 +41531,36 @@ } } }, - "/tasks/delete": { + "/tasks/{taskId}/setassignees": { "post": { "tags": [ "Tasks" ], - "summary": "Deletes tasks and optionally related time entries.", - "description": "Deletes tasks and optionally related time entries. Related time entries are removed when requested. The user must have permission to access the requested resource.", - "operationId": "PostTasksDelete", + "summary": "Assigns a list of users to a task.", + "description": "Assigns a list of users to a task. Replaces existing assignments with the provided list. The user must have permission to access the requested resource.", + "operationId": "PostTaskSetAssigneesByTaskId", + "parameters": [ + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "requestBody": { - "description": "The model describing the task deletion request.", + "description": "The id of the users.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TasksDeleteForm" + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } } } }, @@ -31427,9 +41570,6 @@ "204": { "description": "No Content" }, - "207": { - "description": "Multi-Status" - }, "400": { "description": "Bad Request", "content": { @@ -31439,6 +41579,26 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -31456,20 +41616,35 @@ } } }, - "/tasks/deletetags": { + "/tasks/{taskId}/setcustomfields": { "post": { "tags": [ - "TaskTags" + "CustomFields" + ], + "summary": "Sets the custom fields for a task.", + "description": "Sets the custom fields for a task. The required properties depend on the type of the custom field. The user must have at least `write` permissions on the specified task.", + "operationId": "PostTaskSetCustomFieldsByTaskId", + "parameters": [ + { + "name": "taskId", + "in": "path", + "description": "The id of the task to set custom fields for.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Removes a tag from project tasks.", - "description": "Removes a tag from project tasks. The tag is removed from matching project tasks.\r\n\r\nThe user must be an admin or have `project-planning-data:write` permissions.", - "operationId": "PostTasksDeleteTags", "requestBody": { - "description": "The model to delete the tag from all tasks.", + "description": "The model containing the details for setting the custom fields for a task.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteTagForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFieldPostForm" + } } } }, @@ -31498,6 +41673,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -31511,41 +41696,48 @@ "v1" ], "x-access": { - "admin": "true", - "project-planning-data": "write" + "any": "true" } } }, - "/tasks/key/{taskIdentifier}": { - "get": { + "/tasks/{taskId}/setplannedefforts": { + "post": { "tags": [ "Tasks" ], - "summary": "Returns the task for the key.", - "description": "Returns the task for the key. The key is matched within the current workspace. The user must have permission to access the requested resource.", - "operationId": "GetTasksKeyByTaskIdentifier", + "summary": "Modifies planned efforts for the task assignments.", + "description": "Modifies planned efforts for the task assignments. Only the provided assignments are updated; missing assignments remain unchanged. The user must have permission to access the requested resource.", + "operationId": "PostTaskSetPlannedEffortsByTaskId", "parameters": [ { - "name": "taskIdentifier", + "name": "taskId", "in": "path", - "description": "The task identifier to lookup (for example, KEY-123).", + "description": "The id of the task.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskModel" + "requestBody": { + "description": "The planned Efforts.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PlannedEffortForm" } } } }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, "400": { "description": "Bad Request", "content": { @@ -31592,20 +41784,32 @@ } } }, - "/tasks/settaskpriority": { + "/tasks/{taskId}/setrecurrency": { "post": { "tags": [ "Tasks" ], - "summary": "Sets the priority flag for a task.", - "description": "Sets the priority flag for a task. The task priority flag is stored on the task. The user must have permission to access the requested resource.", - "operationId": "PostTasksSetTaskPriority", + "summary": "Adds or updates a recurrence rule for a task.", + "description": "Adds or updates a recurrence rule for a task. The recurrence rule is stored on the task. The user must have permission to access the requested resource.", + "operationId": "PostTaskSetRecurrencyByTaskId", + "parameters": [ + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "requestBody": { - "description": "The task Set Prio form payload.", + "description": "The model describing the recurrence rule to apply.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskSetPrioForm" + "$ref": "#/components/schemas/TaskRecurrencyForm" } } }, @@ -31625,6 +41829,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -31651,14 +41865,26 @@ } } }, - "/tasks/tags": { + "/tasks/{taskId}/tags": { "get": { "tags": [ "TaskTags" ], - "summary": "Returns task tags that are in use by tasks.", - "description": "Returns task tags that are in use by tasks. The result includes tags used by visible tasks. The user must have permission to access the requested resource.", - "operationId": "GetTasksTags", + "summary": "Returns the tags of the task.", + "description": "Returns the tags of the task. The result includes tags assigned to the task. The user must have permission to access the requested resource.", + "operationId": "GetTaskTagsByTaskId", + "parameters": [ + { + "name": "taskId", + "in": "path", + "description": "The id of the task to get the tags for.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "responses": { "200": { "description": "OK", @@ -31699,34 +41925,42 @@ } } }, - "/tasks/updatetags": { - "post": { + "/tasks/{taskId}/taskdependencies": { + "get": { "tags": [ - "TaskTags" + "TaskDependencies" ], - "summary": "Updates a tag globally for project tasks.", - "description": "Updates a tag globally for project tasks. The renamed or merged tag is applied to matching project tasks.\r\n\r\nThe user must be an admin or have `project-planning-data:write` permissions.", - "operationId": "PostTasksUpdateTags", - "requestBody": { - "description": "The model to update the tag including the old and new tag names.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TagUpdateForm" - } + "summary": "Returns task dependencies for a specific task.", + "description": "Returns task dependencies for a specific task. The result includes dependencies linked to the task. To get all dependencies of a task, the user needs project planning permissions on that project or be assigned to that task.", + "operationId": "GetTaskTaskdependenciesByTaskId", + "parameters": [ + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - }, - "required": true - }, + } + ], "responses": { - "204": { - "description": "No Content" - }, - "207": { - "description": "Multi-Status" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskDependency" + } + } + } + } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -31747,19 +41981,18 @@ "v1" ], "x-access": { - "admin": "true", - "project-planning-data": "write" + "any": "true" } } }, - "/tasks/{taskId}": { + "/tasks/{taskId}/timeentries": { "get": { "tags": [ - "Tasks" + "TimeEntries" ], - "summary": "Returns the specified task.", - "description": "Returns the specified task. The response includes the task's current assignments and status. The user must have permission to access the requested resource.", - "operationId": "GetTaskById", + "summary": "Returns all time entries of the specified task.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTaskTimeEntries", "parameters": [ { "name": "taskId", @@ -31770,6 +42003,18 @@ "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -31778,27 +42023,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskModel" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/TimeTracking" + } } } } @@ -31817,14 +42045,16 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/tasks/{taskId}/updateorder": { + "post": { "tags": [ "Tasks" ], - "summary": "Updates the task.", - "description": "Updates the task. The updated task is returned with its changed fields. The user must have permission to access the requested resource.", - "operationId": "PutTaskById", + "summary": "Updates the order of a task within its list.", + "description": "Updates the order of a task within its list. The task is repositioned within its list. The user must have permission to access the requested resource.", + "operationId": "PostTaskUpdateOrderByTaskId", "parameters": [ { "name": "taskId", @@ -31838,11 +42068,11 @@ } ], "requestBody": { - "description": "The model describing the task updates.", + "description": "The update Order form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralTaskForm" + "$ref": "#/components/schemas/UpdateOrderForm" } } }, @@ -31854,7 +42084,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskModel" + "type": "array", + "items": { + "$ref": "#/components/schemas/ReorderingResult" + } } } } @@ -31905,48 +42138,78 @@ } } }, - "/tasks/{taskId}/activities": { + "/taskschedules": { "get": { "tags": [ - "Task Activities" + "TaskSchedules" ], - "summary": "Returns all activities of the task with the specified id.", - "description": "The activities contain information about the type of the activity, which property was changed and by whom.\r\n This contains changes to first-level properties of the task, like name, description, status, etc., as well as several related entities, such as tags, assignments, etc.\r\n This does not include activities of sub-entities, like tasks of a project or comments on a task.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskActivities", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Returns a list of task schedules.", + "description": "Returns a list of task schedules. Each result includes its task and timing settings. The user must have permission to access the requested resource.", + "operationId": "GetTaskSchedules", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskSchedule" + } + } + } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "oauth2": [ + "full_access" + ] } ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "TaskSchedules" + ], + "summary": "Creates a schedule for a task.", + "description": "Creates a schedule for a task. The schedule controls planned work for the task. The user must have permission to access the requested resource.", + "operationId": "PostTaskSchedule", + "requestBody": { + "description": "The model to create the task schedule.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskScheduleForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ActivityModel" - } + "$ref": "#/components/schemas/TaskSchedule" } } } @@ -31997,56 +42260,61 @@ } } }, - "/tasks/{taskId}/addtags": { + "/taskschedules/bytaskid/{taskId}": { "post": { "tags": [ - "TaskTags" + "TaskSchedules" ], - "summary": "Adds a batch of tags to the task.", - "description": "Adds a batch of tags to the task. The request fails if one of the tags is invalid (e.g. empty or duplicate). To add tags to a task the user must have `write` permissions on the specified task.", - "operationId": "PostTaskAddTagsByTaskId", + "summary": "Creates task schedules from a task by id.", + "description": "Creates task schedules from a task by id. If more than one user is assigned to the task, then the user needs to opt in to create task schedules for all assignees by setting the 'createSchedulesForAllAssignees' query param to true. The user must have permission to access the requested resource.", + "operationId": "PostTaskSchedulesByTaskIdByTaskId", "parameters": [ { "name": "taskId", "in": "path", - "description": "The id of the task to add the tags to.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "createSchedulesForAllAssignees", + "in": "query", + "description": "Whether to create schedules for all assignees.", + "schema": { + "type": "boolean", + "default": false + } } ], - "requestBody": { - "description": "The model with the tags to be added.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TagForm" + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "required": true - }, - "responses": { - "200": { - "description": "OK", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -32054,6 +42322,46 @@ } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/taskschedules/{taskScheduleId}": { + "delete": { + "tags": [ + "TaskSchedules" + ], + "summary": "Deletes a task schedule by id.", + "description": "Deletes a task schedule by id. The schedule is removed from the task. The user must have permission to access the requested resource.", + "operationId": "DeleteTaskScheduleById", + "parameters": [ + { + "name": "taskScheduleId", + "in": "path", + "description": "The id of the task schedule.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", @@ -32079,21 +42387,19 @@ "x-access": { "any": "true" } - } - }, - "/tasks/{taskId}/checklistitems": { + }, "get": { "tags": [ - "ChecklistItems" + "TaskSchedules" ], - "summary": "Returns the checklist items for the task.", - "description": "Returns the checklist items for the task. The checklist belongs to the specified task. The user must have at least `read` permissions on the specified task.", - "operationId": "GetTaskChecklistItemsByTaskId", + "summary": "Returns a task schedule by id.", + "description": "Returns a task schedule by id. The response includes the schedule's task and timing settings. The user must have permission to access the requested resource.", + "operationId": "GetTaskScheduleById", "parameters": [ { - "name": "taskId", + "name": "taskScheduleId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task schedule.", "required": true, "schema": { "type": "string", @@ -32107,10 +42413,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChecklistItem" - } + "$ref": "#/components/schemas/TaskSchedule" } } } @@ -32150,18 +42453,18 @@ "any": "true" } }, - "post": { + "put": { "tags": [ - "ChecklistItems" + "TaskSchedules" ], - "summary": "Creates a checklist item for a task.", - "description": "Creates a checklist item for a task. The new item is added to the task checklist. The required permissions depend on the base type of the task. If the task is a project task, the user must have either `project-master-data:write` permissions or be assigned to the task. For a user's private task, no special permissions are required.", - "operationId": "PostTaskChecklistItemsByTaskId", + "summary": "Updates a given task schedule.", + "description": "Updates a given task schedule. The saved schedule reflects the submitted timing. The user must have permission to access the requested resource.", + "operationId": "PutTaskScheduleById", "parameters": [ { - "name": "taskId", + "name": "taskScheduleId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task schedule.", "required": true, "schema": { "type": "string", @@ -32170,11 +42473,11 @@ } ], "requestBody": { - "description": "The checklist item form.", + "description": "The model to update the task schedule.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItemForm" + "$ref": "#/components/schemas/TaskSchedulePutForm" } } }, @@ -32186,13 +42489,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItem" + "$ref": "#/components/schemas/TaskSchedule" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -32201,8 +42504,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -32227,40 +42530,29 @@ } } }, - "/tasks/{taskId}/checklistitems/tosubtasks": { + "/tasktemplates/deletetags": { "post": { "tags": [ - "ChecklistItems" - ], - "summary": "Converts checklist items of the task to subtasks.", - "description": "Converts checklist items of the task to subtasks. Each checklist item becomes a subtask of the task. The user must have at least `write` permissions on the specified task.", - "operationId": "PostTaskChecklistItemsToSubtasksByTaskId", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "TaskTemplateTags" ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } - } + "summary": "Removes a tag from task templates.", + "description": "Removes a tag from task templates. The tag is removed from matching task templates.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostDeleteTagForAllTaskTemplates", + "requestBody": { + "description": "The model to remove the tag from all task templates.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteTagForm" } } }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, "400": { "description": "Bad Request", "content": { @@ -32280,13 +42572,42 @@ } } } - }, - "404": { - "description": "Not Found", + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "task-manage-config": "write" + } + } + }, + "/tasktemplates/tags": { + "get": { + "tags": [ + "TaskTemplateTags" + ], + "summary": "Returns tags that are in use by task templates.", + "description": "Returns tags that are in use by task templates. The result includes tags assigned to the task template. The user must have permission to access the requested resource.", + "operationId": "GetTaskTemplateTags", + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } } } } @@ -32307,42 +42628,31 @@ } } }, - "/tasks/{taskId}/checklistitems/{checklistItemId}": { - "delete": { + "/tasktemplates/updatetags": { + "post": { "tags": [ - "ChecklistItems" + "TaskTemplateTags" ], - "summary": "Deletes a checklist item from a task.", - "description": "Deletes a checklist item from a task. The selected checklist item is removed from the task. The user must have at least `write` permissions on the specified task.", - "operationId": "DeleteTaskChecklistItemByTaskIdAndChecklistItemId", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Updates a tag globally for task templates.", + "description": "Updates a tag globally for task templates. The renamed or merged tag is applied to matching task templates.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskTemplatesUpdateTags", + "requestBody": { + "description": "The model containing the tag updates.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagUpdateForm" + } } }, - { - "name": "checklistItemId", - "in": "path", - "description": "The id of the checklist item to delete.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], + "required": true + }, "responses": { "204": { "description": "No Content" }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -32351,8 +42661,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -32373,31 +42683,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } - }, + } + }, + "/tasktemplates/{taskTemplateId}": { "get": { "tags": [ - "ChecklistItems" + "TaskTemplates" ], - "summary": "Returns the checklist item for a task.", - "description": "Returns the checklist item for a task. The checklist belongs to the specified task. The user must have at least `read` permissions on the specified task.", - "operationId": "GetTaskChecklistItemByTaskIdAndChecklistItemId", + "summary": "Returns the task template.", + "description": "Returns the task template. The response includes the task template configuration. The user must have permission to access the requested resource.", + "operationId": "GetTaskTemplateById", "parameters": [ { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "checklistItemId", + "name": "taskTemplateId", "in": "path", - "description": "The id of the checklist item.", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -32411,17 +42714,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItem" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TaskTemplate" } } } @@ -32450,29 +42743,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/tasktemplates/{taskTemplateId}/addtags": { + "post": { "tags": [ - "ChecklistItems" + "TaskTemplateTags" ], - "summary": "Updates a checklist item for a task.", - "description": "Updates a checklist item for a task. The submitted item fields are stored on the checklist item. The required permissions depend on the base type of the task. If the task is a project task, the user must have either `project-master-data:write` permissions or be assigned to the task. For a user's private task, no special permissions are required.", - "operationId": "PutTaskChecklistItemByTaskIdAndChecklistItemId", + "summary": "Adds a batch of tags to the task template.", + "description": "Adds a batch of tags to the task template. The request fails if one of the tags is invalid (e.g. empty or duplicate).\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostCreateTaskTemplateTag", "parameters": [ { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "checklistItemId", + "name": "taskTemplateId", "in": "path", - "description": "The id of the checklist item.", + "description": "The id of the task template to add tags to.", "required": true, "schema": { "type": "string", @@ -32481,11 +42766,14 @@ } ], "requestBody": { - "description": "The checklist item form.", + "description": "The model with the tags to be added.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItemForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/TagForm" + } } } }, @@ -32497,23 +42785,16 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItem" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -32521,46 +42802,6 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasks/{taskId}/comments": { - "delete": { - "tags": [ - "TaskComments" - ], - "summary": "Deletes all comments of the specified task.", - "description": "Deletes all comments of the specified task.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCommentsByTaskNameAndTaskId", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" }, "401": { "description": "Unauthorized", @@ -32584,38 +42825,29 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } - }, + } + }, + "/tasktemplates/{taskTemplateId}/checklistitemtemplates": { "get": { "tags": [ - "TaskComments" + "TaskBundles" ], - "summary": "Returns all comments of the task with the specified id.", - "description": "Returns all comments of the task with the specified id. The user needs read permissions on the task.\r\n\r\nAny authenticated user.", - "operationId": "GetCommentsByTaskNameAndTaskId", + "summary": "Returns checklist items for a task template.", + "description": "Returns checklist items for a task template. The result lists checklist templates defined for the task template.\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", + "operationId": "GetTaskTemplateChecklistItemTemplatesByTaskTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskTemplateId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -32626,24 +42858,14 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/ChecklistItemTemplate" } } } } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -32664,21 +42886,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "read" } }, "post": { "tags": [ - "TaskComments" + "TaskBundles" ], - "summary": "Creates a new comment on the task with the specified id.", - "description": "Creates a new comment on the task with the specified id.\r\n A user can only create a comment for him/herself, except for admins and api users.\r\n \r\n To create a comment the user must have at least `read` permissions on the specified task.", - "operationId": "PostCommentsByTaskNameAndTaskId", + "summary": "Creates a checklist item template.", + "description": "Creates a checklist item template. It can be used when creating checklist items from the task template.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskTemplateChecklistItemTemplatesByTaskTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskTemplateId", "in": "path", - "description": "The id of the task to create the comment for.", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -32687,11 +42910,11 @@ } ], "requestBody": { - "description": "The model to create the comment.", + "description": "The checklist Item Template form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CommentForm" + "$ref": "#/components/schemas/ChecklistItemTemplateForm" } } }, @@ -32703,7 +42926,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/ChecklistItemTemplate" } } } @@ -32718,16 +42941,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -32750,23 +42963,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/tasks/{taskId}/comments/{commentId}": { + "/tasktemplates/{taskTemplateId}/checklistitemtemplates/{checklistItemTemplateId}": { "delete": { "tags": [ - "TaskComments" + "TaskBundles" ], - "summary": "Deletes the comment with the specified id on the task with the specified id.", - "description": "Deletes the comment with the specified id on the task with the specified id.\r\n The delete includes the reactions of the comment.\r\n If there are any replies to the comment, they will be deleted as well.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCommentByTaskNameAndTaskIdAndCommentId", + "summary": "Deletes a checklist item template.", + "description": "Deletes a checklist item template. The checklist template is removed from the task template.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "DeleteTaskTemplateChecklistItemTemplateByTaskTemplateIdAndChecklistItemTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskTemplateId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -32774,9 +42988,9 @@ } }, { - "name": "commentId", + "name": "checklistItemTemplateId", "in": "path", - "description": "The id of the comment.", + "description": "The checklist Item Template Id.", "required": true, "schema": { "type": "string", @@ -32788,16 +43002,6 @@ "204": { "description": "No Content" }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -32820,21 +43024,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } }, "get": { "tags": [ - "TaskComments" + "TaskBundles" ], - "summary": "Returns the comment with the specified id of the task with the specified id.", - "description": "Returns the comment with the specified id of the task with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetCommentByTaskNameAndTaskIdAndCommentId", + "summary": "Returns a checklist item template.", + "description": "Returns a checklist item template. The response includes the checklist template's label and completion settings.\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", + "operationId": "GetTaskTemplateChecklistItemTemplateByTaskTemplateIdAndChecklistItemTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskTemplateId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -32842,9 +43047,9 @@ } }, { - "name": "commentId", + "name": "checklistItemTemplateId", "in": "path", - "description": "The id of the comment.", + "description": "The checklist item template id.", "required": true, "schema": { "type": "string", @@ -32858,13 +43063,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/ChecklistItemTemplate" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -32885,21 +43090,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "read" } }, "put": { "tags": [ - "TaskComments" + "TaskBundles" ], - "summary": "Updates the comment with the specified id on the task with the specified id.", - "description": "To update a comment the user must either have at least `read` permissions on the specified task, be the creator of the comment or be admin.", - "operationId": "PutCommentByTaskNameAndTaskIdAndCommentId", + "summary": "Updates a checklist item template.", + "description": "Updates a checklist item template. The submitted checklist template fields are stored.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PutTaskTemplateChecklistItemTemplateByTaskTemplateIdAndChecklistItemTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskTemplateId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -32907,9 +43113,9 @@ } }, { - "name": "commentId", + "name": "checklistItemTemplateId", "in": "path", - "description": "The id of the comment.", + "description": "The checklist Item Template Id.", "required": true, "schema": { "type": "string", @@ -32918,11 +43124,11 @@ } ], "requestBody": { - "description": "The model with the updated comment information.", + "description": "The checklist Item Template form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CommentPutForm" + "$ref": "#/components/schemas/ChecklistItemTemplateForm" } } }, @@ -32934,13 +43140,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/ChecklistItemTemplate" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -32971,67 +43177,37 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/tasks/{taskId}/comments/{commentId}/react": { + "/tasktemplates/{taskTemplateId}/deleterecurrency": { "post": { "tags": [ - "TaskComments" + "TaskBundles" ], - "summary": "Updates the reactions of the comment with the specified id on the task with the specified id.", - "description": "To update a reaction of a comment the user must have at least `read` permissions on the specified task.", - "operationId": "PostCommentReactByTaskNameAndTaskIdAndCommentId", + "summary": "Deletes a task template recurrence rule.", + "description": "Deletes a task template recurrence rule. The recurrence rule is removed from the template.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskTemplateDeleteRecurrencyByTaskTemplateId", "parameters": [ { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "commentId", + "name": "taskTemplateId", "in": "path", - "description": "The id of the comment.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model used to update the reactions of the comment with the specified id.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ReactionForm" - } + "description": "The id of the task template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - }, - "required": true - }, + } + ], "responses": { "204": { "description": "No Content" }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -33052,23 +43228,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/tasks/{taskId}/copy": { + "/tasktemplates/{taskTemplateId}/deletetags": { "post": { "tags": [ - "Tasks" + "TaskTemplateTags" ], - "summary": "Creates a copy of the specified task.", - "description": "Creates a copy of the specified task. Comments, files and activity logs are not copied. If the task is a parent task, it will also copy its subtasks. The user must have permission to access the requested resource.", - "operationId": "PostTaskCopyByTaskId", + "summary": "Removes tags from the task template.", + "description": "Removes tags from the task template. Returns 207 MultiStatus if at least one tag could not be removed, including the reasons.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostDeleteTaskTemplatesTags", "parameters": [ { - "name": "taskId", + "name": "taskTemplateId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task template to remove tags from.", "required": true, "schema": { "type": "string", @@ -33076,19 +43253,29 @@ } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskModel" + "requestBody": { + "description": "The list of tags to remove from the task template.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DeleteTagForm" } } } }, - "401": { - "description": "Unauthorized", + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "207": { + "description": "Multi-Status" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -33097,8 +43284,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -33119,23 +43306,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/tasks/{taskId}/deleterecurrency": { - "post": { + "/tasktemplates/{taskTemplateId}/recurrency": { + "get": { "tags": [ - "Tasks" + "TaskBundles" ], - "summary": "Deletes the recurrence rule for a task.", - "description": "Deletes the recurrence rule for a task. The task no longer repeats after the rule is removed. The user must have permission to access the requested resource.", - "operationId": "PostTaskDeleteRecurrencyByTaskId", + "summary": "Returns recurrency details for a task template.", + "description": "Returns recurrency details for a task template. The response includes the template's recurrence settings.\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", + "operationId": "GetTaskTemplateRecurrencyByTaskTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskTemplateId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -33144,21 +43332,18 @@ } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TaskRecurrencyForm" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -33179,23 +43364,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "read" } } }, - "/tasks/{taskId}/deletetags": { + "/tasktemplates/{taskTemplateId}/setcustomfields": { "post": { "tags": [ - "TaskTags" + "CustomFields" ], - "summary": "Removes tags from the task.", - "description": "Removes tags from the task. Returns 207 MultiStatus if at least one tag could not be removed, including the reasons. To remove tags from a task the user must have `write` permissions on the specified task.", - "operationId": "PostTaskDeleteTagsByTaskId", + "summary": "Sets the custom fields for the task template.", + "description": "Sets the custom fields for the task template. The required properties depend on the type of the custom field. Only task templates which are linked to a project template may have custom fields set.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostTaskTemplateSetCustomFieldsByTaskTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskTemplateId", "in": "path", - "description": "The id of the task to remove the tags from.", + "description": "The id of the task template to set custom fields for.", "required": true, "schema": { "type": "string", @@ -33204,13 +43390,13 @@ } ], "requestBody": { - "description": "The model with the tags to be removed.", + "description": "The model containing the details for setting the custom fields for a task template.", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/DeleteTagForm" + "$ref": "#/components/schemas/CustomFieldPostForm" } } } @@ -33221,9 +43407,6 @@ "204": { "description": "No Content" }, - "207": { - "description": "Multi-Status" - }, "400": { "description": "Bad Request", "content": { @@ -33234,8 +43417,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -33256,23 +43439,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/tasks/{taskId}/files/byuploadid": { + "/tasktemplates/{taskTemplateId}/setrecurrency": { "post": { "tags": [ - "FileUpload" + "TaskBundles" ], - "summary": "Creates a file from an upload id.", - "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file task from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", - "operationId": "PostUploadByUploadId", + "summary": "Updates a task template recurrence rule.", + "description": "Updates a task template recurrence rule. The template uses the submitted recurrence rule.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskTemplateSetRecurrencyByTaskTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskTemplateId", "in": "path", - "description": "The id of the task to attach the file to.", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -33281,29 +43465,22 @@ } ], "requestBody": { - "description": "The model describing the uploaded file metadata.", + "description": "The model describing the recurrence rule to apply.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UploadByUploadIdForm" + "$ref": "#/components/schemas/TaskBundleRecurrencyForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } + "204": { + "description": "No Content" }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -33324,33 +43501,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/tasks/{taskId}/files/{fileId}": { + "/tasktemplates/{taskTemplateId}/tags": { "get": { "tags": [ - "Task Files" + "TaskTemplateTags" ], - "summary": "Returns the file with the specified id of the task with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByTaskNameAndTaskIdAndFileId", + "summary": "Returns the tags of the task template.", + "description": "Returns the tags of the task template. The result includes tags assigned to the task template. The user must have permission to access the requested resource.", + "operationId": "GetTagsByTaskTemplateId", "parameters": [ { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "taskTemplateId", "in": "path", - "description": "The id of the file.", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -33364,27 +43532,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } } } } @@ -33405,39 +43556,19 @@ } } }, - "/tasks/{taskId}/files/{fileId}/versions/{versionId}": { + "/tasktemplates/{taskTemplateId}/taskdependencytemplates": { "get": { "tags": [ - "Task Files" + "TaskDependencyTemplates" ], - "summary": "Returns the task file version with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByTaskNameAndTaskIdAndFileIdAndVersionId", + "summary": "Returns dependency templates for a task template.", + "description": "Returns dependency templates for a task template. The result lists dependencies defined for the task template.\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", + "operationId": "GetTaskTemplateTaskDependencyTemplatesByTaskTemplateId", "parameters": [ { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "versionId", + "name": "taskTemplateId", "in": "path", - "description": "The id of the file version.", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -33451,7 +43582,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskDependencyTemplate" + } } } } @@ -33488,23 +43622,23 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "read" } } }, - "/tasks/{taskId}/recurrency": { - "get": { + "/tasktemplates/{tasktemplateId}/externalfiles": { + "post": { "tags": [ - "Tasks" + "TaskTemplate Files" ], - "summary": "Returns the recurrence rule of a task.", - "description": "Returns the recurrence rule of a task. The response includes the task's recurrence settings. The user must have permission to access the requested resource.", - "operationId": "GetTaskRecurrencyByTaskId", + "summary": "Creates external file references for the specified tasktemplate.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostExternalFilesByTaskTemplateNameAndTaskTemplateId", "parameters": [ { - "name": "taskId", + "name": "tasktemplateId", "in": "path", - "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -33512,19 +43646,35 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" + } + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RecurrencyModel" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -33533,8 +43683,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -33559,19 +43709,19 @@ } } }, - "/tasks/{taskId}/setassignees": { - "post": { + "/tasktemplates/{tasktemplateId}/files": { + "delete": { "tags": [ - "Tasks" + "TaskTemplate Files" ], - "summary": "Assigns a list of users to a task.", - "description": "Assigns a list of users to a task. Replaces existing assignments with the provided list. The user must have permission to access the requested resource.", - "operationId": "PostTaskSetAssigneesByTaskId", + "summary": "Deletes all files and versions for the specified tasktemplate.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesByTaskTemplateNameAndTaskTemplateId", "parameters": [ { - "name": "taskId", + "name": "tasktemplateId", "in": "path", - "description": "The id of the task.", + "description": "The tasktemplate id.", "required": true, "schema": { "type": "string", @@ -33579,21 +43729,6 @@ } } ], - "requestBody": { - "description": "The id of the users.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - } - } - }, - "required": true - }, "responses": { "204": { "description": "No Content" @@ -33642,52 +43777,47 @@ "x-access": { "any": "true" } - } - }, - "/tasks/{taskId}/setcustomfields": { - "post": { + }, + "get": { "tags": [ - "CustomFields" + "TaskTemplate Files" ], - "summary": "Sets the custom fields for a task.", - "description": "Sets the custom fields for a task. The required properties depend on the type of the custom field. The user must have at least `write` permissions on the specified task.", - "operationId": "PostTaskSetCustomFieldsByTaskId", + "summary": "Returns all files of the specified tasktemplate.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByTaskTemplateNameAndTaskTemplateId", "parameters": [ { - "name": "taskId", + "name": "tasktemplateId", "in": "path", - "description": "The id of the task to set custom fields for.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The model containing the details for setting the custom fields for a task.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomFieldPostForm" - } - } - } - }, - "required": true - }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } } } } @@ -33726,21 +43856,18 @@ "x-access": { "any": "true" } - } - }, - "/tasks/{taskId}/setplannedefforts": { + }, "post": { "tags": [ - "Tasks" + "TaskTemplate Files" ], - "summary": "Modifies planned efforts for the task assignments.", - "description": "Modifies planned efforts for the task assignments. Only the provided assignments are updated; missing assignments remain unchanged. The user must have permission to access the requested resource.", - "operationId": "PostTaskSetPlannedEffortsByTaskId", + "summary": "Uploads a file for the specified tasktemplate.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesByTaskTemplateNameAndTaskTemplateId", "parameters": [ { - "name": "taskId", + "name": "tasktemplateId", "in": "path", - "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -33749,35 +43876,27 @@ } ], "requestBody": { - "description": "The planned Efforts.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/PlannedEffortForm" - } + "$ref": "#/components/schemas/FileUploadModel" } } - }, - "required": true + } }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -33786,8 +43905,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -33812,19 +43931,19 @@ } } }, - "/tasks/{taskId}/setrecurrency": { + "/tasktemplates/{tasktemplateId}/files/byuploadid": { "post": { "tags": [ - "Tasks" + "FileUpload" ], - "summary": "Adds or updates a recurrence rule for a task.", - "description": "Adds or updates a recurrence rule for a task. The recurrence rule is stored on the task. The user must have permission to access the requested resource.", - "operationId": "PostTaskSetRecurrencyByTaskId", + "summary": "Creates a file from an upload id.", + "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file tasktemplate from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostUploadByUploadId", "parameters": [ { - "name": "taskId", + "name": "tasktemplateId", "in": "path", - "description": "The id of the task.", + "description": "The id of the tasktemplate to attach the file to.", "required": true, "schema": { "type": "string", @@ -33833,36 +43952,23 @@ } ], "requestBody": { - "description": "The model describing the recurrence rule to apply.", + "description": "The model describing the uploaded file metadata.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskRecurrencyForm" + "$ref": "#/components/schemas/UploadByUploadIdForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -33893,19 +43999,18 @@ } } }, - "/tasks/{taskId}/tags": { - "get": { + "/tasktemplates/{tasktemplateId}/files/byurl": { + "post": { "tags": [ - "TaskTags" + "TaskTemplate Files" ], - "summary": "Returns the tags of the task.", - "description": "Returns the tags of the task. The result includes tags assigned to the task. The user must have permission to access the requested resource.", - "operationId": "GetTaskTagsByTaskId", + "summary": "Uploads a file from a public URL for the specified tasktemplate.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesByUrlByTaskTemplateNameAndTaskTemplateId", "parameters": [ { - "name": "taskId", + "name": "tasktemplateId", "in": "path", - "description": "The id of the task to get the tags for.", "required": true, "schema": { "type": "string", @@ -33913,16 +44018,33 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FilePostForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -33953,19 +44075,29 @@ } } }, - "/tasks/{taskId}/taskdependencies": { - "get": { + "/tasktemplates/{tasktemplateId}/files/{fileId}": { + "delete": { "tags": [ - "TaskDependencies" + "TaskTemplate Files" ], - "summary": "Returns task dependencies for a specific task.", - "description": "Returns task dependencies for a specific task. The result includes dependencies linked to the task. To get all dependencies of a task, the user needs project planning permissions on that project or be assigned to that task.", - "operationId": "GetTaskTaskdependenciesByTaskId", + "summary": "Deletes the specified tasktemplate file and its versions.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesByTaskTemplateNameAndTaskTemplateIdAndFileId", "parameters": [ { - "name": "taskId", + "name": "tasktemplateId", + "in": "path", + "description": "The tasktemplate id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", "in": "path", - "description": "The id of the task.", + "description": "The file id.", "required": true, "schema": { "type": "string", @@ -33974,15 +44106,25 @@ } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskDependency" - } + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -34011,21 +44153,19 @@ "x-access": { "any": "true" } - } - }, - "/tasks/{taskId}/timeentries": { + }, "get": { "tags": [ - "TimeEntries" + "TaskTemplate Files" ], - "summary": "Returns all time entries of the specified task.", + "summary": "Returns the file with the specified id of the tasktemplate with the specified id.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTaskTimeEntries", + "operationId": "GetFilesByTaskTemplateNameAndTaskTemplateIdAndFileId", "parameters": [ { - "name": "taskId", + "name": "tasktemplateId", "in": "path", - "description": "The id of the task.", + "description": "The id of the tasktemplate.", "required": true, "schema": { "type": "string", @@ -34033,16 +44173,14 @@ } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -34051,10 +44189,27 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TimeTracking" - } + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -34073,21 +44228,27 @@ "x-access": { "any": "true" } - } - }, - "/tasks/{taskId}/updateorder": { - "post": { + }, + "put": { "tags": [ - "Tasks" + "TaskTemplate Files" ], - "summary": "Updates the order of a task within its list.", - "description": "Updates the order of a task within its list. The task is repositioned within its list. The user must have permission to access the requested resource.", - "operationId": "PostTaskUpdateOrderByTaskId", + "summary": "Updates metadata for the specified file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PutFilesByTaskTemplateNameAndTaskTemplateIdAndFileId", "parameters": [ { - "name": "taskId", + "name": "tasktemplateId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", "in": "path", - "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -34096,11 +44257,10 @@ } ], "requestBody": { - "description": "The update Order form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateOrderForm" + "$ref": "#/components/schemas/FileInfoUpdateForm" } } }, @@ -34112,10 +44272,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ReorderingResult" - } + "$ref": "#/components/schemas/FileInfo" } } } @@ -34166,24 +44323,61 @@ } } }, - "/taskschedules": { - "get": { + "/tasktemplates/{tasktemplateId}/files/{fileId}/changeentity": { + "post": { "tags": [ - "TaskSchedules" + "TaskTemplate Files" ], - "summary": "Returns a list of task schedules.", - "description": "Returns a list of task schedules. Each result includes its task and timing settings. The user must have permission to access the requested resource.", - "operationId": "GetTaskSchedules", + "summary": "Changes the tasktemplate that owns the specified file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesChangeTaskTemplateByTaskTemplateNameAndTaskTemplateIdAndFileId", + "parameters": [ + { + "name": "tasktemplateId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileEntityForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskSchedule" - } + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -34197,6 +44391,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -34212,20 +44416,41 @@ "x-access": { "any": "true" } - }, + } + }, + "/tasktemplates/{tasktemplateId}/files/{fileId}/copy": { "post": { "tags": [ - "TaskSchedules" + "TaskTemplate Files" + ], + "summary": "Copies the specified file to another tasktemplate.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesCopyByTaskTemplateNameAndTaskTemplateIdAndFileId", + "parameters": [ + { + "name": "tasktemplateId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Creates a schedule for a task.", - "description": "Creates a schedule for a task. The schedule controls planned work for the task. The user must have permission to access the requested resource.", - "operationId": "PostTaskSchedule", "requestBody": { - "description": "The model to create the task schedule.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskScheduleForm" + "$ref": "#/components/schemas/FileCopyForm" } } }, @@ -34237,7 +44462,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskSchedule" + "$ref": "#/components/schemas/FileInfo" } } } @@ -34288,19 +44513,18 @@ } } }, - "/taskschedules/bytaskid/{taskId}": { - "post": { + "/tasktemplates/{tasktemplateId}/files/{fileId}/download": { + "get": { "tags": [ - "TaskSchedules" + "TaskTemplate Files" ], - "summary": "Creates task schedules from a task by id.", - "description": "Creates task schedules from a task by id. If more than one user is assigned to the task, then the user needs to opt in to create task schedules for all assignees by setting the 'createSchedulesForAllAssignees' query param to true. The user must have permission to access the requested resource.", - "operationId": "PostTaskSchedulesByTaskIdByTaskId", + "summary": "Returns the latest content of the specified tasktemplate file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesDownloadByTaskTemplateNameAndTaskTemplateIdAndFileId", "parameters": [ { - "name": "taskId", + "name": "tasktemplateId", "in": "path", - "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -34308,18 +44532,49 @@ } }, { - "name": "createSchedulesForAllAssignees", + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "width", "in": "query", - "description": "Whether to create schedules for all assignees.", "schema": { - "type": "boolean", - "default": false + "type": "number", + "format": "double" + } + }, + { + "name": "height", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "crop", + "in": "query", + "schema": { + "type": "boolean" } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + } }, "400": { "description": "Bad Request", @@ -34367,72 +44622,40 @@ } } }, - "/taskschedules/{taskScheduleId}": { - "delete": { + "/tasktemplates/{tasktemplateId}/files/{fileId}/pdf": { + "get": { "tags": [ - "TaskSchedules" + "TaskTemplate Files" ], - "summary": "Deletes a task schedule by id.", - "description": "Deletes a task schedule by id. The schedule is removed from the task. The user must have permission to access the requested resource.", - "operationId": "DeleteTaskScheduleById", + "summary": "Returns the specified tasktemplate file as PDF.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesPdfByTaskTemplateNameAndTaskTemplateIdAndFileId", "parameters": [ { - "name": "taskScheduleId", + "name": "tasktemplateId", "in": "path", - "description": "The id of the task schedule.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "responses": { - "204": { - "description": "No Content" }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "get": { - "tags": [ - "TaskSchedules" - ], - "summary": "Returns a task schedule by id.", - "description": "Returns a task schedule by id. The response includes the schedule's task and timing settings. The user must have permission to access the requested resource.", - "operationId": "GetTaskScheduleById", - "parameters": [ { - "name": "taskScheduleId", + "name": "fileId", "in": "path", - "description": "The id of the task schedule.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "inline", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } } ], "responses": { @@ -34441,7 +44664,18 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskSchedule" + "type": "string", + "format": "binary" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -34480,19 +44714,29 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/tasktemplates/{tasktemplateId}/files/{fileId}/shareurl": { + "get": { "tags": [ - "TaskSchedules" + "TaskTemplate Files" ], - "summary": "Updates a given task schedule.", - "description": "Updates a given task schedule. The saved schedule reflects the submitted timing. The user must have permission to access the requested resource.", - "operationId": "PutTaskScheduleById", + "summary": "Returns a public URL for the specified file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesShareUrlByTaskTemplateNameAndTaskTemplateIdAndFileId", "parameters": [ { - "name": "taskScheduleId", + "name": "tasktemplateId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", "in": "path", - "description": "The id of the task schedule.", "required": true, "schema": { "type": "string", @@ -34500,30 +44744,19 @@ } } ], - "requestBody": { - "description": "The model to update the task schedule.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskSchedulePutForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskSchedule" + "type": "string" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -34532,8 +44765,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -34558,35 +44791,56 @@ } } }, - "/tasktemplates/deletetags": { - "post": { + "/tasktemplates/{tasktemplateId}/files/{fileId}/versions": { + "get": { "tags": [ - "TaskTemplateTags" + "TaskTemplate Files" ], - "summary": "Removes a tag from task templates.", - "description": "Removes a tag from task templates. The tag is removed from matching task templates.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostDeleteTagForAllTaskTemplates", - "requestBody": { - "description": "The model to remove the tag from all task templates.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteTagForm" - } + "summary": "Returns all versions of the specified tasktemplate file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByTaskTemplateNameAndTaskTemplateIdAndFileId", + "parameters": [ + { + "name": "tasktemplateId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, - "400": { - "description": "Bad Request", + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileVersion" + } } } } @@ -34600,42 +44854,13 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "task-manage-config": "write" - } - } - }, - "/tasktemplates/tags": { - "get": { - "tags": [ - "TaskTemplateTags" - ], - "summary": "Returns tags that are in use by task templates.", - "description": "Returns tags that are in use by task templates. The result includes tags assigned to the task template. The user must have permission to access the requested resource.", - "operationId": "GetTaskTemplateTags", - "responses": { - "200": { - "description": "OK", + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -34654,30 +44879,53 @@ "x-access": { "any": "true" } - } - }, - "/tasktemplates/updatetags": { + }, "post": { "tags": [ - "TaskTemplateTags" + "TaskTemplate Files" + ], + "summary": "Uploads a new version of the specified tasktemplate file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesVersionsByTaskTemplateNameAndTaskTemplateIdAndFileId", + "parameters": [ + { + "name": "tasktemplateId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Updates a tag globally for task templates.", - "description": "Updates a tag globally for task templates. The renamed or merged tag is applied to matching task templates.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskTemplatesUpdateTags", "requestBody": { - "description": "The model containing the tag updates.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/TagUpdateForm" + "$ref": "#/components/schemas/FileUploadModel" } } - }, - "required": true + } }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileVersion" + } + } + } }, "400": { "description": "Bad Request", @@ -34698,6 +44946,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -34711,24 +44969,43 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/tasktemplates/{taskTemplateId}": { + "/tasktemplates/{tasktemplateId}/files/{fileId}/versions/{versionId}": { "get": { "tags": [ - "TaskTemplates" + "TaskTemplate Files" ], - "summary": "Returns the task template.", - "description": "Returns the task template. The response includes the task template configuration. The user must have permission to access the requested resource.", - "operationId": "GetTaskTemplateById", + "summary": "Returns the tasktemplate file version with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByTaskTemplateNameAndTaskTemplateIdAndFileIdAndVersionId", "parameters": [ { - "name": "taskTemplateId", + "name": "tasktemplateId", "in": "path", - "description": "The id of the task template.", + "description": "The id of the tasktemplate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "versionId", + "in": "path", + "description": "The id of the file version.", "required": true, "schema": { "type": "string", @@ -34742,7 +45019,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskTemplate" + "$ref": "#/components/schemas/FileVersion" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -34773,56 +45060,57 @@ } } }, - "/tasktemplates/{taskTemplateId}/addtags": { - "post": { + "/tasktemplates/{tasktemplateId}/files/{fileId}/versions/{versionId}/download": { + "get": { "tags": [ - "TaskTemplateTags" + "TaskTemplate Files" ], - "summary": "Adds a batch of tags to the task template.", - "description": "Adds a batch of tags to the task template. The request fails if one of the tags is invalid (e.g. empty or duplicate).\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostCreateTaskTemplateTag", + "summary": "Returns the content of the specified tasktemplate file version.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsDownloadByTaskTemplateNameAndTaskTemplateIdAndFileIdAndVersionId", "parameters": [ { - "name": "taskTemplateId", + "name": "tasktemplateId", "in": "path", - "description": "The id of the task template to add tags to.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The model with the tags to be added.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TagForm" - } - } + }, + { + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "versionId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "type": "string", + "format": "binary" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -34831,8 +45119,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -34853,29 +45141,48 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/tasktemplates/{taskTemplateId}/checklistitemtemplates": { + "/teams": { "get": { "tags": [ - "TaskBundles" + "Teams" ], - "summary": "Returns checklist items for a task template.", - "description": "Returns checklist items for a task template. The result lists checklist templates defined for the task template.\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", - "operationId": "GetTaskTemplateChecklistItemTemplatesByTaskTemplateId", + "summary": "Returns teams in the workspace.", + "description": "Returns teams in the workspace. The result follows the workspace's team visibility restrictions. When team restrictions are applied for the workspace, the user must either be an admin or member of the team to retrieve it.", + "operationId": "GetTeams", "parameters": [ { - "name": "taskTemplateId", - "in": "path", - "description": "The id of the task template.", - "required": true, + "name": "includeUserIds", + "in": "query", + "description": "Whether to include the ids of users that are in the team.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false + } + }, + { + "name": "includeProjectIds", + "in": "query", + "description": "Whether to include the ids of projects that are assigned to the team.", + "schema": { + "type": "boolean", + "default": false } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -34886,21 +45193,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ChecklistItemTemplate" + "$ref": "#/components/schemas/Team" } } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -34914,35 +45211,22 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "read" + "any": "true" } }, "post": { "tags": [ - "TaskBundles" - ], - "summary": "Creates a checklist item template.", - "description": "Creates a checklist item template. It can be used when creating checklist items from the task template.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskTemplateChecklistItemTemplatesByTaskTemplateId", - "parameters": [ - { - "name": "taskTemplateId", - "in": "path", - "description": "The id of the task template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Teams" ], + "summary": "Creates a team.", + "description": "Creates a team. It can then be assigned to users and projects.\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin.", + "operationId": "PostTeam", "requestBody": { - "description": "The checklist Item Template form.", + "description": "The model used to create the team.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItemTemplateForm" + "$ref": "#/components/schemas/TeamForm" } } }, @@ -34954,27 +45238,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItemTemplate" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Team" } } } @@ -34991,34 +45255,26 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "admin": "true" + }, + "x-subscriptionlevel": { + "minimumPlan": "standard" } } }, - "/tasktemplates/{taskTemplateId}/checklistitemtemplates/{checklistItemTemplateId}": { + "/teams/{teamId}": { "delete": { "tags": [ - "TaskBundles" + "Teams" ], - "summary": "Deletes a checklist item template.", - "description": "Deletes a checklist item template. The checklist template is removed from the task template.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "DeleteTaskTemplateChecklistItemTemplateByTaskTemplateIdAndChecklistItemTemplateId", + "summary": "Deletes the team.", + "description": "Deletes the team. The team is removed from workspace membership and project grouping.\r\n\r\nThe user must be an admin.", + "operationId": "DeleteTeamById", "parameters": [ { - "name": "taskTemplateId", - "in": "path", - "description": "The id of the task template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "checklistItemTemplateId", + "name": "teamId", "in": "path", - "description": "The checklist Item Template Id.", + "description": "The id of the team to delete.", "required": true, "schema": { "type": "string", @@ -35052,22 +45308,21 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "admin": "true" } }, "get": { "tags": [ - "TaskBundles" + "Teams" ], - "summary": "Returns a checklist item template.", - "description": "Returns a checklist item template. The response includes the checklist template's label and completion settings.\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", - "operationId": "GetTaskTemplateChecklistItemTemplateByTaskTemplateIdAndChecklistItemTemplateId", + "summary": "Returns the team.", + "description": "Returns the team. The response includes the team's members and projects. When team restrictions are applied for the workspace, the user must either be an admin or member of the team to retrieve it.", + "operationId": "GetTeamById", "parameters": [ { - "name": "taskTemplateId", + "name": "teamId", "in": "path", - "description": "The id of the task template.", + "description": "The id of the team.", "required": true, "schema": { "type": "string", @@ -35075,13 +45330,21 @@ } }, { - "name": "checklistItemTemplateId", - "in": "path", - "description": "The checklist item template id.", - "required": true, + "name": "includeUserIds", + "in": "query", + "description": "Whether to include the ids of users that are in the team.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false + } + }, + { + "name": "includeProjectIds", + "in": "query", + "description": "Whether to include the ids of projects that are assigned to the team.", + "schema": { + "type": "boolean", + "default": false } } ], @@ -35091,7 +45354,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItemTemplate" + "$ref": "#/components/schemas/Team" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -35118,22 +45391,21 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "read" + "any": "true" } }, "put": { "tags": [ - "TaskBundles" + "Teams" ], - "summary": "Updates a checklist item template.", - "description": "Updates a checklist item template. The submitted checklist template fields are stored.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PutTaskTemplateChecklistItemTemplateByTaskTemplateIdAndChecklistItemTemplateId", + "summary": "Updates the team.", + "description": "Updates the team. The submitted settings replace the existing values.\r\n\r\nThe user must be an admin.", + "operationId": "PutTeamById", "parameters": [ { - "name": "taskTemplateId", + "name": "teamId", "in": "path", - "description": "The id of the task template.", + "description": "The id of the team to update.", "required": true, "schema": { "type": "string", @@ -35141,22 +45413,30 @@ } }, { - "name": "checklistItemTemplateId", - "in": "path", - "description": "The checklist Item Template Id.", - "required": true, + "name": "includeUserIds", + "in": "query", + "description": "Whether to include the ids of users that are in the team.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false + } + }, + { + "name": "includeProjectIds", + "in": "query", + "description": "Whether to include the ids of projects that are assigned to the team.", + "schema": { + "type": "boolean", + "default": false } } ], "requestBody": { - "description": "The checklist Item Template form.", + "description": "The model with the team data.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItemTemplateForm" + "$ref": "#/components/schemas/TeamForm" } } }, @@ -35168,17 +45448,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItemTemplate" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Team" } } } @@ -35205,75 +45475,23 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" - } - } - }, - "/tasktemplates/{taskTemplateId}/deleterecurrency": { - "post": { - "tags": [ - "TaskBundles" - ], - "summary": "Deletes a task template recurrence rule.", - "description": "Deletes a task template recurrence rule. The recurrence rule is removed from the template.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskTemplateDeleteRecurrencyByTaskTemplateId", - "parameters": [ - { - "name": "taskTemplateId", - "in": "path", - "description": "The id of the task template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "task-manage-config": "write" + "admin": "true" } } }, - "/tasktemplates/{taskTemplateId}/deletetags": { + "/teams/{teamId}/addprojects": { "post": { "tags": [ - "TaskTemplateTags" + "Teams" ], - "summary": "Removes tags from the task template.", - "description": "Removes tags from the task template. Returns 207 MultiStatus if at least one tag could not be removed, including the reasons.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostDeleteTaskTemplatesTags", + "summary": "Adds projects to the specified team.", + "description": "Adds projects to the specified team. The listed projects become associated with the team. The user must have `project-master-data:write` permissions or be the owner of the projects.", + "operationId": "PostTeamAddProjectsByTeamId", "parameters": [ { - "name": "taskTemplateId", + "name": "teamId", "in": "path", - "description": "The id of the task template to remove tags from.", + "description": "The id of the team.", "required": true, "schema": { "type": "string", @@ -35282,13 +45500,14 @@ } ], "requestBody": { - "description": "The list of tags to remove from the task template.", + "description": "The model with the list of project ids to add.", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/DeleteTagForm" + "type": "string", + "format": "uuid" } } } @@ -35296,11 +45515,18 @@ "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "207": { - "description": "Multi-Status" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectInTeam" + } + } + } + } }, "400": { "description": "Bad Request", @@ -35312,8 +45538,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -35334,24 +45560,23 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/tasktemplates/{taskTemplateId}/recurrency": { - "get": { + "/teams/{teamId}/addusers": { + "post": { "tags": [ - "TaskBundles" + "Teams" ], - "summary": "Returns recurrency details for a task template.", - "description": "Returns recurrency details for a task template. The response includes the template's recurrence settings.\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", - "operationId": "GetTaskTemplateRecurrencyByTaskTemplateId", + "summary": "Adds users to the specified team.", + "description": "Adds users to the specified team. The listed users become members of the team.\r\n\r\nThe user must be an admin.", + "operationId": "PostTeamAddUsersByTeamId", "parameters": [ { - "name": "taskTemplateId", + "name": "teamId", "in": "path", - "description": "The id of the task template.", + "description": "The id of the team.", "required": true, "schema": { "type": "string", @@ -35359,13 +45584,41 @@ } } ], + "requestBody": { + "description": "The model with the list of user ids to add.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskRecurrencyForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/UserInTeam" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -35392,24 +45645,23 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "read" + "admin": "true" } } }, - "/tasktemplates/{taskTemplateId}/setcustomfields": { + "/teams/{teamId}/removeprojects": { "post": { "tags": [ - "CustomFields" + "Teams" ], - "summary": "Sets the custom fields for the task template.", - "description": "Sets the custom fields for the task template. The required properties depend on the type of the custom field. Only task templates which are linked to a project template may have custom fields set.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostTaskTemplateSetCustomFieldsByTaskTemplateId", + "summary": "Removes projects from the specified team.", + "description": "Removes projects from the specified team. The listed projects stop being associated with the team. The user must have `project-master-data:write` permissions or be the owner of the projects.", + "operationId": "PostTeamRemoveProjectsByTeamId", "parameters": [ { - "name": "taskTemplateId", + "name": "teamId", "in": "path", - "description": "The id of the task template to set custom fields for.", + "description": "The id of the team.", "required": true, "schema": { "type": "string", @@ -35418,13 +45670,14 @@ } ], "requestBody": { - "description": "The model containing the details for setting the custom fields for a task template.", + "description": "The model with the list of project ids to remove.", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/CustomFieldPostForm" + "type": "string", + "format": "uuid" } } } @@ -35467,24 +45720,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/tasktemplates/{taskTemplateId}/setrecurrency": { + "/teams/{teamId}/removeusers": { "post": { "tags": [ - "TaskBundles" + "Teams" ], - "summary": "Updates a task template recurrence rule.", - "description": "Updates a task template recurrence rule. The template uses the submitted recurrence rule.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskTemplateSetRecurrencyByTaskTemplateId", + "summary": "Removes users from the specified team.", + "description": "Removes users from the specified team. The listed users stop being members of the team.\r\n\r\nThe user must be an admin.", + "operationId": "PostTeamRemoveUsersByTeamId", "parameters": [ { - "name": "taskTemplateId", + "name": "teamId", "in": "path", - "description": "The id of the task template.", + "description": "The id of the team.", "required": true, "schema": { "type": "string", @@ -35493,11 +45745,15 @@ } ], "requestBody": { - "description": "The model describing the recurrence rule to apply.", + "description": "The model with the list of user ids to remove.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskBundleRecurrencyForm" + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } } } }, @@ -35516,6 +45772,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -35529,29 +45795,30 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "admin": "true" } } }, - "/tasktemplates/{taskTemplateId}/tags": { + "/temporaryfiles": { "get": { "tags": [ - "TaskTemplateTags" + "Temporary Files" ], - "summary": "Returns the tags of the task template.", - "description": "Returns the tags of the task template. The result includes tags assigned to the task template. The user must have permission to access the requested resource.", - "operationId": "GetTagsByTaskTemplateId", + "summary": "Returns all temporary files of the current user.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTemporaryFiles", "parameters": [ { - "name": "taskTemplateId", - "in": "path", - "description": "The id of the task template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -35562,7 +45829,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/BaseTagModel" + "$ref": "#/components/schemas/FileInfo" } } } @@ -35582,21 +45849,72 @@ "x-access": { "any": "true" } + }, + "post": { + "tags": [ + "Temporary Files" + ], + "summary": "Creates a new temporary file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostTemporaryFiles", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/FileUploadModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } } }, - "/tasktemplates/{taskTemplateId}/taskdependencytemplates": { + "/temporaryfiles/{fileId}": { "get": { "tags": [ - "TaskDependencyTemplates" + "Temporary Files" ], - "summary": "Returns dependency templates for a task template.", - "description": "Returns dependency templates for a task template. The result lists dependencies defined for the task template.\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", - "operationId": "GetTaskTemplateTaskDependencyTemplatesByTaskTemplateId", + "summary": "Returns the temporary file with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTemporaryFilesByFileId", "parameters": [ { - "name": "taskTemplateId", + "name": "fileId", "in": "path", - "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -35610,20 +45928,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskDependencyTemplate" - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -35650,24 +45955,20 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "read" + "any": "true" } - } - }, - "/tasktemplates/{tasktemplateId}/files/byuploadid": { - "post": { + }, + "put": { "tags": [ - "FileUpload" + "Temporary Files" ], - "summary": "Creates a file from an upload id.", - "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file tasktemplate from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", - "operationId": "PostUploadByUploadId", + "summary": "Updates the meta information of the temporary file with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PutTemporaryFilesByFileId", "parameters": [ { - "name": "tasktemplateId", + "name": "fileId", "in": "path", - "description": "The id of the tasktemplate to attach the file to.", "required": true, "schema": { "type": "string", @@ -35676,11 +45977,10 @@ } ], "requestBody": { - "description": "The model describing the uploaded file metadata.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UploadByUploadIdForm" + "$ref": "#/components/schemas/FileInfoUpdateForm" } } }, @@ -35697,6 +45997,16 @@ } } }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -35723,29 +46033,19 @@ } } }, - "/tasktemplates/{tasktemplateId}/files/{fileId}": { + "/temporaryfiles/{fileId}/download": { "get": { "tags": [ - "TaskTemplate Files" + "Temporary Files" ], - "summary": "Returns the file with the specified id of the tasktemplate with the specified id.", + "summary": "Returns the content of the temporary file with the specified id.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByTaskTemplateNameAndTaskTemplateIdAndFileId", + "operationId": "GetTemporaryFilesDownloadByFileId", "parameters": [ - { - "name": "tasktemplateId", - "in": "path", - "description": "The id of the tasktemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, { "name": "fileId", "in": "path", - "description": "The id of the file.", + "description": "The temporary file to download.", "required": true, "schema": { "type": "string", @@ -35755,17 +46055,13 @@ ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } + "description": "OK" }, - "401": { - "description": "Unauthorized", + "206": { + "description": "Partial Content" + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -35774,8 +46070,8 @@ } } }, - "404": { - "description": "Not Found", + "416": { + "description": "Range Not Satisfiable", "content": { "application/json": { "schema": { @@ -35800,39 +46096,18 @@ } } }, - "/tasktemplates/{tasktemplateId}/files/{fileId}/versions/{versionId}": { - "get": { + "/temporaryfiles/{fileId}/setentity": { + "post": { "tags": [ - "TaskTemplate Files" + "Temporary Files" ], - "summary": "Returns the tasktemplate file version with the specified id.", + "summary": "Sets the temporary file to a global or entity file.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByTaskTemplateNameAndTaskTemplateIdAndFileIdAndVersionId", + "operationId": "PostTemporaryFilesSetEntityByFileId", "parameters": [ - { - "name": "tasktemplateId", - "in": "path", - "description": "The id of the tasktemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, { "name": "fileId", "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", "required": true, "schema": { "type": "string", @@ -35840,19 +46115,29 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileEntityForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/FileInfo" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -35887,33 +46172,15 @@ } } }, - "/teams": { + "/timebookings": { "get": { "tags": [ - "Teams" + "TimeBookings" ], - "summary": "Returns teams in the workspace.", - "description": "Returns teams in the workspace. The result follows the workspace's team visibility restrictions. When team restrictions are applied for the workspace, the user must either be an admin or member of the team to retrieve it.", - "operationId": "GetTeams", + "summary": "Returns a list of time bookings.", + "description": "Returns a list of time bookings. Each booking includes its project, user, and tracked duration. The user must have permission to access the requested resource.", + "operationId": "GetTimeBookings", "parameters": [ - { - "name": "includeUserIds", - "in": "query", - "description": "Whether to include the ids of users that are in the team.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "includeProjectIds", - "in": "query", - "description": "Whether to include the ids of projects that are assigned to the team.", - "schema": { - "type": "boolean", - "default": false - } - }, { "$ref": "#/components/parameters/page" }, @@ -35935,7 +46202,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Team" + "$ref": "#/components/schemas/TimeBooking" } } } @@ -35958,17 +46225,17 @@ }, "post": { "tags": [ - "Teams" + "TimeBookings" ], - "summary": "Creates a team.", - "description": "Creates a team. It can then be assigned to users and projects.\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin.", - "operationId": "PostTeam", + "summary": "Creates a time booking for a project and user.", + "description": "Creates a time booking for a project and user. The booking records time for the submitted project and user. The user must have permission to access the requested resource.", + "operationId": "PostTimeBooking", "requestBody": { - "description": "The model used to create the team.", + "description": "The model to create the time booking.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TeamForm" + "$ref": "#/components/schemas/TimeBookingForm" } } }, @@ -35980,56 +46247,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Team" + "$ref": "#/components/schemas/TimeBooking" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true" - }, - "x-subscriptionlevel": { - "minimumPlan": "standard" - } - } - }, - "/teams/{teamId}": { - "delete": { - "tags": [ - "Teams" - ], - "summary": "Deletes the team.", - "description": "Deletes the team. The team is removed from workspace membership and project grouping.\r\n\r\nThe user must be an admin.", - "operationId": "DeleteTeamById", - "parameters": [ - { - "name": "teamId", - "in": "path", - "description": "The id of the team to delete.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -36037,69 +46261,6 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true" - } - }, - "get": { - "tags": [ - "Teams" - ], - "summary": "Returns the team.", - "description": "Returns the team. The response includes the team's members and projects. When team restrictions are applied for the workspace, the user must either be an admin or member of the team to retrieve it.", - "operationId": "GetTeamById", - "parameters": [ - { - "name": "teamId", - "in": "path", - "description": "The id of the team.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "includeUserIds", - "in": "query", - "description": "Whether to include the ids of users that are in the team.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "includeProjectIds", - "in": "query", - "description": "Whether to include the ids of projects that are assigned to the team.", - "schema": { - "type": "boolean", - "default": false - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Team" - } - } - } }, "401": { "description": "Unauthorized", @@ -36110,16 +46271,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -36135,68 +46286,44 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/timebookings/{timeBookingId}": { + "delete": { "tags": [ - "Teams" + "TimeBookings" ], - "summary": "Updates the team.", - "description": "Updates the team. The submitted settings replace the existing values.\r\n\r\nThe user must be an admin.", - "operationId": "PutTeamById", + "summary": "Deletes a time booking by id.", + "description": "Deletes a time booking by id. The booking is removed from the selected project. The user must have permission to access the requested resource.", + "operationId": "DeleteTimeBookingById", "parameters": [ { - "name": "teamId", + "name": "timeBookingId", "in": "path", - "description": "The id of the team to update.", + "description": "The id of the time booking to delete.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "name": "includeUserIds", - "in": "query", - "description": "Whether to include the ids of users that are in the team.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "includeProjectIds", - "in": "query", - "description": "Whether to include the ids of projects that are assigned to the team.", - "schema": { - "type": "boolean", - "default": false - } } ], - "requestBody": { - "description": "The model with the team data.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TeamForm" - } - } - }, - "required": true - }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Team" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -36217,23 +46344,21 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } - } - }, - "/teams/{teamId}/addprojects": { - "post": { + }, + "put": { "tags": [ - "Teams" + "TimeBookings" ], - "summary": "Adds projects to the specified team.", - "description": "Adds projects to the specified team. The listed projects become associated with the team. The user must have `project-master-data:write` permissions or be the owner of the projects.", - "operationId": "PostTeamAddProjectsByTeamId", + "summary": "Updates a given time booking.", + "description": "Updates a given time booking. The saved booking reflects the submitted duration and assignment. The user must have permission to access the requested resource.", + "operationId": "PutTimeBookingById", "parameters": [ { - "name": "teamId", + "name": "timeBookingId", "in": "path", - "description": "The id of the team.", + "description": "The id of the time booking.", "required": true, "schema": { "type": "string", @@ -36242,15 +46367,11 @@ } ], "requestBody": { - "description": "The model with the list of project ids to add.", + "description": "The model to update the time booking.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/schemas/TimeBookingForm" } } }, @@ -36262,10 +46383,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectInTeam" - } + "$ref": "#/components/schemas/TimeBooking" } } } @@ -36280,8 +46398,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -36306,41 +46424,37 @@ } } }, - "/teams/{teamId}/addusers": { - "post": { + "/timeentries": { + "get": { "tags": [ - "Teams" + "TimeEntries" ], - "summary": "Adds users to the specified team.", - "description": "Adds users to the specified team. The listed users become members of the team.\r\n\r\nThe user must be an admin.", - "operationId": "PostTeamAddUsersByTeamId", + "summary": "Returns time entries in the workspace.", + "description": "Returns time entries in the workspace. The result includes entries the current user is allowed to view.\r\n The user must own the time entry or have `project-timetracking:read` permission for connected project entries.", + "operationId": "GetTimeEntries", "parameters": [ { - "name": "teamId", - "in": "path", - "description": "The id of the team.", - "required": true, + "name": "searchReindex", + "in": "query", + "description": "Whether to reindex for search.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The model with the list of user ids to add.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", @@ -36349,31 +46463,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/UserInTeam" + "$ref": "#/components/schemas/TimeTracking" } } } } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -36387,48 +46481,37 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } - } - }, - "/teams/{teamId}/removeprojects": { + }, "post": { "tags": [ - "Teams" - ], - "summary": "Removes projects from the specified team.", - "description": "Removes projects from the specified team. The listed projects stop being associated with the team. The user must have `project-master-data:write` permissions or be the owner of the projects.", - "operationId": "PostTeamRemoveProjectsByTeamId", - "parameters": [ - { - "name": "teamId", - "in": "path", - "description": "The id of the team.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "TimeEntries" ], + "summary": "Creates a time entry.", + "description": "Creates a time entry. The entry records the submitted project, task, user, and duration. The user must have permission to access the requested resource.", + "operationId": "PostTimeEntry", "requestBody": { - "description": "The model with the list of project ids to remove.", + "description": "The time entry data.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/schemas/TimeEntryPostForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TimeTracking" + } + } + } }, "400": { "description": "Bad Request", @@ -36440,8 +46523,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -36466,44 +46549,46 @@ } } }, - "/teams/{teamId}/removeusers": { + "/timeentries/batch/{operation}": { "post": { "tags": [ - "Teams" + "TimeEntries" ], - "summary": "Removes users from the specified team.", - "description": "Removes users from the specified team. The listed users stop being members of the team.\r\n\r\nThe user must be an admin.", - "operationId": "PostTeamRemoveUsersByTeamId", + "summary": "Updates multiple time entries using the operation.", + "description": "Updates multiple time entries using the operation. Each requested change is reported separately.\r\n The user must have permission to access the requested time entries.", + "operationId": "PostTimeEntriesBatchByOperation", "parameters": [ { - "name": "teamId", + "name": "operation", "in": "path", - "description": "The id of the team.", + "description": "The batch operation type.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "requestBody": { - "description": "The model with the list of user ids to remove.", + "description": "The time entry batch operation data.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/schemas/TimeEntryBatchOperationForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "207": { + "description": "Multi-Status", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MultiStatusResult" + } + } + } }, "400": { "description": "Bad Request", @@ -36537,47 +46622,45 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/temporaryfiles": { - "get": { + "/timeentries/delete": { + "post": { "tags": [ - "Temporary Files" + "TimeEntries" ], - "summary": "Returns all temporary files of the current user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTemporaryFiles", - "parameters": [ - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" + "summary": "Deletes the time entry for the ids.", + "description": "Deletes the time entry for the ids. This endpoint is deprecated, please use the batch endpoint POST /timeentries/batch/delete instead. Deletes the time entries with the specified ids. The user must have permission to access the requested resource.", + "operationId": "PostTimeEntriesDelete", + "requestBody": { + "description": "The time entry ids to delete.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteTimeEntriesForm" + } + } }, - { - "$ref": "#/components/parameters/filterby" - } - ], + "required": true + }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileInfo" - } + "$ref": "#/components/schemas/ErrorResponse" } } } } }, + "deprecated": true, "security": [ { "oauth2": [ @@ -36591,36 +46674,53 @@ "x-access": { "any": "true" } - }, + } + }, + "/timeentries/setbillable": { "post": { "tags": [ - "Temporary Files" + "TimeEntries" ], - "summary": "Creates a new temporary file.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostTemporaryFiles", + "summary": "Sets the time entries for the ids to billable.", + "description": "Sets the time entries for the ids to billable. The selected billing state is applied to the time entries. The user must have permission to access the requested resource.", + "operationId": "PostTimeEntriesSetBillable", "requestBody": { + "description": "The time entry ids and billable flag.", "content": { - "multipart/form-data": { + "application/json": { "schema": { - "$ref": "#/components/schemas/FileUploadModel" + "$ref": "#/components/schemas/SetTimeEntryBillableForm" } } - } + }, + "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -36630,6 +46730,7 @@ } } }, + "deprecated": true, "security": [ { "oauth2": [ @@ -36645,32 +46746,45 @@ } } }, - "/temporaryfiles/{fileId}": { - "get": { + "/timeentries/setbilled": { + "post": { "tags": [ - "Temporary Files" + "TimeEntries" ], - "summary": "Returns the temporary file with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTemporaryFilesByFileId", - "parameters": [ - { - "name": "fileId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Sets the time entries for the ids to billed.", + "description": "Sets the time entries for the ids to billed. The selected billing state is applied to the time entries. The user must have permission to access the requested resource.", + "operationId": "PostTimeEntriesSetBilled", + "requestBody": { + "description": "The time entry ids and billed flag.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetTimeEntryBilledForm" + } } - } - ], + }, + "required": true + }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -36686,6 +46800,7 @@ } } }, + "deprecated": true, "security": [ { "oauth2": [ @@ -36699,48 +46814,43 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/timeentries/settypeofwork": { + "post": { "tags": [ - "Temporary Files" - ], - "summary": "Updates the meta information of the temporary file with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PutTemporaryFilesByFileId", - "parameters": [ - { - "name": "fileId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "TimeEntries" ], + "summary": "Sets the type of work of the specified timeentries.", + "description": "Sets the type of work of the specified timeentries. The selected work type is applied to the time entries. The user must have permission to access the requested resource.", + "operationId": "PostTimeEntriesSetTypeOfWork", "requestBody": { + "description": "The time entry ids and type of work.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" + "$ref": "#/components/schemas/SetTimeEntryTypeOfWork" } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -36760,6 +46870,7 @@ } } }, + "deprecated": true, "security": [ { "oauth2": [ @@ -36775,35 +46886,41 @@ } } }, - "/temporaryfiles/{fileId}/download": { - "get": { + "/timeentries/setunbillable": { + "post": { "tags": [ - "Temporary Files" + "TimeEntries" ], - "summary": "Returns the content of the temporary file with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTemporaryFilesDownloadByFileId", - "parameters": [ - { - "name": "fileId", - "in": "path", - "description": "The temporary file to download.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Sets the time entries for the ids to unbillable.", + "description": "Sets the time entries for the ids to unbillable. Billed entries also become unbilled when an administrator changes them.\r\n The user must be an administrator to change a billed entry. For other entries, the user must own the entry or have applicable `user-timetracking:write`, `project-timetracking:write`, or project-role write permission. Team restrictions also apply.", + "operationId": "PostTimeEntriesSetUnbillable", + "requestBody": { + "description": "The time entry ids and billable flag.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetTimeEntryBillableForm" + } } - } - ], + }, + "required": true + }, "responses": { - "200": { - "description": "OK" + "204": { + "description": "No Content" }, - "206": { - "description": "Partial Content" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -36812,8 +46929,8 @@ } } }, - "416": { - "description": "Range Not Satisfiable", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -36823,6 +46940,7 @@ } } }, + "deprecated": true, "security": [ { "oauth2": [ @@ -36838,45 +46956,28 @@ } } }, - "/temporaryfiles/{fileId}/setentity": { + "/timeentries/setunbilled": { "post": { "tags": [ - "Temporary Files" - ], - "summary": "Sets the temporary file to a global or entity file.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostTemporaryFilesSetEntityByFileId", - "parameters": [ - { - "name": "fileId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "TimeEntries" ], + "summary": "Sets the time entries for the ids to unbilled.", + "description": "Sets the time entries for the ids to unbilled. The selected billing state is applied to the time entries. The user must have permission to access the requested resource.", + "operationId": "PostTimeEntriesSetUnBilled", "requestBody": { + "description": "The time entry ids and billed flag.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileEntityForm" + "$ref": "#/components/schemas/SetTimeEntryBilledForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -36887,18 +46988,9 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, + "deprecated": true, "security": [ { "oauth2": [ @@ -36914,15 +47006,23 @@ } } }, - "/timebookings": { + "/timeentries/simplified": { "get": { "tags": [ - "TimeBookings" + "TimeEntries" ], - "summary": "Returns a list of time bookings.", - "description": "Returns a list of time bookings. Each booking includes its project, user, and tracked duration. The user must have permission to access the requested resource.", - "operationId": "GetTimeBookings", + "summary": "Returns simplified time entries.", + "description": "Returns simplified time entries grouped by the requested property when one is supplied.\r\n The user must have permission to view the returned time entries.", + "operationId": "GetTimeEntriesSimplified", "parameters": [ + { + "name": "grouping", + "in": "query", + "description": "The grouping type.", + "schema": { + "type": "string" + } + }, { "$ref": "#/components/parameters/page" }, @@ -36944,7 +47044,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TimeBooking" + "$ref": "#/components/schemas/SimplifiedTimeTracking" } } } @@ -36964,38 +47064,34 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/timeentries/{timeEntryId}": { + "delete": { "tags": [ - "TimeBookings" + "TimeEntries" ], - "summary": "Creates a time booking for a project and user.", - "description": "Creates a time booking for a project and user. The booking records time for the submitted project and user. The user must have permission to access the requested resource.", - "operationId": "PostTimeBooking", - "requestBody": { - "description": "The model to create the time booking.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeBookingForm" - } + "summary": "Deletes the time entry.", + "description": "Deletes the time entry. The time entry is removed from the selected project or task. The user must have permission to access the requested resource.", + "operationId": "DeleteTimeEntryById", + "parameters": [ + { + "name": "timeEntryId", + "in": "path", + "description": "The id of the time entry.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - }, - "required": true - }, + } + ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeBooking" - } - } - } + "204": { + "description": "No Content" }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -37004,8 +47100,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -37028,21 +47124,19 @@ "x-access": { "any": "true" } - } - }, - "/timebookings/{timeBookingId}": { - "delete": { + }, + "get": { "tags": [ - "TimeBookings" + "TimeEntries" ], - "summary": "Deletes a time booking by id.", - "description": "Deletes a time booking by id. The booking is removed from the selected project. The user must have permission to access the requested resource.", - "operationId": "DeleteTimeBookingById", + "summary": "Returns the specified time entry.", + "description": "Returns the specified time entry when it is visible to the current user.\r\n The user must own the time entry or have permission to view it.", + "operationId": "GetTimeEntryById", "parameters": [ { - "name": "timeBookingId", + "name": "timeEntryId", "in": "path", - "description": "The id of the time booking to delete.", + "description": "The id of the time entry.", "required": true, "schema": { "type": "string", @@ -37051,25 +47145,12 @@ } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TimeTracking" } } } @@ -37091,16 +47172,16 @@ }, "put": { "tags": [ - "TimeBookings" + "TimeEntries" ], - "summary": "Updates a given time booking.", - "description": "Updates a given time booking. The saved booking reflects the submitted duration and assignment. The user must have permission to access the requested resource.", - "operationId": "PutTimeBookingById", + "summary": "Updates the time entry.", + "description": "Updates the time entry. The break duration of the time entry is kept the same. The break duration cannot be smaller than the duration of the time entry. To remove the breaks, use the endpoint POST /timeentries/{id}/removeBreaks. Following combination of times and duration are allowed for already completed time entries: - start time (local or utc) and end time (local or utc) (this option always takes precedence) - start time (local or utc) and duration - end time (local or utc) and duration For running time entries, you can only update the start time (local or utc) while the duration stays 0. The user must have permission to access the requested resource.", + "operationId": "PutTimeEntryById", "parameters": [ { - "name": "timeBookingId", + "name": "timeEntryId", "in": "path", - "description": "The id of the time booking.", + "description": "The id of the time entry.", "required": true, "schema": { "type": "string", @@ -37109,11 +47190,11 @@ } ], "requestBody": { - "description": "The model to update the time booking.", + "description": "The time entry data to update.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeBookingForm" + "$ref": "#/components/schemas/TimeTrackingPutForm" } } }, @@ -37125,7 +47206,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeBooking" + "$ref": "#/components/schemas/TimeTracking" } } } @@ -37149,6 +47230,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -37166,35 +47257,24 @@ } } }, - "/timeentries": { - "get": { + "/timeentries/{timeEntryId}/removebreaks": { + "post": { "tags": [ "TimeEntries" ], - "summary": "Returns time entries in the workspace.", - "description": "Returns time entries in the workspace. The result includes entries the current user is allowed to view.\r\n The user must own the time entry or have `project-timetracking:read` permission for connected project entries.", - "operationId": "GetTimeEntries", + "summary": "Removes breaks from the specified time entry.", + "description": "Removes all breaks from the specified time entry and resumes its timer.\r\n The user must have permission to edit the time entry.", + "operationId": "PostTimeEntryRemoveBreaks", "parameters": [ { - "name": "searchReindex", - "in": "query", - "description": "Whether to reindex for search.", + "name": "timeEntryId", + "in": "path", + "description": "The id of the time entry.", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -37203,10 +47283,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TimeTracking" - } + "$ref": "#/components/schemas/TimeTracking" } } } @@ -37225,52 +47302,26 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/timereports": { + "get": { "tags": [ - "TimeEntries" + "TimeReports" ], - "summary": "Creates a time entry.", - "description": "Creates a time entry. The entry records the submitted project, task, user, and duration. The user must have permission to access the requested resource.", - "operationId": "PostTimeEntry", - "requestBody": { - "description": "The time entry data.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeEntryPostForm" - } - } - }, - "required": true - }, + "summary": "Returns time reports of a user.", + "description": "Returns time reports of a user. The response includes details for the selected time range. The user must have permission to access the requested resource.", + "operationId": "GetTimeReports", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/TimeReport" + } } } } @@ -37291,63 +47342,24 @@ } } }, - "/timeentries/batch/{operation}": { - "post": { + "/timetracking/settings": { + "get": { "tags": [ - "TimeEntries" - ], - "summary": "Updates multiple time entries using the operation.", - "description": "Updates multiple time entries using the operation. Each requested change is reported separately.\r\n The user must have permission to access the requested time entries.", - "operationId": "PostTimeEntriesBatchByOperation", - "parameters": [ - { - "name": "operation", - "in": "path", - "description": "The batch operation type.", - "required": true, - "schema": { - "type": "string" - } - } + "TimeTrackingSettings" ], - "requestBody": { - "description": "The time entry batch operation data.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeEntryBatchOperationForm" - } - } - }, - "required": true - }, + "summary": "Returns the global timetracking settings.", + "description": "Returns the global timetracking settings. The response contains the workspace's time-tracking defaults. The user must have permission to access the requested resource.", + "operationId": "GetTimeTrackingSettings", "responses": { - "207": { - "description": "Multi-Status", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MultiStatusResult" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/TimeTrackingSetting" + } } } } @@ -37368,41 +47380,52 @@ } } }, - "/timeentries/delete": { - "post": { + "/typeofwork": { + "get": { "tags": [ - "TimeEntries" + "TypeOfWork" ], - "summary": "Deletes the time entry for the ids.", - "description": "Deletes the time entry for the ids. This endpoint is deprecated, please use the batch endpoint POST /timeentries/batch/delete instead. Deletes the time entries with the specified ids. The user must have permission to access the requested resource.", - "operationId": "PostTimeEntriesDelete", - "requestBody": { - "description": "The time entry ids to delete.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteTimeEntriesForm" - } + "summary": "Returns types of work.", + "description": "Returns types of work. Each type includes its billing and color settings. The user must have permission to access the requested resource.", + "operationId": "GetTypesOfWork", + "parameters": [ + { + "name": "showArchived", + "in": "query", + "description": "The show Archived.", + "schema": { + "type": "boolean", + "default": false } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" + { + "$ref": "#/components/parameters/page" }, - "400": { - "description": "Bad Request", + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeOfWork" + } } } } } }, - "deprecated": true, "security": [ { "oauth2": [ @@ -37416,43 +47439,38 @@ "x-access": { "any": "true" } - } - }, - "/timeentries/setbillable": { + }, "post": { "tags": [ - "TimeEntries" + "TypeOfWork" ], - "summary": "Sets the time entries for the ids to billable.", - "description": "Sets the time entries for the ids to billable. The selected billing state is applied to the time entries. The user must have permission to access the requested resource.", - "operationId": "PostTimeEntriesSetBillable", + "summary": "Creates a type of work.", + "description": "Creates a type of work. It can then be selected on time entries.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTypesOfWork", "requestBody": { - "description": "The time entry ids and billable flag.", + "description": "The type Of Work form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SetTimeEntryBillableForm" + "$ref": "#/components/schemas/TypeOfWorkForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TypeOfWork" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -37460,19 +47478,47 @@ } } } - }, - "404": { - "description": "Not Found", + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "task-manage-config": "write" + } + } + }, + "/typeofwork/icons": { + "get": { + "tags": [ + "TypeOfWork" + ], + "summary": "Returns possible icons for type of work.", + "description": "Returns possible icons for type of work. These icons can be assigned to work types. The user must have permission to access the requested resource.", + "operationId": "GetTypesOfWorkIcons", + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "type": "string" + } } } } } }, - "deprecated": true, "security": [ { "oauth2": [ @@ -37488,45 +47534,33 @@ } } }, - "/timeentries/setbilled": { - "post": { + "/typeofwork/{typeOfWorkId}": { + "get": { "tags": [ - "TimeEntries" + "TypeOfWork" ], - "summary": "Sets the time entries for the ids to billed.", - "description": "Sets the time entries for the ids to billed. The selected billing state is applied to the time entries. The user must have permission to access the requested resource.", - "operationId": "PostTimeEntriesSetBilled", - "requestBody": { - "description": "The time entry ids and billed flag.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SetTimeEntryBilledForm" - } + "summary": "Returns the type of work.", + "description": "Returns the type of work. The response includes the type's label, color, and billing settings. The user must have permission to access the requested resource.", + "operationId": "GetTypeOfWorkById", + "parameters": [ + { + "name": "typeOfWorkId", + "in": "path", + "description": "The id of the type of work.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - }, - "required": true - }, + } + ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TypeOfWork" } } } @@ -37542,7 +47576,6 @@ } } }, - "deprecated": true, "security": [ { "oauth2": [ @@ -37556,43 +47589,50 @@ "x-access": { "any": "true" } - } - }, - "/timeentries/settypeofwork": { - "post": { + }, + "put": { "tags": [ - "TimeEntries" + "TypeOfWork" + ], + "summary": "Changes the properties of a type of work.", + "description": "Changes the properties of a type of work. Future entries use the submitted billing and color settings.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PutTypeOfWorkById", + "parameters": [ + { + "name": "typeOfWorkId", + "in": "path", + "description": "The id of the type of work.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Sets the type of work of the specified timeentries.", - "description": "Sets the type of work of the specified timeentries. The selected work type is applied to the time entries. The user must have permission to access the requested resource.", - "operationId": "PostTimeEntriesSetTypeOfWork", "requestBody": { - "description": "The time entry ids and type of work.", + "description": "The type Of Work form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SetTimeEntryTypeOfWork" + "$ref": "#/components/schemas/TypeOfWorkForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TypeOfWork" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -37612,7 +47652,6 @@ } } }, - "deprecated": true, "security": [ { "oauth2": [ @@ -37624,24 +47663,37 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/timeentries/setunbillable": { + "/typeofwork/{typeOfWorkId}/delete": { "post": { "tags": [ - "TimeEntries" + "TypeOfWork" + ], + "summary": "Deletes the type of work.", + "description": "Deletes the type of work. The type of work is removed from the workspace.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostTypeOfWorkDeleteByTypeOfWorkId", + "parameters": [ + { + "name": "typeOfWorkId", + "in": "path", + "description": "The id of the type of work.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Sets the time entries for the ids to unbillable.", - "description": "Sets the time entries for the ids to unbillable. Billed entries also become unbilled when an administrator changes them.\r\n The user must be an administrator to change a billed entry. For other entries, the user must own the entry or have applicable `user-timetracking:write`, `project-timetracking:write`, or project-role write permission. Team restrictions also apply.", - "operationId": "PostTimeEntriesSetUnbillable", "requestBody": { - "description": "The time entry ids and billable flag.", + "description": "The model containing the new type of work id to substitute.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SetTimeEntryBillableForm" + "$ref": "#/components/schemas/DeleteTaskTypeForm" } } }, @@ -37661,16 +47713,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -37682,7 +47724,6 @@ } } }, - "deprecated": true, "security": [ { "oauth2": [ @@ -37694,32 +47735,52 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/timeentries/setunbilled": { + "/typeofwork/{typeOfWorkId}/setarchived": { "post": { "tags": [ - "TimeEntries" + "TypeOfWork" + ], + "summary": "Archives or unarchives the type of work.", + "description": "Archives or unarchives the type of work. Archived types remain available for existing time entries.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostTypeOfWorkSetArchivedByTypeOfWorkId", + "parameters": [ + { + "name": "typeOfWorkId", + "in": "path", + "description": "The id of the type of work.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Sets the time entries for the ids to unbilled.", - "description": "Sets the time entries for the ids to unbilled. The selected billing state is applied to the time entries. The user must have permission to access the requested resource.", - "operationId": "PostTimeEntriesSetUnBilled", "requestBody": { - "description": "The time entry ids and billed flag.", + "description": "The archived form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SetTimeEntryBilledForm" + "$ref": "#/components/schemas/ArchivedForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TypeOfWork" + } + } + } }, "400": { "description": "Bad Request", @@ -37730,9 +47791,18 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, - "deprecated": true, "security": [ { "oauth2": [ @@ -37744,25 +47814,27 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/timeentries/simplified": { + "/users": { "get": { "tags": [ - "TimeEntries" + "Users" ], - "summary": "Returns simplified time entries.", - "description": "Returns simplified time entries grouped by the requested property when one is supplied.\r\n The user must have permission to view the returned time entries.", - "operationId": "GetTimeEntriesSimplified", + "summary": "Returns users with their details.", + "description": "Returns users with their details. Archived users are excluded by default; set 'showArchived' to include them. API users are included in the response. The user must have `user-master-data:read` permission to see all workspace users. Without it, the response contains only the requesting user. If team restrictions apply, the response is limited to users in the user's teams.", + "operationId": "GetUsers", "parameters": [ { - "name": "grouping", + "name": "showArchived", "in": "query", - "description": "The grouping type.", + "description": "Whether to show archived users.", "schema": { - "type": "string" + "type": "boolean", + "default": false } }, { @@ -37786,7 +47858,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/SimplifiedTimeTracking" + "$ref": "#/components/schemas/User" } } } @@ -37808,49 +47880,38 @@ } } }, - "/timeentries/{timeEntryId}": { - "delete": { + "/users/autofill/{email}": { + "get": { "tags": [ - "TimeEntries" + "Users" ], - "summary": "Deletes the time entry.", - "description": "Deletes the time entry. The time entry is removed from the selected project or task. The user must have permission to access the requested resource.", - "operationId": "DeleteTimeEntryById", + "summary": "Returns user name and gender for the email.", + "description": "Returns user name and gender for the email. The response contains the matching name and gender fields. The user must have permission to access the requested resource.", + "operationId": "GetUsersAutofillByEmail", "parameters": [ { - "name": "timeEntryId", + "name": "email", "in": "path", - "description": "The id of the time entry.", + "description": "The user's email.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "responses": { - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/AutofillUser" } } } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -37866,33 +47927,73 @@ "x-access": { "any": "true" } - }, - "get": { + } + }, + "/users/deletetags": { + "post": { "tags": [ - "TimeEntries" + "UserTags" ], - "summary": "Returns the specified time entry.", - "description": "Returns the specified time entry when it is visible to the current user.\r\n The user must own the time entry or have permission to view it.", - "operationId": "GetTimeEntryById", - "parameters": [ - { - "name": "timeEntryId", - "in": "path", - "description": "The id of the time entry.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Removes a tag from users.", + "description": "Removes a tag from users. The selected tag is removed from matching users.\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", + "operationId": "PostUsersDeleteTags", + "requestBody": { + "description": "The model with the tag to be removed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteTagForm" + } } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] } ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "user-master-data": "write" + } + } + }, + "/users/me": { + "get": { + "tags": [ + "Users" + ], + "summary": "Returns the logged-in user and workspace.", + "description": "Returns the logged-in user and workspace. This is an alternate URL for the /me endpoint. The user must have permission to access the requested resource.", + "operationId": "GetUsersMe", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "$ref": "#/components/schemas/UserAndWorkspace" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -37911,44 +48012,59 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/users/projecttimebookings": { + "get": { "tags": [ - "TimeEntries" + "TimeBookings" ], - "summary": "Updates the time entry.", - "description": "Updates the time entry. The break duration of the time entry is kept the same. The break duration cannot be smaller than the duration of the time entry. To remove the breaks, use the endpoint POST /timeentries/{id}/removeBreaks. Following combination of times and duration are allowed for already completed time entries: - start time (local or utc) and end time (local or utc) (this option always takes precedence) - start time (local or utc) and duration - end time (local or utc) and duration For running time entries, you can only update the start time (local or utc) while the duration stays 0. The user must have permission to access the requested resource.", - "operationId": "PutTimeEntryById", + "summary": "Returns time bookings for users.", + "description": "Returns time bookings for users. Each booking includes its project, user, and tracked duration. The user must have permission to access the requested resource.", + "operationId": "GetProjectTimeBookingsForUsers", "parameters": [ { - "name": "timeEntryId", - "in": "path", - "description": "The id of the time entry.", + "name": "userIds", + "in": "query", + "description": "The ids of the users.", "required": true, "schema": { "type": "string", - "format": "uuid" + "description": "This class is used to bind a querystring list of Guid (as a comma-separated list) to the List of Guid parameter in a\nminimal API endpoint.", + "example": "123e4567-e89b-12d3-a456-426614174000,223e4567-e89b-12d3-a456-426614174001" } - } - ], - "requestBody": { - "description": "The time entry data to update.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeTrackingPutForm" - } + }, + { + "name": "intervalStart", + "in": "query", + "description": "The start of the interval.", + "required": true, + "schema": { + "type": "string", + "format": "date" } }, - "required": true - }, + { + "name": "intervalEnd", + "in": "query", + "description": "The end of the interval.", + "required": true, + "schema": { + "type": "string", + "format": "date" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "type": "array", + "items": { + "$ref": "#/components/schemas/GetTimeBookingForUsersResult" + } } } } @@ -37972,16 +48088,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -37999,33 +48105,24 @@ } } }, - "/timeentries/{timeEntryId}/removebreaks": { - "post": { + "/users/tags": { + "get": { "tags": [ - "TimeEntries" - ], - "summary": "Removes breaks from the specified time entry.", - "description": "Removes all breaks from the specified time entry and resumes its timer.\r\n The user must have permission to edit the time entry.", - "operationId": "PostTimeEntryRemoveBreaks", - "parameters": [ - { - "name": "timeEntryId", - "in": "path", - "description": "The id of the time entry.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "UserTags" ], + "summary": "Returns tags that are in use.", + "description": "Returns tags that are in use. The result includes tags used by users in the workspace. The user must have permission to access the requested resource.", + "operationId": "GetUsersTags", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } } } } @@ -38046,14 +48143,47 @@ } } }, - "/timereports": { + "/users/timebookings": { "get": { "tags": [ - "TimeReports" + "TimeBookings" + ], + "summary": "Returns time bookings for users.", + "description": "Returns time bookings for users. Each booking includes its project, user, and tracked duration. The user must have permission to access the requested resource.", + "operationId": "GetUsersTimeBookings", + "parameters": [ + { + "name": "userIds", + "in": "query", + "description": "The ids of the users.", + "required": true, + "schema": { + "type": "string", + "description": "This class is used to bind a querystring list of Guid (as a comma-separated list) to the List of Guid parameter in a\nminimal API endpoint.", + "example": "123e4567-e89b-12d3-a456-426614174000,223e4567-e89b-12d3-a456-426614174001" + } + }, + { + "name": "intervalStart", + "in": "query", + "description": "The start of the interval.", + "required": true, + "schema": { + "type": "string", + "format": "date" + } + }, + { + "name": "intervalEnd", + "in": "query", + "description": "The end of the interval.", + "required": true, + "schema": { + "type": "string", + "format": "date" + } + } ], - "summary": "Returns time reports of a user.", - "description": "Returns time reports of a user. The response includes details for the selected time range. The user must have permission to access the requested resource.", - "operationId": "GetTimeReports", "responses": { "200": { "description": "OK", @@ -38062,11 +48192,31 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TimeReport" + "$ref": "#/components/schemas/GetTimeBookingForUsersResult" } } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -38084,24 +48234,44 @@ } } }, - "/timetracking/settings": { - "get": { + "/users/updatetags": { + "post": { "tags": [ - "TimeTrackingSettings" + "UserTags" ], - "summary": "Returns the global timetracking settings.", - "description": "Returns the global timetracking settings. The response contains the workspace's time-tracking defaults. The user must have permission to access the requested resource.", - "operationId": "GetTimeTrackingSettings", + "summary": "Updates a tag globally for users.", + "description": "Updates a tag globally for users. The renamed or merged tag is applied to matching users.\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", + "operationId": "PostUsersUpdateTags", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagUpdateForm" + } + } + }, + "required": true + }, "responses": { "200": { - "description": "OK", + "description": "OK" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TimeTrackingSetting" - } + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -38118,95 +48288,90 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "user-master-data": "write" } } }, - "/typeofwork": { + "/users/workload": { "get": { "tags": [ - "TypeOfWork" + "Workload" ], - "summary": "Returns types of work.", - "description": "Returns types of work. Each type includes its billing and color settings. The user must have permission to access the requested resource.", - "operationId": "GetTypesOfWork", + "summary": "Returns the users' workloads per day.", + "description": "Returns the users' workloads per day. Takes into consideration weekly availability, absences, user capacity, planned efforts, as well as project budget.\r\n\r\nThe user must be an admin or have `user-planning-data:read` permissions.", + "operationId": "GetUsersWorkload", "parameters": [ { - "name": "showArchived", + "name": "userIds", "in": "query", - "description": "The show Archived.", + "description": "The ids of the users to get the workload for, as a comma-separated list of Guids.", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "description": "This class is used to bind a querystring list of Guid (as a comma-separated list) to the List of Guid parameter in a\nminimal API endpoint.", + "example": "123e4567-e89b-12d3-a456-426614174000,223e4567-e89b-12d3-a456-426614174001" } }, { - "$ref": "#/components/parameters/page" + "name": "intervalStart", + "in": "query", + "description": "The start of the interval to filter by.", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } }, { - "$ref": "#/components/parameters/pageSize" + "name": "intervalEnd", + "in": "query", + "description": "The end of the interval to filter by.", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } }, { - "$ref": "#/components/parameters/orderby" + "name": "roughPlanningFrom", + "in": "query", + "description": "The number of days from today when the rough planning should start.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } }, { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TypeOfWork" - } - } - } + "name": "fetchDetails", + "in": "query", + "description": "(Optional - default: false) If set to true, the result will contain the hierarchy of elements that are contributing\n to the workload (projects, tasks, appointments).\n Otherwise it will return only the workload value.\n Works only for single day queries.", + "schema": { + "type": "boolean", + "default": false } - } - }, - "security": [ + }, { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "TypeOfWork" - ], - "summary": "Creates a type of work.", - "description": "Creates a type of work. It can then be selected on time entries.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTypesOfWork", - "requestBody": { - "description": "The type Of Work form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TypeOfWorkForm" - } + "name": "ignoreCalendarEvents", + "in": "query", + "description": "Whether to ignore calendar events. Can significantly improve performance.", + "schema": { + "type": "boolean", + "default": false } - }, - "required": true - }, + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TypeOfWork" + "type": "array", + "items": { + "$ref": "#/components/schemas/GetWorkloadForUsersResult" + } } } } @@ -38220,6 +48385,16 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -38234,28 +48409,50 @@ ], "x-access": { "admin": "true", - "task-manage-config": "write" + "user-planning-data": "read" } } }, - "/typeofwork/icons": { - "get": { + "/users/{userId}": { + "delete": { "tags": [ - "TypeOfWork" + "Users" + ], + "summary": "Deletes the user.", + "description": "\r\n\r\nThe user must be an admin or have `user-manage-config:delete` permissions.", + "operationId": "DeleteUserById", + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "The id of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Returns possible icons for type of work.", - "description": "Returns possible icons for type of work. These icons can be assigned to work types. The user must have permission to access the requested resource.", - "operationId": "GetTypesOfWorkIcons", "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -38272,23 +48469,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "user-manage-config": "delete" } - } - }, - "/typeofwork/{typeOfWorkId}": { + }, "get": { "tags": [ - "TypeOfWork" + "Users" ], - "summary": "Returns the type of work.", - "description": "Returns the type of work. The response includes the type's label, color, and billing settings. The user must have permission to access the requested resource.", - "operationId": "GetTypeOfWorkById", + "summary": "Returns the user.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetUserById", "parameters": [ { - "name": "typeOfWorkId", + "name": "userId", "in": "path", - "description": "The id of the type of work.", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -38302,7 +48498,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TypeOfWork" + "$ref": "#/components/schemas/User" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -38334,16 +48540,16 @@ }, "put": { "tags": [ - "TypeOfWork" + "Users" ], - "summary": "Changes the properties of a type of work.", - "description": "Changes the properties of a type of work. Future entries use the submitted billing and color settings.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PutTypeOfWorkById", + "summary": "Updates the user.", + "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:write` permissions.", + "operationId": "PutUserById", "parameters": [ { - "name": "typeOfWorkId", + "name": "userId", "in": "path", - "description": "The id of the type of work.", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -38352,11 +48558,11 @@ } ], "requestBody": { - "description": "The type Of Work form payload.", + "description": "The model to update the user.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TypeOfWorkForm" + "$ref": "#/components/schemas/UserForm" } } }, @@ -38368,17 +48574,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TypeOfWork" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/User" } } } @@ -38406,23 +48602,24 @@ ], "x-access": { "admin": "true", - "task-manage-config": "write" + "owner": "true", + "user-master-data": "write" } } }, - "/typeofwork/{typeOfWorkId}/delete": { + "/users/{userId}/activate": { "post": { "tags": [ - "TypeOfWork" + "Users" ], - "summary": "Deletes the type of work.", - "description": "Deletes the type of work. The type of work is removed from the workspace.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostTypeOfWorkDeleteByTypeOfWorkId", + "summary": "Activates the user.", + "description": "Activates the user. The user is then allowed to sign in again and will be notified via email.\r\n\r\nThe user must be an admin or have `user-manage-config:write` permissions.", + "operationId": "PostUserActivateByUserId", "parameters": [ { - "name": "typeOfWorkId", + "name": "userId", "in": "path", - "description": "The id of the type of work.", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -38430,17 +48627,6 @@ } } ], - "requestBody": { - "description": "The model containing the new type of work id to substitute.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteTaskTypeForm" - } - } - }, - "required": true - }, "responses": { "204": { "description": "No Content" @@ -38455,6 +48641,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -38478,23 +48674,23 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "write" + "user-manage-config": "write" } } }, - "/typeofwork/{typeOfWorkId}/setarchived": { + "/users/{userId}/addtags": { "post": { "tags": [ - "TypeOfWork" + "UserTags" ], - "summary": "Archives or unarchives the type of work.", - "description": "Archives or unarchives the type of work. Archived types remain available for existing time entries.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostTypeOfWorkSetArchivedByTypeOfWorkId", + "summary": "Adds a batch of tags to the user.", + "description": "Adds a batch of tags to the user. The selected tags are added to the user.\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", + "operationId": "PostUserAddTagsByUserId", "parameters": [ { - "name": "typeOfWorkId", + "name": "userId", "in": "path", - "description": "The id of the type of work.", + "description": "The id of the user to add tags to.", "required": true, "schema": { "type": "string", @@ -38503,11 +48699,14 @@ } ], "requestBody": { - "description": "The archived form payload.", + "description": "The model with the tags to be added.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ArchivedForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/TagForm" + } } } }, @@ -38519,7 +48718,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TypeOfWork" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } } } } @@ -38534,8 +48736,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -38557,26 +48759,27 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "write" + "user-master-data": "write" } } }, - "/users": { + "/users/{userId}/allavailabletasks": { "get": { "tags": [ - "Users" + "AssignedTasks" ], - "summary": "Returns users with their details.", - "description": "Returns users with their details. Archived users are excluded by default; set 'showArchived' to include them. API users are included in the response. The user must have `user-master-data:read` permission to see all workspace users. Without it, the response contains only the requesting user. If team restrictions apply, the response is limited to users in the user's teams.", - "operationId": "GetUsers", + "summary": "Returns tasks the specified user is allowed to see.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetUserAllAvailableTasksByUserId", "parameters": [ { - "name": "showArchived", - "in": "query", - "description": "Whether to show archived users.", + "name": "userId", + "in": "path", + "description": "The id of the user.", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } }, { @@ -38600,7 +48803,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/User" + "$ref": "#/components/schemas/TaskModel" } } } @@ -38622,120 +48825,75 @@ } } }, - "/users/autofill/{email}": { + "/users/{userId}/assignedtasks": { "get": { "tags": [ - "Users" + "AssignedTasks" ], - "summary": "Returns user name and gender for the email.", - "description": "Returns user name and gender for the email. The response contains the matching name and gender fields. The user must have permission to access the requested resource.", - "operationId": "GetUsersAutofillByEmail", + "summary": "Returns tasks assigned to the specified user.", + "description": "Returns tasks assigned to the specified user. The result includes tasks assigned to that user. The user must have permission to access the requested resource.", + "operationId": "GetUserAssignedTasksByUserId", "parameters": [ { - "name": "email", + "name": "userId", "in": "path", - "description": "The user's email.", + "description": "The id of the user to get the tasks for.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AutofillUser" - } - } + }, + { + "name": "inProgress", + "in": "query", + "description": "Whether to return only assigned project tasks of running projects. Defaults to true.", + "schema": { + "type": "boolean", + "default": false } }, - "204": { - "description": "No Content" - } - }, - "security": [ { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/users/deletetags": { - "post": { - "tags": [ - "UserTags" - ], - "summary": "Removes a tag from users.", - "description": "Removes a tag from users. The selected tag is removed from matching users.\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", - "operationId": "PostUsersDeleteTags", - "requestBody": { - "description": "The model with the tag to be removed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteTagForm" - } + "name": "assignedOnFrom", + "in": "query", + "description": "The start date for filtering by assignment date. If set, tasks are returned only when the assignment date is greater or equal than this value.", + "schema": { + "type": "string", + "format": "date-time" } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - } - }, - "security": [ { - "oauth2": [ - "full_access" - ] + "name": "assignedOnTo", + "in": "query", + "description": "The end date for filtering by assignment date. If set, tasks are returned only when the assignment date is less or equal than this value.", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "user-master-data": "write" - } - } - }, - "/users/me": { - "get": { - "tags": [ - "Users" - ], - "summary": "Returns the logged-in user and workspace.", - "description": "Returns the logged-in user and workspace. This is an alternate URL for the /me endpoint. The user must have permission to access the requested resource.", - "operationId": "GetUsersMe", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserAndWorkspace" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskModel" + } } } } @@ -38756,44 +48914,33 @@ } } }, - "/users/projecttimebookings": { + "/users/{userId}/assignedtasks/{taskId}": { "get": { "tags": [ - "TimeBookings" + "AssignedTasks" ], - "summary": "Returns time bookings for users.", - "description": "Returns time bookings for users. Each booking includes its project, user, and tracked duration. The user must have permission to access the requested resource.", - "operationId": "GetProjectTimeBookingsForUsers", + "summary": "Returns the assigned task of a specified user.", + "description": "Returns the assigned task of a specified user. The result includes tasks assigned to that user. The user must have permission to access the requested resource.", + "operationId": "GetUserAssignedTaskByUserIdAndTaskId", "parameters": [ { - "name": "userIds", - "in": "query", - "description": "The ids of the users.", - "required": true, - "schema": { - "type": "string", - "description": "This class is used to bind a querystring list of Guid (as a comma-separated list) to the List of Guid parameter in a\nminimal API endpoint.", - "example": "123e4567-e89b-12d3-a456-426614174000,223e4567-e89b-12d3-a456-426614174001" - } - }, - { - "name": "intervalStart", - "in": "query", - "description": "The start of the interval.", + "name": "userId", + "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", - "format": "date" + "format": "uuid" } }, { - "name": "intervalEnd", - "in": "query", - "description": "The end of the interval.", + "name": "taskId", + "in": "path", + "description": "The id of the task to return.", "required": true, "schema": { "type": "string", - "format": "date" + "format": "uuid" } } ], @@ -38803,16 +48950,13 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GetTimeBookingForUsersResult" - } + "$ref": "#/components/schemas/TaskModel" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -38821,8 +48965,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -38847,24 +48991,43 @@ } } }, - "/users/tags": { + "/users/{userId}/capacity": { "get": { "tags": [ - "UserTags" + "UserCapacities" + ], + "summary": "Returns the capacity of the specified user.", + "description": "Returns the capacity of the specified user. The response includes the user's planning capacity. The user must have permission to access the requested resource.", + "operationId": "GetUserCapacityByUserId", + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "The id of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Returns tags that are in use.", - "description": "Returns tags that are in use. The result includes tags used by users in the workspace. The user must have permission to access the requested resource.", - "operationId": "GetUsersTags", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "$ref": "#/components/schemas/UserCapacity" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -38883,69 +49046,44 @@ "x-access": { "any": "true" } - } - }, - "/users/timebookings": { - "get": { + }, + "put": { "tags": [ - "TimeBookings" + "UserCapacities" ], - "summary": "Returns time bookings for users.", - "description": "Returns time bookings for users. Each booking includes its project, user, and tracked duration. The user must have permission to access the requested resource.", - "operationId": "GetUsersTimeBookings", + "summary": "Updates the capacity of the specified user.", + "description": "Updates the capacity of the specified user. The capacity is stored for the user's planning. The user must have permission to access the requested resource.", + "operationId": "PutUserCapacityByUserId", "parameters": [ { - "name": "userIds", - "in": "query", - "description": "The ids of the users.", - "required": true, - "schema": { - "type": "string", - "description": "This class is used to bind a querystring list of Guid (as a comma-separated list) to the List of Guid parameter in a\nminimal API endpoint.", - "example": "123e4567-e89b-12d3-a456-426614174000,223e4567-e89b-12d3-a456-426614174001" - } - }, - { - "name": "intervalStart", - "in": "query", - "description": "The start of the interval.", - "required": true, - "schema": { - "type": "string", - "format": "date" - } - }, - { - "name": "intervalEnd", - "in": "query", - "description": "The end of the interval.", + "name": "userId", + "in": "path", + "description": "The user whose capacity should be updated.", "required": true, "schema": { "type": "string", - "format": "date" + "format": "uuid" } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GetTimeBookingForUsersResult" - } - } + "requestBody": { + "description": "Updated capacity values for each day of the week.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserCapacityForm" } } }, - "400": { - "description": "Bad Request", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/UserCapacity" } } } @@ -38976,34 +49114,48 @@ } } }, - "/users/updatetags": { - "post": { + "/users/{userId}/contactinfo": { + "get": { "tags": [ - "UserTags" + "Users" ], - "summary": "Updates a tag globally for users.", - "description": "Updates a tag globally for users. The renamed or merged tag is applied to matching users.\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", - "operationId": "PostUsersUpdateTags", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TagUpdateForm" - } + "summary": "Returns the contact infos of the user.", + "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:read` permissions.", + "operationId": "GetUserContactInfoByUserId", + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "The id of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], "responses": { "200": { - "description": "OK" - }, - "400": { - "description": "Bad Request", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/ContactInfo" + } } } } @@ -39031,105 +49183,53 @@ ], "x-access": { "admin": "true", - "user-master-data": "write" + "owner": "true", + "user-master-data": "read" } - } - }, - "/users/workload": { - "get": { + }, + "post": { "tags": [ - "Workload" + "Users" ], - "summary": "Returns the users' workloads per day.", - "description": "Returns the users' workloads per day. Takes into consideration weekly availability, absences, user capacity, planned efforts, as well as project budget.\r\n\r\nThe user must be an admin or have `user-planning-data:read` permissions.", - "operationId": "GetUsersWorkload", + "summary": "Creates contact info for the user.", + "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:write` permissions.", + "operationId": "PostUserContactInfoByUserId", "parameters": [ { - "name": "userIds", - "in": "query", - "description": "The ids of the users to get the workload for, as a comma-separated list of Guids.", - "required": true, - "schema": { - "type": "string", - "description": "This class is used to bind a querystring list of Guid (as a comma-separated list) to the List of Guid parameter in a\nminimal API endpoint.", - "example": "123e4567-e89b-12d3-a456-426614174000,223e4567-e89b-12d3-a456-426614174001" - } - }, - { - "name": "intervalStart", - "in": "query", - "description": "The start of the interval to filter by.", - "required": true, - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "intervalEnd", - "in": "query", - "description": "The end of the interval to filter by.", + "name": "userId", + "in": "path", + "description": "The user to add contact information to.", "required": true, "schema": { "type": "string", - "format": "date-time" - } - }, - { - "name": "roughPlanningFrom", - "in": "query", - "description": "The number of days from today when the rough planning should start.", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "fetchDetails", - "in": "query", - "description": "(Optional - default: false) If set to true, the result will contain the hierarchy of elements that are contributing\n to the workload (projects, tasks, appointments).\n Otherwise it will return only the workload value.\n Works only for single day queries.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "ignoreCalendarEvents", - "in": "query", - "description": "Whether to ignore calendar events. Can significantly improve performance.", - "schema": { - "type": "boolean", - "default": false + "format": "uuid" } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GetWorkloadForUsersResult" - } - } + "requestBody": { + "description": "The model containing contact information details including address, phone number, and type.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContactInfoFormForUsers" } } }, - "400": { - "description": "Bad Request", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ContactInfo" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -39151,18 +49251,19 @@ ], "x-access": { "admin": "true", - "user-planning-data": "read" + "owner": "true", + "user-master-data": "write" } } }, - "/users/{userId}": { + "/users/{userId}/contactinfo/{contactInfoId}": { "delete": { "tags": [ "Users" ], - "summary": "Deletes the user.", - "description": "\r\n\r\nThe user must be an admin or have `user-manage-config:delete` permissions.", - "operationId": "DeleteUserById", + "summary": "Deletes the contact info of the user.", + "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:write` permissions.", + "operationId": "DeleteUserContactInfoByUserIdAndContactInfoId", "parameters": [ { "name": "userId", @@ -39173,6 +49274,16 @@ "type": "string", "format": "uuid" } + }, + { + "name": "contactInfoId", + "in": "path", + "description": "The id of the contact info.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -39212,16 +49323,17 @@ ], "x-access": { "admin": "true", - "user-manage-config": "delete" + "owner": "true", + "user-master-data": "write" } }, "get": { "tags": [ "Users" ], - "summary": "Returns the user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetUserById", + "summary": "Returns the contact info of the user.", + "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:read` permissions.", + "operationId": "GetUserContactInfoByUserIdAndContactInfoId", "parameters": [ { "name": "userId", @@ -39232,6 +49344,16 @@ "type": "string", "format": "uuid" } + }, + { + "name": "contactInfoId", + "in": "path", + "description": "The id of the contact info.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -39240,17 +49362,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ContactInfo" } } } @@ -39277,16 +49389,18 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "owner": "true", + "user-master-data": "read" } }, "put": { "tags": [ "Users" ], - "summary": "Updates the user.", + "summary": "Updates the contact info of the user.", "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:write` permissions.", - "operationId": "PutUserById", + "operationId": "PutUserContactInfoByUserIdAndContactInfoId", "parameters": [ { "name": "userId", @@ -39297,14 +49411,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "contactInfoId", + "in": "path", + "description": "The id of the contact info.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "requestBody": { - "description": "The model to update the user.", + "description": "The contact info model.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserForm" + "$ref": "#/components/schemas/ContactInfoFormForUsers" } } }, @@ -39316,7 +49440,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" + "$ref": "#/components/schemas/ContactInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -39349,14 +49483,14 @@ } } }, - "/users/{userId}/activate": { + "/users/{userId}/deactivate": { "post": { "tags": [ "Users" ], - "summary": "Activates the user.", - "description": "Activates the user. The user is then allowed to sign in again and will be notified via email.\r\n\r\nThe user must be an admin or have `user-manage-config:write` permissions.", - "operationId": "PostUserActivateByUserId", + "summary": "Deactivates the user.", + "description": "Deactivates the user. A deactivated user can no longer sign in. This is only possible if the user is not the last admin user.\r\n\r\nThe user must be an admin or have `user-manage-config:write` permissions.", + "operationId": "PostUserDeactivateByUserId", "parameters": [ { "name": "userId", @@ -39367,9 +49501,28 @@ "type": "string", "format": "uuid" } + }, + { + "name": "includeSummary", + "in": "query", + "description": "Whether to return the private project orphan resolution summary.", + "schema": { + "type": "boolean", + "default": false + } } ], "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PostUserDeactivateByUserIdResponse" + } + } + } + }, "204": { "description": "No Content" }, @@ -39420,19 +49573,19 @@ } } }, - "/users/{userId}/addtags": { + "/users/{userId}/deletetags": { "post": { "tags": [ "UserTags" ], - "summary": "Adds a batch of tags to the user.", - "description": "Adds a batch of tags to the user. The selected tags are added to the user.\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", - "operationId": "PostUserAddTagsByUserId", + "summary": "Removes tags from the user.", + "description": "Removes tags from the user. The selected tags are removed from the user.\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", + "operationId": "PostUserDeleteTagsByUserId", "parameters": [ { "name": "userId", "in": "path", - "description": "The id of the user to add tags to.", + "description": "The id of the user whose tags should be removed.", "required": true, "schema": { "type": "string", @@ -39441,13 +49594,69 @@ } ], "requestBody": { - "description": "The model with the tags to be added.", + "description": "The model with the tags to be removed.", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TagForm" + "$ref": "#/components/schemas/DeleteTagForm" + } + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "207": { + "description": "Multi-Status" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "user-master-data": "write" + } + } + }, + "/users/{userId}/externalfiles": { + "post": { + "tags": [ + "User Files" + ], + "summary": "Creates external file references for the specified user.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostExternalFilesByUserNameAndUserId", + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" } } } @@ -39462,7 +49671,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/BaseTagModel" + "$ref": "#/components/schemas/FileInfo" } } } @@ -39500,24 +49709,90 @@ "v1" ], "x-access": { - "admin": "true", - "user-master-data": "write" + "any": "true" } } }, - "/users/{userId}/allavailabletasks": { + "/users/{userId}/files": { + "delete": { + "tags": [ + "User Files" + ], + "summary": "Deletes all files and versions for the specified user.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesByUserNameAndUserId", + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "The user id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, "get": { "tags": [ - "AssignedTasks" + "User Files" ], - "summary": "Returns tasks the specified user is allowed to see.", + "summary": "Returns all files of the specified user.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetUserAllAvailableTasksByUserId", + "operationId": "GetFilesByUserNameAndUserId", "parameters": [ { "name": "userId", "in": "path", - "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -39533,20 +49808,113 @@ { "$ref": "#/components/parameters/orderby" }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "User Files" + ], + "summary": "Uploads a file for the specified user.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesByUserNameAndUserId", + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/FileUploadModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -39567,75 +49935,62 @@ } } }, - "/users/{userId}/assignedtasks": { - "get": { + "/users/{userId}/files/byurl": { + "post": { "tags": [ - "AssignedTasks" + "User Files" ], - "summary": "Returns tasks assigned to the specified user.", - "description": "Returns tasks assigned to the specified user. The result includes tasks assigned to that user. The user must have permission to access the requested resource.", - "operationId": "GetUserAssignedTasksByUserId", + "summary": "Uploads a file from a public URL for the specified user.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesByUrlByUserNameAndUserId", "parameters": [ { "name": "userId", "in": "path", - "description": "The id of the user to get the tasks for.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "name": "inProgress", - "in": "query", - "description": "Whether to return only assigned project tasks of running projects. Defaults to true.", - "schema": { - "type": "boolean", - "default": false + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FilePostForm" + } } }, - { - "name": "assignedOnFrom", - "in": "query", - "description": "The start date for filtering by assignment date. If set, tasks are returned only when the assignment date is greater or equal than this value.", - "schema": { - "type": "string", - "format": "date-time" + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } } }, - { - "name": "assignedOnTo", - "in": "query", - "description": "The end date for filtering by assignment date. If set, tasks are returned only when the assignment date is less or equal than this value.", - "schema": { - "type": "string", - "format": "date-time" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -39656,19 +50011,19 @@ } } }, - "/users/{userId}/assignedtasks/{taskId}": { - "get": { + "/users/{userId}/files/{fileId}": { + "delete": { "tags": [ - "AssignedTasks" + "User Files" ], - "summary": "Returns the assigned task of a specified user.", - "description": "Returns the assigned task of a specified user. The result includes tasks assigned to that user. The user must have permission to access the requested resource.", - "operationId": "GetUserAssignedTaskByUserIdAndTaskId", + "summary": "Deletes the specified user file and its versions.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesByUserNameAndUserIdAndFileId", "parameters": [ { "name": "userId", "in": "path", - "description": "The id of the user.", + "description": "The user id.", "required": true, "schema": { "type": "string", @@ -39676,9 +50031,9 @@ } }, { - "name": "taskId", + "name": "fileId", "in": "path", - "description": "The id of the task to return.", + "description": "The file id.", "required": true, "schema": { "type": "string", @@ -39687,12 +50042,15 @@ } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskModel" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -39731,16 +50089,14 @@ "x-access": { "any": "true" } - } - }, - "/users/{userId}/capacity": { + }, "get": { "tags": [ - "UserCapacities" + "User Files" ], - "summary": "Returns the capacity of the specified user.", - "description": "Returns the capacity of the specified user. The response includes the user's planning capacity. The user must have permission to access the requested resource.", - "operationId": "GetUserCapacityByUserId", + "summary": "Returns the file with the specified id of the user with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByUserNameAndUserIdAndFileId", "parameters": [ { "name": "userId", @@ -39751,6 +50107,16 @@ "type": "string", "format": "uuid" } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -39759,7 +50125,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserCapacity" + "$ref": "#/components/schemas/FileInfo" } } } @@ -39773,6 +50139,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -39791,16 +50167,24 @@ }, "put": { "tags": [ - "UserCapacities" + "User Files" ], - "summary": "Updates the capacity of the specified user.", - "description": "Updates the capacity of the specified user. The capacity is stored for the user's planning. The user must have permission to access the requested resource.", - "operationId": "PutUserCapacityByUserId", + "summary": "Updates metadata for the specified file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PutFilesByUserNameAndUserIdAndFileId", "parameters": [ { "name": "userId", "in": "path", - "description": "The user whose capacity should be updated.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", "required": true, "schema": { "type": "string", @@ -39809,11 +50193,10 @@ } ], "requestBody": { - "description": "Updated capacity values for each day of the week.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserCapacityForm" + "$ref": "#/components/schemas/FileInfoUpdateForm" } } }, @@ -39825,7 +50208,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserCapacity" + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -39839,6 +50232,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -39856,19 +50259,18 @@ } } }, - "/users/{userId}/contactinfo": { - "get": { + "/users/{userId}/files/{fileId}/changeentity": { + "post": { "tags": [ - "Users" + "User Files" ], - "summary": "Returns the contact infos of the user.", - "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:read` permissions.", - "operationId": "GetUserContactInfoByUserId", + "summary": "Changes the user that owns the specified file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesChangeUserByUserNameAndUserIdAndFileId", "parameters": [ { "name": "userId", "in": "path", - "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -39876,28 +50278,52 @@ } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileEntityForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ContactInfo" - } + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -39924,23 +50350,31 @@ "v1" ], "x-access": { - "admin": "true", - "owner": "true", - "user-master-data": "read" + "any": "true" } - }, + } + }, + "/users/{userId}/files/{fileId}/copy": { "post": { "tags": [ - "Users" + "User Files" ], - "summary": "Creates contact info for the user.", - "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:write` permissions.", - "operationId": "PostUserContactInfoByUserId", + "summary": "Copies the specified file to another user.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesCopyByUserNameAndUserIdAndFileId", "parameters": [ { "name": "userId", "in": "path", - "description": "The user to add contact information to.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", "required": true, "schema": { "type": "string", @@ -39949,11 +50383,10 @@ } ], "requestBody": { - "description": "The model containing contact information details including address, phone number, and type.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContactInfoFormForUsers" + "$ref": "#/components/schemas/FileCopyForm" } } }, @@ -39965,7 +50398,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContactInfo" + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -39992,25 +50445,22 @@ "v1" ], "x-access": { - "admin": "true", - "owner": "true", - "user-master-data": "write" + "any": "true" } } }, - "/users/{userId}/contactinfo/{contactInfoId}": { - "delete": { + "/users/{userId}/files/{fileId}/download": { + "get": { "tags": [ - "Users" + "User Files" ], - "summary": "Deletes the contact info of the user.", - "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:write` permissions.", - "operationId": "DeleteUserContactInfoByUserIdAndContactInfoId", + "summary": "Returns the latest content of the specified user file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesDownloadByUserNameAndUserIdAndFileId", "parameters": [ { "name": "userId", "in": "path", - "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -40018,19 +50468,49 @@ } }, { - "name": "contactInfoId", + "name": "fileId", "in": "path", - "description": "The id of the contact info.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "width", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "height", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "crop", + "in": "query", + "schema": { + "type": "boolean" + } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + } }, "400": { "description": "Bad Request", @@ -40042,6 +50522,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -40064,23 +50554,22 @@ "v1" ], "x-access": { - "admin": "true", - "owner": "true", - "user-master-data": "write" + "any": "true" } - }, + } + }, + "/users/{userId}/files/{fileId}/pdf": { "get": { "tags": [ - "Users" + "User Files" ], - "summary": "Returns the contact info of the user.", - "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:read` permissions.", - "operationId": "GetUserContactInfoByUserIdAndContactInfoId", + "summary": "Returns the specified user file as PDF.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesPdfByUserNameAndUserIdAndFileId", "parameters": [ { "name": "userId", "in": "path", - "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -40088,14 +50577,21 @@ } }, { - "name": "contactInfoId", + "name": "fileId", "in": "path", - "description": "The id of the contact info.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "inline", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } } ], "responses": { @@ -40104,7 +50600,28 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContactInfo" + "type": "string", + "format": "binary" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -40131,23 +50648,22 @@ "v1" ], "x-access": { - "admin": "true", - "owner": "true", - "user-master-data": "read" + "any": "true" } - }, - "put": { + } + }, + "/users/{userId}/files/{fileId}/shareurl": { + "get": { "tags": [ - "Users" + "User Files" ], - "summary": "Updates the contact info of the user.", - "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:write` permissions.", - "operationId": "PutUserContactInfoByUserIdAndContactInfoId", + "summary": "Returns a public URL for the specified file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesShareUrlByUserNameAndUserIdAndFileId", "parameters": [ { "name": "userId", "in": "path", - "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -40155,9 +50671,8 @@ } }, { - "name": "contactInfoId", + "name": "fileId", "in": "path", - "description": "The id of the contact info.", "required": true, "schema": { "type": "string", @@ -40165,30 +50680,19 @@ } } ], - "requestBody": { - "description": "The contact info model.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ContactInfoFormForUsers" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContactInfo" + "type": "string" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -40219,25 +50723,22 @@ "v1" ], "x-access": { - "admin": "true", - "owner": "true", - "user-master-data": "write" + "any": "true" } } }, - "/users/{userId}/deactivate": { - "post": { + "/users/{userId}/files/{fileId}/versions": { + "get": { "tags": [ - "Users" + "User Files" ], - "summary": "Deactivates the user.", - "description": "Deactivates the user. A deactivated user can no longer sign in. This is only possible if the user is not the last admin user.\r\n\r\nThe user must be an admin or have `user-manage-config:write` permissions.", - "operationId": "PostUserDeactivateByUserId", + "summary": "Returns all versions of the specified user file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByUserNameAndUserIdAndFileId", "parameters": [ { "name": "userId", "in": "path", - "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -40245,13 +50746,25 @@ } }, { - "name": "includeSummary", - "in": "query", - "description": "Whether to return the private project orphan resolution summary.", + "name": "fileId", + "in": "path", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -40260,20 +50773,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PostUserDeactivateByUserIdResponse" - } - } - } - }, - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileVersion" + } } } } @@ -40310,24 +50813,29 @@ "v1" ], "x-access": { - "admin": "true", - "user-manage-config": "write" + "any": "true" } - } - }, - "/users/{userId}/deletetags": { + }, "post": { "tags": [ - "UserTags" + "User Files" ], - "summary": "Removes tags from the user.", - "description": "Removes tags from the user. The selected tags are removed from the user.\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", - "operationId": "PostUserDeleteTagsByUserId", + "summary": "Uploads a new version of the specified user file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesVersionsByUserNameAndUserIdAndFileId", "parameters": [ { "name": "userId", "in": "path", - "description": "The id of the user whose tags should be removed.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", "required": true, "schema": { "type": "string", @@ -40336,25 +50844,54 @@ } ], "requestBody": { - "description": "The model with the tags to be removed.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DeleteTagForm" - } + "$ref": "#/components/schemas/FileUploadModel" } } - }, - "required": true + } }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileVersion" + } + } + } }, - "207": { - "description": "Multi-Status" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -40368,19 +50905,18 @@ "v1" ], "x-access": { - "admin": "true", - "user-master-data": "write" + "any": "true" } } }, - "/users/{userId}/files/{fileId}": { + "/users/{userId}/files/{fileId}/versions/{versionId}": { "get": { "tags": [ "User Files" ], - "summary": "Returns the file with the specified id of the user with the specified id.", + "summary": "Returns the user file version with the specified id.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByUserNameAndUserIdAndFileId", + "operationId": "GetFilesVersionsByUserNameAndUserIdAndFileIdAndVersionId", "parameters": [ { "name": "userId", @@ -40401,6 +50937,16 @@ "type": "string", "format": "uuid" } + }, + { + "name": "versionId", + "in": "path", + "description": "The id of the file version.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -40409,7 +50955,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/FileVersion" } } } @@ -40450,19 +50996,18 @@ } } }, - "/users/{userId}/files/{fileId}/versions/{versionId}": { + "/users/{userId}/files/{fileId}/versions/{versionId}/download": { "get": { "tags": [ "User Files" ], - "summary": "Returns the user file version with the specified id.", + "summary": "Returns the content of the specified user file version.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByUserNameAndUserIdAndFileIdAndVersionId", + "operationId": "GetFilesVersionsDownloadByUserNameAndUserIdAndFileIdAndVersionId", "parameters": [ { "name": "userId", "in": "path", - "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -40472,7 +51017,6 @@ { "name": "fileId", "in": "path", - "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -40482,7 +51026,6 @@ { "name": "versionId", "in": "path", - "description": "The id of the file version.", "required": true, "schema": { "type": "string", @@ -40496,7 +51039,8 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "type": "string", + "format": "binary" } } } @@ -45009,195 +55553,22 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" - } - } - }, - "/workspaces/{workspaceId}/files/{fileId}": { - "get": { - "tags": [ - "Workspace Files" - ], - "summary": "Returns the file with the specified id of the workspace with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByWorkspaceNameAndWorkspaceIdAndFileId", - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "description": "The id of the workspace.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/workspaces/{workspaceId}/files/{fileId}/versions/{versionId}": { - "get": { - "tags": [ - "Workspace Files" - ], - "summary": "Returns the workspace file version with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByWorkspaceNameAndWorkspaceIdAndFileIdAndVersionId", - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "description": "The id of the workspace.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileVersion" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/{entityName}/{entityId}/externalfiles": { + "/workspaces/{workspaceId}/externalfiles": { "post": { "tags": [ - "Entity Files" + "Workspace Files" ], - "summary": "Creates external file references for the specified entity.", + "summary": "Creates external file references for the specified workspace.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostExternalFilesByEntityNameAndEntityId", + "operationId": "PostExternalFilesByWorkspaceNameAndWorkspaceId", "parameters": [ { - "name": "entityName", - "in": "path", - "required": true, - "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" - } - }, - { - "name": "entityId", + "name": "workspaceId", "in": "path", "required": true, "schema": { @@ -45269,29 +55640,19 @@ } } }, - "/{entityName}/{entityId}/files": { + "/workspaces/{workspaceId}/files": { "delete": { "tags": [ - "Entity Files" + "Workspace Files" ], - "summary": "Deletes all files and versions for the specified entity.", + "summary": "Deletes all files and versions for the specified workspace.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "DeleteFilesByEntityNameAndEntityId", + "operationId": "DeleteFilesByWorkspaceNameAndWorkspaceId", "parameters": [ { - "name": "entityName", - "in": "path", - "description": "The entity type.", - "required": true, - "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" - } - }, - { - "name": "entityId", + "name": "workspaceId", "in": "path", - "description": "The entity id.", + "description": "The workspace id.", "required": true, "schema": { "type": "string", @@ -45350,23 +55711,14 @@ }, "get": { "tags": [ - "Entity Files" + "Workspace Files" ], - "summary": "Returns all files of the specified entity.", + "summary": "Returns all files of the specified workspace.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByEntityNameAndEntityId", + "operationId": "GetFilesByWorkspaceNameAndWorkspaceId", "parameters": [ { - "name": "entityName", - "in": "path", - "required": true, - "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" - } - }, - { - "name": "entityId", + "name": "workspaceId", "in": "path", "required": true, "schema": { @@ -45438,23 +55790,14 @@ }, "post": { "tags": [ - "Entity Files" + "Workspace Files" ], - "summary": "Uploads a file for the specified entity.", + "summary": "Uploads a file for the specified workspace.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostFilesByEntityNameAndEntityId", + "operationId": "PostFilesByWorkspaceNameAndWorkspaceId", "parameters": [ { - "name": "entityName", - "in": "path", - "required": true, - "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" - } - }, - { - "name": "entityId", + "name": "workspaceId", "in": "path", "required": true, "schema": { @@ -45519,26 +55862,17 @@ } } }, - "/{entityName}/{entityId}/files/byurl": { + "/workspaces/{workspaceId}/files/byurl": { "post": { "tags": [ - "Entity Files" + "Workspace Files" ], - "summary": "Uploads a file from a public URL for the specified entity.", + "summary": "Uploads a file from a public URL for the specified workspace.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostFilesByUrlByEntityNameAndEntityId", + "operationId": "PostFilesByUrlByWorkspaceNameAndWorkspaceId", "parameters": [ { - "name": "entityName", - "in": "path", - "required": true, - "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" - } - }, - { - "name": "entityId", + "name": "workspaceId", "in": "path", "required": true, "schema": { @@ -45604,29 +55938,19 @@ } } }, - "/{entityName}/{entityId}/files/{fileId}": { + "/workspaces/{workspaceId}/files/{fileId}": { "delete": { "tags": [ - "Entity Files" + "Workspace Files" ], - "summary": "Deletes the specified entity file and its versions.", + "summary": "Deletes the specified workspace file and its versions.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "DeleteFilesByEntityNameAndEntityIdAndFileId", + "operationId": "DeleteFilesByWorkspaceNameAndWorkspaceIdAndFileId", "parameters": [ { - "name": "entityName", - "in": "path", - "description": "The entity type.", - "required": true, - "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" - } - }, - { - "name": "entityId", + "name": "workspaceId", "in": "path", - "description": "The entity id.", + "description": "The workspace id.", "required": true, "schema": { "type": "string", @@ -45693,26 +56017,18 @@ "any": "true" } }, - "put": { + "get": { "tags": [ - "Entity Files" + "Workspace Files" ], - "summary": "Updates metadata for the specified file.", + "summary": "Returns the file with the specified id of the workspace with the specified id.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "PutFilesByEntityNameAndEntityIdAndFileId", + "operationId": "GetFilesByWorkspaceNameAndWorkspaceIdAndFileId", "parameters": [ { - "name": "entityName", - "in": "path", - "required": true, - "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" - } - }, - { - "name": "entityId", + "name": "workspaceId", "in": "path", + "description": "The id of the workspace.", "required": true, "schema": { "type": "string", @@ -45722,6 +56038,7 @@ { "name": "fileId", "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -45729,16 +56046,6 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", @@ -45750,16 +56057,6 @@ } } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "401": { "description": "Unauthorized", "content": { @@ -45794,28 +56091,17 @@ "x-access": { "any": "true" } - } - }, - "/{entityName}/{entityId}/files/{fileId}/changeentity": { - "post": { + }, + "put": { "tags": [ - "Entity Files" + "Workspace Files" ], - "summary": "Changes the entity that owns the specified file.", + "summary": "Updates metadata for the specified file.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostFilesChangeEntityByEntityNameAndEntityIdAndFileId", + "operationId": "PutFilesByWorkspaceNameAndWorkspaceIdAndFileId", "parameters": [ { - "name": "entityName", - "in": "path", - "required": true, - "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" - } - }, - { - "name": "entityId", + "name": "workspaceId", "in": "path", "required": true, "schema": { @@ -45837,7 +56123,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileEntityForm" + "$ref": "#/components/schemas/FileInfoUpdateForm" } } }, @@ -45900,26 +56186,17 @@ } } }, - "/{entityName}/{entityId}/files/{fileId}/copy": { + "/workspaces/{workspaceId}/files/{fileId}/changeentity": { "post": { "tags": [ - "Entity Files" + "Workspace Files" ], - "summary": "Copies the specified file to another entity.", + "summary": "Changes the workspace that owns the specified file.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostFilesCopyByEntityNameAndEntityIdAndFileId", + "operationId": "PostFilesChangeWorkspaceByWorkspaceNameAndWorkspaceIdAndFileId", "parameters": [ { - "name": "entityName", - "in": "path", - "required": true, - "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" - } - }, - { - "name": "entityId", + "name": "workspaceId", "in": "path", "required": true, "schema": { @@ -45941,7 +56218,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileCopyForm" + "$ref": "#/components/schemas/FileEntityForm" } } }, @@ -46004,26 +56281,17 @@ } } }, - "/{entityName}/{entityId}/files/{fileId}/download": { - "get": { + "/workspaces/{workspaceId}/files/{fileId}/copy": { + "post": { "tags": [ - "Entity Files" + "Workspace Files" ], - "summary": "Returns the latest content of the specified entity file.", + "summary": "Copies the specified file to another workspace.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesDownloadByEntityNameAndEntityIdAndFileId", + "operationId": "PostFilesCopyByWorkspaceNameAndWorkspaceIdAndFileId", "parameters": [ { - "name": "entityName", - "in": "path", - "required": true, - "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" - } - }, - { - "name": "entityId", + "name": "workspaceId", "in": "path", "required": true, "schema": { @@ -46039,39 +56307,25 @@ "type": "string", "format": "uuid" } - }, - { - "name": "width", - "in": "query", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "height", - "in": "query", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "crop", - "in": "query", - "schema": { - "type": "boolean" - } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileCopyForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/FileInfo" } } } @@ -46122,26 +56376,26 @@ } } }, - "/{entityName}/{entityId}/files/{fileId}/pdf": { + "/workspaces/{workspaceId}/files/{fileId}/download": { "get": { "tags": [ - "Entity Files" + "Workspace Files" ], - "summary": "Returns the specified entity file as PDF.", + "summary": "Returns the latest content of the specified workspace file.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesPdfByEntityNameAndEntityIdAndFileId", + "operationId": "GetFilesDownloadByWorkspaceNameAndWorkspaceIdAndFileId", "parameters": [ { - "name": "entityName", + "name": "workspaceId", "in": "path", "required": true, "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" + "type": "string", + "format": "uuid" } }, { - "name": "entityId", + "name": "fileId", "in": "path", "required": true, "schema": { @@ -46150,20 +56404,26 @@ } }, { - "name": "fileId", - "in": "path", - "required": true, + "name": "width", + "in": "query", "schema": { - "type": "string", - "format": "uuid" + "type": "number", + "format": "double" } }, { - "name": "inline", + "name": "height", "in": "query", "schema": { - "type": "boolean", - "default": false + "type": "number", + "format": "double" + } + }, + { + "name": "crop", + "in": "query", + "schema": { + "type": "boolean" } } ], @@ -46225,26 +56485,26 @@ } } }, - "/{entityName}/{entityId}/files/{fileId}/shareurl": { + "/workspaces/{workspaceId}/files/{fileId}/pdf": { "get": { "tags": [ - "Entity Files" + "Workspace Files" ], - "summary": "Returns a public URL for the specified file.", + "summary": "Returns the specified workspace file as PDF.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesShareUrlByEntityNameAndEntityIdAndFileId", + "operationId": "GetFilesPdfByWorkspaceNameAndWorkspaceIdAndFileId", "parameters": [ { - "name": "entityName", + "name": "workspaceId", "in": "path", "required": true, "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" + "type": "string", + "format": "uuid" } }, { - "name": "entityId", + "name": "fileId", "in": "path", "required": true, "schema": { @@ -46253,12 +56513,11 @@ } }, { - "name": "fileId", - "in": "path", - "required": true, + "name": "inline", + "in": "query", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } } ], @@ -46268,7 +56527,18 @@ "content": { "application/json": { "schema": { - "type": "string" + "type": "string", + "format": "binary" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -46309,26 +56579,17 @@ } } }, - "/{entityName}/{entityId}/files/{fileId}/versions": { + "/workspaces/{workspaceId}/files/{fileId}/shareurl": { "get": { "tags": [ - "Entity Files" + "Workspace Files" ], - "summary": "Returns all versions of the specified entity file.", + "summary": "Returns a public URL for the specified file.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByEntityNameAndEntityIdAndFileId", + "operationId": "GetFilesShareUrlByWorkspaceNameAndWorkspaceIdAndFileId", "parameters": [ { - "name": "entityName", - "in": "path", - "required": true, - "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" - } - }, - { - "name": "entityId", + "name": "workspaceId", "in": "path", "required": true, "schema": { @@ -46344,18 +56605,6 @@ "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -46364,10 +56613,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileVersion" - } + "type": "string" } } } @@ -46406,26 +56652,107 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/workspaces/{workspaceId}/files/{fileId}/versions": { + "get": { "tags": [ - "Entity Files" + "Workspace Files" ], - "summary": "Uploads a new version of the specified entity file.", + "summary": "Returns all versions of the specified workspace file.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostFilesVersionsByEntityNameAndEntityIdAndFileId", + "operationId": "GetFilesVersionsByWorkspaceNameAndWorkspaceIdAndFileId", "parameters": [ { - "name": "entityName", + "name": "workspaceId", "in": "path", "required": true, "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" + "type": "string", + "format": "uuid" } }, { - "name": "entityId", + "name": "fileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FileVersion" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "Workspace Files" + ], + "summary": "Uploads a new version of the specified workspace file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesVersionsByWorkspaceNameAndWorkspaceIdAndFileId", + "parameters": [ + { + "name": "workspaceId", "in": "path", "required": true, "schema": { @@ -46509,26 +56836,104 @@ } } }, - "/{entityName}/{entityId}/files/{fileId}/versions/{versionId}/download": { + "/workspaces/{workspaceId}/files/{fileId}/versions/{versionId}": { "get": { "tags": [ - "Entity Files" + "Workspace Files" ], - "summary": "Returns the content of the specified entity file version.", + "summary": "Returns the workspace file version with the specified id.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsDownloadByEntityNameAndEntityIdAndFileIdAndVersionId", + "operationId": "GetFilesVersionsByWorkspaceNameAndWorkspaceIdAndFileIdAndVersionId", "parameters": [ { - "name": "entityName", + "name": "workspaceId", "in": "path", + "description": "The id of the workspace.", "required": true, "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "versionId", + "in": "path", + "description": "The id of the file version.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileVersion" + } + } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ { - "name": "entityId", + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/workspaces/{workspaceId}/files/{fileId}/versions/{versionId}/download": { + "get": { + "tags": [ + "Workspace Files" + ], + "summary": "Returns the content of the specified workspace file version.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsDownloadByWorkspaceNameAndWorkspaceIdAndFileIdAndVersionId", + "parameters": [ + { + "name": "workspaceId", "in": "path", "required": true, "schema": { @@ -46648,6 +57053,44 @@ "additionalProperties": false, "description": "Configures an agent's connector connection." }, + "AgentConnectorLinkResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The linked connector identifier.", + "format": "uuid", + "example": "6ba7b810-9dad-11d1-80b4-00c04fd430c8" + }, + "name": { + "type": "string", + "description": "The connector name.", + "nullable": true, + "example": "Google Drive" + }, + "status": { + "type": "string", + "description": "Always pending in this shared response. It does not indicate whether an account is connected.\nRead the agent's configuration endpoint for the current user's connection status.", + "nullable": true, + "example": "pending" + }, + "connectionMode": { + "type": "string", + "description": "How the agent chooses an account: actingUser lets each user supply their own;\nspecificConnection uses the editor-provided account for everyone.", + "nullable": true, + "example": "specificConnection" + }, + "connectionId": { + "type": "string", + "description": "The editor-provided account id in specificConnection mode; otherwise null.", + "format": "uuid", + "nullable": true, + "example": "6ba7b811-9dad-11d1-80b4-00c04fd430c8" + } + }, + "additionalProperties": false, + "description": "A connector linked to a custom agent, with settings shared by everyone who uses the agent." + }, "AgentConnectorUserConnectionRequestModel": { "required": [ "connectionId" @@ -47919,7 +58362,7 @@ "connectors": { "type": "array", "items": { - "$ref": "#/components/schemas/ConnectorResponseModel" + "$ref": "#/components/schemas/AgentConnectorLinkResponseModel" }, "description": "The linked connectors.", "nullable": true @@ -51886,6 +62329,84 @@ "additionalProperties": false, "description": "Configures a new reusable skill." }, + "CustomAgentConfigurationResponseModel": { + "type": "object", + "properties": { + "agentId": { + "type": "string", + "description": "The custom agent identifier.", + "format": "uuid", + "example": "23e68187-91d6-4f7e-8d31-e3f2c60d7427" + }, + "enabledConnectorIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The ids of connectors linked to this agent. A linked connector may still need a working account.", + "nullable": true + }, + "enabledSkillIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "The ids of skills linked to this agent.", + "nullable": true + }, + "connectorConnections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomAgentConnectorConfigurationModel" + }, + "description": "One entry per linked connector, with this user's account choice, its source, and its availability.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "The current user's configuration for one custom agent: linked capabilities and an account choice for each connector.\nReading this response does not save any choices." + }, + "CustomAgentConnectorConfigurationModel": { + "type": "object", + "properties": { + "connectorId": { + "type": "string", + "description": "The linked connector identifier.", + "format": "uuid", + "example": "6ba7b810-9dad-11d1-80b4-00c04fd430c8" + }, + "selectedConnectionId": { + "type": "string", + "description": "The account this user explicitly chose for this agent and connector; null when no choice is saved.", + "format": "uuid", + "nullable": true, + "example": "6ba7b811-9dad-11d1-80b4-00c04fd430c8" + }, + "defaultConnectionId": { + "type": "string", + "description": "The account the agent would try to use after applying the selection rules; null when none is selected.\nThis may be a saved choice, an awork Agent default, or an editor-provided account.\nCheck Status before treating the account as available.", + "format": "uuid", + "nullable": true, + "example": "6ba7b811-9dad-11d1-80b4-00c04fd430c8" + }, + "connectionSource": { + "type": "string", + "description": "Why the account was selected: userSelection is this user's saved agent choice;\npersonalDefault is their enabled awork Agent default; specificConnection is the editor-provided account;\nnone means no account was selected.", + "nullable": true, + "example": "userSelection" + }, + "status": { + "type": "string", + "description": "The account's availability: pending, connected, authRequired, error, or suspended.\nMissing means no account could be selected. Inaccessible means the user cannot use the connector or account.", + "nullable": true, + "example": "connected" + } + }, + "additionalProperties": false, + "description": "The account one connector would use for the current user, and whether that account is available." + }, "DisableModelsRequestModel": { "required": [ "resourceKey", @@ -81297,6 +91818,9 @@ "name": "WorkspaceAbsences", "description": "Use those endpoints to define workspace wide absences. A WorkspaceAbsence is an absence that is applied to all the users of the workspace. \n It is useful for defining company specific events/holidays, for example." }, + { + "name": "Agent Files" + }, { "name": "Agent Thread Files", "description": "Endpoints for files attached to agent threads." From 4e16a23981c1fea3828f13d18dce5964d77c0700 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Sat, 19 Sep 2026 14:55:48 +0200 Subject: [PATCH 16/16] Add agent skills and schedules to API navigation --- fern/docs.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fern/docs.yml b/fern/docs.yml index 5b07412..705b3a8 100644 --- a/fern/docs.yml +++ b/fern/docs.yml @@ -65,6 +65,8 @@ navigation: icon: robot - custom agents - agent files + - agent skills + - agent schedules - agent threads - agent thread files - agent runtime