From 91d598d20fa8566e539e6d6e118506e745845a1e Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 25 Aug 2026 00:12:22 +0000 Subject: [PATCH 01/12] 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/12] 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/12] 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/12] 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/12] 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/12] 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/12] 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/12] 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/12] 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/12] 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/12] 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/12] 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": {