diff --git a/fern/apis/v1/openapi/openapi.json b/fern/apis/v1/openapi/openapi.json index bb420a7..2d5beb6 100644 --- a/fern/apis/v1/openapi/openapi.json +++ b/fern/apis/v1/openapi/openapi.json @@ -1156,14 +1156,14 @@ } } }, - "/apiusers": { + "/agents": { "get": { "tags": [ - "ApiUsers" + "Custom Agents" ], - "summary": "Returns all API users.", - "description": "Returns all API users.\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetApiUsers", + "summary": "Returns all custom agents.", + "description": "Only agents visible to the requesting user are returned.\r\n\r\nAny authenticated user.", + "operationId": "GetAgents", "responses": { "200": { "description": "OK", @@ -1172,7 +1172,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ApiUser" + "$ref": "#/components/schemas/AgentSummaryResponseModel" } } } @@ -1190,23 +1190,22 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "read" + "any": "true" } }, "post": { "tags": [ - "ApiUsers" + "Custom Agents" ], - "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": "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 model to create the API user.", + "description": "The configuration for the new agent.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ApiUserPostForm" + "$ref": "#/components/schemas/CreateAgentRequestModel" } } }, @@ -1218,7 +1217,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ApiUser" + "$ref": "#/components/schemas/AgentSummaryResponseModel" } } } @@ -1232,9 +1231,47 @@ } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/agents/connectors": { + "get": { + "tags": [ + "AgentRuntime" + ], + "summary": "Lists the connectors visible to the requesting user in the current workspace.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetConnectors", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ConnectorResponseModel" + } + } + } + } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -1255,37 +1292,50 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } - } - }, - "/apiusers/{apiUserId}": { - "delete": { + }, + "post": { "tags": [ - "ApiUsers" + "AgentRuntime" ], - "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": "apiUserId", - "in": "path", - "description": "The id of the API user to delete.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "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": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectorResponseModel" + } + } + } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -1306,42 +1356,31 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } - }, + } + }, + "/agents/connectors/presets": { "get": { "tags": [ - "ApiUsers" - ], - "summary": "Returns the API user with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetApiUserById", - "parameters": [ - { - "name": "apiUserId", - "in": "path", - "description": "The id of the API user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "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": { - "$ref": "#/components/schemas/ApiUser" + "$ref": "#/components/schemas/ConnectorPresetsResponseModel" } } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -1362,22 +1401,23 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "read" + "any": "true" } - }, + } + }, + "/agents/connectors/{connectorId}/sharing": { "put": { "tags": [ - "ApiUsers" + "AgentRuntime" ], - "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", + "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": "apiUserId", + "name": "connectorId", "in": "path", - "description": "The id of the API user to update.", + "description": "The connector id.", "required": true, "schema": { "type": "string", @@ -1386,11 +1426,11 @@ } ], "requestBody": { - "description": "The model to update the API user.", + "description": "The connector sharing configuration.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ApiUserForm" + "$ref": "#/components/schemas/ConnectorSharingRequestModel" } } }, @@ -1402,7 +1442,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ApiUser" + "$ref": "#/components/schemas/ConnectorSharingModel" } } } @@ -1417,6 +1457,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -1439,26 +1489,75 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } } }, - "/automations/catalog": { + "/agents/defaults": { "get": { "tags": [ - "Project Automations" + "AgentRuntime" ], - "summary": "Returns all supported automation trigger and action types.", + "summary": "Gets the default agent options for a personal or custom agent.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetAutomationsCatalog", + "operationId": "GetAgentDefaults", + "parameters": [ + { + "name": "type", + "in": "query", + "description": "The agent type to resolve defaults for ('personal-agent' or 'custom-agent').", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "agentId", + "in": "query", + "description": "The id of the custom agent when is 'custom-agent'.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AutomationCatalogModel" + "$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" } } } @@ -1479,29 +1578,32 @@ } } }, - "/autopilot/availablealerts": { + "/agents/models": { "get": { "tags": [ - "Autopilot" + "AgentRuntime" ], - "summary": "Returns all available alerts for autopilots.", + "summary": "Returns the AI models available to the agent runtime.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetAutopilotAvailableAlerts", + "operationId": "GetModels", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } - }, - "example": [ - "behind_schedule", - "overdue" - ] + "$ref": "#/components/schemas/AgentRuntimeModelsResponseModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } } @@ -1521,33 +1623,45 @@ } } }, - "/autopilot/{autopilotId}": { - "get": { + "/agents/models/settings/automaticenablement": { + "put": { "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", - "parameters": [ - { - "name": "autopilotId", - "in": "path", - "description": "The id of the autopilot.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "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 automatic-enablement request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetModelAutoEnableRequestModel" + } } - } - ], + }, + "required": true + }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Autopilot" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -1564,28 +1678,50 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/clientapplications": { - "get": { + "/agents/models/settings/disable": { + "post": { "tags": [ - "Client Applications" + "AgentRuntime" ], - "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": "Atomically disables a model, vendor, or region and migrates dependent configurations.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostAgentsModelsSettingsDisable", + "requestBody": { + "description": "The disable and migration command.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DisableModelsRequestModel" + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ClientApplication" - } + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -1603,22 +1739,24 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "read" + "workspace-manage-config": "write" } - }, + } + }, + "/agents/models/settings/disable/preflight": { "post": { "tags": [ - "Client Applications" + "AgentRuntime" ], - "summary": "Registers a new client application.", + "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": "PostClientApplications", + "operationId": "PostAgentsModelsSettingsDisablePreflight", "requestBody": { - "description": "The client application model.", + "description": "The disable target.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ClientApplicationCreateForm" + "$ref": "#/components/schemas/DisableModelsRequestModel" } } }, @@ -1630,7 +1768,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ClientApplicationCreateResponse" + "$ref": "#/components/schemas/ModelDisablePreflightResponseModel" } } } @@ -1644,6 +1782,16 @@ } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -1662,38 +1810,52 @@ } } }, - "/clientapplications/register": { - "post": { + "/agents/models/settings/presets/{presetKey}": { + "put": { "tags": [ - "Client Applications" + "AgentRuntime" + ], + "summary": "Assigns central Auto or an explicit active text model to a workspace preset.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PutAgentsModelsSettingsPresetsByPresetKey", + "parameters": [ + { + "name": "presetKey", + "in": "path", + "description": "The preset key.", + "required": true, + "schema": { + "type": "string" + } + } ], - "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.", + "description": "The preset assignment.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DynamicClientRegistrationEndpointRequest" + "$ref": "#/components/schemas/SetModelPresetRequestModel" } } }, "required": true }, "responses": { - "201": { - "description": "Created", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DynamicClientRegistrationResponse" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -1714,23 +1876,24 @@ "v1" ], "x-access": { - "anonymous": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/clientapplications/{clientId}": { - "delete": { + "/agents/models/settings/regions/{regionKey}/enable": { + "post": { "tags": [ - "Client Applications" + "AgentRuntime" ], - "summary": "Deletes the specified client application.", + "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": "DeleteClientApplicationsByClientId", + "operationId": "PostAgentsModelsSettingsRegionsEnableByRegionKey", "parameters": [ { - "name": "clientId", + "name": "regionKey", "in": "path", - "description": "The id of the client application.", + "description": "The stable serving-region key.", "required": true, "schema": { "type": "string" @@ -1751,8 +1914,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -1776,19 +1939,21 @@ "admin": "true", "workspace-manage-config": "write" } - }, - "get": { + } + }, + "/agents/models/settings/vendors/{vendorKey}/enable": { + "post": { "tags": [ - "Client Applications" + "AgentRuntime" ], - "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": "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": "clientId", + "name": "vendorKey", "in": "path", - "description": "The id of the client application.", + "description": "The stable vendor key.", "required": true, "schema": { "type": "string" @@ -1796,18 +1961,21 @@ } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ClientApplication" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -1829,48 +1997,32 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "read" + "workspace-manage-config": "write" } - }, - "put": { + } + }, + "/agents/models/{modelKey}/enable": { + "post": { "tags": [ - "Client Applications" + "AgentRuntime" ], - "summary": "Updates the client application with the specified id.", + "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": "PutClientApplicationsByClientId", + "operationId": "PostAgentsModelsEnableByModelKey", "parameters": [ { - "name": "clientId", + "name": "modelKey", "in": "path", - "description": "The id of the client application.", + "description": "The stable, URL-safe catalog key.", "required": true, "schema": { "type": "string" } } ], - "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" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -1882,8 +2034,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -1909,31 +2061,20 @@ } } }, - "/clientapplications/{clientId}/generateapikey": { + "/agents/threads": { "post": { "tags": [ - "Client Applications" - ], - "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": "clientId", - "in": "path", - "description": "The id of the client application.", - "required": true, - "schema": { - "type": "string" - } - } + "AgentThreads" ], + "summary": "Creates a conversation with the awork Agent or a custom agent.", + "description": "Supply content or attachments to submit the first message and start processing.\r\n Personal-agent threads can be created without a message; custom-agent threads require text or an attachment.\r\n The response contains the thread and accepted first-message identifiers, not the agent's reply.\r\n Read GET /agents/threads/{threadId}/messages to retrieve replies.\r\n Each request creates a new thread. Retrying after a lost response can create another thread.\r\n\r\nAny authenticated user.", + "operationId": "PostAgentsThreads", "requestBody": { - "description": "The model to generate an API key.", + "description": "The thread creation payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ClientApplicationApiKeyForm" + "$ref": "#/components/schemas/AiThreadCreateRequestModel" } } }, @@ -1945,7 +2086,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TokenResponse" + "$ref": "#/components/schemas/AiThreadCreatedResponseModel" } } } @@ -1960,6 +2101,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -1969,6 +2120,16 @@ } } } + }, + "503": { + "description": "Service Unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -1982,28 +2143,28 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "read" + "any": "true" } } }, - "/clientapplications/{clientId}/generatesecret": { - "post": { + "/agents/threads/{threadId}": { + "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 an agent thread.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetAgentsThreadsByThreadId", "parameters": [ { - "name": "clientId", + "name": "threadId", "in": "path", - "description": "The id of the client application.", + "description": "The id of the thread to retrieve.", "required": true, "schema": { - "type": "string" - } + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -2012,17 +2173,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ClientApplicationGeneratePasswordResponse" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/AgentThreadResponseModel" } } } @@ -2049,94 +2200,43 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } } }, - "/companies": { - "get": { + "/agents/threads/{threadId}/cancel": { + "post": { "tags": [ - "Companies" + "AgentThreads" ], - "summary": "Returns all companies.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", - "operationId": "GetCompanies", + "summary": "Cancels the active run for the specified agent thread.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostAgentsThreadsCancelByThreadId", "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/Company" - } - } - } + "name": "threadId", + "in": "path", + "description": "The thread id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" ], - "x-access": { - "admin": "true", - "company-master-data": "read" - } - }, - "post": { - "tags": [ - "Companies" - ], - "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" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Company" + "$ref": "#/components/schemas/AgentThreadResponseModel" } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -2157,40 +2257,47 @@ "v1" ], "x-access": { - "admin": "true", - "company-master-data": "write" + "any": "true" } } }, - "/companies/deletetags": { - "post": { + "/agents/threads/{threadId}/files/{fileId}": { + "get": { "tags": [ - "CompanyTags" + "Agent Thread Files" ], - "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": "Returns a file of the specified agent thread.", + "description": "The user must have `read` access to the agent thread.", + "operationId": "GetAgentsThreadsFilesByThreadIdAndFileId", + "parameters": [ + { + "name": "threadId", + "in": "path", + "description": "The agent thread id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "fileId", + "in": "path", + "description": "The file id.", + "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/FileInfo" } } } @@ -2204,42 +2311,13 @@ } } } - } - }, - "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", + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -2256,78 +2334,74 @@ "v1" ], "x-access": { - "admin": "true", - "company-master-data": "read" + "any": "true" } } }, - "/companies/tags": { + "/agents/threads/{threadId}/files/{fileId}/download": { "get": { "tags": [ - "CompanyTags" + "Agent Thread Files" ], - "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", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } - } - } + "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" } - } - }, - "security": [ + }, { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/companies/updatetags": { - "post": { - "tags": [ - "CompanyTags" - ], - "summary": "Updates a tag globally for all companies.", - "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", - "operationId": "PostCompaniesUpdateTags", - "requestBody": { - "description": "The model containing the tag updates.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TagUpdateForm" - } + "name": "fileId", + "in": "path", + "description": "The file id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" + { + "name": "width", + "in": "query", + "description": "The optional image width.", + "schema": { + "type": "number", + "format": "double" + } }, - "401": { - "description": "Unauthorized", + { + "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/ErrorResponse" + "type": "string", + "format": "binary" } } } @@ -2344,24 +2418,23 @@ "v1" ], "x-access": { - "admin": "true", - "company-master-data": "write" + "any": "true" } } }, - "/companies/{companyId}": { + "/agents/threads/{threadId}/messages": { "get": { "tags": [ - "Companies" + "AgentThreads" ], - "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": "Lists agent thread messages.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetAgentsThreadsMessagesByThreadId", "parameters": [ { - "name": "companyId", + "name": "threadId", "in": "path", - "description": "The id of the company.", + "description": "The thread id.", "required": true, "schema": { "type": "string", @@ -2375,7 +2448,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Company" + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentThreadMessageResponseModel" + } } } } @@ -2402,22 +2478,21 @@ "v1" ], "x-access": { - "admin": "true", - "company-master-data": "read" + "any": "true" } }, - "put": { + "post": { "tags": [ - "Companies" + "AgentThreads" ], - "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": "Submits a message to an agent conversation.", + "description": "Provide text, attachments, or both. The message starts processing or enters the thread's queue.\r\n The response confirms acceptance; it does not contain the agent's reply.\r\n Read GET /agents/threads/{threadId}/messages to retrieve replies.\r\n Each request submits a new message. Retrying after a lost response can submit the message again.\r\n Processing is subject to the workspace's AI availability and usage limits.\r\n The user must have permission to contribute to the thread.", + "operationId": "PostAgentsThreadsMessagesByThreadId", "parameters": [ { - "name": "companyId", + "name": "threadId", "in": "path", - "description": "The id of the company to update.", + "description": "The id of the thread to send the message in.", "required": true, "schema": { "type": "string", @@ -2426,11 +2501,11 @@ } ], "requestBody": { - "description": "The model with updated company data.", + "description": "The model with the content to send to the agent thread.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CompanyForm" + "$ref": "#/components/schemas/AgentThreadMessageRequestModel" } } }, @@ -2442,7 +2517,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Company" + "$ref": "#/components/schemas/AiThreadMessageAcceptedResponseModel" } } } @@ -2456,6 +2531,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": [ @@ -2469,24 +2564,33 @@ "v1" ], "x-access": { - "admin": "true", - "company-master-data": "write" + "any": "true" } } }, - "/companies/{companyId}/addtags": { - "post": { + "/agents/threads/{threadId}/messages/{messageId}/status": { + "get": { "tags": [ - "CompanyTags" + "AgentThreads" ], - "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": "Gets agent thread message status.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetAgentsThreadsMessagesStatusByThreadIdAndMessageId", "parameters": [ { - "name": "companyId", + "name": "threadId", "in": "path", - "description": "The id of the company to add tags to.", + "description": "The id of the thread that contains the message.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "messageId", + "in": "path", + "description": "The accepted message id returned by the server.", "required": true, "schema": { "type": "string", @@ -2494,46 +2598,19 @@ } } ], - "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", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/AiThreadMessageProcessingStatusResponseModel" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -2558,36 +2635,24 @@ } } }, - "/companies/{companyId}/contactinfo": { + "/agents/{agentId}": { "get": { "tags": [ - "Companies" + "Custom Agents" ], - "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", + "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": [ { - "name": "companyId", + "name": "agentId", "in": "path", - "description": "The id of the company.", + "description": "The agent id.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -2596,10 +2661,27 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ContactInfoForCompanies" - } + "$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" } } } @@ -2616,22 +2698,21 @@ "v1" ], "x-access": { - "admin": "true", - "company-master-data": "read" + "any": "true" } }, - "post": { + "put": { "tags": [ - "Companies" + "Custom Agents" ], - "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", + "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": [ { - "name": "companyId", + "name": "agentId", "in": "path", - "description": "The id of the company.", + "description": "The agent id.", "required": true, "schema": { "type": "string", @@ -2640,11 +2721,11 @@ } ], "requestBody": { - "description": "The contact info to create.", + "description": "The new agent configuration.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContactInfoForm" + "$ref": "#/components/schemas/UpdateAgentRequestModel" } } }, @@ -2656,7 +2737,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContactInfoForCompanies" + "$ref": "#/components/schemas/AgentSummaryResponseModel" } } } @@ -2670,6 +2751,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": [ @@ -2683,24 +2784,23 @@ "v1" ], "x-access": { - "admin": "true", - "company-master-data": "write" + "any": "true" } } }, - "/companies/{companyId}/contactinfo/{contactInfoId}": { + "/agents/{agentId}/connectors/{connectorId}": { "delete": { "tags": [ - "Companies" + "Custom Agents" ], - "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": "Unlinks a connector from an agent.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteConnectorsByConnectorIdAndAgentId", "parameters": [ { - "name": "companyId", + "name": "agentId", "in": "path", - "description": "The id of the company.", + "description": "The agent id.", "required": true, "schema": { "type": "string", @@ -2708,9 +2808,9 @@ } }, { - "name": "contactInfoId", + "name": "connectorId", "in": "path", - "description": "The id of the contact info.", + "description": "The connector id.", "required": true, "schema": { "type": "string", @@ -2722,8 +2822,8 @@ "204": { "description": "No Content" }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -2754,22 +2854,21 @@ "v1" ], "x-access": { - "admin": "true", - "company-master-data": "write" + "any": "true" } }, - "get": { + "post": { "tags": [ - "Companies" + "Custom Agents" ], - "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": "Links a connector to an agent.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostConnectorsByConnectorIdAndAgentId", "parameters": [ { - "name": "companyId", + "name": "agentId", "in": "path", - "description": "The id of the company.", + "description": "The agent id.", "required": true, "schema": { "type": "string", @@ -2777,26 +2876,14 @@ } }, { - "name": "contactInfoId", + "name": "connectorId", "in": "path", - "description": "The id of the contact info.", + "description": "The connector id.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -2805,13 +2892,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContactInfoForCompanies" + "$ref": "#/components/schemas/ConnectorResponseModel" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -2842,22 +2929,23 @@ "v1" ], "x-access": { - "admin": "true", - "company-master-data": "read" + "any": "true" } - }, - "put": { + } + }, + "/agents/{agentId}/files": { + "get": { "tags": [ - "Companies" + "AgentFiles" ], - "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": "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": "companyId", + "name": "agentId", "in": "path", - "description": "The id of the company.", + "description": "The id of the agent.", "required": true, "schema": { "type": "string", @@ -2865,54 +2953,28 @@ } }, { - "name": "contactInfoId", - "in": "path", - "description": "The id of the contact info.", - "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 updated contact info data.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ContactInfoForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContactInfoForCompanies" - } - } - } - }, - "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/FileInfo" + } } } } @@ -2929,24 +2991,23 @@ "v1" ], "x-access": { - "admin": "true", - "company-master-data": "write" + "any": "true" } } }, - "/companies/{companyId}/delete": { + "/agents/{agentId}/files/byuploadid": { "post": { "tags": [ - "Companies" + "FileUpload" ], - "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", + "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", @@ -2955,36 +3016,23 @@ } ], "requestBody": { - "description": "The model describing how to delete the company.", + "description": "The model describing the uploaded file metadata.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CompanyDeleteForm" + "$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" } } } @@ -3011,24 +3059,33 @@ "v1" ], "x-access": { - "admin": "true", - "company-master-data": "write" + "any": "true" } } }, - "/companies/{companyId}/deletetags": { - "post": { + "/agents/{agentId}/files/{fileId}": { + "delete": { "tags": [ - "CompanyTags" + "AgentFiles" ], - "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", + "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.", + "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", @@ -3036,46 +3093,9 @@ } } ], - "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", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -3093,19 +3113,19 @@ } } }, - "/companies/{companyId}/externalfiles": { + "/agents/{agentId}/setarchived": { "post": { "tags": [ - "CompanyFiles" + "Custom Agents" ], - "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": "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.", + "description": "The agent id.", "required": true, "schema": { "type": "string", @@ -3114,25 +3134,15 @@ } ], "requestBody": { - "description": "List of file forms.", + "description": "Whether to archive or unarchive the agent.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - }, - "application/*+json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } + "$ref": "#/components/schemas/SetAgentArchivedRequestModel" } } - } + }, + "required": true }, "responses": { "200": { @@ -3140,7 +3150,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/AgentSummaryResponseModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -3161,29 +3201,27 @@ } } }, - "/companies/{companyId}/files": { - "delete": { + "/apiusers": { + "get": { "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" - } - } + "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": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiUser" + } + } + } + } } }, "security": [ @@ -3197,50 +3235,27 @@ "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" - } - } + "ApiUsers" ], + "summary": "Creates an API user.", + "description": "Beware: API users will also be returned in the /users response when including\r\n archived users.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostApiUser", "requestBody": { + "description": "The model to create the API user.", "content": { - "multipart/form-data": { + "application/json": { "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } + "$ref": "#/components/schemas/ApiUserPostForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -3248,13 +3263,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ApiUser" } } } }, "400": { - "description": "Bad Request" + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -3268,23 +3300,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/companies/{companyId}/files/byurl": { - "post": { + "/apiusers/{apiUserId}": { + "delete": { "tags": [ - "CompanyFiles" + "ApiUsers" ], - "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", + "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", + "name": "apiUserId", "in": "path", - "description": "The id of the company the file is linked to.", + "description": "The id of the API user to delete.", "required": true, "schema": { "type": "string", @@ -3292,28 +3325,16 @@ } } ], - "requestBody": { - "description": "The url, name and description of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - } - } - }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -3330,33 +3351,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } - } - }, - "/companies/{companyId}/files/{fileId}": { - "delete": { + }, + "get": { "tags": [ - "CompanyFiles" + "ApiUsers" ], - "summary": "Deletes the company file with the specified id.", - "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCompanyFile", + "summary": "Returns the 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": "fileId", + "name": "apiUserId", "in": "path", - "description": "The id of the file.", + "description": "The id of the API user.", "required": true, "schema": { "type": "string", @@ -3365,8 +3375,25 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiUser" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -3380,31 +3407,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "read" } }, - "get": { + "put": { "tags": [ - "Company Files" + "ApiUsers" ], - "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": "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": "fileId", + "name": "apiUserId", "in": "path", - "description": "The id of the file.", + "description": "The id of the API user to update.", "required": true, "schema": { "type": "string", @@ -3412,19 +3430,30 @@ } } ], + "requestBody": { + "description": "The model to update the API user.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiUserForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ApiUser" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -3455,60 +3484,26 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } - }, - "put": { + } + }, + "/automations/catalog": { + "get": { "tags": [ - "CompanyFiles" - ], - "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": "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" - } - } + "Project Automations" ], - "requestBody": { - "description": "The model to update the file with the specified id.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - } - } - }, + "summary": "Returns all supported automation trigger and action types.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetAutomationsCatalog", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/AutomationCatalogModel" } } } @@ -3529,59 +3524,29 @@ } } }, - "/companies/{companyId}/files/{fileId}/changeentity": { - "post": { + "/autopilot/availablealerts": { + "get": { "tags": [ - "CompanyFiles" - ], - "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": "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" - } - } + "Autopilot" ], - "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" - } - } - } - }, + "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/FileInfo" - } + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + "behind_schedule", + "overdue" + ] } } } @@ -3601,29 +3566,19 @@ } } }, - "/companies/{companyId}/files/{fileId}/copy": { - "post": { + "/autopilot/{autopilotId}": { + "get": { "tags": [ - "CompanyFiles" + "Autopilot" ], - "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": "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", - "in": "path", - "description": "The id of the company.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "autopilotId", "in": "path", - "description": "The id of the file.", + "description": "The id of the autopilot.", "required": true, "schema": { "type": "string", @@ -3631,28 +3586,13 @@ } } ], - "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/Autopilot" } } } @@ -3673,70 +3613,24 @@ } } }, - "/companies/{companyId}/files/{fileId}/download": { + "/clientapplications": { "get": { "tags": [ - "CompanyFiles" - ], - "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": "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": "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" - } - } + "Client Applications" ], + "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": { - "type": "string", - "format": "binary" + "type": "array", + "items": { + "$ref": "#/components/schemas/ClientApplication" + } } } } @@ -3753,57 +3647,45 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "read" } - } - }, - "/companies/{companyId}/files/{fileId}/pdf": { - "get": { + }, + "post": { "tags": [ - "CompanyFiles" + "Client Applications" ], - "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": "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" + } } }, - { - "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/ClientApplicationCreateResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -3820,47 +3702,47 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/companies/{companyId}/files/{fileId}/shareurl": { - "get": { + "/clientapplications/register": { + "post": { "tags": [ - "CompanyFiles" + "Client Applications" ], - "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": "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" + } } }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], + "required": true + }, "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/DynamicClientRegistrationResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -3877,62 +3759,49 @@ "v1" ], "x-access": { - "any": "true" + "anonymous": "true" } } }, - "/companies/{companyId}/files/{fileId}/versions": { - "get": { + "/clientapplications/{clientId}": { + "delete": { "tags": [ - "CompanyFiles" + "Client Applications" ], - "summary": "Returns all file versions of the specified company file.", - "description": "Returns all file versions of the specified company file.\r\n\r\nAny authenticated user.", - "operationId": "GetCompanyFileVersions", + "summary": "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" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "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" } } } @@ -3949,74 +3818,48 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } }, - "post": { + "get": { "tags": [ - "CompanyFiles" + "Client Applications" ], - "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", + "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" } } ], - "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" + "$ref": "#/components/schemas/ClientApplication" } } } }, - "400": { - "description": "Bad Request" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -4030,63 +3873,52 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "read" } - } - }, - "/companies/{companyId}/files/{fileId}/versions/{versionId}": { - "get": { + }, + "put": { "tags": [ - "Company Files" + "Client Applications" ], - "summary": "Returns the company file version with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByCompanyNameAndCompanyIdAndFileIdAndVersionId", + "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", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "versionId", + "name": "clientId", "in": "path", - "description": "The id of the file version.", + "description": "The id of the client application.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], + "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/FileVersion" + "$ref": "#/components/schemas/ClientApplication" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -4117,58 +3949,68 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/companies/{companyId}/files/{fileId}/versions/{versionId}/download": { - "get": { + "/clientapplications/{clientId}/generateapikey": { + "post": { "tags": [ - "CompanyFiles" + "Client Applications" ], - "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": "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", + "name": "clientId", "in": "path", - "description": "The id of the company.", + "description": "The id of the client application.", "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" + "type": "string" } } ], + "requestBody": { + "description": "The model to generate an API key.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClientApplicationApiKeyForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$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" } } } @@ -4185,27 +4027,27 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "read" } } }, - "/companies/{companyId}/tags": { - "get": { + "/clientapplications/{clientId}/generatesecret": { + "post": { "tags": [ - "CompanyTags" + "Client Applications" ], - "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": "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", + "name": "clientId", "in": "path", - "description": "The id of the company.", + "description": "The id of the client application.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -4215,16 +4057,23 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "$ref": "#/components/schemas/ClientApplicationGeneratePasswordResponse" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -4245,27 +4094,31 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/customfielddefinitions": { + "/companies": { "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 all companies.", + "description": "\r\n\r\nThe user must be an admin or have `company-master-data:read` permissions.", + "operationId": "GetCompanies", "parameters": [ { - "name": "includeLinkedProjectIds", - "in": "query", - "description": "Whether to include linked project Ids in the response.", - "schema": { - "type": "boolean", - "default": false - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -4276,7 +4129,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptionsAndLinkedProjectIds" + "$ref": "#/components/schemas/Company" } } } @@ -4294,22 +4147,23 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "company-master-data": "read" } }, "post": { "tags": [ - "CustomFields" + "Companies" ], - "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", + "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 model containing the details for creating a new custom field definition.", + "description": "The company to create.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldDefinitionPostForm" + "$ref": "#/components/schemas/CompanyForm" } } }, @@ -4321,7 +4175,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" + "$ref": "#/components/schemas/Company" } } } @@ -4349,36 +4203,45 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "company-master-data": "write" } } }, - "/customfielddefinitions/{customFieldDefinitionId}": { - "delete": { + "/companies/deletetags": { + "post": { "tags": [ - "CustomFields" + "CompanyTags" ], - "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": "customFieldDefinitionId", - "in": "path", - "description": "The id of the custom field definition to delete.", - "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" + } } - } - ], + }, + "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": { @@ -4400,62 +4263,112 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "company-master-data": "write" } - }, - "put": { + } + }, + "/companies/industries": { + "get": { "tags": [ - "CustomFields" - ], - "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": "customFieldDefinitionId", - "in": "path", - "description": "The id of the custom field definition to update.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Companies" ], - "requestBody": { - "description": "The model to change the custom field definition.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomFieldDefinitionPutForm" - } - } - }, - "required": true - }, + "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": { - "$ref": "#/components/schemas/CustomFieldDefinition" + "type": "array", + "items": { + "type": "string" + } } } } - }, - "400": { - "description": "Bad Request", + } + }, + "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", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/companies/updatetags": { + "post": { + "tags": [ + "CompanyTags" + ], + "summary": "Updates a tag globally for all companies.", + "description": "\r\n\r\nThe user must be an admin or have `company-master-data:write` permissions.", + "operationId": "PostCompaniesUpdateTags", + "requestBody": { + "description": "The model containing the tag updates.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagUpdateForm" + } + } }, - "404": { - "description": "Not Found", + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -4477,23 +4390,23 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "company-master-data": "write" } } }, - "/customfielddefinitions/{customFieldDefinitionId}/selectionoptions": { - "post": { + "/companies/{companyId}": { + "get": { "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": "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": "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", @@ -4501,24 +4414,13 @@ } } ], - "requestBody": { - "description": "The model describing the selection option to create.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomFieldSelectionOptionsForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldSelectionOption" + "$ref": "#/components/schemas/Company" } } } @@ -4546,33 +4448,21 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "company-master-data": "read" } - } - }, - "/customfielddefinitions/{customFieldDefinitionId}/selectionoptions/{selectionOptionId}": { - "delete": { + }, + "put": { "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": "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": "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 to update.", "required": true, "schema": { "type": "string", @@ -4580,12 +4470,30 @@ } } ], + "requestBody": { + "description": "The model with updated company data.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CompanyForm" + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Company" + } + } + } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -4607,31 +4515,23 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "company-master-data": "write" } - }, - "put": { + } + }, + "/companies/{companyId}/addtags": { + "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": "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": "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 to add tags to.", "required": true, "schema": { "type": "string", @@ -4640,11 +4540,14 @@ } ], "requestBody": { - "description": "The model describing the updated selection option.", + "description": "The model containing the tags to be added.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldSelectionOptionsForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/TagForm" + } } } }, @@ -4656,13 +4559,26 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldSelectionOption" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -4683,27 +4599,27 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/documents": { + "/companies/{companyId}/contactinfo": { "get": { "tags": [ - "Documents" + "Companies" ], - "summary": "Returns all documents.", - "description": "The user must have at least `read` permissions to see a document.", - "operationId": "GetDocuments", + "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": "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" } }, { @@ -4727,7 +4643,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/DocumentModel" + "$ref": "#/components/schemas/ContactInfoForCompanies" } } } @@ -4745,24 +4661,39 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "company-master-data": "read" } }, "post": { "tags": [ - "Documents" + "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 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": { + "description": "The contact info to create.", "content": { - "multipart/form-data": { + "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentPostForm" + "$ref": "#/components/schemas/ContactInfoForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -4770,62 +4701,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentModel" + "$ref": "#/components/schemas/ContactInfoForCompanies" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/documents/trash/{documentId}/restore": { - "post": { - "tags": [ - "Documents" - ], - "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 restore.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "alsoRestoreChildren", - "in": "query", - "description": "Whether to also restore children documents.", - "schema": { - "type": "boolean", - "default": true - } - } - ], - "responses": { - "204": { - "description": "No Content" }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -4846,23 +4728,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "company-master-data": "write" } } }, - "/documents/{documentId}": { + "/companies/{companyId}/contactinfo/{contactInfoId}": { "delete": { "tags": [ - "Documents" + "Companies" ], - "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 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": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document to delete.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -4870,12 +4753,13 @@ } }, { - "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": "contactInfoId", + "in": "path", + "description": "The id of the contact info.", + "required": true, "schema": { - "type": "boolean", - "default": true + "type": "string", + "format": "uuid" } } ], @@ -4883,8 +4767,8 @@ "204": { "description": "No Content" }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -4915,26 +4799,49 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "company-master-data": "write" } }, "get": { "tags": [ - "Documents" + "Companies" ], - "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 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": "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": "contactInfoId", + "in": "path", + "description": "The id of the contact info.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -4943,13 +4850,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentModel" + "$ref": "#/components/schemas/ContactInfoForCompanies" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -4980,21 +4887,32 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "company-master-data": "read" } }, "put": { "tags": [ - "Documents" + "Companies" ], - "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 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": "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": "contactInfoId", + "in": "path", + "description": "The id of the contact info.", "required": true, "schema": { "type": "string", @@ -5003,11 +4921,11 @@ } ], "requestBody": { - "description": "The document form data with the updated information.", + "description": "The updated contact info data.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentForm" + "$ref": "#/components/schemas/ContactInfoForm" } } }, @@ -5019,7 +4937,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentModel" + "$ref": "#/components/schemas/ContactInfoForCompanies" } } } @@ -5034,16 +4952,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -5066,23 +4974,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "company-master-data": "write" } } }, - "/documents/{documentId}/comments": { - "delete": { + "/companies/{companyId}/delete": { + "post": { "tags": [ - "DocumentComments" + "Companies" ], - "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": "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": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -5090,10 +4999,31 @@ } } ], + "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": { @@ -5103,6 +5033,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -5116,54 +5056,52 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "company-master-data": "write" } - }, - "get": { + } + }, + "/companies/{companyId}/deletetags": { + "post": { "tags": [ - "DocumentComments" + "CompanyTags" ], - "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": "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": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document.", + "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" } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Comment" - } + "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": { @@ -5198,19 +5136,21 @@ "x-access": { "any": "true" } - }, + } + }, + "/companies/{companyId}/externalfiles": { "post": { "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": "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": "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", @@ -5219,15 +5159,25 @@ } ], "requestBody": { - "description": "The model to create the comment.", + "description": "List of file forms.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CommentForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" + } + } + }, + "application/*+json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" + } } } - }, - "required": true + } }, "responses": { "200": { @@ -5235,37 +5185,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -5286,29 +5206,19 @@ } } }, - "/documents/{documentId}/comments/{commentId}": { + "/companies/{companyId}/files": { "delete": { "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": "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": "documentId", - "in": "path", - "description": "The id of the document.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "commentId", + "name": "companyId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -5319,26 +5229,6 @@ "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": [ @@ -5355,28 +5245,18 @@ "any": "true" } }, - "get": { + "post": { "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": "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": "documentId", - "in": "path", - "description": "The id of the document.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "commentId", + "name": "companyId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -5384,26 +5264,42 @@ } } ], + "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/Comment" + "$ref": "#/components/schemas/FileInfo" } } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "400": { + "description": "Bad Request" } }, "security": [ @@ -5419,29 +5315,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/companies/{companyId}/files/byurl": { + "post": { "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": "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", - "in": "path", - "description": "The id of the document.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "commentId", + "name": "companyId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the company the file is linked to.", "required": true, "schema": { "type": "string", @@ -5450,15 +5338,19 @@ } ], "requestBody": { - "description": "The model with the updated comment information.", + "description": "The url, name and description of the file.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CommentPutForm" + "$ref": "#/components/schemas/FilePostForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FilePostForm" } } - }, - "required": true + } }, "responses": { "200": { @@ -5466,27 +5358,7 @@ "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" + "$ref": "#/components/schemas/FileInfo" } } } @@ -5507,19 +5379,19 @@ } } }, - "/documents/{documentId}/comments/{commentId}/react": { - "post": { + "/companies/{companyId}/files/{fileId}": { + "delete": { "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": "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.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -5527,9 +5399,9 @@ } }, { - "name": "commentId", + "name": "fileId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -5537,40 +5409,9 @@ } } ], - "requestBody": { - "description": "The model used to update the reactions of the comment with the specified id.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ReactionForm" - } - } - }, - "required": true - }, "responses": { "204": { "description": "No Content" - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -5586,21 +5427,19 @@ "x-access": { "any": "true" } - } - }, - "/documents/{documentId}/comments/{commentId}/setresolved": { - "post": { + }, + "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 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.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -5608,9 +5447,9 @@ } }, { - "name": "commentId", + "name": "fileId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -5618,24 +5457,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/FileInfo" } } } @@ -5674,21 +5502,19 @@ "x-access": { "any": "true" } - } - }, - "/documents/{documentId}/content": { - "get": { + }, + "put": { "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": "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.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -5696,64 +5522,38 @@ } }, { - "name": "streamAsFile", - "in": "query", - "description": "Whether to stream the content as a file. By default, the document's content is returned in a model containing a property `Content` holding the content as a string.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "format", - "in": "query", - "description": "The response format. Supported values are `html` and `markdown`.", + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, "schema": { "type": "string", - "default": "html" + "format": "uuid" } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "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" } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileInfoUpdateForm" } } - }, - "404": { - "description": "Not Found", + } + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -5772,19 +5572,31 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/companies/{companyId}/files/{fileId}/changeentity": { + "post": { "tags": [ - "Documents" + "CompanyFiles" ], - "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": "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 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", @@ -5793,10 +5605,16 @@ } ], "requestBody": { + "description": "The model to change the entity information of the file.", "content": { - "multipart/form-data": { + "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentContentForm" + "$ref": "#/components/schemas/FileEntityForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileEntityForm" } } } @@ -5807,17 +5625,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -5838,19 +5646,29 @@ } } }, - "/documents/{documentId}/contributors": { + "/companies/{companyId}/files/{fileId}/copy": { "post": { "tags": [ - "Documents" + "CompanyFiles" ], - "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": "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 to add contributors to.", + "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", @@ -5859,18 +5677,19 @@ } ], "requestBody": { - "description": "The model used to add the document contributors.", + "description": "The model to change the entity information of the file.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ContributorPostForm" - } + "$ref": "#/components/schemas/FileCopyForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileCopyForm" } } - }, - "required": true + } }, "responses": { "200": { @@ -5878,40 +5697,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MinimalContributorModel" - } - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -5932,19 +5718,19 @@ } } }, - "/documents/{documentId}/contributors/{documentContributorId}": { - "delete": { + "/companies/{companyId}/files/{fileId}/download": { + "get": { "tags": [ - "Documents" + "CompanyFiles" ], - "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": "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 delete the contributor from.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -5952,46 +5738,50 @@ } }, { - "name": "documentContributorId", + "name": "fileId", "in": "path", - "description": "The id of the document contributor to delete.", + "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" - } - } + { + "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" } } } @@ -6010,19 +5800,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/companies/{companyId}/files/{fileId}/pdf": { + "get": { "tags": [ - "Documents" + "CompanyFiles" ], - "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": "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 to update.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -6030,64 +5822,33 @@ } }, { - "name": "documentContributorId", + "name": "fileId", "in": "path", - "description": "The id of the document contributor to update.", + "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 + } } ], - "requestBody": { - "description": "The model used to update the document contributor's access.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ContributorForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalContributorModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "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" } } } @@ -6108,19 +5869,29 @@ } } }, - "/documents/{documentId}/duplicate": { - "post": { + "/companies/{companyId}/files/{fileId}/shareurl": { + "get": { "tags": [ - "Documents" + "CompanyFiles" ], - "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": "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 to duplicate.", + "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", @@ -6134,37 +5905,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" + "type": "string" } } } @@ -6185,125 +5926,29 @@ } } }, - "/documents/{documentId}/externalfiles": { - "post": { + "/companies/{companyId}/files/{fileId}/versions": { + "get": { "tags": [ - "DocumentFiles" + "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", + "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", - "in": "path", - "description": "The id of the document.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "List of file forms.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - }, - "application/*+json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/documents/{documentId}/files": { - "delete": { - "tags": [ - "DocumentFiles" - ], - "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": "documentId", + "name": "companyId", "in": "path", - "description": "The id of the document.", + "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" - } - }, - "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", + "name": "fileId", "in": "path", - "description": "The id of the document.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -6331,7 +5976,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/FileVersion" } } } @@ -6354,16 +5999,26 @@ }, "post": { "tags": [ - "DocumentFiles" + "CompanyFiles" ], - "summary": "Creates a new document file for the document with the specified id..", - "description": "Uploads a new document file for the document with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateDocumentFile", + "summary": "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", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -6400,7 +6055,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/FileVersion" } } } @@ -6424,44 +6079,63 @@ } } }, - "/documents/{documentId}/files/byuploadid": { - "post": { + "/companies/{companyId}/files/{fileId}/versions/{versionId}": { + "get": { "tags": [ - "FileUpload" + "Company Files" ], - "summary": "Creates a file from an upload id.", - "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file document from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", - "operationId": "PostUploadByUploadId", + "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 to attach the file to.", + "description": "The id of the company.", "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 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/FileInfo" + "$ref": "#/components/schemas/FileVersion" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -6492,48 +6166,54 @@ } } }, - "/documents/{documentId}/files/byurl": { - "post": { + "/companies/{companyId}/files/{fileId}/versions/{versionId}/download": { + "get": { "tags": [ - "DocumentFiles" + "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": "CreateDocumentFileByUrl", + "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 the file is linked to.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The url, name and description of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" - } + }, + { + "name": "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/FileInfo" + "type": "string", + "format": "binary" } } } @@ -6554,29 +6234,19 @@ } } }, - "/documents/{documentId}/files/{fileId}": { - "delete": { + "/companies/{companyId}/tags": { + "get": { "tags": [ - "DocumentFiles" + "CompanyTags" ], - "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": "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", - "in": "path", - "description": "The id of the document.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "companyId", "in": "path", - "description": "The id of the file.", + "description": "The id of the company.", "required": true, "schema": { "type": "string", @@ -6585,8 +6255,28 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -6602,33 +6292,24 @@ "x-access": { "any": "true" } - }, + } + }, + "/customfielddefinitions": { "get": { "tags": [ - "Document Files" + "CustomFields" ], - "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 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.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "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 } } ], @@ -6638,23 +6319,60 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptionsAndLinkedProjectIds" + } } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "CustomFields" + ], + "summary": "Creates a 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": { @@ -6675,31 +6393,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } - }, - "put": { + } + }, + "/customfielddefinitions/{customFieldDefinitionId}": { + "delete": { "tags": [ - "DocumentFiles" + "CustomFields" ], - "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": "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.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "customFieldDefinitionId", "in": "path", - "description": "The id of the file.", + "description": "The id of the custom field definition to delete.", "required": true, "schema": { "type": "string", @@ -6707,28 +6418,16 @@ } } ], - "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", + "204": { + "description": "No Content" + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -6745,33 +6444,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } - } - }, - "/documents/{documentId}/files/{fileId}/copy": { - "post": { + }, + "put": { "tags": [ - "DocumentFiles" + "CustomFields" ], - "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": "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.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "customFieldDefinitionId", "in": "path", - "description": "The id of the file.", + "description": "The id of the custom field definition to update.", "required": true, "schema": { "type": "string", @@ -6780,19 +6468,15 @@ } ], "requestBody": { - "description": "The model to change the entity information of the file.", + "description": "The model to change the custom field definition.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" + "$ref": "#/components/schemas/CustomFieldDefinitionPutForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -6800,7 +6484,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/CustomFieldDefinition" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -6817,33 +6521,93 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/documents/{documentId}/files/{fileId}/download": { - "get": { + "/customfielddefinitions/{customFieldDefinitionId}/selectionoptions": { + "post": { "tags": [ - "DocumentFiles" + "CustomFields" ], - "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": "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.", + "description": "The id of the custom field definition to add a selection option to.", "required": true, "schema": { "type": "string", "format": "uuid" } + } + ], + "requestBody": { + "description": "The model describing the selection option to create.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFieldSelectionOptionsForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFieldSelectionOption" + } + } + } }, + "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" + } + } + }, + "/customfielddefinitions/{customFieldDefinitionId}/selectionoptions/{selectionOptionId}": { + "delete": { + "tags": [ + "CustomFields" + ], + "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": "customFieldDefinitionId", "in": "path", - "description": "The id of the file.", + "description": "The id of the custom field definition containing the selection option.", "required": true, "schema": { "type": "string", @@ -6851,40 +6615,26 @@ } }, { - "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.", + "name": "selectionOptionId", + "in": "path", + "description": "The id of the selection option to delete.", + "required": true, "schema": { - "type": "boolean" + "type": "string", + "format": "uuid" } } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -6901,23 +6651,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } - } - }, - "/documents/{documentId}/files/{fileId}/shareurl": { - "get": { + }, + "put": { "tags": [ - "DocumentFiles" + "CustomFields" ], - "summary": "Returns an url to share the file.", - "description": "Returns a url to share the file.\r\n\r\nAny authenticated user.", - "operationId": "GetPublicToken", + "summary": "Updates a custom field selection option 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", @@ -6925,9 +6674,9 @@ } }, { - "name": "fileId", + "name": "selectionOptionId", "in": "path", - "description": "The id of the file.", + "description": "The id of the selection option to update.", "required": true, "schema": { "type": "string", @@ -6935,13 +6684,34 @@ } } ], + "requestBody": { + "description": "The model describing the updated selection option.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFieldSelectionOptionsForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/CustomFieldSelectionOption" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -6958,37 +6728,27 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/documents/{documentId}/files/{fileId}/versions": { + "/documents": { "get": { "tags": [ - "DocumentFiles" + "Documents" ], - "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": "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, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, + "name": "includeTrashedDocuments", + "in": "query", + "description": "Whether to include trashed documents in the result.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } }, { @@ -7012,7 +6772,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/DocumentModel" } } } @@ -7035,52 +6795,16 @@ }, "post": { "tags": [ - "DocumentFiles" - ], - "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": "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" - } - } + "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" } } } @@ -7091,13 +6815,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/DocumentModel" } } } - }, - "400": { - "description": "Bad Request" } }, "security": [ @@ -7115,19 +6836,19 @@ } } }, - "/documents/{documentId}/files/{fileId}/versions/{versionId}": { - "get": { + "/documents/trash/{documentId}/restore": { + "post": { "tags": [ - "Document Files" + "Documents" ], - "summary": "Returns the document file version with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByDocumentNameAndDocumentIdAndFileIdAndVersionId", + "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.", + "description": "The id of the document to restore.", "required": true, "schema": { "type": "string", @@ -7135,36 +6856,77 @@ } }, { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, + "name": "alsoRestoreChildren", + "in": "query", + "description": "Whether to also restore children documents.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": true } + } + ], + "responses": { + "204": { + "description": "No Content" }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ { - "name": "versionId", + "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 file version.", + "description": "The id of the document to delete.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "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": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileVersion" - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", @@ -7200,41 +6962,19 @@ "x-access": { "any": "true" } - } - }, - "/documents/{documentId}/files/{fileId}/versions/{versionId}/download": { + }, "get": { "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": "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.", - "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 retrieve.", "required": true, "schema": { "type": "string", @@ -7248,8 +6988,27 @@ "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/DocumentModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -7268,21 +7027,19 @@ "x-access": { "any": "true" } - } - }, - "/documents/{documentId}/teams": { - "post": { + }, + "put": { "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": "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.", + "description": "The id of the document to update.", "required": true, "schema": { "type": "string", @@ -7291,14 +7048,11 @@ } ], "requestBody": { - "description": "The model used to add document teams to the document.", + "description": "The document form data with the updated information.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityToTeamPostForm" - } + "$ref": "#/components/schemas/DocumentForm" } } }, @@ -7310,10 +7064,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MinimalEntityToTeamModel" - } + "$ref": "#/components/schemas/DocumentModel" } } } @@ -7364,29 +7115,19 @@ } } }, - "/documents/{documentId}/teams/{documentToTeamId}": { + "/documents/{documentId}/comments": { "delete": { "tags": [ - "Documents" + "DocumentComments" ], - "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 all comments of the specified document.", + "description": "Deletes all comments of the specified document.\r\n\r\nAny authenticated user.", + "operationId": "DeleteCommentsByDocumentNameAndDocumentId", "parameters": [ { "name": "documentId", "in": "path", - "description": "The id of the document to delete the team from.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "documentToTeamId", - "in": "path", - "description": "The id of the document to team connection.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -7398,16 +7139,6 @@ "204": { "description": "No Content" }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "401": { "description": "Unauthorized", "content": { @@ -7417,16 +7148,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -7443,13 +7164,13 @@ "any": "true" } }, - "put": { + "get": { "tags": [ - "Documents" + "DocumentComments" ], - "summary": "Updates the document team with the specified id.", - "description": "Updates the specific document team of a document. Updating a document team will affect their access to the document.\r\n There will be recalculation of permissions for related entities considering the updated document team.\r\n \r\n The user must have at least `write` permissions for this document.", - "operationId": "PutDocumentTeamByDocumentIdAndDocumentToTeamId", + "summary": "Returns 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", @@ -7462,34 +7183,28 @@ } }, { - "name": "documentToTeamId", - "in": "path", - "description": "The id of the document to team connection to update.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The model used to update document teams of a document.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EntityToTeamForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalEntityToTeamModel" + "type": "array", + "items": { + "$ref": "#/components/schemas/Comment" + } } } } @@ -7513,16 +7228,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -7538,72 +7243,32 @@ "x-access": { "any": "true" } - } - }, - "/documentspaces": { - "get": { - "tags": [ - "DocumentSpaces" + }, + "post": { + "tags": [ + "DocumentComments" ], - "summary": "Returns all document spaces.", - "description": "The user must have at least `read` permissions to see a document space.", - "operationId": "GetDocumentSpaces", + "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": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentSpaceModel" - } - } - } + "name": "documentId", + "in": "path", + "description": "The id of the document to create the comment for.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "DocumentSpaces" ], - "summary": "Creates a new document space.", - "description": "\r\n\r\nThe user must be an admin.", - "operationId": "PostDocumentSpace", "requestBody": { - "description": "The model used to create the document space.", + "description": "The model to create the comment.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentSpaceForm" + "$ref": "#/components/schemas/CommentForm" } } }, @@ -7615,7 +7280,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentSpaceModel" + "$ref": "#/components/schemas/Comment" } } } @@ -7639,6 +7304,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -7652,23 +7327,33 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/documentspaces/{documentSpaceId}": { + "/documents/{documentId}/comments/{commentId}": { "delete": { "tags": [ - "DocumentSpaces" + "DocumentComments" ], - "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": "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": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space to delete.", + "description": "The id of the document.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "commentId", + "in": "path", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -7712,21 +7397,31 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } }, "get": { "tags": [ - "DocumentSpaces" + "DocumentComments" ], - "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": "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": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space to retrieve.", + "description": "The id of the document.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "commentId", + "in": "path", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -7740,7 +7435,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentModel" + "$ref": "#/components/schemas/Comment" } } } @@ -7754,16 +7449,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -7782,16 +7467,26 @@ }, "put": { "tags": [ - "DocumentSpaces" + "DocumentComments" ], - "summary": "Updates the document space with the specified id.", - "description": "\r\n\r\nThe user must be an admin.", - "operationId": "PutDocumentSpaceById", + "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": "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": "commentId", + "in": "path", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -7800,11 +7495,11 @@ } ], "requestBody": { - "description": "The model used to update the document space.", + "description": "The model with the updated comment information.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentSpaceForm" + "$ref": "#/components/schemas/CommentPutForm" } } }, @@ -7816,7 +7511,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentSpaceModel" + "$ref": "#/components/schemas/Comment" } } } @@ -7853,23 +7548,33 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/documentspaces/{documentSpaceId}/contributors": { + "/documents/{documentId}/comments/{commentId}/react": { "post": { "tags": [ - "DocumentSpaces" + "DocumentComments" ], - "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": "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": "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": "commentId", + "in": "path", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -7878,39 +7583,19 @@ } ], "requestBody": { - "description": "The model with the list of contributors to add.", + "description": "The model used to update the reactions of the comment with the specified id.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ContributorPostForm" - } + "$ref": "#/components/schemas/ReactionForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MinimalContributorModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", @@ -7944,23 +7629,23 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/documentspaces/{documentSpaceId}/contributors/{documentSpaceContributorId}": { - "delete": { + "/documents/{documentId}/comments/{commentId}/setresolved": { + "post": { "tags": [ - "DocumentSpaces" + "DocumentComments" ], - "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": "Sets the resolved status of a comment.", + "description": "Sets the resolved status of a comment. Users need write permissions on the document to resolve/unresolve comments.\r\n Currently, the IsResolved property is only available for document comments.\r\n\r\nAny authenticated user.", + "operationId": "PostCommentSetResolvedByDocumentNameAndDocumentIdAndCommentId", "parameters": [ { - "name": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -7968,9 +7653,9 @@ } }, { - "name": "documentSpaceContributorId", + "name": "commentId", "in": "path", - "description": "The id of the document space contributor to delete.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -7978,16 +7663,24 @@ } } ], - "responses": { - "204": { - "description": "No Content" + "requestBody": { + "description": "The resolved status.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetResolvedForm" + } + } }, - "400": { - "description": "Bad Request", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Comment" } } } @@ -8024,21 +7717,23 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } - }, - "put": { + } + }, + "/documents/{documentId}/content": { + "get": { "tags": [ - "DocumentSpaces" + "Documents" ], - "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": "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": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -8046,38 +7741,38 @@ } }, { - "name": "documentSpaceContributorId", - "in": "path", - "description": "The id of the document space contributor.", - "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": "boolean", + "default": false + } + }, + { + "name": "format", + "in": "query", + "description": "The response format. Supported values are `html` and `markdown`.", "schema": { "type": "string", - "format": "uuid" + "default": "html" } } ], - "requestBody": { - "description": "The model with the updated contributor data.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ContributorForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalContributorModel" + "type": "string" } } } }, + "204": { + "description": "No Content" + }, "400": { "description": "Bad Request", "content": { @@ -8120,114 +7815,54 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } - } - }, - "/documentspaces/{documentSpaceId}/documents": { - "get": { + }, + "put": { "tags": [ "Documents" ], - "summary": "Returns all documents that belong to the document space with the specified id.", - "description": "The user must have at least `read` permissions for the specified document space.", - "operationId": "GetDocumentSpaceDocumentsByDocumentSpaceId", + "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": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space to retrieve documents from.", + "description": "The id of the document to update.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/DocumentContentForm" + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "$ref": "#/components/schemas/DocumentModel" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/documentspaces/{documentSpaceId}/documents/trash": { - "get": { - "tags": [ - "Documents" - ], - "summary": "Returns all deleted documents of the document space with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetDocumentSpaceDocumentsTrashByDocumentSpaceId", - "parameters": [ - { - "name": "documentSpaceId", - "in": "path", - "description": "The id of the document space to retrieve trashed documents from.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -8248,19 +7883,19 @@ } } }, - "/documentspaces/{documentSpaceId}/teams": { + "/documents/{documentId}/contributors": { "post": { "tags": [ - "DocumentSpaces" + "Documents" ], - "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": "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": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space.", + "description": "The id of the document to add contributors to.", "required": true, "schema": { "type": "string", @@ -8269,13 +7904,13 @@ } ], "requestBody": { - "description": "The model with the list of teams to add.", + "description": "The model used to add the document contributors.", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/EntityToTeamPostForm" + "$ref": "#/components/schemas/ContributorPostForm" } } } @@ -8288,7 +7923,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalEntityToTeamModel" + "type": "array", + "items": { + "$ref": "#/components/schemas/MinimalContributorModel" + } } } } @@ -8335,23 +7973,23 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/documentspaces/{documentSpaceId}/teams/{documentSpaceToTeamId}": { + "/documents/{documentId}/contributors/{documentContributorId}": { "delete": { "tags": [ - "DocumentSpaces" + "Documents" ], - "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": "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": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space.", + "description": "The id of the document to delete the contributor from.", "required": true, "schema": { "type": "string", @@ -8359,9 +7997,9 @@ } }, { - "name": "documentSpaceToTeamId", + "name": "documentContributorId", "in": "path", - "description": "The id of the document space to team connection.", + "description": "The id of the document contributor to delete.", "required": true, "schema": { "type": "string", @@ -8415,21 +8053,21 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } }, "put": { "tags": [ - "DocumentSpaces" + "Documents" ], - "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": "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": "documentSpaceId", + "name": "documentId", "in": "path", - "description": "The id of the document space.", + "description": "The id of the document to update.", "required": true, "schema": { "type": "string", @@ -8437,9 +8075,9 @@ } }, { - "name": "documentSpaceToTeamId", + "name": "documentContributorId", "in": "path", - "description": "The id of the document space to team connection.", + "description": "The id of the document contributor to update.", "required": true, "schema": { "type": "string", @@ -8448,11 +8086,11 @@ } ], "requestBody": { - "description": "The model with the updated team access.", + "description": "The model used to update the document contributor's access.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityToTeamForm" + "$ref": "#/components/schemas/ContributorForm" } } }, @@ -8464,7 +8102,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalEntityToTeamModel" + "$ref": "#/components/schemas/MinimalContributorModel" } } } @@ -8511,25 +8149,67 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/files/generateuploadurl": { + "/documents/{documentId}/duplicate": { "post": { "tags": [ - "FileUpload" + "Documents" + ], + "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": [ + { + "name": "documentId", + "in": "path", + "description": "The id of the document to duplicate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "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/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" } } } @@ -8550,27 +8230,19 @@ } } }, - "/files/images/{entityName}/{entityId}": { - "delete": { + "/documents/{documentId}/externalfiles": { + "post": { "tags": [ - "Images" + "DocumentFiles" ], - "summary": "Deletes the profile image of the entity with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "DeleteFilesImagesByEntityNameAndEntityId", + "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": "entityName", - "in": "path", - "required": true, - "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" - } - }, - { - "name": "entityId", + "name": "documentId", "in": "path", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -8578,26 +8250,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" } } } @@ -8616,27 +8296,59 @@ "x-access": { "any": "true" } - }, - "get": { + } + }, + "/documents/{documentId}/files": { + "delete": { "tags": [ - "Images" + "DocumentFiles" ], - "summary": "Returns the image of the entity with the specified id.", - "description": "\r\n\r\nAllows unauthenticated access.", - "operationId": "GetFilesImagesByEntityNameAndEntityId", + "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": "entityName", + "name": "documentId", "in": "path", + "description": "The id of the document.", "required": true, "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" + "type": "string", + "format": "uuid" } - }, + } + ], + "responses": { + "204": { + "description": "No Content" + } + }, + "security": [ { - "name": "entityId", + "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", @@ -8644,27 +8356,16 @@ } }, { - "name": "width", - "in": "query", - "schema": { - "type": "number", - "format": "double" - } + "$ref": "#/components/parameters/page" }, { - "name": "height", - "in": "query", - "schema": { - "type": "number", - "format": "double" - } + "$ref": "#/components/parameters/pageSize" }, { - "name": "crop", - "in": "query", - "schema": { - "type": "boolean" - } + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -8673,48 +8374,10 @@ "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" - } - } - } - }, - "304": { - "description": "Not Modified", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } } } } @@ -8731,29 +8394,21 @@ "v1" ], "x-access": { - "anonymous": "true" + "any": "true" } }, "post": { "tags": [ - "Images" + "DocumentFiles" ], - "summary": "Uploads a new profile image.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostFilesImagesByEntityNameAndEntityId", + "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": "entityName", - "in": "path", - "required": true, - "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" - } - }, - { - "name": "entityId", + "name": "documentId", "in": "path", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -8765,7 +8420,21 @@ "content": { "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/FileUploadModel" + "required": [ + "File" + ], + "type": "object", + "properties": { + "File": { + "type": "string", + "format": "binary" + } + } + }, + "encoding": { + "File": { + "style": "form" + } } } } @@ -8782,24 +8451,7 @@ } }, "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "description": "Bad Request" } }, "security": [ @@ -8817,27 +8469,19 @@ } } }, - "/files/images/{entityName}/{entityId}/byuploadid": { + "/documents/{documentId}/files/byuploadid": { "post": { "tags": [ - "Images" + "FileUpload" ], - "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": "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": "entityName", - "in": "path", - "required": true, - "schema": { - "pattern": "^[A-Za-z]*$", - "type": "string" - } - }, - { - "name": "entityId", + "name": "documentId", "in": "path", + "description": "The id of the document to attach the file to.", "required": true, "schema": { "type": "string", @@ -8846,6 +8490,7 @@ } ], "requestBody": { + "description": "The model describing the uploaded file metadata.", "content": { "application/json": { "schema": { @@ -8866,18 +8511,8 @@ } } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -8902,54 +8537,48 @@ } } }, - "/files/images/{entityType}": { - "get": { + "/documents/{documentId}/files/byurl": { + "post": { "tags": [ - "SharedFiles" + "DocumentFiles" ], - "summary": "Returns the public profile image.", - "description": "\r\n\r\nAllows unauthenticated access.", - "operationId": "GetFilesImagesByEntityType", + "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": "entityType", + "name": "documentId", "in": "path", - "description": "The entity type for which we are requesting the image.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "token", - "in": "query", - "description": "The token to allow access.", + "description": "The id of the document the file is linked to.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], - "responses": { - "200": { - "description": "OK" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "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" } } - }, - "404": { - "description": "Not Found", + } + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -8966,23 +8595,23 @@ "v1" ], "x-access": { - "anonymous": "true" + "any": "true" } } }, - "/files/{fileId}/download": { - "get": { + "/documents/{documentId}/files/{fileId}": { + "delete": { "tags": [ - "Files" + "DocumentFiles" ], - "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", + "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": "fileId", + "name": "documentId", "in": "path", - "description": "The id of the file.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -8990,61 +8619,19 @@ } }, { - "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.", + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -9060,21 +8647,19 @@ "x-access": { "any": "true" } - } - }, - "/files/{fileId}/pdf": { + }, "get": { "tags": [ - "Files" + "Document 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", + "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": "fileId", + "name": "documentId", "in": "path", - "description": "The id of the file.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -9082,12 +8667,13 @@ } }, { - "name": "inline", - "in": "query", - "description": "If inline is true, content-disposition header is inline, else it is attachment.", + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } } ], @@ -9097,8 +8683,27 @@ "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$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" } } } @@ -9117,50 +8722,130 @@ "x-access": { "any": "true" } - } - }, - "/filters": { - "get": { + }, + "put": { "tags": [ - "Filters" + "DocumentFiles" ], - "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": "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": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" + "name": "documentId", + "in": "path", + "description": "The id of the document.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, { - "$ref": "#/components/parameters/filterby" + "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/Filter" - } + "$ref": "#/components/schemas/FileInfo" } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/documents/{documentId}/files/{fileId}/copy": { + "post": { + "tags": [ + "DocumentFiles" + ], + "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": "documentId", + "in": "path", + "description": "The id of the document.", + "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" + } + } + ], + "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/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -9181,35 +8866,60 @@ } } }, - "/filters/{entityType}": { + "/documents/{documentId}/files/{fileId}/download": { "get": { "tags": [ - "Filters" + "DocumentFiles" ], - "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 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": "entityType", + "name": "documentId", "in": "path", - "description": "The entity type route value.", + "description": "The id of the document.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } }, { - "$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": { @@ -9218,20 +8928,8 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Filter" - } - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string", + "format": "binary" } } } @@ -9252,63 +8950,115 @@ } } }, - "/filters/{entityType}/evaluate": { - "post": { + "/documents/{documentId}/files/{fileId}/shareurl": { + "get": { "tags": [ - "Filters" + "DocumentFiles" ], - "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": "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": "entityType", + "name": "documentId", "in": "path", - "description": "The entity type name (tasks, projects, companies, users).", + "description": "The id of the document.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } ], - "requestBody": { - "description": "The filter application form containing the FilterDefinition to evaluate.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApplyFilterForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ObjectPagedResult" + "type": "string" } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/documents/{documentId}/files/{fileId}/versions": { + "get": { + "tags": [ + "DocumentFiles" + ], + "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": "documentId", + "in": "path", + "description": "The id of the document.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "404": { - "description": "Not Found", + { + "$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" + } } } } @@ -9327,21 +9077,29 @@ "x-access": { "any": "true" } - } - }, - "/filters/{filterId}/contributors": { + }, "post": { "tags": [ - "Filters" + "DocumentFiles" ], - "summary": "Adds explicit contributors to the specified filter.", - "description": "Adding filter contributors grants explicit access to the filter with the specified access levels.\r\n Existing explicit contributors are ignored and therefore not recreated.\r\n The filter creator cannot be added as an explicit contributor because ownership is handled implicitly.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "PostFilterContributorsByFilterId", + "summary": "Uploads a new version of the 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": "filterId", + "name": "documentId", "in": "path", - "description": "The filter that should receive explicit contributors.", + "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", @@ -9350,18 +9108,27 @@ } ], "requestBody": { - "description": "The contributor permissions to add.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ContributorPostForm" + "required": [ + "File" + ], + "type": "object", + "properties": { + "File": { + "type": "string", + "format": "binary" + } + } + }, + "encoding": { + "File": { + "style": "form" } } } - }, - "required": true + } }, "responses": { "200": { @@ -9369,43 +9136,13 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MinimalContributorModel" - } + "$ref": "#/components/schemas/FileVersion" } } } }, "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "description": "Bad Request" } }, "security": [ @@ -9423,19 +9160,19 @@ } } }, - "/filters/{filterId}/contributors/{filterContributorId}": { - "delete": { + "/documents/{documentId}/files/{fileId}/versions/{versionId}": { + "get": { "tags": [ - "Filters" + "Document Files" ], - "summary": "Removes an explicit contributor from the specified filter.", - "description": "Removing a filter contributor revokes that contributor's explicit access to the filter.\r\n The contributor entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "DeleteFilterContributorByFilterIdAndFilterContributorId", + "summary": "Returns the document file version with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByDocumentNameAndDocumentIdAndFileIdAndVersionId", "parameters": [ { - "name": "filterId", + "name": "documentId", "in": "path", - "description": "The filter that owns the contributor entry.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -9443,9 +9180,19 @@ } }, { - "name": "filterContributorId", + "name": "fileId", "in": "path", - "description": "The contributor entry to delete.", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "versionId", + "in": "path", + "description": "The id of the file version.", "required": true, "schema": { "type": "string", @@ -9454,8 +9201,15 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileVersion" + } + } + } }, "401": { "description": "Unauthorized", @@ -9491,19 +9245,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/documents/{documentId}/files/{fileId}/versions/{versionId}/download": { + "get": { "tags": [ - "Filters" + "DocumentFiles" ], - "summary": "Updates the access level of an explicit filter contributor.", - "description": "Updating a filter contributor changes that contributor's explicit access level for the filter.\r\n The contributor entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "PutFilterContributorByFilterIdAndFilterContributorId", + "summary": "Returns the content of the 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": "filterId", + "name": "documentId", "in": "path", - "description": "The filter that owns the contributor entry.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -9511,9 +9267,19 @@ } }, { - "name": "filterContributorId", + "name": "fileId", "in": "path", - "description": "The contributor entry to update.", + "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", @@ -9521,54 +9287,14 @@ } } ], - "requestBody": { - "description": "The new contributor permission payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ContributorForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MinimalContributorModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "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" } } } @@ -9589,19 +9315,19 @@ } } }, - "/filters/{filterId}/teams": { + "/documents/{documentId}/teams": { "post": { "tags": [ - "Filters" + "Documents" ], - "summary": "Adds explicit team permissions to the specified filter.", - "description": "Adding filter teams grants explicit access to the filter for all members of the specified teams.\r\n Existing explicit team permissions are ignored and therefore not recreated.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "PostFilterTeamsByFilterId", + "summary": "Adds 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": "filterId", + "name": "documentId", "in": "path", - "description": "The filter that should receive explicit team permissions.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -9610,7 +9336,7 @@ } ], "requestBody": { - "description": "The team permissions to add.", + "description": "The model used to add document teams to the document.", "content": { "application/json": { "schema": { @@ -9683,19 +9409,19 @@ } } }, - "/filters/{filterId}/teams/{filterToTeamId}": { + "/documents/{documentId}/teams/{documentToTeamId}": { "delete": { "tags": [ - "Filters" + "Documents" ], - "summary": "Removes an explicit team permission from the specified filter.", - "description": "Removing a filter team permission revokes that team's explicit access to the filter.\r\n The team permission entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "DeleteFilterTeamByFilterIdAndFilterToTeamId", + "summary": "Deletes 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": "filterId", + "name": "documentId", "in": "path", - "description": "The filter that owns the team permission entry.", + "description": "The id of the document to delete the team from.", "required": true, "schema": { "type": "string", @@ -9703,9 +9429,9 @@ } }, { - "name": "filterToTeamId", + "name": "documentToTeamId", "in": "path", - "description": "The team permission entry to delete.", + "description": "The id of the document to team connection.", "required": true, "schema": { "type": "string", @@ -9717,6 +9443,16 @@ "204": { "description": "No Content" }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "401": { "description": "Unauthorized", "content": { @@ -9754,16 +9490,16 @@ }, "put": { "tags": [ - "Filters" + "Documents" ], - "summary": "Updates the access level of an explicit team permission on the specified filter.", - "description": "Updating a filter team permission changes the explicit access level of the referenced team for the filter.\r\n The team permission entry must belong to the specified filter.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", - "operationId": "PutFilterTeamByFilterIdAndFilterToTeamId", + "summary": "Updates 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": "filterId", + "name": "documentId", "in": "path", - "description": "The filter that owns the team permission entry.", + "description": "The id of the document.", "required": true, "schema": { "type": "string", @@ -9771,9 +9507,9 @@ } }, { - "name": "filterToTeamId", + "name": "documentToTeamId", "in": "path", - "description": "The team permission entry to update.", + "description": "The id of the document to team connection to update.", "required": true, "schema": { "type": "string", @@ -9782,7 +9518,7 @@ } ], "requestBody": { - "description": "The new team permission payload.", + "description": "The model used to update document teams of a document.", "content": { "application/json": { "schema": { @@ -9849,21 +9585,38 @@ } } }, - "/invitations": { + "/documentspaces": { "get": { "tags": [ - "Invitations" + "DocumentSpaces" + ], + "summary": "Returns all document spaces.", + "description": "The user must have at least `read` permissions to see a document space.", + "operationId": "GetDocumentSpaces", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } ], - "summary": "Prevents GET requests to the invitations route from throwing errors.", - "description": "\r\n\r\nAllows unauthenticated access.", - "operationId": "GetInvitations", "responses": { - "404": { - "description": "Not Found", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentSpaceModel" + } } } } @@ -9880,70 +9633,50 @@ "v1" ], "x-access": { - "anonymous": "true" + "any": "true" } - } - }, - "/invitations/accept": { + }, "post": { "tags": [ - "Invitations" + "DocumentSpaces" ], - "summary": "Accepts the invitation with the invitation code.", - "operationId": "Accept", + "summary": "Creates a new document space.", + "description": "\r\n\r\nThe user must be an admin.", + "operationId": "PostDocumentSpace", "requestBody": { - "description": "The invitation code received when creating the invitation.", + "description": "The model used to create the document space.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AcceptInvitation" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/AcceptInvitation" + "$ref": "#/components/schemas/DocumentSpaceForm" } } - } - }, - "responses": { - "200": { - "description": "OK" - } + }, + "required": true }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ] - } - }, - "/me": { - "get": { - "tags": [ - "Users" - ], - "summary": "Returns the currently logged-in user and workspace.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMe", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserAndWorkspace" + "$ref": "#/components/schemas/DocumentSpaceModel" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -9964,42 +9697,50 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/me/allavailabletasks": { - "get": { + "/documentspaces/{documentSpaceId}": { + "delete": { "tags": [ - "AssignedTasks" + "DocumentSpaces" ], - "summary": "Returns all tasks the current user is allowed to see.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMeAllAvailableTasks", + "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/TaskModel" - } + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -10016,57 +9757,26 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } - } - }, - "/me/assignedtasks": { + }, "get": { "tags": [ - "AssignedTasks" + "DocumentSpaces" ], - "summary": "Returns all tasks assigned to the current user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMeAssignedTasks", + "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": "inProgress", - "in": "query", - "description": "Whether to return only assigned project tasks of running projects. Defaults to true.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "assignedOnFrom", - "in": "query", - "description": "The start date for filtering by assignment date. If set, tasks are returned only when the assignment date is greater or equal than this value.", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "assignedOnTo", - "in": "query", - "description": "The end date for filtering by assignment date. If set, tasks are returned only when the assignment date is less or equal than this value.", + "name": "documentSpaceId", + "in": "path", + "description": "The id of the document space to retrieve.", + "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" } ], "responses": { @@ -10075,16 +9785,23 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } + "$ref": "#/components/schemas/DocumentModel" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -10107,21 +9824,19 @@ "x-access": { "any": "true" } - } - }, - "/me/assignedtasks/{taskId}": { - "get": { + }, + "put": { "tags": [ - "AssignedTasks" + "DocumentSpaces" ], - "summary": "Returns the assigned task with the specified id of the current user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMeAssignedTaskByTaskId", + "summary": "Updates the document space with the specified id.", + "description": "\r\n\r\nThe user must be an admin.", + "operationId": "PutDocumentSpaceById", "parameters": [ { - "name": "taskId", + "name": "documentSpaceId", "in": "path", - "description": "The id of the task to return.", + "description": "The id of the document space.", "required": true, "schema": { "type": "string", @@ -10129,13 +9844,34 @@ } } ], + "requestBody": { + "description": "The model used to update the document space.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentSpaceForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskModel" + "$ref": "#/components/schemas/DocumentSpaceModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -10162,91 +9898,71 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/me/dashboards": { - "get": { + "/documentspaces/{documentSpaceId}/contributors": { + "post": { "tags": [ - "Dashboards" + "DocumentSpaces" ], - "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", + "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": "includeWidgets", - "in": "query", - "description": "Include widgets.", + "name": "documentSpaceId", + "in": "path", + "description": "The id of the document space.", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } } ], + "requestBody": { + "description": "The model with the list of contributors to add.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContributorPostForm" + } + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Dashboard" - } + "$ref": "#/components/schemas/MinimalContributorModel" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "owner": "true" - } - } - }, - "/me/filters": { - "get": { - "tags": [ - "Filters" - ], - "summary": "Returns the filters created by the current user.", - "description": "Returns filters that were created by and are owned by the requesting user.\r\n Shared filters are excluded, even if the requesting user also has explicit access through contributor, team, or workspace permissions.\r\n\r\nAny authenticated user.", - "operationId": "GetMeFilters", - "parameters": [ - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" }, - { - "$ref": "#/components/parameters/orderby" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Filter" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -10273,51 +9989,60 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/me/filters/{entityType}": { - "get": { + "/documentspaces/{documentSpaceId}/contributors/{documentSpaceContributorId}": { + "delete": { "tags": [ - "Filters" + "DocumentSpaces" ], - "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": "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": "entityType", + "name": "documentSpaceId", "in": "path", - "description": "The entity type route value.", + "description": "The id of the document space.", "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" + "name": "documentSpaceContributorId", + "in": "path", + "description": "The id of the document space contributor to delete.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Filter" - } + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -10344,33 +10069,44 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } }, - "post": { + "put": { "tags": [ - "Filters" + "DocumentSpaces" ], - "summary": "Creates a persisted filter definition for the specified user type.", - "description": "Creates a new filter owned by the current user.\r\n\r\nAny authenticated user.", - "operationId": "PostMeFilterByUserType", + "summary": "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": "entityType", + "name": "documentSpaceId", "in": "path", - "description": "Route segment identifying the entity type (tasks, projects, companies, users).", + "description": "The id of the document space.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" + } + }, + { + "name": "documentSpaceContributorId", + "in": "path", + "description": "The id of the document space contributor.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } ], "requestBody": { - "description": "The filter definition payload supplied by the caller.", + "description": "The model with the updated contributor data.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FilterForm" + "$ref": "#/components/schemas/ContributorForm" } } }, @@ -10382,7 +10118,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Filter" + "$ref": "#/components/schemas/MinimalContributorModel" } } } @@ -10397,6 +10133,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -10419,67 +10165,52 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/me/filters/{entityType}/fromquery": { - "post": { + "/documentspaces/{documentSpaceId}/documents": { + "get": { "tags": [ - "Filters" + "Documents" ], - "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": "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": "entityType", + "name": "documentSpaceId", "in": "path", - "description": "Route segment identifying the entity type (tasks, projects, companies, users).", + "description": "The id of the document space to retrieve documents from.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The filter query payload containing the filter name, sharing settings, and query string.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FilterFromQueryForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Filter" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentModel" + } } } } @@ -10500,82 +10231,36 @@ } } }, - "/me/filters/{filterId}": { - "delete": { + "/documentspaces/{documentSpaceId}/documents/trash": { + "get": { "tags": [ - "Filters" + "Documents" ], - "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 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": "Identifier of the filter to delete.", + "description": "The id of the document space to retrieve trashed documents from.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "responses": { - "204": { - "description": "No Content" }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + { + "$ref": "#/components/parameters/page" }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "get": { - "tags": [ - "Filters" - ], - "summary": "Returns a single filter by its identifier for the current user.", - "description": "Returns the filter if the current user has read access.\r\n\r\nAny authenticated user.", - "operationId": "GetMeFilterById", - "parameters": [ + "$ref": "#/components/parameters/pageSize" + }, { - "name": "filterId", - "in": "path", - "description": "The filter identifier.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -10584,27 +10269,10 @@ "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": "array", + "items": { + "$ref": "#/components/schemas/DocumentModel" + } } } } @@ -10623,19 +10291,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/documentspaces/{documentSpaceId}/teams": { + "post": { "tags": [ - "Filters" + "DocumentSpaces" ], - "summary": "Updates an existing filter definition.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PutMeFilterById", + "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", + "name": "documentSpaceId", "in": "path", - "description": "Identifier of the filter to update.", + "description": "The id of the document space.", "required": true, "schema": { "type": "string", @@ -10644,11 +10314,14 @@ } ], "requestBody": { - "description": "The updated filter definition supplied by the caller.", + "description": "The model with the list of teams to add.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FilterForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityToTeamPostForm" + } } } }, @@ -10660,7 +10333,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Filter" + "$ref": "#/components/schemas/MinimalEntityToTeamModel" } } } @@ -10707,23 +10380,33 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/me/filters/{filterId}/copy": { - "post": { + "/documentspaces/{documentSpaceId}/teams/{documentSpaceToTeamId}": { + "delete": { "tags": [ - "Filters" + "DocumentSpaces" ], - "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": "Deletes the team with the specified id from a document space.", + "description": "Deletes the specified team from a document space.\r\n Deleting a team from a document space will affect their access to the document space and the documents within that space.\r\n\r\nThe user must be an admin.", + "operationId": "DeleteDocumentSpaceTeamByDocumentSpaceIdAndDocumentSpaceToTeamId", "parameters": [ { - "name": "filterId", + "name": "documentSpaceId", "in": "path", - "description": "The identifier of the filter to copy.", + "description": "The id of the document space.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "documentSpaceToTeamId", + "in": "path", + "description": "The id of the document space to team connection.", "required": true, "schema": { "type": "string", @@ -10732,15 +10415,8 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Filter" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -10784,23 +10460,21 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } - } - }, - "/me/filters/{filterId}/{entityType}": { - "get": { + }, + "put": { "tags": [ - "Filters" + "DocumentSpaces" ], - "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": "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": "filterId", + "name": "documentSpaceId", "in": "path", - "description": "The identifier of the filter to evaluate.", + "description": "The id of the document space.", "required": true, "schema": { "type": "string", @@ -10808,22 +10482,34 @@ } }, { - "name": "entityType", + "name": "documentSpaceToTeamId", "in": "path", - "description": "The entity type name (tasks, projects, companies, users).", + "description": "The id of the document space to team connection.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], + "requestBody": { + "description": "The model with the updated team access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityToTeamForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ObjectPagedResult" + "$ref": "#/components/schemas/MinimalEntityToTeamModel" } } } @@ -10870,62 +10556,25 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/me/otherprivatetasks": { - "get": { + "/files/generateuploadurl": { + "post": { "tags": [ - "PrivateTasks" - ], - "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": [ - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } + "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/TaskModel" - } - } - } - } - }, - "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/GenerateUploadUrlResponseModel" } } } @@ -10946,19 +10595,27 @@ } } }, - "/me/otherprivatetasks/{taskId}": { - "get": { + "/files/images/{entityName}/{entityId}": { + "delete": { "tags": [ - "PrivateTasks" + "Images" ], - "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": "Deletes the profile image of the entity with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteFilesImagesByEntityNameAndEntityId", "parameters": [ { - "name": "taskId", + "name": "entityName", + "in": "path", + "required": true, + "schema": { + "pattern": "^[A-Za-z]*$", + "type": "string" + } + }, + { + "name": "entityId", "in": "path", - "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -10967,15 +10624,8 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskModel" - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", @@ -11011,35 +10661,55 @@ "x-access": { "any": "true" } - } - }, - "/me/otherprivatetasks/{taskId}/checklistitems": { + }, "get": { "tags": [ - "ChecklistItems" + "Images" ], - "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": "Returns the image of the entity with the specified id.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "GetFilesImagesByEntityNameAndEntityId", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", + "name": "entityName", + "in": "path", + "required": true, "schema": { - "type": "string", - "format": "uuid" + "pattern": "^[A-Za-z]*$", + "type": "string" } }, { - "name": "taskId", + "name": "entityId", "in": "path", - "description": "The id of the task.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "width", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "height", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "crop", + "in": "query", + "schema": { + "type": "boolean" + } } ], "responses": { @@ -11048,10 +10718,28 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChecklistItem" - } + "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" } } } @@ -11088,42 +10776,29 @@ "v1" ], "x-access": { - "any": "true" + "anonymous": "true" } - } - }, - "/me/otherprivatetasks/{taskId}/checklistitems/{checklistItemId}": { - "get": { + }, + "post": { "tags": [ - "ChecklistItems" + "Images" ], - "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": "Uploads a new profile image.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostFilesImagesByEntityNameAndEntityId", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskId", + "name": "entityName", "in": "path", - "description": "The id of the task.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "pattern": "^[A-Za-z]*$", + "type": "string" } }, { - "name": "checklistItemId", + "name": "entityId", "in": "path", - "description": "The id of the checklist item.", "required": true, "schema": { "type": "string", @@ -11131,19 +10806,28 @@ } } ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/FileUploadModel" + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItem" + "$ref": "#/components/schemas/FileInfo" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -11152,8 +10836,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -11178,23 +10862,53 @@ } } }, - "/me/permissions": { - "get": { + "/files/images/{entityName}/{entityId}/byuploadid": { + "post": { "tags": [ - "Permissions" + "Images" ], - "summary": "Returns the permissions of the currently logged-in user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMePermissions", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserPermissionInfoExternal" - } - } + "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": "entityName", + "in": "path", + "required": true, + "schema": { + "pattern": "^[A-Za-z]*$", + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadByUploadIdForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } } }, "400": { @@ -11206,55 +10920,13 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/me/privatedocuments": { - "get": { - "tags": [ - "Documents" - ], - "summary": "Returns the requesting user's private documents.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMePrivateDocuments", - "parameters": [ - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -11275,38 +10947,54 @@ } } }, - "/me/privatedocuments/trash": { + "/files/images/{entityType}": { "get": { "tags": [ - "Documents" + "SharedFiles" ], - "summary": "Returns the requesting user's private trashed documents.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMePrivateDocumentsTrash", + "summary": "Returns the public profile image.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "GetFilesImagesByEntityType", "parameters": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" + "name": "entityType", + "in": "path", + "description": "The entity type for which we are requesting the image.", + "required": true, + "schema": { + "type": "string" + } }, { - "$ref": "#/components/parameters/filterby" + "name": "token", + "in": "query", + "description": "The token to allow access.", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "OK", + "description": "OK" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DocumentModel" - } + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -11323,30 +11011,72 @@ "v1" ], "x-access": { - "any": "true" + "anonymous": "true" } } }, - "/me/privatetasks": { + "/files/{fileId}/download": { "get": { "tags": [ - "PrivateTasks" + "Files" ], - "summary": "Returns all private tasks of the current user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMePrivateTasks", + "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": [ { - "$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" + } + }, + { + "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": { @@ -11355,33 +11085,25 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } + "type": "string", + "format": "binary" } } } }, - "401": { - "description": "Unauthorized", + "206": { + "description": "Partial Content", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string", + "format": "binary" } } } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "416": { + "description": "Range Not Satisfiable" } }, "security": [ @@ -11399,45 +11121,43 @@ } } }, - "/me/privatetasks/deletetags": { - "post": { + "/files/{fileId}/pdf": { + "get": { "tags": [ - "TaskTags" + "Files" ], - "summary": "Removes a tag from all private tasks.", - "description": "Removes a tag from all private tasks of the current user.\r\n\r\nAny authenticated user.", - "operationId": "PostMePrivateTasksDeleteTags", - "requestBody": { - "description": "The model to remove the tag from all private tasks.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteTagForm" - } + "summary": "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" } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "inline", + "in": "query", + "description": "If inline is true, content-disposition header is inline, else it is attachment.", + "schema": { + "type": "boolean", + "default": false } - }, - "401": { - "description": "Unauthorized", + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string", + "format": "binary" } } } @@ -11458,14 +11178,28 @@ } } }, - "/me/privatetasks/tags": { + "/filters": { "get": { "tags": [ - "TaskTags" + "Filters" + ], + "summary": "Returns the current user's filters.", + "description": "Returns the union of filters owned by the requesting user and filters explicitly shared with the requesting user.\r\n Use the specialized created-by-me and shared-with-me endpoints when only one category is needed.\r\n\r\nAny authenticated user.", + "operationId": "GetFilters", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } ], - "summary": "Returns all tags of the private tasks of the current user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMePrivateTasksTags", "responses": { "200": { "description": "OK", @@ -11474,11 +11208,21 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/BaseTagModelWithCount" + "$ref": "#/components/schemas/Filter" } } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -11496,22 +11240,22 @@ } } }, - "/me/privatetasks/taskstatuses": { + "/filters/{entityType}": { "get": { "tags": [ - "PrivateTasks" + "Filters" ], - "summary": "Returns the task statuses for private tasks for the specified user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMyPrivateTaskStatuses", + "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": "userId", - "in": "query", - "description": "The id of the user.", + "name": "entityType", + "in": "path", + "description": "The entity type route value.", + "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } }, { @@ -11535,11 +11279,21 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TaskStatus" + "$ref": "#/components/schemas/Filter" } } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -11557,31 +11311,46 @@ } } }, - "/me/privatetasks/updatetags": { + "/filters/{entityType}/evaluate": { "post": { "tags": [ - "TaskTags" + "Filters" + ], + "summary": "Evaluates a filter definition against the specified user type and returns the filtered results without saving the filter.\n This endpoint is designed for quick filters where the frontend builds a FilterDefinition dynamically\n and needs to evaluate it immediately without persisting it to the database.\n Supports standard paging, ordering, and additional query constraints from query parameters.", + "description": "Evaluates an ad-hoc filter without persisting it. Useful for testing filters before saving or for temporary filtering needs.\r\n\r\nAny authenticated user.", + "operationId": "PostFilterEvaluateByUserType", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "The entity type name (tasks, projects, companies, users).", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "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.", + "description": "The filter application form containing the FilterDefinition to evaluate.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TagUpdateForm" + "$ref": "#/components/schemas/ApplyFilterForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "207": { - "description": "Multi-Status" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ObjectPagedResult" + } + } + } }, "400": { "description": "Bad Request", @@ -11592,6 +11361,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -11609,19 +11388,19 @@ } } }, - "/me/privatetasks/{taskId}": { - "get": { + "/filters/{filterId}/contributors": { + "post": { "tags": [ - "PrivateTasks" + "Filters" ], - "summary": "Returns the private task with the specified id for the current user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetMePrivateTaskByTaskId", + "summary": "Adds explicit contributors to the specified filter.", + "description": "Adding filter contributors grants explicit access to the filter with the specified access levels.\r\n Existing explicit contributors are ignored and therefore not recreated.\r\n The filter creator cannot be added as an explicit contributor because ownership is handled implicitly.\r\n \r\n The user must have at least `manage` permissions for the specified filter.", + "operationId": "PostFilterContributorsByFilterId", "parameters": [ { - "name": "taskId", + "name": "filterId", "in": "path", - "description": "The id of the task.", + "description": "The filter that should receive explicit contributors.", "required": true, "schema": { "type": "string", @@ -11629,13 +11408,40 @@ } } ], + "requestBody": { + "description": "The contributor permissions to add.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContributorPostForm" + } + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskModel" + "type": "array", + "items": { + "$ref": "#/components/schemas/MinimalContributorModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -11676,28 +11482,29 @@ } } }, - "/me/privatetasks/{taskId}/checklistitems": { - "get": { + "/filters/{filterId}/contributors/{filterContributorId}": { + "delete": { "tags": [ - "ChecklistItems" + "Filters" ], - "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": "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": "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 delete.", "required": true, "schema": { "type": "string", @@ -11706,18 +11513,8 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChecklistItem" - } - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", @@ -11753,40 +11550,29 @@ "x-access": { "any": "true" } - } - }, - "/me/privatetasks/{taskId}/checklistitems/{checklistItemId}": { - "get": { + }, + "put": { "tags": [ - "ChecklistItems" + "Filters" ], - "summary": "Retrieves a checklist item from a private task.", - "description": "The user must be assigned to the task.", - "operationId": "GetMyPrivateTaskChecklistItemByUserIdAndTaskIdAndChecklistItemId", + "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.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "checklistItemId", - "in": "path", - "description": "The id of the checklist item to retrieve.", + "description": "The contributor entry to update.", "required": true, "schema": { "type": "string", @@ -11794,13 +11580,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": { - "$ref": "#/components/schemas/ChecklistItem" + "$ref": "#/components/schemas/MinimalContributorModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -11841,28 +11648,40 @@ } } }, - "/me/projecttasks": { - "get": { + "/filters/{filterId}/teams": { + "post": { "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": "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": [ { - "$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 team permissions.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], + "requestBody": { + "description": "The team permissions to add.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityToTeamPostForm" + } + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", @@ -11871,11 +11690,41 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TaskModel" + "$ref": "#/components/schemas/MinimalEntityToTeamModel" } } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -11893,38 +11742,56 @@ } } }, - "/me/shareddocuments": { - "get": { + "/filters/{filterId}/teams/{filterToTeamId}": { + "delete": { "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": "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": [ { - "$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 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/DocumentModel" - } + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -11943,40 +11810,74 @@ "x-access": { "any": "true" } - } - }, - "/me/sharedfilters": { - "get": { + }, + "put": { "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": "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/Filter" - } + "$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" } } } @@ -12007,47 +11908,95 @@ } } }, - "/me/sharedfilters/{entityType}": { + "/invitations": { "get": { "tags": [ - "Filters" + "Invitations" ], - "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" + "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" + } + } } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, + } + }, + "security": [ { - "$ref": "#/components/parameters/orderby" - }, + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "anonymous": "true" + } + } + }, + "/invitations/accept": { + "post": { + "tags": [ + "Invitations" + ], + "summary": "Accepts the invitation with the invitation code.", + "operationId": "Accept", + "requestBody": { + "description": "The invitation code received when creating the invitation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AcceptInvitation" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/AcceptInvitation" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + }, + "security": [ { - "$ref": "#/components/parameters/filterby" + "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": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Filter" - } + "$ref": "#/components/schemas/UserAndWorkspace" } } } @@ -12078,14 +12027,28 @@ } } }, - "/me/tasks/tags": { + "/me/allavailabletasks": { "get": { "tags": [ "AssignedTasks" ], - "summary": "Returns all task tags the current user is allowed to see.", - "description": "The tags can be filtered by the properties of the task model.\r\n\r\nAny authenticated user.", - "operationId": "GetMeTasksTags", + "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", @@ -12094,7 +12057,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/BaseTagModel" + "$ref": "#/components/schemas/TaskModel" } } } @@ -12116,23 +12079,53 @@ } } }, - "/me/timeentries/last": { + "/me/assignedtasks": { "get": { "tags": [ - "TimeEntries" + "AssignedTasks" ], - "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": "Returns all tasks assigned to the current user.", + "description": "\r\n\r\nAny authenticated user.", + "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" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -12141,13 +12134,23 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskModel" + } } } } }, - "204": { - "description": "No Content" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -12161,24 +12164,24 @@ "v1" ], "x-access": { - "admin": "true", - "owner": "true" + "any": "true" } } }, - "/me/timetracking/pause": { - "post": { + "/me/assignedtasks/{taskId}": { + "get": { "tags": [ - "TimeTracking" + "AssignedTasks" ], - "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": "Returns the assigned task with the specified id of the current user.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetMeAssignedTaskByTaskId", "parameters": [ { - "name": "userId", - "in": "query", - "description": "The id of the user.", + "name": "taskId", + "in": "path", + "description": "The id of the task to return.", + "required": true, "schema": { "type": "string", "format": "uuid" @@ -12191,13 +12194,20 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "$ref": "#/components/schemas/TaskModel" } } } }, - "204": { - "description": "No Content" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -12211,26 +12221,26 @@ "v1" ], "x-access": { - "owner": "true" + "any": "true" } } }, - "/me/timetracking/resume": { - "post": { + "/me/dashboards": { + "get": { "tags": [ - "TimeTracking" + "Dashboards" ], - "summary": "Resumes a paused time tracking for a user.", - "description": "If there is already a running time tracking nothing happens. If there is no running time tracking, returns NoContent.\r\n\r\nThe user must be the creator.", - "operationId": "PostResumeMyTimeTracking", + "summary": "Returns the 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.", + "description": "Include widgets.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } } ], @@ -12240,13 +12250,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "type": "array", + "items": { + "$ref": "#/components/schemas/Dashboard" + } } } } - }, - "204": { - "description": "No Content" } }, "security": [ @@ -12264,131 +12274,28 @@ } } }, - "/me/timetracking/start": { - "post": { + "/me/filters": { + "get": { "tags": [ - "TimeTracking" + "Filters" ], - "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 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" - } - } - ], - "requestBody": { - "description": "The model describing the time tracking to start.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StartTimeTrackingForm" - } - } + "$ref": "#/components/parameters/page" }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeTracking" - } - } - } - } - }, - "security": [ { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "owner": "true" - } - } - }, - "/me/timetracking/stop": { - "post": { - "tags": [ - "TimeTracking" - ], - "summary": "Stops the currently running time tracking of the specified user.", - "description": "The request body is optional. You can provide a stopReason to indicate how the tracking was stopped.\r\n For external API clients, the stopReason is automatically set to \"external-api\" regardless of what is provided.\r\n For this operation to work there must be a running time tracking for the user.\r\n\r\nThe user must be an admin or the creator.", - "operationId": "PostStopMyTimeTracking", - "parameters": [ + "$ref": "#/components/parameters/pageSize" + }, { - "name": "userId", - "in": "query", - "description": "The id of the user.", - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StopTimeTrackingForm" - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeTracking" - } - } - } + "$ref": "#/components/parameters/orderby" }, - "204": { - "description": "No Content" - } - }, - "security": [ { - "oauth2": [ - "full_access" - ] + "$ref": "#/components/parameters/filterby" } ], - "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", @@ -12397,53 +12304,19 @@ "schema": { "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/Filter" } - }, - "example": [ - "https://www.awork.com" - ] + } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/permissions/projectfeatures": { - "get": { - "tags": [ - "Permissions" - ], - "summary": "Returns all available project features.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetPermissionsProjectFeatures", - "responses": { - "200": { - "description": "OK", + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } - }, - "example": [ - "https://www.awork.com" - ] + "$ref": "#/components/schemas/ErrorResponse" + } } } } @@ -12463,15 +12336,24 @@ } } }, - "/projectmilestones": { + "/me/filters/{entityType}": { "get": { "tags": [ - "ProjectMilestones" + "Filters" ], - "summary": "Retrieves all project milestones.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectMilestones", + "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" }, @@ -12493,11 +12375,21 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ProjectMilestone" + "$ref": "#/components/schemas/Filter" } } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -12516,17 +12408,28 @@ }, "post": { "tags": [ - "ProjectMilestones" + "Filters" + ], + "summary": "Creates a persisted filter definition for the specified user type.", + "description": "Creates a new filter owned by the current user.\r\n\r\nAny authenticated user.", + "operationId": "PostMeFilterByUserType", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "Route segment identifying the entity type (tasks, projects, companies, users).", + "required": true, + "schema": { + "type": "string" + } + } ], - "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.", + "description": "The filter definition payload supplied by the caller.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestonePostForm" + "$ref": "#/components/schemas/FilterForm" } } }, @@ -12538,7 +12441,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestone" + "$ref": "#/components/schemas/Filter" } } } @@ -12552,6 +12455,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -12569,39 +12482,49 @@ } } }, - "/projectmilestones/{milestoneId}": { - "get": { + "/me/filters/{entityType}/fromquery": { + "post": { "tags": [ - "ProjectMilestones" + "Filters" ], - "summary": "Returns the specified project milestone.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectMilestoneByMilestoneId", + "summary": "Creates a persisted filter from an OData query string.\n Convenience endpoint for external API consumers who want to create filters using familiar OData syntax.", + "description": "Creates a filter from an OData filterby query string.\r\n\r\nAny authenticated user.", + "operationId": "PostMeFilterFromQueryByUserType", "parameters": [ { - "name": "milestoneId", + "name": "entityType", "in": "path", - "description": "The id of the milestone.", + "description": "Route segment identifying the entity type (tasks, projects, companies, users).", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], + "requestBody": { + "description": "The filter query payload containing the filter name, sharing settings, and query string.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FilterFromQueryForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestone" + "$ref": "#/components/schemas/Filter" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -12636,19 +12559,19 @@ } } }, - "/projectmilestones/{projectMilestoneId}": { + "/me/filters/{filterId}": { "delete": { "tags": [ - "ProjectMilestones" + "Filters" ], - "summary": "Deletes a project milestone.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "DeleteProjectMilestoneById", + "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": "projectMilestoneId", + "name": "filterId", "in": "path", - "description": "The id of the project milestone to delete.", + "description": "Identifier of the filter to delete.", "required": true, "schema": { "type": "string", @@ -12660,8 +12583,8 @@ "204": { "description": "No Content" }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -12695,18 +12618,18 @@ "any": "true" } }, - "put": { + "get": { "tags": [ - "ProjectMilestones" + "Filters" ], - "summary": "Updates an existing project milestone.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PutProjectMilestoneById", + "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": "projectMilestoneId", + "name": "filterId", "in": "path", - "description": "The id of the project milestone.", + "description": "The filter identifier.", "required": true, "schema": { "type": "string", @@ -12714,30 +12637,19 @@ } } ], - "requestBody": { - "description": "The model containing milestone details.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectMilestonePutForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestone" + "$ref": "#/components/schemas/Filter" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -12770,81 +12682,32 @@ "x-access": { "any": "true" } - } - }, - "/projectroles": { - "get": { + }, + "put": { "tags": [ - "ProjectRoles" + "Filters" ], - "summary": "Returns all project roles.", + "summary": "Updates an existing filter definition.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectRoles", + "operationId": "PutMeFilterById", "parameters": [ { - "name": "includeMembers", - "in": "query", - "description": "Whether to include the members of each project role in the response.", + "name": "filterId", + "in": "path", + "description": "Identifier of the filter to update.", + "required": true, "schema": { - "type": "boolean", - "default": true - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectRole" - } - } - } + "type": "string", + "format": "uuid" } } - }, - "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 model to create the project role.", + "description": "The updated filter definition supplied by the caller.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectRoleForm" + "$ref": "#/components/schemas/FilterForm" } } }, @@ -12856,7 +12719,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectRole" + "$ref": "#/components/schemas/Filter" } } } @@ -12870,57 +12733,13 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "workspace-manage-config": "write" - }, - "x-subscriptionlevel": { - "minimumPlan": "standard" - } - } - }, - "/projectroles/byuserid/{userId}": { - "get": { - "tags": [ - "ProjectRoles" - ], - "summary": "Returns all project roles assigned to the specified user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectRolesByUserIdByUserId", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectRole" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -12951,19 +12770,19 @@ } } }, - "/projectroles/{projectRoleId}": { - "get": { + "/me/filters/{filterId}/copy": { + "post": { "tags": [ - "ProjectRoles" + "Filters" ], - "summary": "Returns a project role by its id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectRoleById", + "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": "projectRoleId", + "name": "filterId", "in": "path", - "description": "The id of the project role.", + "description": "The identifier of the filter to copy.", "required": true, "schema": { "type": "string", @@ -12977,7 +12796,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectRole" + "$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" } } } @@ -13006,44 +12845,44 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/me/filters/{filterId}/{entityType}": { + "get": { "tags": [ - "ProjectRoles" + "Filters" ], - "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": "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": "projectRoleId", + "name": "filterId", "in": "path", - "description": "The id of the project role.", + "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" + } } ], - "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/ObjectPagedResult" } } } @@ -13058,70 +12897,8 @@ } } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "workspace-manage-config": "write" - } - } - }, - "/projectroles/{projectRoleId}/delete": { - "post": { - "tags": [ - "ProjectRoles" - ], - "summary": "Deletes a project role and migrates 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": "projectRoleId", - "in": "path", - "description": "The id of the project role.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model to delete the project role.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectRoleDeleteForm" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK" - }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -13152,30 +12929,19 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } } }, - "/projectroles/{projectRoleId}/permissions": { + "/me/otherprivatetasks": { "get": { "tags": [ - "ProjectRoles" + "PrivateTasks" ], - "summary": "Returns all permissions assigned to a project role.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectRolePermissionsByProjectRoleId", + "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": "projectRoleId", - "in": "path", - "description": "The id of the project role.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, { "$ref": "#/components/parameters/page" }, @@ -13197,12 +12963,22 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/PermissionOfProjectRole" + "$ref": "#/components/schemas/TaskModel" } } } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -13227,19 +13003,21 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/me/otherprivatetasks/{taskId}": { + "get": { "tags": [ - "ProjectRoles" + "PrivateTasks" ], - "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 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": "projectRoleId", + "name": "taskId", "in": "path", - "description": "The id of the project role.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -13247,30 +13025,19 @@ } } ], - "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" + "$ref": "#/components/schemas/TaskModel" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -13301,31 +13068,37 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projects": { + "/me/otherprivatetasks/{taskId}/checklistitems": { "get": { "tags": [ - "Projects" + "ChecklistItems" ], - "summary": "Returns all projects.", - "description": "Returns all projects the user has `read` permissions for.", - "operationId": "GetProjects", + "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": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } }, { - "$ref": "#/components/parameters/filterby" + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -13336,58 +13109,24 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Project" + "$ref": "#/components/schemas/ChecklistItem" } } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "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 the project.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExtendedProjectForm" - } - } }, - "required": true - }, - "responses": { - "200": { - "description": "OK", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -13408,54 +13147,62 @@ "v1" ], "x-access": { - "admin": "true", - "project-create": "write" + "any": "true" } } }, - "/projects/batch/{operation}": { - "post": { + "/me/otherprivatetasks/{taskId}/checklistitems/{checklistItemId}": { + "get": { "tags": [ - "Projects" + "ChecklistItems" ], - "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 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": "operation", + "name": "userId", + "in": "query", + "description": "The id of the user.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskId", "in": "path", - "description": "Batch operation route key.", + "description": "The id of the task.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" + } + }, + { + "name": "checklistItemId", + "in": "path", + "description": "The id of the checklist item.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } ], - "requestBody": { - "description": "Validated request body for the selected operation.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectBatchOperationForm" - } - } - }, - "required": true - }, "responses": { - "207": { - "description": "Multi-Status", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MultiStatusResult" + "$ref": "#/components/schemas/ChecklistItem" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -13464,8 +13211,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -13490,41 +13237,27 @@ } } }, - "/projects/deletetags": { - "post": { + "/me/permissions": { + "get": { "tags": [ - "ProjectTags" + "Permissions" ], - "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" - } - } - }, - "required": true - }, + "summary": "Returns the permissions of the currently logged-in user.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetMePermissions", "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/UserPermissionInfoExternal" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -13545,28 +13278,30 @@ "v1" ], "x-access": { - "admin": "true", - "project-master-data": "write" + "any": "true" } } }, - "/projects/key/{projectKey}": { + "/me/privatedocuments": { "get": { "tags": [ - "Projects" + "Documents" ], - "summary": "Returns the project with the specified key.", + "summary": "Returns the requesting user's private documents.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectsKeyByProjectKey", + "operationId": "GetMePrivateDocuments", "parameters": [ { - "name": "projectKey", - "in": "path", - "description": "The project key to lookup.", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -13575,37 +13310,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentModel" + } } } } @@ -13626,23 +13334,26 @@ } } }, - "/projects/projecttasks/tags": { + "/me/privatedocuments/trash": { "get": { "tags": [ - "ProjectTasks" + "Documents" ], - "summary": "Returns all tags of the project tasks.", + "summary": "Returns the requesting user's private trashed documents.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectsProjectTasksTags", + "operationId": "GetMePrivateDocumentsTrash", "parameters": [ { - "name": "projectId", - "in": "query", - "description": "The id of the project to filter tags by. Returns tags of all projects if not provided.", - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -13653,7 +13364,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/BaseTagModel" + "$ref": "#/components/schemas/DocumentModel" } } } @@ -13675,14 +13386,28 @@ } } }, - "/projects/tags": { + "/me/privatetasks": { "get": { "tags": [ - "ProjectTags" + "PrivateTasks" ], - "summary": "Returns all tags currently in use by projects.", + "summary": "Returns all private tasks of the current user.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectsTags", + "operationId": "GetMePrivateTasks", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], "responses": { "200": { "description": "OK", @@ -13691,14 +13416,14 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/BaseTagModelWithCount" + "$ref": "#/components/schemas/TaskModel" } } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -13707,8 +13432,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -13733,20 +13458,20 @@ } } }, - "/projects/updatetags": { + "/me/privatetasks/deletetags": { "post": { "tags": [ - "ProjectTags" + "TaskTags" ], - "summary": "Updates a tag globally for all projects.", - "description": "\r\n\r\nThe user must be an admin or have `project-master-data:write` permissions.", - "operationId": "PostProjectsUpdateTags", + "summary": "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 containing the tag updates.", + "description": "The model to remove the tag from all private tasks.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TagUpdateForm" + "$ref": "#/components/schemas/DeleteTagForm" } } }, @@ -13788,58 +13513,28 @@ "v1" ], "x-access": { - "admin": "true", - "project-master-data": "write" + "any": "true" } } }, - "/projects/{projectId}": { + "/me/privatetasks/tags": { "get": { "tags": [ - "Projects" - ], - "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", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "TaskTags" ], + "summary": "Returns all tags of the private tasks of the current user.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetMePrivateTasksTags", "responses": { "200": { "description": "OK", "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/BaseTagModelWithCount" + } } } } @@ -13858,70 +13553,97 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/me/privatetasks/taskstatuses": { + "get": { "tags": [ - "Projects" + "PrivateTasks" ], - "summary": "Updates the project with the specified id.", - "description": "Updates the project with the specified id.\r\n Special handling for retainer projects:\r\n If the project has at least one Retainer, the IsRetainer flag is automatically set to true.\r\n For retainer projects, the TimeBudget cannot be set. Instead the TimeBudget is the sum of all retainer budgets.\r\n \r\n The user has to be the creator of the project or needs `write` permissions of the feature `project-master-data`.", - "operationId": "PutProjectById", + "summary": "Returns the task statuses for private tasks for the specified user.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetMyPrivateTaskStatuses", "parameters": [ { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, + "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 containing the new project details.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectPutForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskStatus" + } } } } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/me/privatetasks/updatetags": { + "post": { + "tags": [ + "TaskTags" + ], + "summary": "Updates a tag for all private tasks.", + "description": "Updates a tag for all private tasks of the current user.\r\n\r\nAny authenticated user.", + "operationId": "PostMePrivateTasksUpdateTags", + "requestBody": { + "description": "The model to update the tag including the old and new tag names.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagUpdateForm" } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "required": true + }, + "responses": { + "204": { + "description": "No Content" }, - "404": { - "description": "Not Found", + "207": { + "description": "Multi-Status" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -13946,36 +13668,24 @@ } } }, - "/projects/{projectId}/activities": { + "/me/privatetasks/{taskId}": { "get": { "tags": [ - "Project Activities" + "PrivateTasks" ], - "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 private task with the specified id for the current user.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetMePrivateTaskByTaskId", "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" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -13984,20 +13694,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/TaskModel" } } } @@ -14038,77 +13735,28 @@ } } }, - "/projects/{projectId}/addprojectmember": { - "post": { + "/me/privatetasks/{taskId}/checklistitems": { + "get": { "tags": [ - "ProjectMembers" + "ChecklistItems" ], - "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": "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": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, + "name": "userId", + "in": "query", + "description": "The id of the user.", "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The model containing project member details.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectMemberForm" - } - } }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectMember" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/projects/{projectId}/addtags": { - "post": { - "tags": [ - "ProjectTags" - ], - "summary": "Adds 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", + "name": "taskId", "in": "path", - "description": "The id of the project to add tags for.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -14116,20 +13764,6 @@ } } ], - "requestBody": { - "description": "The model containing the tags to add.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TagForm" - } - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", @@ -14138,22 +13772,12 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/BaseTagModel" + "$ref": "#/components/schemas/ChecklistItem" } } } } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "401": { "description": "Unauthorized", "content": { @@ -14190,19 +13814,38 @@ } } }, - "/projects/{projectId}/addtaskbundle": { - "post": { + "/me/privatetasks/{taskId}/checklistitems/{checklistItemId}": { + "get": { "tags": [ - "TaskBundles" + "ChecklistItems" ], - "summary": "Adds a task bundle to a project.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostProjectAddTaskBundleByProjectId", + "summary": "Retrieves a checklist item from a private task.", + "description": "The user must be assigned to the task.", + "operationId": "GetMyPrivateTaskChecklistItemByUserIdAndTaskIdAndChecklistItemId", "parameters": [ { - "name": "projectId", + "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.", + "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", @@ -14210,27 +13853,13 @@ } } ], - "requestBody": { - "description": "The add Task Bundle form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddTaskBundleForm" - } - } - }, - "required": true - }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ChecklistItem" } } } @@ -14271,25 +13900,15 @@ } } }, - "/projects/{projectId}/allfiles": { + "/me/projecttasks": { "get": { "tags": [ - "ProjectFiles" + "ProjectTasks" ], - "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 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": "projectId", - "in": "path", - "description": "The id of the entity.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, { "$ref": "#/components/parameters/page" }, @@ -14311,7 +13930,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/TaskModel" } } } @@ -14333,24 +13952,26 @@ } } }, - "/projects/{projectId}/automations": { + "/me/shareddocuments": { "get": { "tags": [ - "Project Automations" + "Documents" ], - "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 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": "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": { @@ -14361,7 +13982,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Automation" + "$ref": "#/components/schemas/DocumentModel" } } } @@ -14381,50 +14002,46 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/me/sharedfilters": { + "get": { "tags": [ - "Project Automations" + "Filters" ], - "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": "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": "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 model to create the automation.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AutomationTriggerForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" + "type": "array", + "items": { + "$ref": "#/components/schemas/Filter" + } } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -14446,48 +14063,56 @@ ], "x-access": { "any": "true" - }, - "x-subscriptionlevel": { - "minimumPlan": "standard" } } }, - "/projects/{projectId}/automations/{automationId}": { - "delete": { + "/me/sharedfilters/{entityType}": { + "get": { "tags": [ - "Project Automations" + "Filters" ], - "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": "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": "automationId", + "name": "entityType", "in": "path", - "description": "The id of the automation.", + "description": "The entity type route value.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } }, { - "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": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Filter" + } + } + } + } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -14510,43 +14135,26 @@ "x-access": { "any": "true" } - }, + } + }, + "/me/tasks/tags": { "get": { "tags": [ - "Project Automations" - ], - "summary": "Returns a specific automation from a project.", - "description": "Returns a specific automation of the project with the specified id.\r\n Returns NotFound if the automation doesnt exist.\r\n To get the the automation data the user needs to be the owner of the project or\r\n have 'read' permissions of the feature 'project-master-data' globally or in his project role.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectAutomation", - "parameters": [ - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "AssignedTasks" ], + "summary": "Returns all task tags the current user is allowed to see.", + "description": "The tags can be filtered by the properties of the task model.\r\n\r\nAny authenticated user.", + "operationId": "GetMeTasksTags", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } } } } @@ -14565,67 +14173,40 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/me/timeentries/last": { + "get": { "tags": [ - "Project Automations" + "TimeEntries" ], - "summary": "Updates the automation with the specified id.", - "description": "Updates the automation with the specified id.\r\n The user needs to be the owner of the project or have 'write' permissions of\r\n the feature 'project-master-data' globally or in the project.\r\n If the automation was created from a workflow, only the Enabled flag can be changed.\r\n\r\nAny authenticated user.", - "operationId": "PutProjectAutomation", + "summary": "Returns 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": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, + "name": "userId", + "in": "query", + "description": "The id of the user.", "schema": { "type": "string", "format": "uuid" } } ], - "requestBody": { - "description": "The model to update the automation.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AutomationPutForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" + "$ref": "#/components/schemas/TimeTracking" } } } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -14639,34 +14220,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "owner": "true" } } }, - "/projects/{projectId}/automations/{automationId}/actions": { - "get": { + "/me/timetracking/pause": { + "post": { "tags": [ - "Project Automations" + "TimeTracking" ], - "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": "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": "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, + "name": "userId", + "in": "query", + "description": "The id of the user.", "schema": { "type": "string", "format": "uuid" @@ -14679,13 +14250,13 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Action" - } + "$ref": "#/components/schemas/TimeTracking" } } } + }, + "204": { + "description": "No Content" } }, "security": [ @@ -14699,32 +14270,72 @@ "v1" ], "x-access": { - "any": "true" + "owner": "true" } - }, + } + }, + "/me/timetracking/resume": { "post": { "tags": [ - "Project Automations" + "TimeTracking" ], - "summary": "Creates a new action for an automation.", - "description": "Creates a new action including its values for an automation. Actions cannot be added to automations created from a workflow.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", - "operationId": "PostProjectAutomationAction", + "summary": "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": "projectId", - "in": "path", - "description": "The id of the project of the automation.", - "required": true, + "name": "userId", + "in": "query", + "description": "The id of the user.", "schema": { "type": "string", "format": "uuid" } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TimeTracking" + } + } + } }, + "204": { + "description": "No Content" + } + }, + "security": [ { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "owner": "true" + } + } + }, + "/me/timetracking/start": { + "post": { + "tags": [ + "TimeTracking" + ], + "summary": "Starts a new time tracking for a user.", + "description": "If there is already a running/paused time tracking it will be stopped automatically in order to start the new one.\r\n\r\nThe user must be an admin or the creator.", + "operationId": "PostStartMyTimeTracking", + "parameters": [ + { + "name": "userId", + "in": "query", + "description": "The id of the user.", "schema": { "type": "string", "format": "uuid" @@ -14732,11 +14343,11 @@ } ], "requestBody": { - "description": "The model to create an action.", + "description": "The model describing the time tracking to start.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ActionForm" + "$ref": "#/components/schemas/StartTimeTrackingForm" } } }, @@ -14748,17 +14359,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TimeTracking" } } } @@ -14775,63 +14376,52 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "owner": "true" } } }, - "/projects/{projectId}/automations/{automationId}/actions/{actionId}": { - "delete": { + "/me/timetracking/stop": { + "post": { "tags": [ - "Project Automations" + "TimeTracking" ], - "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": "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": "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, + "name": "userId", + "in": "query", + "description": "The id of the user.", "schema": { "type": "string", "format": "uuid" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StopTimeTrackingForm" + } + } + } + }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TimeTracking" } } } + }, + "204": { + "description": "No Content" } }, "security": [ @@ -14845,56 +14435,74 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "owner": "true" } - }, + } + }, + "/permissions/features": { "get": { "tags": [ - "Project Automations" + "Permissions" ], - "summary": "Gets a specific action for a project automation.", - "description": "The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", - "operationId": "GetProjectAutomationAction", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Returns all available features.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetPermissionsFeatures", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + "https://www.awork.com" + ] + } } - }, + } + }, + "security": [ { - "name": "actionId", - "in": "path", - "description": "The id of the action.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "oauth2": [ + "full_access" + ] } ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/permissions/projectfeatures": { + "get": { + "tags": [ + "Permissions" + ], + "summary": "Returns all available project features.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetPermissionsProjectFeatures", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" - } + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + "https://www.awork.com" + ] } } } @@ -14912,74 +14520,40 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projectmilestones": { + "get": { "tags": [ - "Project Automations" + "ProjectMilestones" ], - "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": "Retrieves all project milestones.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectMilestones", "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" }, { - "name": "actionId", - "in": "path", - "description": "The id of the action.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The model to update an action.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ActionForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectMilestone" + } } } } @@ -14998,62 +14572,35 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/automations/{automationId}/actions/{actionId}/updateorder": { + }, "post": { "tags": [ - "Project Automations" - ], - "summary": "Updates the order of a given action of a project automation.", - "description": "Updates the order of a given action in the list of actions of the specific project automation. Actions of automations created from a workflow cannot be modified.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", - "operationId": "PostUpdateProjectAutomationActionOrder", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "actionId", - "in": "path", - "description": "The id of the action.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "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 to update the order.", + "description": "The model containing milestone details.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateOrderForm" + "$ref": "#/components/schemas/ProjectMilestonePostForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectMilestone" + } + } + } }, "400": { "description": "Bad Request", @@ -15081,27 +14628,19 @@ } } }, - "/projects/{projectId}/automations/{automationId}/execute": { - "post": { + "/projectmilestones/{milestoneId}": { + "get": { "tags": [ - "Project Automations" + "ProjectMilestones" ], - "summary": "Executes a manual automation for a task.", - "description": "Can be used to trigger an automation that uses a manual trigger for a specific task.\r\n The calling user becomes the initiator of the automation execution.\r\n The user must have write permissions on the specified task.", - "operationId": "PostExecuteProjectAutomation", + "summary": "Returns the specified project milestone.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectMilestoneByMilestoneId", "parameters": [ { - "name": "projectId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", + "name": "milestoneId", "in": "path", + "description": "The id of the milestone.", "required": true, "schema": { "type": "string", @@ -15109,26 +14648,13 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AutomationExecuteForm" - } - } - }, - "required": true - }, "responses": { - "202": { - "description": "Accepted" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectMilestone" } } } @@ -15169,19 +14695,19 @@ } } }, - "/projects/{projectId}/autopilot": { + "/projectmilestones/{projectMilestoneId}": { "delete": { "tags": [ - "Autopilot" + "ProjectMilestones" ], - "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": "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", @@ -15192,54 +14718,26 @@ "responses": { "204": { "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "get": { - "tags": [ - "Autopilot" - ], - "summary": "Returns the autopilot of the project with the specified id.", - "description": "Returns NoContent if the project does not have an autopilot setup.\r\n To get the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", - "operationId": "GetProjectsAutopilotByProjectId", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Autopilot" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "204": { - "description": "No Content" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -15256,18 +14754,18 @@ "any": "true" } }, - "post": { + "put": { "tags": [ - "Autopilot" + "ProjectMilestones" ], - "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": "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.", + "description": "The id of the project milestone.", "required": true, "schema": { "type": "string", @@ -15276,11 +14774,11 @@ } ], "requestBody": { - "description": "The model used to create the autopilot.", + "description": "The model containing milestone details.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AutopilotPostForm" + "$ref": "#/components/schemas/ProjectMilestonePutForm" } } }, @@ -15292,63 +14790,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Autopilot" + "$ref": "#/components/schemas/ProjectMilestone" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "put": { - "tags": [ - "Autopilot" - ], - "summary": "Updates the autopilot of the project with the specified id.", - "description": "Updates the autopilot of the project with the specified id.\r\n To access and modify the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", - "operationId": "PutProjectsAutopilotByProjectId", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model used to update the autopilot.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AutopilotPutForm" + }, + "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/Autopilot" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -15369,67 +14831,47 @@ } } }, - "/projects/{projectId}/changeprojecttype": { - "post": { + "/projectroles": { + "get": { "tags": [ - "Projects" + "ProjectRoles" ], - "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": "Returns all project roles.", + "description": "\r\n\r\nAny authenticated user.", + "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" - } - } - ], - "requestBody": { - "description": "The model to change the project type.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChangeProjectTypeForm" - } + "type": "boolean", + "default": true } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" + { + "$ref": "#/components/parameters/page" }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + { + "$ref": "#/components/parameters/pageSize" }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + { + "$ref": "#/components/parameters/orderby" }, - "404": { - "description": "Not Found", + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectRole" + } } } } @@ -15448,55 +14890,38 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/changestatus": { + }, "post": { "tags": [ - "Projects" - ], - "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", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "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 model to change the project status.", + "description": "The model to create the project role.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChangeProjectStatusForm" + "$ref": "#/components/schemas/ProjectRoleForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectRole" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -15517,23 +14942,27 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" + }, + "x-subscriptionlevel": { + "minimumPlan": "standard" } } }, - "/projects/{projectId}/comments": { - "delete": { + "/projectroles/byuserid/{userId}": { + "get": { "tags": [ - "ProjectComments" + "ProjectRoles" ], - "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 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 project.", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -15542,11 +14971,21 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectRole" + } + } + } + } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -15569,36 +15008,26 @@ "x-access": { "any": "true" } - }, + } + }, + "/projectroles/{projectRoleId}": { "get": { "tags": [ - "ProjectComments" + "ProjectRoles" ], - "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 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", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -15607,26 +15036,13 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Comment" - } - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectRole" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -15650,18 +15066,18 @@ "any": "true" } }, - "post": { + "put": { "tags": [ - "ProjectComments" + "ProjectRoles" ], - "summary": "Creates a new comment on the project with the specified id.", - "description": "Creates a new comment on the project with the specified id.\r\n A user can only create a comment for him/herself, except for admins and api users.\r\n \r\n To create a comment the user must have at least `read` permissions on the specified project.", - "operationId": "PostCommentsByProjectNameAndProjectId", + "summary": "Updates 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 to create the comment for.", + "description": "The id of the project role.", "required": true, "schema": { "type": "string", @@ -15670,11 +15086,11 @@ } ], "requestBody": { - "description": "The model to create the comment.", + "description": "The model to update the project role.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CommentForm" + "$ref": "#/components/schemas/ProjectRoleForm" } } }, @@ -15686,7 +15102,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/ProjectRole" } } } @@ -15701,16 +15117,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -15733,33 +15139,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/projects/{projectId}/comments/{commentId}": { - "delete": { + "/projectroles/{projectRoleId}/delete": { + "post": { "tags": [ - "ProjectComments" + "ProjectRoles" ], - "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 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": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "commentId", + "name": "projectRoleId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the project role.", "required": true, "schema": { "type": "string", @@ -15767,12 +15164,23 @@ } } ], + "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" }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -15803,21 +15211,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } - }, + } + }, + "/projectroles/{projectRoleId}/permissions": { "get": { "tags": [ - "ProjectComments" + "ProjectRoles" ], - "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 all permissions assigned to a project role.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectRolePermissionsByProjectRoleId", "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", @@ -15825,14 +15236,16 @@ } }, { - "name": "commentId", - "in": "path", - "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" } ], "responses": { @@ -15841,13 +15254,16 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "type": "array", + "items": { + "$ref": "#/components/schemas/PermissionOfProjectRole" + } } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -15871,28 +15287,18 @@ "any": "true" } }, - "put": { + "post": { "tags": [ - "ProjectComments" + "ProjectRoles" ], - "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": "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": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "commentId", + "name": "projectRoleId", "in": "path", - "description": "The id of the comment.", + "description": "The id of the project role.", "required": true, "schema": { "type": "string", @@ -15901,11 +15307,11 @@ } ], "requestBody": { - "description": "The model with the updated comment information.", + "description": "The model to create or update the project role permission.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CommentPutForm" + "$ref": "#/components/schemas/PermissionOfProjectRoleForm" } } }, @@ -15917,13 +15323,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/PermissionOfProjectRole" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -15954,71 +15360,43 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projects/{projectId}/comments/{commentId}/react": { - "post": { + "/projects": { + "get": { "tags": [ - "ProjectComments" + "Projects" ], - "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": "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.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" }, { - "name": "commentId", - "in": "path", - "description": "The id of the comment.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The model used to update the reactions of the comment with the specified id.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ReactionForm" - } - } - }, - "required": true - }, "responses": { - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/Project" + } } } } @@ -16037,54 +15415,38 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/customfielddefinitions": { - "get": { + }, + "post": { "tags": [ - "CustomFields" + "Projects" ], - "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", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "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 + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Project" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -16105,64 +15467,54 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-create": "write" } } }, - "/projects/{projectId}/customfielddefinitions/{customFieldDefinitionId}": { - "put": { + "/projects/batch/{operation}": { + "post": { "tags": [ - "CustomFields" + "Projects" ], - "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": "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.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "customFieldDefinitionId", + "name": "operation", "in": "path", - "description": "The id of the custom field definition.", + "description": "Batch operation route key.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "requestBody": { - "description": "The model used to update the order of the custom field definition.", + "description": "Validated request body for the selected operation.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldOrderPutForm" + "$ref": "#/components/schemas/ProjectBatchOperationForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "207": { + "description": "Multi-Status", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldOrderForm" + "$ref": "#/components/schemas/MultiStatusResult" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -16171,8 +15523,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -16197,32 +15549,20 @@ } } }, - "/projects/{projectId}/delete": { + "/projects/deletetags": { "post": { "tags": [ - "Projects" - ], - "summary": "Deletes the project with the specified id.", - "description": "Deletes the project with the specified id.\r\n In the default case the related tasks of this project will also be deleted and the related time entries of this project and all tasks loose the relation to the deleted project and tasks.\r\n To delete the time entries as well, you can set the `deleteTimeTrackings` property of the request to `true`.\r\n \r\n The user has to be the creator of the project or needs `write` permissions of the feature `project-master-data`.", - "operationId": "PostProjectDeleteByProjectId", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "ProjectTags" ], + "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 containing deletion options.", + "description": "The model to remove the tag from all projects.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectDeleteForm" + "$ref": "#/components/schemas/DeleteTagForm" } } }, @@ -16232,8 +15572,8 @@ "204": { "description": "No Content" }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -16242,8 +15582,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -16264,51 +15604,41 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-master-data": "write" } } }, - "/projects/{projectId}/deletetags": { - "post": { + "/projects/key/{projectKey}": { + "get": { "tags": [ - "ProjectTags" + "Projects" ], - "summary": "Removes tags from the project with the specified id.", - "description": "To remove tags from a project the user must have `project-master-data:write` permissions on the specified project.", - "operationId": "PostProjectDeleteTagsByProjectId", + "summary": "Returns the project with the specified key.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectsKeyByProjectKey", "parameters": [ { - "name": "projectId", + "name": "projectKey", "in": "path", - "description": "The id of the project to remove tags from.", + "description": "The project key to lookup.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], - "requestBody": { - "description": "The model containing the tags to remove.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DeleteTagForm" + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" } } } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, - "207": { - "description": "Multi-Status" - }, "400": { "description": "Bad Request", "content": { @@ -16355,36 +15685,23 @@ } } }, - "/projects/{projectId}/documents": { + "/projects/projecttasks/tags": { "get": { "tags": [ - "Documents" + "ProjectTasks" ], - "summary": "Retrieves all documents for a project.", + "summary": "Returns all tags of the project tasks.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectDocumentsByProjectId", + "operationId": "GetProjectsProjectTasksTags", "parameters": [ { "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, + "in": "query", + "description": "The id of the project to filter tags by. Returns tags of all projects if not provided.", "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -16395,7 +15712,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/DocumentModel" + "$ref": "#/components/schemas/BaseTagModel" } } } @@ -16417,38 +15734,14 @@ } } }, - "/projects/{projectId}/documents/trash": { + "/projects/tags": { "get": { "tags": [ - "Documents" + "ProjectTags" ], - "summary": "Retrieves all trashed documents for a project.", + "summary": "Returns all tags currently in use by projects.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectDocumentsTrashByProjectId", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], + "operationId": "GetProjectsTags", "responses": { "200": { "description": "OK", @@ -16457,11 +15750,31 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/DocumentModel" + "$ref": "#/components/schemas/BaseTagModelWithCount" } } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -16479,54 +15792,45 @@ } } }, - "/projects/{projectId}/externalfiles": { + "/projects/updatetags": { "post": { "tags": [ - "ProjectFiles" - ], - "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", - "in": "path", - "description": "The id of the project.", - "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": "List of file forms.", + "description": "The model containing the tag updates.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - }, - "application/*+json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } + "$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/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -16543,18 +15847,19 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-master-data": "write" } } }, - "/projects/{projectId}/files": { - "delete": { + "/projects/{projectId}": { + "get": { "tags": [ - "ProjectFiles" + "Projects" ], - "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": "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", @@ -16568,8 +15873,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": [ @@ -16586,13 +15918,13 @@ "any": "true" } }, - "get": { + "put": { "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": "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", @@ -16603,30 +15935,56 @@ "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], + "requestBody": { + "description": "The model containing the new project details.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectPutForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileInfo" - } + "$ref": "#/components/schemas/Project" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -16645,14 +16003,16 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/projects/{projectId}/activities": { + "get": { "tags": [ - "ProjectFiles" + "Project Activities" ], - "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": "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", @@ -16663,44 +16023,63 @@ "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ActivityModel" } } - }, - "encoding": { - "File": { - "style": "form" + } + } + }, + "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/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -16718,19 +16097,19 @@ } } }, - "/projects/{projectId}/files/byuploadid": { + "/projects/{projectId}/addprojectmember": { "post": { "tags": [ - "FileUpload" + "ProjectMembers" ], - "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": "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", "in": "path", - "description": "The id of the project to attach the file to.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -16739,11 +16118,11 @@ } ], "requestBody": { - "description": "The model describing the uploaded file metadata.", + "description": "The model containing project member details.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UploadByUploadIdForm" + "$ref": "#/components/schemas/ProjectMemberForm" } } }, @@ -16755,17 +16134,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectMember" } } } @@ -16786,19 +16155,19 @@ } } }, - "/projects/{projectId}/files/byurl": { + "/projects/{projectId}/addtags": { "post": { "tags": [ - "ProjectFiles" + "ProjectTags" ], - "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": "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 the file is linked to.", + "description": "The id of the project to add tags for.", "required": true, "schema": { "type": "string", @@ -16807,19 +16176,18 @@ } ], "requestBody": { - "description": "The url, name and description of the file.", + "description": "The model containing the tags to add.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/TagForm" + } } } - } + }, + "required": true }, "responses": { "200": { @@ -16827,7 +16195,40 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -16848,14 +16249,14 @@ } } }, - "/projects/{projectId}/files/{fileId}": { - "delete": { + "/projects/{projectId}/addtaskbundle": { + "post": { "tags": [ - "ProjectFiles" + "TaskBundles" ], - "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": "Adds a task bundle to a project.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostProjectAddTaskBundleByProjectId", "parameters": [ { "name": "projectId", @@ -16866,73 +16267,29 @@ "type": "string", "format": "uuid" } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], + "requestBody": { + "description": "The add Task Bundle form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddTaskBundleForm" + } + } + }, + "required": true + }, "responses": { "204": { "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "get": { - "tags": [ - "Project Files" - ], - "summary": "Returns the file with the specified id of the project with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByProjectNameAndProjectIdAndFileId", - "parameters": [ - { - "name": "projectId", - "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -16971,19 +16328,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projects/{projectId}/allfiles": { + "get": { "tags": [ "ProjectFiles" ], - "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": "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", @@ -16991,38 +16350,28 @@ } }, { - "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" } ], - "requestBody": { - "description": "The model to update the file with the specified id.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - } - } - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } } } } @@ -17043,14 +16392,14 @@ } } }, - "/projects/{projectId}/files/{fileId}/changeentity": { - "post": { + "/projects/{projectId}/automations": { + "get": { "tags": [ - "ProjectFiles" + "Project Automations" ], - "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": "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", @@ -17061,40 +16410,18 @@ "type": "string", "format": "uuid" } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], - "requestBody": { - "description": "The model to change the entity information of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - } - } - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/Automation" + } } } } @@ -17113,16 +16440,14 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/files/{fileId}/copy": { + }, "post": { "tags": [ - "ProjectFiles" + "Project Automations" ], - "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": "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", @@ -17133,32 +16458,18 @@ "type": "string", "format": "uuid" } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "requestBody": { - "description": "The model to change the entity information of the file.", + "description": "The model to create the automation.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" + "$ref": "#/components/schemas/AutomationTriggerForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -17166,7 +16477,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/Automation" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -17184,22 +16505,25 @@ ], "x-access": { "any": "true" + }, + "x-subscriptionlevel": { + "minimumPlan": "standard" } } }, - "/projects/{projectId}/files/{fileId}/download": { - "get": { + "/projects/{projectId}/automations/{automationId}": { + "delete": { "tags": [ - "ProjectFiles" + "Project Automations" ], - "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": "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", @@ -17207,50 +16531,26 @@ } }, { - "name": "fileId", + "name": "projectId", "in": "path", - "description": "The id of the file.", + "description": "The id of the project.", "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", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -17269,21 +16569,19 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/files/{fileId}/pdf": { + }, "get": { "tags": [ - "ProjectFiles" + "Project Automations" ], - "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": "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", @@ -17291,23 +16589,14 @@ } }, { - "name": "fileId", + "name": "projectId", "in": "path", - "description": "The id of the file.", + "description": "The id of the project.", "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": { @@ -17316,8 +16605,7 @@ "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/Automation" } } } @@ -17336,21 +16624,19 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/files/{fileId}/shareurl": { - "get": { + }, + "put": { "tags": [ - "ProjectFiles" + "Project Automations" ], - "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 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", @@ -17358,9 +16644,9 @@ } }, { - "name": "fileId", + "name": "projectId", "in": "path", - "description": "The id of the file.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -17368,13 +16654,34 @@ } } ], + "requestBody": { + "description": "The model to update the automation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutomationPutForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/Automation" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -17395,19 +16702,19 @@ } } }, - "/projects/{projectId}/files/{fileId}/versions": { + "/projects/{projectId}/automations/{automationId}/actions": { "get": { "tags": [ - "ProjectFiles" + "Project Automations" ], - "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": "Gets the actions of a project automation.", + "description": "Gets all actions including their values of an automation.\r\n The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", + "operationId": "GetProjectAutomationActions", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project of the automation.", "required": true, "schema": { "type": "string", @@ -17415,26 +16722,14 @@ } }, { - "name": "fileId", + "name": "automationId", "in": "path", - "description": "The id of the file.", + "description": "The id of the automation.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -17445,7 +16740,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/Action" } } } @@ -17468,16 +16763,16 @@ }, "post": { "tags": [ - "ProjectFiles" + "Project Automations" ], - "summary": "Uploads a new version of the project file with the specified id.", - "description": "Uploads a new version of an project file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateProjectFileVersion", + "summary": "Creates a 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", @@ -17485,9 +16780,9 @@ } }, { - "name": "fileId", + "name": "automationId", "in": "path", - "description": "The id of the file.", + "description": "The id of the automation.", "required": true, "schema": { "type": "string", @@ -17496,27 +16791,15 @@ } ], "requestBody": { + "description": "The model to create an action.", "content": { - "multipart/form-data": { + "application/json": { "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } + "$ref": "#/components/schemas/ActionForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -17524,13 +16807,20 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/Action" } } } }, "400": { - "description": "Bad Request" + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -17548,19 +16838,19 @@ } } }, - "/projects/{projectId}/files/{fileId}/versions/{versionId}": { - "get": { + "/projects/{projectId}/automations/{automationId}/actions/{actionId}": { + "delete": { "tags": [ - "Project Files" + "Project Automations" ], - "summary": "Returns the project file version with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByProjectNameAndProjectIdAndFileIdAndVersionId", + "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", @@ -17568,9 +16858,9 @@ } }, { - "name": "fileId", + "name": "automationId", "in": "path", - "description": "The id of the file.", + "description": "The id of the automation.", "required": true, "schema": { "type": "string", @@ -17578,9 +16868,9 @@ } }, { - "name": "versionId", + "name": "actionId", "in": "path", - "description": "The id of the file version.", + "description": "The id of the action.", "required": true, "schema": { "type": "string", @@ -17589,28 +16879,11 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileVersion" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -17633,21 +16906,19 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/files/{fileId}/versions/{versionId}/download": { + }, "get": { "tags": [ - "ProjectFiles" + "Project Automations" ], - "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": "Gets a specific action for a project automation.", + "description": "The user must be owner of the project or must have `project-master-data:read` permissions on the specified project.", + "operationId": "GetProjectAutomationAction", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", + "description": "The id of the project of the automation.", "required": true, "schema": { "type": "string", @@ -17655,9 +16926,9 @@ } }, { - "name": "fileId", + "name": "automationId", "in": "path", - "description": "The id of the file.", + "description": "The id of the automation.", "required": true, "schema": { "type": "string", @@ -17665,9 +16936,9 @@ } }, { - "name": "versionId", + "name": "actionId", "in": "path", - "description": "The id of the file version.", + "description": "The id of the action.", "required": true, "schema": { "type": "string", @@ -17681,8 +16952,7 @@ "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/Action" } } } @@ -17701,21 +16971,39 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/linkcustomfielddefinition": { - "post": { + }, + "put": { "tags": [ - "CustomFields" + "Project Automations" ], - "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": "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", + "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", @@ -17724,32 +17012,29 @@ } ], "requestBody": { - "description": "The model used to link the custom field definition.", + "description": "The model to update an action.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LinkCustomFieldDefinitionForm" + "$ref": "#/components/schemas/ActionForm" } } }, "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/Action" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -17757,9 +17042,80 @@ } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projects/{projectId}/automations/{automationId}/actions/{actionId}/updateorder": { + "post": { + "tags": [ + "Project Automations" + ], + "summary": "Updates the order of a given action of a project automation.", + "description": "Updates the order of a given action in the list of actions of the specific project automation. Actions of automations created from a workflow cannot be modified.\r\n The user must be owner of the project or must have `project-master-data:write` permissions on the specified project.", + "operationId": "PostUpdateProjectAutomationActionOrder", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "description": "The id of the automation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "description": "The id of the action.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model to update the order.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrderForm" + } + } }, - "404": { - "description": "Not Found", + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -17784,19 +17140,27 @@ } } }, - "/projects/{projectId}/linkworkflow": { + "/projects/{projectId}/automations/{automationId}/execute": { "post": { "tags": [ - "Workflows" + "Project Automations" ], - "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": "Executes a manual automation for a task.", + "description": "Can be used to trigger an automation that uses a manual trigger for a specific task.\r\n The calling user becomes the initiator of the automation execution.\r\n The user must have write permissions on the specified task.", + "operationId": "PostExecuteProjectAutomation", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", "required": true, "schema": { "type": "string", @@ -17805,26 +17169,18 @@ } ], "requestBody": { - "description": "The link workflow form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LinkWorkflowForm" + "$ref": "#/components/schemas/AutomationExecuteForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Project" - } - } - } + "202": { + "description": "Accepted" }, "400": { "description": "Bad Request", @@ -17872,14 +17228,14 @@ } } }, - "/projects/{projectId}/members": { - "get": { + "/projects/{projectId}/autopilot": { + "delete": { "tags": [ - "Projects" + "Autopilot" ], - "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": "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", @@ -17893,38 +17249,8 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectMember" - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -17940,16 +17266,14 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/milestones": { + }, "get": { "tags": [ - "ProjectMilestones" + "Autopilot" ], - "summary": "Returns all project milestones of the specified project.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectMilestonesByProjectId", + "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", @@ -17968,23 +17292,13 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectMilestone" - } + "$ref": "#/components/schemas/Autopilot" } } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -18000,69 +17314,100 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/projectstatuses": { - "get": { + }, + "post": { "tags": [ - "ProjectStatuses" + "Autopilot" ], - "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": "Creates a new autopilot for the project with the specified id.", + "description": "Creates a new autopilot for the project with the specified id.\r\n Also creates and enables all alerts for the new autopilot.\r\n For this action, the user needs to be the owner of the project or must have 'read' permissions\r\n of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", + "operationId": "PostProjectsAutopilotByProjectId", "parameters": [ { "name": "projectId", "in": "path", + "description": "The id of the project.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$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": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectStatus" - } + "$ref": "#/components/schemas/Autopilot" } } } - }, - "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": [ + "Autopilot" + ], + "summary": "Updates the autopilot of the project with the specified id.", + "description": "Updates the autopilot of the project with the specified id.\r\n To access and modify the autopilot data the user needs to be the owner of the project or\r\n must have 'read' permissions of the feature 'project-master-data' globally or in their project role.\r\n\r\nAny authenticated user.", + "operationId": "PutProjectsAutopilotByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model used to update the autopilot.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutopilotPutForm" } } }, - "404": { - "description": "Not Found", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Autopilot" } } } @@ -18081,14 +17426,16 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/changeprojecttype": { "post": { "tags": [ - "ProjectStatuses" + "Projects" ], - "summary": "Creates a project status for a project.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostProjectProjectStatusesByProjectId", + "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", @@ -18102,26 +17449,19 @@ } ], "requestBody": { - "description": "The model to create the project status.", + "description": "The model to change the project type.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectStatusForm" + "$ref": "#/components/schemas/ChangeProjectTypeForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectStatus" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -18169,14 +17509,14 @@ } } }, - "/projects/{projectId}/projecttasks": { - "get": { + "/projects/{projectId}/changestatus": { + "post": { "tags": [ - "ProjectTasks" + "Projects" ], - "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": "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", @@ -18187,30 +17527,29 @@ "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], + "requestBody": { + "description": "The model to change the project status.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChangeProjectStatusForm" + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -18241,14 +17580,14 @@ } } }, - "/projects/{projectId}/projecttasks/{taskId}": { - "get": { + "/projects/{projectId}/comments": { + "delete": { "tags": [ - "ProjectTasks" + "ProjectComments" ], - "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": "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", @@ -18259,16 +17598,66 @@ "type": "string", "format": "uuid" } + } + ], + "responses": { + "204": { + "description": "No Content" }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ { - "name": "taskId", + "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 task.", + "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": { @@ -18277,13 +17666,16 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskModel" + "type": "array", + "items": { + "$ref": "#/components/schemas/Comment" + } } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -18292,8 +17684,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -18316,31 +17708,19 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/projecttasks/{taskId}/changeproject": { + }, "post": { "tags": [ - "ProjectTasks" + "ProjectComments" ], - "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": "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.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", + "description": "The id of the project to create the comment for.", "required": true, "schema": { "type": "string", @@ -18349,19 +17729,26 @@ } ], "requestBody": { - "description": "The model to change the project of the task.", + "description": "The model to create the comment.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChangeProjectForm" + "$ref": "#/components/schemas/CommentForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Comment" + } + } + } }, "400": { "description": "Bad Request", @@ -18409,14 +17796,14 @@ } } }, - "/projects/{projectId}/projecttasks/{taskId}/checklistitems": { - "get": { + "/projects/{projectId}/comments/{commentId}": { + "delete": { "tags": [ - "ChecklistItems" + "ProjectComments" ], - "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": "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", @@ -18429,9 +17816,9 @@ } }, { - "name": "taskId", + "name": "commentId", "in": "path", - "description": "The id of the task.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -18440,18 +17827,8 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChecklistItem" - } - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", @@ -18487,16 +17864,14 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/projecttasks/{taskId}/checklistitems/{checklistItemId}": { + }, "get": { "tags": [ - "ChecklistItems" + "ProjectComments" ], - "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": "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", @@ -18509,19 +17884,9 @@ } }, { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "checklistItemId", + "name": "commentId", "in": "path", - "description": "The id of the checklist item.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -18535,7 +17900,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItem" + "$ref": "#/components/schemas/Comment" } } } @@ -18549,16 +17914,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -18574,16 +17929,14 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/removeprojectmember": { - "post": { + }, + "put": { "tags": [ - "Projects" + "ProjectComments" ], - "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": "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", @@ -18594,29 +17947,36 @@ "type": "string", "format": "uuid" } + }, + { + "name": "commentId", + "in": "path", + "description": "The id of the comment.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "requestBody": { - "description": "The model to remove the project member.", + "description": "The model with the updated comment information.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMemberRemoveForm" + "$ref": "#/components/schemas/CommentPutForm" } } }, "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/Comment" } } } @@ -18657,14 +18017,14 @@ } } }, - "/projects/{projectId}/retainers": { - "get": { + "/projects/{projectId}/comments/{commentId}/react": { + "post": { "tags": [ - "Retainers" + "ProjectComments" ], - "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": "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", @@ -18677,59 +18037,9 @@ } }, { - "$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/Retainer" - } - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "Retainers" - ], - "summary": "Endpoint to create a new retainer for a project.", - "description": "As soon as a retainer is created for a project, the project will be marked as a retainer project.\r\n Based on the Start and End dates of the retainer, the retainer budgets will be created automatically.\r\n Retainers cannot overlap. There can only be one active retainer per project at a time (no end date and/or including the current date).\r\n \r\n The user needs to have the ProjectMasterData write permission for the project to access this endpoint.\r\n\r\nAny authenticated user.", - "operationId": "PostProjectRetainersByProjectId", - "parameters": [ - { - "name": "projectId", + "name": "commentId", "in": "path", - "description": "The id of the project to create a retainer for.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -18738,29 +18048,22 @@ } ], "requestBody": { - "description": "The model to create a retainer.", + "description": "The model used to update the reactions of the comment with the specified id.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RetainerForm" + "$ref": "#/components/schemas/ReactionForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Retainer" - } - } - } + "204": { + "description": "No Content" }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -18795,14 +18098,14 @@ } } }, - "/projects/{projectId}/retainers/{retainerId}": { - "delete": { + "/projects/{projectId}/customfielddefinitions": { + "get": { "tags": [ - "Retainers" + "CustomFields" ], - "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": "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", @@ -18813,24 +18116,24 @@ "type": "string", "format": "uuid" } - }, - { - "name": "retainerId", - "in": "path", - "description": "The id of the retainer.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" + } + } + } + } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -18863,14 +18166,16 @@ "x-access": { "any": "true" } - }, - "get": { + } + }, + "/projects/{projectId}/customfielddefinitions/{customFieldDefinitionId}": { + "put": { "tags": [ - "Retainers" + "CustomFields" ], - "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": "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", @@ -18883,9 +18188,9 @@ } }, { - "name": "retainerId", + "name": "customFieldDefinitionId", "in": "path", - "description": "The id of the retainer.", + "description": "The id of the custom field definition.", "required": true, "schema": { "type": "string", @@ -18893,13 +18198,34 @@ } } ], + "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/Retainer" + "$ref": "#/components/schemas/CustomFieldOrderForm" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -18928,29 +18254,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projects/{projectId}/delete": { + "post": { "tags": [ - "Retainers" + "Projects" ], - "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": "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", "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", @@ -18959,29 +18277,22 @@ } ], "requestBody": { - "description": "The model to update the retainer.", + "description": "The model containing deletion options.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RetainerForm" + "$ref": "#/components/schemas/ProjectDeleteForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Retainer" - } - } - } + "204": { + "description": "No Content" }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -19016,19 +18327,19 @@ } } }, - "/projects/{projectId}/setcustomfields": { + "/projects/{projectId}/deletetags": { "post": { "tags": [ - "CustomFields" + "ProjectTags" ], - "summary": "Sets custom field values for a project.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostProjectSetCustomFieldsByProjectId", + "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 project.", + "description": "The id of the project to remove tags from.", "required": true, "schema": { "type": "string", @@ -19037,13 +18348,13 @@ } ], "requestBody": { - "description": "The list of custom field values to set.", + "description": "The model containing the tags to remove.", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/CustomFieldPostForm" + "$ref": "#/components/schemas/DeleteTagForm" } } } @@ -19054,6 +18365,9 @@ "204": { "description": "No Content" }, + "207": { + "description": "Multi-Status" + }, "400": { "description": "Bad Request", "content": { @@ -19100,14 +18414,14 @@ } } }, - "/projects/{projectId}/setprojectkey": { - "post": { + "/projects/{projectId}/documents": { + "get": { "tags": [ - "Projects" + "Documents" ], - "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": "Retrieves all documents for a project.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectDocumentsByProjectId", "parameters": [ { "name": "projectId", @@ -19118,45 +18432,30 @@ "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateProjectKeyForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentModel" + } } } } @@ -19173,24 +18472,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-master-data": "write" + "any": "true" } } }, - "/projects/{projectId}/tags": { + "/projects/{projectId}/documents/trash": { "get": { "tags": [ - "ProjectTags" + "Documents" ], - "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": "Retrieves all trashed documents for a project.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectDocumentsTrashByProjectId", "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", @@ -19218,41 +18516,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/BaseTagModel" + "$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": [ @@ -19270,14 +18538,14 @@ } } }, - "/projects/{projectId}/taskdependencies": { - "get": { + "/projects/{projectId}/externalfiles": { + "post": { "tags": [ - "TaskDependencies" + "ProjectFiles" ], - "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": "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", @@ -19290,26 +18558,34 @@ } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskDependency" - } + "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" } } } @@ -19330,14 +18606,14 @@ } } }, - "/projects/{projectId}/tasklists": { - "get": { + "/projects/{projectId}/files": { + "delete": { "tags": [ - "TaskLists" + "ProjectFiles" ], - "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", + "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", @@ -19348,52 +18624,11 @@ "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": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskList" - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -19410,13 +18645,13 @@ "any": "true" } }, - "post": { + "get": { "tags": [ - "TaskLists" + "ProjectFiles" ], - "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": "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", @@ -19427,56 +18662,30 @@ "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The task List form.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskListForm" - } - } - }, - "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": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } } } } @@ -19495,16 +18704,14 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/tasklists/{taskListId}": { - "get": { + }, + "post": { "tags": [ - "TaskLists" + "ProjectFiles" ], - "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": "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", @@ -19515,28 +18722,44 @@ "type": "string", "format": "uuid" } - }, - { - "name": "taskListId", - "in": "path", - "description": "The id of the task list.", - "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/TaskList" + "$ref": "#/components/schemas/FileInfo" } } } + }, + "400": { + "description": "Bad Request" } }, "security": [ @@ -19552,29 +18775,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projects/{projectId}/files/byuploadid": { + "post": { "tags": [ - "TaskLists" + "FileUpload" ], - "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": "Creates a file from an upload id.", + "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file project from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostUploadByUploadId", "parameters": [ { "name": "projectId", "in": "path", - "description": "The id of the project.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListId", - "in": "path", - "description": "The id of the task list.", + "description": "The id of the project to attach the file to.", "required": true, "schema": { "type": "string", @@ -19583,11 +18798,11 @@ } ], "requestBody": { - "description": "The task List Put form.", + "description": "The model describing the uploaded file metadata.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskListPutForm" + "$ref": "#/components/schemas/UploadByUploadIdForm" } } }, @@ -19599,23 +18814,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskList" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -19640,29 +18845,19 @@ } } }, - "/projects/{projectId}/tasklists/{taskListId}/addtasks": { + "/projects/{projectId}/files/byurl": { "post": { "tags": [ - "TaskLists" + "ProjectFiles" ], - "summary": "Adds the tasks to the task list with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostProjectTaskListAddTasksByProjectIdAndTaskListId", + "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.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListId", - "in": "path", - "description": "The id of the task list.", + "description": "The id of the project the file is linked to.", "required": true, "schema": { "type": "string", @@ -19671,18 +18866,19 @@ } ], "requestBody": { - "description": "The task To Task List list.", + "description": "The url, name and description of the file.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskToTaskList" - } + "$ref": "#/components/schemas/FilePostForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FilePostForm" } } - }, - "required": true + } }, "responses": { "200": { @@ -19690,20 +18886,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ReorderingResult" - } - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -19724,14 +18907,14 @@ } } }, - "/projects/{projectId}/tasklists/{taskListId}/changeproject": { - "post": { + "/projects/{projectId}/files/{fileId}": { + "delete": { "tags": [ - "TaskLists" + "ProjectFiles" ], - "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": "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", @@ -19744,9 +18927,9 @@ } }, { - "name": "taskListId", + "name": "fileId", "in": "path", - "description": "The id of the task list.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -19754,17 +18937,6 @@ } } ], - "requestBody": { - "description": "The change Project form For Task Lists.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChangeProjectFormForTaskLists" - } - } - }, - "required": true - }, "responses": { "204": { "description": "No Content" @@ -19783,16 +18955,14 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/tasklists/{taskListId}/copy": { - "post": { + }, + "get": { "tags": [ - "TaskLists" + "Project Files" ], - "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": "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", @@ -19805,9 +18975,9 @@ } }, { - "name": "taskListId", + "name": "fileId", "in": "path", - "description": "The id of the task list.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -19821,7 +18991,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskList" + "$ref": "#/components/schemas/FileInfo" } } } @@ -19860,16 +19030,14 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/tasklists/{taskListId}/delete": { - "post": { + }, + "put": { "tags": [ - "TaskLists" + "ProjectFiles" ], - "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": "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", @@ -19882,9 +19050,9 @@ } }, { - "name": "taskListId", + "name": "fileId", "in": "path", - "description": "The id of the task list.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -19893,36 +19061,27 @@ } ], "requestBody": { - "description": "The task List Delete form.", + "description": "The model to update the file with the specified id.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskListDeleteForm" + "$ref": "#/components/schemas/FileInfoUpdateForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileInfoUpdateForm" } } - }, - "required": true + } }, "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" + "$ref": "#/components/schemas/FileInfo" } } } @@ -19943,14 +19102,14 @@ } } }, - "/projects/{projectId}/tasklists/{taskListId}/removetasks": { + "/projects/{projectId}/files/{fileId}/changeentity": { "post": { "tags": [ - "TaskLists" + "ProjectFiles" ], - "summary": "Removes the tasks from the task list with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostProjectTaskListRemoveTasksByProjectIdAndTaskListId", + "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", @@ -19963,9 +19122,9 @@ } }, { - "name": "taskListId", + "name": "fileId", "in": "path", - "description": "The id of the task list.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -19974,23 +19133,30 @@ } ], "requestBody": { - "description": "The id of the tasks.", + "description": "The model to change the entity information of the file.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/schemas/FileEntityForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileEntityForm" } } - }, - "required": true + } }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } } }, "security": [ @@ -20008,14 +19174,14 @@ } } }, - "/projects/{projectId}/tasklists/{taskListId}/setarchived": { + "/projects/{projectId}/files/{fileId}/copy": { "post": { "tags": [ - "TaskLists" + "ProjectFiles" ], - "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": "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", @@ -20028,9 +19194,9 @@ } }, { - "name": "taskListId", + "name": "fileId", "in": "path", - "description": "The id of the task list.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -20039,15 +19205,19 @@ } ], "requestBody": { - "description": "The archived Task List form.", + "description": "The model to change the entity information of the file.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ArchivedTaskListForm" + "$ref": "#/components/schemas/FileCopyForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileCopyForm" } } - }, - "required": true + } }, "responses": { "200": { @@ -20055,37 +19225,7 @@ "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": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -20106,14 +19246,14 @@ } } }, - "/projects/{projectId}/tasklists/{taskListId}/tasks/{taskId}": { + "/projects/{projectId}/files/{fileId}/download": { "get": { "tags": [ - "TaskLists" + "ProjectFiles" ], - "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": "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", @@ -20126,9 +19266,9 @@ } }, { - "name": "taskListId", + "name": "fileId", "in": "path", - "description": "The id of the task list.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -20136,13 +19276,29 @@ } }, { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, + "name": "width", + "in": "query", + "description": "Set width to resize.", "schema": { - "type": "string", - "format": "uuid" + "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" } } ], @@ -20152,37 +19308,8 @@ "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" + "type": "string", + "format": "binary" } } } @@ -20203,14 +19330,14 @@ } } }, - "/projects/{projectId}/tasklists/{taskListId}/tasks/{taskId}/updateorder": { - "post": { + "/projects/{projectId}/files/{fileId}/pdf": { + "get": { "tags": [ - "TaskLists" + "ProjectFiles" ], - "summary": "Updates the order of a task in a task list.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostProjectTaskListTaskUpdateOrderByProjectIdAndTaskListIdAndTaskId", + "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", @@ -20223,9 +19350,9 @@ } }, { - "name": "taskListId", + "name": "fileId", "in": "path", - "description": "The id of the task list.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -20233,57 +19360,23 @@ } }, { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, + "name": "inline", + "in": "query", + "description": "If inline is false, content-disposition header is attachment.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } } ], - "requestBody": { - "description": "The task In Task List Update Order form.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskInTaskListUpdateOrderForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "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" + "type": "string", + "format": "binary" } } } @@ -20304,14 +19397,14 @@ } } }, - "/projects/{projectId}/tasklists/{taskListId}/updateorder": { - "post": { + "/projects/{projectId}/files/{fileId}/shareurl": { + "get": { "tags": [ - "TaskLists" + "ProjectFiles" ], - "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 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", @@ -20324,9 +19417,9 @@ } }, { - "name": "taskListId", + "name": "fileId", "in": "path", - "description": "The id of the task list.", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -20334,37 +19427,13 @@ } } ], - "requestBody": { - "description": "The update Order form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateOrderForm" - } - } - }, - "required": true - }, "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" } } } @@ -20385,14 +19454,14 @@ } } }, - "/projects/{projectId}/taskstatuses": { + "/projects/{projectId}/files/{fileId}/versions": { "get": { "tags": [ - "TaskStatuses" + "ProjectFiles" ], - "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 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", @@ -20404,6 +19473,16 @@ "format": "uuid" } }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, { "$ref": "#/components/parameters/page" }, @@ -20425,31 +19504,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TaskStatus" + "$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": [ @@ -20468,11 +19527,11 @@ }, "post": { "tags": [ - "TaskStatuses" + "ProjectFiles" ], - "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": "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", @@ -20483,18 +19542,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 used to create the task status.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/TaskStatusForm" + "required": [ + "File" + ], + "type": "object", + "properties": { + "File": { + "type": "string", + "format": "binary" + } + } + }, + "encoding": { + "File": { + "style": "form" + } } } - }, - "required": true + } }, "responses": { "200": { @@ -20502,40 +19583,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatus" + "$ref": "#/components/schemas/FileVersion" } } } }, "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "description": "Bad Request" } }, "security": [ @@ -20553,14 +19607,14 @@ } } }, - "/projects/{projectId}/taskstatuses/{taskStatusId}": { + "/projects/{projectId}/files/{fileId}/versions/{versionId}": { "get": { "tags": [ - "TaskStatuses" + "Project Files" ], - "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 project file version with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByProjectNameAndProjectIdAndFileIdAndVersionId", "parameters": [ { "name": "projectId", @@ -20573,9 +19627,19 @@ } }, { - "name": "taskStatusId", + "name": "fileId", "in": "path", - "description": "The id of the task status.", + "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", @@ -20589,7 +19653,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatus" + "$ref": "#/components/schemas/FileVersion" } } } @@ -20628,14 +19692,16 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projects/{projectId}/files/{fileId}/versions/{versionId}/download": { + "get": { "tags": [ - "TaskStatuses" + "ProjectFiles" ], - "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": "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", @@ -20648,9 +19714,19 @@ } }, { - "name": "taskStatusId", + "name": "fileId", "in": "path", - "description": "The id of the task status to update.", + "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", @@ -20658,54 +19734,14 @@ } } ], - "requestBody": { - "description": "The tmodel containing the task status data.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskStatusForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatus" - } - } - } - }, - "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" } } } @@ -20726,14 +19762,14 @@ } } }, - "/projects/{projectId}/taskstatuses/{taskStatusId}/delete": { + "/projects/{projectId}/linkcustomfielddefinition": { "post": { "tags": [ - "TaskStatuses" + "CustomFields" ], - "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": "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", @@ -20744,24 +19780,14 @@ "type": "string", "format": "uuid" } - }, - { - "name": "taskStatusId", - "in": "path", - "description": "The id of the task status.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "requestBody": { - "description": "The model containing the id of the new task status to move tasks to.", + "description": "The model used to link the custom field definition.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatusDeleteForm" + "$ref": "#/components/schemas/LinkCustomFieldDefinitionForm" } } }, @@ -20817,14 +19843,14 @@ } } }, - "/projects/{projectId}/timeentries": { - "get": { + "/projects/{projectId}/linkworkflow": { + "post": { "tags": [ - "TimeEntries" + "Workflows" ], - "summary": "Returns all time entries of the specified project.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTimeEntries", + "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", @@ -20835,30 +19861,56 @@ "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], + "requestBody": { + "description": "The link workflow form.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LinkWorkflowForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TimeTracking" - } + "$ref": "#/components/schemas/Project" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -20879,14 +19931,14 @@ } } }, - "/projects/{projectId}/typeofwork": { + "/projects/{projectId}/members": { "get": { "tags": [ - "ProjectTasks" + "Projects" ], - "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": "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", @@ -20907,7 +19959,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TypeOfWork" + "$ref": "#/components/schemas/ProjectMember" } } } @@ -20949,19 +20001,19 @@ } } }, - "/projects/{projectId}/unlinkcustomfielddefinition": { - "post": { + "/projects/{projectId}/milestones": { + "get": { "tags": [ - "CustomFields" + "ProjectMilestones" ], - "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": "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 unlink the custom field definition from.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -20969,27 +20021,16 @@ } } ], - "requestBody": { - "description": "The model describing the custom field definition to unlink.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UnlinkCustomFieldDefinitionForm" - } - } - }, - "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/ProjectMilestone" + } } } } @@ -21003,16 +20044,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -21030,24 +20061,35 @@ } } }, - "/projects/{projectId}/unlinkworkflow": { - "post": { + "/projects/{projectId}/projectstatuses": { + "get": { "tags": [ - "Workflows" + "ProjectStatuses" ], - "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": "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" } ], "responses": { @@ -21056,17 +20098,10 @@ "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/ProjectStatus" + } } } } @@ -21105,16 +20140,14 @@ "x-access": { "any": "true" } - } - }, - "/projects/{projectId}/updateprojectmember": { + }, "post": { "tags": [ - "ProjectMembers" + "ProjectStatuses" ], - "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": "Creates a project status for a project.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostProjectProjectStatusesByProjectId", "parameters": [ { "name": "projectId", @@ -21128,11 +20161,11 @@ } ], "requestBody": { - "description": "The model containing updated project member details.", + "description": "The model to create the project status.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMemberForm" + "$ref": "#/components/schemas/ProjectStatusForm" } } }, @@ -21144,7 +20177,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMember" + "$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" } } } @@ -21165,14 +20228,14 @@ } } }, - "/projects/{projectId}/updateprojectstatusorder": { - "post": { + "/projects/{projectId}/projecttasks": { + "get": { "tags": [ - "Projects" + "ProjectTasks" ], - "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": "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", @@ -21183,29 +20246,30 @@ "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The model to update the project status order.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateProjectStatusOrderForm" - } - } - }, - "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/TaskModel" + } } } } @@ -21236,35 +20300,34 @@ } } }, - "/projectstatuses": { + "/projects/{projectId}/projecttasks/{taskId}": { "get": { "tags": [ - "ProjectStatuses" + "ProjectTasks" ], - "summary": "Returns all project statuses.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectStatuses", + "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": "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" } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -21273,16 +20336,13 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectStatus" - } + "$ref": "#/components/schemas/TaskModel" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -21291,8 +20351,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -21317,19 +20377,29 @@ } } }, - "/projectstatuses/{projectStatusId}": { - "get": { + "/projects/{projectId}/projecttasks/{taskId}/changeproject": { + "post": { "tags": [ - "ProjectStatuses" + "ProjectTasks" ], - "summary": "Returns the project status with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectStatusById", + "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": "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": "taskId", + "in": "path", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -21337,17 +20407,21 @@ } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectStatus" - } + "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": { @@ -21392,19 +20466,31 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projects/{projectId}/projecttasks/{taskId}/checklistitems": { + "get": { "tags": [ - "ProjectStatuses" + "ChecklistItems" ], - "summary": "Updates an existing project status.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PutProjectStatusById", + "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": "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": "taskId", + "in": "path", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -21412,34 +20498,16 @@ } } ], - "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" + "type": "array", + "items": { + "$ref": "#/components/schemas/ChecklistItem" + } } } } @@ -21480,47 +20548,53 @@ } } }, - "/projectstatuses/{projectStatusId}/delete": { - "post": { + "/projects/{projectId}/projecttasks/{taskId}/checklistitems/{checklistItemId}": { + "get": { "tags": [ - "ProjectStatuses" + "ChecklistItems" ], - "summary": "Deletes a project status.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostProjectStatusDeleteByProjectStatusId", + "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": "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" } - } - ], - "requestBody": { - "description": "The model to delete the project status.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectStatusDeleteForm" - } + }, + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "checklistItemId", + "in": "path", + "description": "The id of the checklist item.", + "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/ChecklistItem" } } } @@ -21561,19 +20635,19 @@ } } }, - "/projectstatuses/{projectStatusId}/setarchived": { + "/projects/{projectId}/removeprojectmember": { "post": { "tags": [ - "ProjectStatuses" + "Projects" ], - "summary": "Sets the archived flag for a project status.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostProjectStatusSetArchivedByProjectStatusId", + "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": "projectStatusId", + "name": "projectId", "in": "path", - "description": "The id of the project status.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -21582,26 +20656,19 @@ } ], "requestBody": { - "description": "The model to set the archived flag for the project status.", + "description": "The model to remove the project member.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ArchivedForm" + "$ref": "#/components/schemas/ProjectMemberRemoveForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectStatus" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -21649,23 +20716,33 @@ } } }, - "/projecttemplates": { + "/projects/{projectId}/retainers": { "get": { "tags": [ - "ProjectTemplates" + "Retainers" ], - "summary": "Retrieves all project templates.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplates", + "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": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" + "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" @@ -21679,7 +20756,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ProjectTemplate" + "$ref": "#/components/schemas/Retainer" } } } @@ -21702,17 +20779,29 @@ }, "post": { "tags": [ - "ProjectTemplates" + "Retainers" + ], + "summary": "Endpoint to create a new retainer for a project.", + "description": "As soon as a retainer is created for a project, the project will be marked as a retainer project.\r\n Based on the Start and End dates of the retainer, the retainer budgets will be created automatically.\r\n Retainers cannot overlap. There can only be one active retainer per project at a time (no end date and/or including the current date).\r\n \r\n The user needs to have the ProjectMasterData write permission for the project to access this endpoint.\r\n\r\nAny authenticated user.", + "operationId": "PostProjectRetainersByProjectId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project to create a retainer for.", + "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.", + "description": "The model to create a retainer.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectTemplateForm" + "$ref": "#/components/schemas/RetainerForm" } } }, @@ -21724,7 +20813,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectTemplate" + "$ref": "#/components/schemas/Retainer" } } } @@ -21738,6 +20827,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -21751,30 +20850,40 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/deletetags": { - "post": { + "/projects/{projectId}/retainers/{retainerId}": { + "delete": { "tags": [ - "ProjectTemplateTags" + "Retainers" ], - "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/DeleteTagForm" - } + "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", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "retainerId", + "in": "path", + "description": "The id of the retainer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "responses": { "204": { "description": "No Content" @@ -21789,8 +20898,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -21811,35 +20920,51 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } - } - }, - "/projecttemplates/tags": { + }, "get": { "tags": [ - "ProjectTemplateTags" + "Retainers" + ], + "summary": "Endpoint to get a retainer for a project by id.", + "description": "The user must have the ProjectMasterData read permission for the project to access this endpoint.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectRetainerByProjectIdAndRetainerId", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "The id of the project.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "retainerId", + "in": "path", + "description": "The id of the retainer.", + "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/Retainer" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -21862,30 +20987,57 @@ "x-access": { "any": "true" } - } - }, - "/projecttemplates/updatetags": { - "post": { + }, + "put": { "tags": [ - "ProjectTemplateTags" + "Retainers" + ], + "summary": "Endpoint to update the retainer for a project.", + "description": "Date changes must not overlap another retainer for the project. The retainer period cannot be changed.\r\n \r\n The user needs to have the ProjectMasterData write permission for the project to access this endpoint.\r\n\r\nAny authenticated user.", + "operationId": "PutProjectRetainerByProjectIdAndRetainerId", + "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.", + "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 to update the retainer.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TagUpdateForm" + "$ref": "#/components/schemas/RetainerForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Retainer" + } + } + } }, "400": { "description": "Bad Request", @@ -21897,8 +21049,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -21919,24 +21071,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}": { - "delete": { + "/projects/{projectId}/setcustomfields": { + "post": { "tags": [ - "ProjectTemplates" + "CustomFields" ], - "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": "Sets custom field values for a project.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostProjectSetCustomFieldsByProjectId", "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", @@ -21944,52 +21095,40 @@ } } ], + "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" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "project-manage-config": "write" - } - }, - "get": { - "tags": [ - "ProjectTemplates" - ], - "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 to retrieve.", - "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/ProjectTemplate" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -22018,19 +21157,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/projects/{projectId}/setprojectkey": { + "post": { "tags": [ - "ProjectTemplates" + "Projects" ], - "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": "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": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -22039,11 +21180,10 @@ } ], "requestBody": { - "description": "The model to update the project template.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectTemplateForm" + "$ref": "#/components/schemas/UpdateProjectKeyForm" } } }, @@ -22055,7 +21195,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectTemplate" + "$ref": "#/components/schemas/Project" } } } @@ -22093,44 +21233,42 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "project-master-data": "write" } } }, - "/projecttemplates/{projectTemplateId}/addtags": { - "post": { + "/projects/{projectId}/tags": { + "get": { "tags": [ - "ProjectTemplateTags" + "ProjectTags" ], - "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": "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": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template to add tags to.", + "description": "The id of the project to get tags for.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The model containing the tags to add.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TagForm" - } - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", @@ -22187,24 +21325,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}/automations": { + "/projects/{projectId}/taskdependencies": { "get": { "tags": [ - "Project Template Automations" + "TaskDependencies" ], - "summary": "Returns all automations for a project template.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateAutomations", + "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": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -22220,11 +21357,21 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Automation" + "$ref": "#/components/schemas/TaskDependency" } } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -22240,50 +21387,65 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/projects/{projectId}/tasklists": { + "get": { "tags": [ - "Project Template Automations" + "TaskLists" ], - "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": "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": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The model to create the automation.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AutomationTriggerForm" - } + }, + { + "name": "showArchived", + "in": "query", + "description": "The show Archived.", + "schema": { + "type": "boolean", + "default": false } }, - "required": true - }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskList" + } } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -22304,53 +21466,49 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } - } - }, - "/projecttemplates/{projectTemplateId}/automations/{automationId}": { - "delete": { + }, + "post": { "tags": [ - "Project Template Automations" + "TaskLists" ], - "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": "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": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project.", "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 task List form.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskListForm" + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskList" + } + } + } }, "400": { "description": "Bad Request", @@ -22361,12 +21519,32 @@ } } } - } - }, - "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" ] } ], @@ -22374,22 +21552,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } - }, + } + }, + "/projects/{projectId}/tasklists/{taskListId}": { "get": { "tags": [ - "Project Template Automations" + "TaskLists" ], - "summary": "Returns a specific automation for a projecttemplate.", - "description": "Returns a specific automation of the projecttemplate with the specified id.\r\n Returns NotFound if the automation doesnt exist.\r\n To get the the automation data the user needs to have 'read' permissions of\r\n the feature 'project-manage-config' globally.\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", - "operationId": "GetProjectTemplateAutomation", + "summary": "Returns 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": "automationId", + "name": "projectId", "in": "path", - "description": "The id of the automation.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -22397,9 +21576,9 @@ } }, { - "name": "projectTemplateId", + "name": "taskListId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the task list.", "required": true, "schema": { "type": "string", @@ -22413,7 +21592,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" + "$ref": "#/components/schemas/TaskList" } } } @@ -22430,21 +21609,21 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "read" + "any": "true" } }, "put": { "tags": [ - "Project Template Automations" + "TaskLists" ], - "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", + "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": "automationId", + "name": "projectId", "in": "path", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -22452,8 +21631,9 @@ } }, { - "name": "projectTemplateId", + "name": "taskListId", "in": "path", + "description": "The id of the task list.", "required": true, "schema": { "type": "string", @@ -22462,10 +21642,11 @@ } ], "requestBody": { + "description": "The task List Put form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AutomationPutForm" + "$ref": "#/components/schemas/TaskListPutForm" } } }, @@ -22477,7 +21658,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" + "$ref": "#/components/schemas/TaskList" } } } @@ -22491,64 +21672,13 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "project-manage-config": "write" - } - } - }, - "/projecttemplates/{projectTemplateId}/automations/{automationId}/actions": { - "get": { - "tags": [ - "Project Template Automations" - ], - "summary": "Gets the actions of an automation of a project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", - "operationId": "GetProjectTemplateAutomationActions", - "parameters": [ - { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } }, - { - "name": "automationId", - "in": "path", - "description": "The id of the automation.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Action" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -22565,22 +21695,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "read" + "any": "true" } - }, + } + }, + "/projects/{projectId}/tasklists/{taskListId}/addtasks": { "post": { "tags": [ - "Project Template Automations" + "TaskLists" ], - "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", + "summary": "Adds the tasks to the task list with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostProjectTaskListAddTasksByProjectIdAndTaskListId", "parameters": [ { - "name": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -22588,9 +21719,9 @@ } }, { - "name": "automationId", + "name": "taskListId", "in": "path", - "description": "The id of the automation.", + "description": "The id of the task list.", "required": true, "schema": { "type": "string", @@ -22599,11 +21730,14 @@ } ], "requestBody": { - "description": "The model to create an action.", + "description": "The task To Task List list.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ActionForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskToTaskList" + } } } }, @@ -22615,7 +21749,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" + "type": "array", + "items": { + "$ref": "#/components/schemas/ReorderingResult" + } } } } @@ -22642,34 +21779,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}/automations/{automationId}/actions/{actionId}": { - "delete": { + "/projects/{projectId}/tasklists/{taskListId}/changeproject": { + "post": { "tags": [ - "Project Template Automations" + "TaskLists" ], - "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": "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": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", + "name": "projectId", "in": "path", - "description": "The id of the automation.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -22677,9 +21803,9 @@ } }, { - "name": "actionId", + "name": "taskListId", "in": "path", - "description": "The id of the action.", + "description": "The id of the task list.", "required": true, "schema": { "type": "string", @@ -22687,19 +21813,20 @@ } } ], + "requestBody": { + "description": "The change Project form For Task Lists.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChangeProjectFormForTaskLists" + } + } + }, + "required": true + }, "responses": { "204": { "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -22713,32 +21840,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } - }, - "get": { + } + }, + "/projects/{projectId}/tasklists/{taskListId}/copy": { + "post": { "tags": [ - "Project Template Automations" + "TaskLists" ], - "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": "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": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", + "name": "projectId", "in": "path", - "description": "The id of the automation.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -22746,9 +21864,9 @@ } }, { - "name": "actionId", + "name": "taskListId", "in": "path", - "description": "The id of the action.", + "description": "The id of the task list.", "required": true, "schema": { "type": "string", @@ -22762,7 +21880,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" + "$ref": "#/components/schemas/TaskList" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -22779,32 +21917,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "read" + "any": "true" } - }, - "put": { + } + }, + "/projects/{projectId}/tasklists/{taskListId}/delete": { + "post": { "tags": [ - "Project Template Automations" + "TaskLists" ], - "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": "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": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", + "name": "projectId", "in": "path", - "description": "The id of the automation.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -22812,9 +21941,9 @@ } }, { - "name": "actionId", + "name": "taskListId", "in": "path", - "description": "The id of the action.", + "description": "The id of the task list.", "required": true, "schema": { "type": "string", @@ -22823,29 +21952,32 @@ } ], "requestBody": { - "description": "The model to update an action.", + "description": "The task List Delete form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ActionForm" + "$ref": "#/components/schemas/TaskListDeleteForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -22866,34 +21998,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}/automations/{automationId}/actions/{actionId}/updateorder": { + "/projects/{projectId}/tasklists/{taskListId}/removetasks": { "post": { "tags": [ - "Project Template Automations" + "TaskLists" ], - "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": "Removes the tasks from the task list with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostProjectTaskListRemoveTasksByProjectIdAndTaskListId", "parameters": [ { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", + "name": "projectId", "in": "path", - "description": "The id of the automation.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -22901,9 +22022,9 @@ } }, { - "name": "actionId", + "name": "taskListId", "in": "path", - "description": "The id of the action.", + "description": "The id of the task list.", "required": true, "schema": { "type": "string", @@ -22912,11 +22033,15 @@ } ], "requestBody": { - "description": "The model to update the order.", + "description": "The id of the tasks.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateOrderForm" + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } } } }, @@ -22925,16 +22050,6 @@ "responses": { "204": { "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -22948,24 +22063,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}/automations/{automationId}/reapply": { + "/projects/{projectId}/tasklists/{taskListId}/setarchived": { "post": { "tags": [ - "Project Template Automations" + "TaskLists" ], - "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", + "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": "automationId", + "name": "projectId", "in": "path", - "description": "The id of the automation.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -22973,9 +22087,9 @@ } }, { - "name": "projectTemplateId", + "name": "taskListId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the task list.", "required": true, "schema": { "type": "string", @@ -22983,9 +22097,57 @@ } } ], + "requestBody": { + "description": "The archived Task List form.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ArchivedTaskListForm" + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "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": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -22999,24 +22161,43 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}/customfielddefinitions": { + "/projects/{projectId}/tasklists/{taskListId}/tasks/{taskId}": { "get": { "tags": [ - "CustomFields" + "TaskLists" ], - "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", + "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": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template.", + "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", @@ -23030,10 +22211,27 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" - } + "$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" } } } @@ -23064,19 +22262,19 @@ } } }, - "/projecttemplates/{projectTemplateId}/customfielddefinitions/{customFieldDefinitionId}": { - "put": { + "/projects/{projectId}/tasklists/{taskListId}/tasks/{taskId}/updateorder": { + "post": { "tags": [ - "CustomFields" + "TaskLists" ], - "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": "Updates the order of a task in a task list.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostProjectTaskListTaskUpdateOrderByProjectIdAndTaskListIdAndTaskId", "parameters": [ { - "name": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -23084,78 +22282,19 @@ } }, { - "name": "customFieldDefinitionId", + "name": "taskListId", "in": "path", - "description": "The id of the custom field definition.", + "description": "The id of the task list.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The model used to update the order of the custom field definition.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomFieldOrderPutForm" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomFieldOrderForm" - } - } - } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "project-manage-config": "write" - } - } - }, - "/projecttemplates/{projectTemplateId}/deletetags": { - "post": { - "tags": [ - "ProjectTemplateTags" - ], - "summary": "Removes tags from the project template with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateDeleteTagsByProjectTemplateId", - "parameters": [ { - "name": "projectTemplateId", + "name": "taskId", "in": "path", - "description": "The id of the project template to remove tags from.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -23164,38 +22303,32 @@ } ], "requestBody": { - "description": "The model containing the tags to delete.", + "description": "The task In Task List Update Order form.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DeleteTagForm" - } + "$ref": "#/components/schemas/TaskInTaskListUpdateOrderForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "207": { - "description": "Multi-Status" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/ReorderingResult" + } } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -23204,8 +22337,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -23226,24 +22359,33 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}/linkcustomfielddefinition": { + "/projects/{projectId}/tasklists/{taskListId}/updateorder": { "post": { "tags": [ - "CustomFields" + "TaskLists" ], - "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 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": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template.", + "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", @@ -23252,11 +22394,11 @@ } ], "requestBody": { - "description": "The model used to link the custom field definition.", + "description": "The update Order form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LinkCustomFieldDefinitionForm" + "$ref": "#/components/schemas/UpdateOrderForm" } } }, @@ -23266,8 +22408,8 @@ "204": { "description": "No Content" }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -23298,24 +22440,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}/milestones": { + "/projects/{projectId}/taskstatuses": { "get": { "tags": [ - "ProjectMilestoneTemplates" + "TaskStatuses" ], - "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", + "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": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -23343,11 +22484,31 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ProjectMilestoneTemplate" + "$ref": "#/components/schemas/TaskStatus" } } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -23361,22 +22522,21 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "read" + "any": "true" } }, "post": { "tags": [ - "ProjectMilestoneTemplates" + "TaskStatuses" ], - "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 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": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -23385,11 +22545,11 @@ } ], "requestBody": { - "description": "The model containing milestone template details.", + "description": "The model used to create the task status.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestoneTemplateForm" + "$ref": "#/components/schemas/TaskStatusForm" } } }, @@ -23401,7 +22561,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestoneTemplate" + "$ref": "#/components/schemas/TaskStatus" + } + } + } + }, + "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" } } } @@ -23418,24 +22608,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}/milestones/{milestoneId}": { - "delete": { + "/projects/{projectId}/taskstatuses/{taskStatusId}": { + "get": { "tags": [ - "ProjectMilestoneTemplates" + "TaskStatuses" ], - "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": "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": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -23443,9 +22632,9 @@ } }, { - "name": "milestoneId", + "name": "taskStatusId", "in": "path", - "description": "The id of the milestone.", + "description": "The id of the task status.", "required": true, "schema": { "type": "string", @@ -23454,8 +22643,35 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskStatus" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -23469,22 +22685,21 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } }, - "get": { + "put": { "tags": [ - "ProjectMilestoneTemplates" + "TaskStatuses" ], - "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": "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": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -23492,9 +22707,9 @@ } }, { - "name": "milestoneId", + "name": "taskStatusId", "in": "path", - "description": "The id of the milestone.", + "description": "The id of the task status to update.", "required": true, "schema": { "type": "string", @@ -23502,13 +22717,54 @@ } } ], + "requestBody": { + "description": "The tmodel containing the task status data.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskStatusForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestoneTemplate" + "$ref": "#/components/schemas/TaskStatus" + } + } + } + }, + "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" } } } @@ -23525,22 +22781,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "read" + "any": "true" } - }, - "put": { + } + }, + "/projects/{projectId}/taskstatuses/{taskStatusId}/delete": { + "post": { "tags": [ - "ProjectMilestoneTemplates" + "TaskStatuses" ], - "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": "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": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -23548,9 +22805,9 @@ } }, { - "name": "milestoneId", + "name": "taskStatusId", "in": "path", - "description": "The id of the milestone.", + "description": "The id of the task status.", "required": true, "schema": { "type": "string", @@ -23559,23 +22816,46 @@ } ], "requestBody": { - "description": "The model containing updated milestone template details.", + "description": "The model containing the id of the new task status to move tasks to.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestoneTemplateForm" + "$ref": "#/components/schemas/TaskStatusDeleteForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMilestoneTemplate" + "$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" } } } @@ -23592,29 +22872,40 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}/projectstatuses": { + "/projects/{projectId}/timeentries": { "get": { "tags": [ - "ProjectTemplates" + "TimeEntries" ], - "summary": "Retrieves all project statuses of a project template.", + "summary": "Returns all time entries of the specified project.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateProjectStatusesByProjectTemplateId", + "operationId": "GetProjectTimeEntries", "parameters": [ { - "name": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template to retrieve statuses for.", + "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": { @@ -23625,21 +22916,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ProjectStatus" + "$ref": "#/components/schemas/TimeTracking" } } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -23655,19 +22936,21 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/projects/{projectId}/typeofwork": { + "get": { "tags": [ - "ProjectTemplates" + "ProjectTasks" ], - "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", + "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": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -23675,34 +22958,16 @@ } } ], - "requestBody": { - "description": "The model to add the project status to the template.", - "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" + "type": "array", + "items": { + "$ref": "#/components/schemas/TypeOfWork" + } } } } @@ -23739,24 +23004,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}/setcustomfields": { + "/projects/{projectId}/unlinkcustomfielddefinition": { "post": { "tags": [ "CustomFields" ], - "summary": "Sets the custom fields for a project template.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostProjectTemplateSetCustomFieldsByProjectTemplateId", + "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": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project to unlink the custom field definition from.", "required": true, "schema": { "type": "string", @@ -23765,14 +23029,11 @@ } ], "requestBody": { - "description": "The list of custom field values to set.", + "description": "The model describing the custom field definition to unlink.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomFieldPostForm" - } + "$ref": "#/components/schemas/UnlinkCustomFieldDefinitionForm" } } }, @@ -23781,66 +23042,13 @@ "responses": { "204": { "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "project-manage-config": "write" - } - } - }, - "/projecttemplates/{projectTemplateId}/tags": { - "get": { - "tags": [ - "ProjectTemplateTags" - ], - "summary": "Returns the tags of the project template with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", - "operationId": "GetProjectTemplateTagsByProjectTemplateId", - "parameters": [ - { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template to get tags for.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -23877,24 +23085,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "read" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}/taskbundle": { - "get": { + "/projects/{projectId}/unlinkworkflow": { + "post": { "tags": [ - "ProjectTemplates" + "Workflows" ], - "summary": "Retrieves the task bundle associated with a project template.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateTaskBundleByProjectTemplateId", + "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": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -23908,7 +23115,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskBundleResult" + "$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" } } } @@ -23939,58 +23166,44 @@ } } }, - "/projecttemplates/{projectTemplateId}/taskstatuses": { - "get": { + "/projects/{projectId}/updateprojectmember": { + "post": { "tags": [ - "ProjectTemplates" + "ProjectMembers" ], - "summary": "Returns all task statuses of the project template with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateTaskStatusesByProjectTemplateId", + "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": "projectTemplateId", + "name": "projectId", "in": "path", - "description": "The id of the project template.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskStatus" - } - } + "requestBody": { + "description": "The model containing updated project member details.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectMemberForm" } } }, - "404": { - "description": "Not Found", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectMember" } } } @@ -24009,19 +23222,21 @@ "x-access": { "any": "true" } - }, + } + }, + "/projects/{projectId}/updateprojectstatusorder": { "post": { "tags": [ - "ProjectTemplates" + "Projects" ], - "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", + "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.", + "description": "The id of the project.", "required": true, "schema": { "type": "string", @@ -24030,26 +23245,19 @@ } ], "requestBody": { - "description": "The task Status form payload.", + "description": "The model to update the project status order.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatusForm" + "$ref": "#/components/schemas/UpdateProjectStatusOrderForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskStatus" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -24083,44 +23291,54 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}/taskstatuses/{taskStatusId}": { - "delete": { + "/projectstatuses": { + "get": { "tags": [ - "ProjectTemplates" + "ProjectStatuses" ], - "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 project statuses.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectStatuses", "parameters": [ { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, + "name": "showArchived", + "in": "query", + "description": "Whether to include archived project statuses.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } }, { - "name": "taskStatusId", - "in": "path", - "description": "The id of the task status.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectStatus" + } + } + } + } }, "400": { "description": "Bad Request", @@ -24132,8 +23350,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -24154,32 +23372,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } - }, + } + }, + "/projectstatuses/{projectStatusId}": { "get": { "tags": [ - "ProjectTemplates" + "ProjectStatuses" ], - "summary": "Returns the task status of the project template with the specified id.", + "summary": "Returns the project status with the specified id.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTemplateTaskStatusByProjectTemplateIdAndTaskStatusId", + "operationId": "GetProjectStatusById", "parameters": [ { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskStatusId", + "name": "projectStatusId", "in": "path", - "description": "The id of the task status.", + "description": "The id of the project status.", "required": true, "schema": { "type": "string", @@ -24193,7 +23402,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatus" + "$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" } } } @@ -24225,26 +23454,16 @@ }, "put": { "tags": [ - "ProjectTemplates" + "ProjectStatuses" ], - "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": "Updates an existing project status.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PutProjectStatusById", "parameters": [ { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskStatusId", + "name": "projectStatusId", "in": "path", - "description": "The id of the task status to update.", + "description": "The id of the project status.", "required": true, "schema": { "type": "string", @@ -24253,11 +23472,11 @@ } ], "requestBody": { - "description": "The model used to update the task status.", + "description": "The model to update the project status.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatusForm" + "$ref": "#/components/schemas/ProjectStatusForm" } } }, @@ -24269,7 +23488,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatus" + "$ref": "#/components/schemas/ProjectStatus" } } } @@ -24284,6 +23503,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -24306,24 +23535,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}/unlinkcustomfielddefinition": { + "/projectstatuses/{projectStatusId}/delete": { "post": { "tags": [ - "CustomFields" + "ProjectStatuses" ], - "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": "Deletes a project status.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostProjectStatusDeleteByProjectStatusId", "parameters": [ { - "name": "projectTemplateId", + "name": "projectStatusId", "in": "path", - "description": "The id of the project template to unlink the custom field definition from.", + "description": "The id of the project status to delete.", "required": true, "schema": { "type": "string", @@ -24332,11 +23560,11 @@ } ], "requestBody": { - "description": "The model used to unlink the custom field definition.", + "description": "The model to delete the project status.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UnlinkCustomFieldDefinitionForm" + "$ref": "#/components/schemas/ProjectStatusDeleteForm" } } }, @@ -24356,6 +23584,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -24378,24 +23616,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}/unlinkworkflow": { + "/projectstatuses/{projectStatusId}/setarchived": { "post": { "tags": [ - "Workflows" + "ProjectStatuses" ], - "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": "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", @@ -24403,13 +23640,24 @@ } } ], + "requestBody": { + "description": "The model to set the archived flag for the project status.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ArchivedForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectTemplate" + "$ref": "#/components/schemas/ProjectStatus" } } } @@ -24424,6 +23672,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -24446,58 +23704,92 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/projecttemplates/{projectTemplateId}/updateprojectstatusorder": { - "post": { + "/projecttemplates": { + "get": { "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", + "summary": "Retrieves all project templates.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTemplates", "parameters": [ { - "name": "projectTemplateId", - "in": "path", - "description": "The id of the project template to update the status order for.", - "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/ProjectTemplate" + } + } + } } } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "ProjectTemplates" ], + "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 update the project template status order.", + "description": "The model to create the project template.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateProjectStatusOrderForm" + "$ref": "#/components/schemas/ProjectTemplateForm" } } }, "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/ProjectTemplate" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -24523,54 +23815,94 @@ } } }, - "/projecttemplates/{projecttemplateId}/externalfiles": { + "/projecttemplates/deletetags": { "post": { "tags": [ - "ProjectTemplateFiles" - ], - "summary": "Endpoint to batch create external files without uploading.", - "description": "Endpoint to create file infos with batch operation.\nCreated file infos don't have a version.\r\n\r\nAny authenticated user.", - "operationId": "CreateExternalFiles", - "parameters": [ - { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "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": "List of file forms.", + "description": "The model to remove the tag from all project templates.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" + "$ref": "#/components/schemas/DeleteTagForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } - }, - "application/*+json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/projecttemplates/tags": { + "get": { + "tags": [ + "ProjectTemplateTags" + ], + "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": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -24591,19 +23923,79 @@ } } }, - "/projecttemplates/{projecttemplateId}/files": { + "/projecttemplates/updatetags": { + "post": { + "tags": [ + "ProjectTemplateTags" + ], + "summary": "Updates a tag globally for all project templates.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostProjectTemplateUpdateTags", + "requestBody": { + "description": "The model containing the tag updates.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagUpdateForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/projecttemplates/{projectTemplateId}": { "delete": { "tags": [ - "ProjectTemplateFiles" + "ProjectTemplates" ], - "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", + "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", + "name": "projectTemplateId", "in": "path", - "description": "The id of the projecttemplate.", + "description": "The id of the project template to delete.", "required": true, "schema": { "type": "string", @@ -24627,38 +24019,27 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } }, "get": { "tags": [ - "ProjectTemplateFiles" + "ProjectTemplates" ], - "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": "Retrieves a specific project template.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTemplateById", "parameters": [ { - "name": "projecttemplateId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the projecttemplate.", + "description": "The id of the project template to retrieve.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -24667,10 +24048,17 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileInfo" - } + "$ref": "#/components/schemas/ProjectTemplate" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -24690,18 +24078,18 @@ "any": "true" } }, - "post": { + "put": { "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": "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", + "name": "projectTemplateId", "in": "path", - "description": "The id of the projecttemplate.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -24710,27 +24098,15 @@ } ], "requestBody": { + "description": "The model to update the project template.", "content": { - "multipart/form-data": { + "application/json": { "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } + "$ref": "#/components/schemas/ProjectTemplateForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -24738,13 +24114,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ProjectTemplate" } } } }, "400": { - "description": "Bad Request" + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -24758,23 +24151,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projecttemplates/{projecttemplateId}/files/byurl": { + "/projecttemplates/{projectTemplateId}/addtags": { "post": { "tags": [ - "ProjectTemplateFiles" + "ProjectTemplateTags" ], - "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": "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", + "name": "projectTemplateId", "in": "path", - "description": "The id of the projecttemplate the file is linked to.", + "description": "The id of the project template to add tags to.", "required": true, "schema": { "type": "string", @@ -24783,19 +24177,18 @@ } ], "requestBody": { - "description": "The url, name and description of the file.", + "description": "The model containing the tags to add.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/TagForm" + } } } - } + }, + "required": true }, "responses": { "200": { @@ -24803,7 +24196,40 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -24820,33 +24246,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projecttemplates/{projecttemplateId}/files/{fileId}": { - "delete": { + "/projecttemplates/{projectTemplateId}/automations": { + "get": { "tags": [ - "ProjectTemplateFiles" + "Project Template Automations" ], - "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": "Returns all automations for a project template.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTemplateAutomations", "parameters": [ { - "name": "projecttemplateId", - "in": "path", - "description": "The id of the 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.", "required": true, "schema": { "type": "string", @@ -24855,8 +24272,18 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Automation" + } + } + } + } } }, "security": [ @@ -24873,28 +24300,18 @@ "any": "true" } }, - "get": { + "post": { "tags": [ - "ProjectTemplate Files" + "Project Template Automations" ], - "summary": "Returns the file with the specified id of the projecttemplate with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByProjectTemplateNameAndProjectTemplateIdAndFileId", + "summary": "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", - "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.", "required": true, "schema": { "type": "string", @@ -24902,29 +24319,30 @@ } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfo" - } + "requestBody": { + "description": "The model to create the automation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutomationTriggerForm" } } }, - "401": { - "description": "Unauthorized", + "required": true + }, + "responses": { + "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": { @@ -24945,21 +24363,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } - }, - "put": { + } + }, + "/projecttemplates/{projectTemplateId}/automations/{automationId}": { + "delete": { "tags": [ - "ProjectTemplateFiles" + "Project Template Automations" ], - "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": "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": "projecttemplateId", + "name": "automationId", "in": "path", - "description": "The id of the projecttemplate.", + "description": "The id of the automation.", "required": true, "schema": { "type": "string", @@ -24967,38 +24388,35 @@ } }, { - "name": "fileId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the file.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "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" - } + }, + { + "name": "removeFromProjects", + "in": "query", + "description": "Whether to delete the automation also from all projects of the projecttemplate.", + "required": true, + "schema": { + "type": "boolean" } } - }, + ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -25015,23 +24433,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } - } - }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/changeentity": { - "post": { + }, + "get": { "tags": [ - "ProjectTemplateFiles" + "Project Template Automations" ], - "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": "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": "projecttemplateId", + "name": "automationId", "in": "path", - "description": "The id of the projecttemplate.", + "description": "The id of the automation.", "required": true, "schema": { "type": "string", @@ -25039,9 +24456,9 @@ } }, { - "name": "fileId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the file.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -25049,28 +24466,13 @@ } } ], - "requestBody": { - "description": "The model to change the entity information of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - } - } - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/Automation" } } } @@ -25087,23 +24489,21 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "read" } - } - }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/copy": { - "post": { + }, + "put": { "tags": [ - "ProjectTemplateFiles" + "Project Template Automations" ], - "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": "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": "projecttemplateId", + "name": "automationId", "in": "path", - "description": "The id of the projecttemplate.", "required": true, "schema": { "type": "string", @@ -25111,9 +24511,8 @@ } }, { - "name": "fileId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -25122,19 +24521,14 @@ } ], "requestBody": { - "description": "The model to change the entity information of the file.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" + "$ref": "#/components/schemas/AutomationPutForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -25142,7 +24536,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/Automation" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -25159,23 +24563,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/download": { + "/projecttemplates/{projectTemplateId}/automations/{automationId}/actions": { "get": { "tags": [ - "ProjectTemplateFiles" + "Project Template Automations" ], - "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": "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", + "name": "projectTemplateId", "in": "path", - "description": "The id of the projecttemplate.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -25183,40 +24588,14 @@ } }, { - "name": "fileId", + "name": "automationId", "in": "path", - "description": "The id of the file.", + "description": "The id of the automation.", "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": { @@ -25225,8 +24604,10 @@ "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "type": "array", + "items": { + "$ref": "#/components/schemas/Action" + } } } } @@ -25243,23 +24624,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "read" } - } - }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/pdf": { - "get": { + }, + "post": { "tags": [ - "ProjectTemplateFiles" + "Project Template Automations" ], - "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", + "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", + "name": "projectTemplateId", "in": "path", - "description": "The id of the projecttemplate.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -25267,33 +24647,44 @@ } }, { - "name": "fileId", + "name": "automationId", "in": "path", - "description": "The id of the file.", + "description": "The id of the automation.", "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 to create an action.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActionForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/Action" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -25310,23 +24701,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/shareurl": { - "get": { + "/projecttemplates/{projectTemplateId}/automations/{automationId}/actions/{actionId}": { + "delete": { "tags": [ - "ProjectTemplateFiles" + "Project Template Automations" ], - "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 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", + "name": "projectTemplateId", "in": "path", - "description": "The id of the projecttemplate.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -25334,9 +24726,19 @@ } }, { - "name": "fileId", + "name": "automationId", "in": "path", - "description": "The id of the file.", + "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", @@ -25345,12 +24747,15 @@ } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -25367,23 +24772,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } - } - }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/versions": { + }, "get": { "tags": [ - "ProjectTemplateFiles" + "Project Template Automations" ], - "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": "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", + "name": "projectTemplateId", "in": "path", - "description": "The id of the projecttemplate.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -25391,9 +24795,9 @@ } }, { - "name": "fileId", + "name": "automationId", "in": "path", - "description": "The id of the file.", + "description": "The id of the automation.", "required": true, "schema": { "type": "string", @@ -25401,16 +24805,14 @@ } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "actionId", + "in": "path", + "description": "The id of the action.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -25419,10 +24821,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileVersion" - } + "$ref": "#/components/schemas/Action" } } } @@ -25439,21 +24838,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "read" } }, - "post": { + "put": { "tags": [ - "ProjectTemplateFiles" + "Project Template Automations" ], - "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": "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", + "name": "projectTemplateId", "in": "path", - "description": "The id of the projecttemplate.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -25461,9 +24861,19 @@ } }, { - "name": "fileId", + "name": "automationId", "in": "path", - "description": "The id of the file.", + "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", @@ -25472,27 +24882,15 @@ } ], "requestBody": { + "description": "The model to update an action.", "content": { - "multipart/form-data": { + "application/json": { "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } + "$ref": "#/components/schemas/ActionForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -25500,13 +24898,20 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/Action" } } } }, "400": { - "description": "Bad Request" + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -25520,23 +24925,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/versions/{versionId}": { - "get": { + "/projecttemplates/{projectTemplateId}/automations/{automationId}/actions/{actionId}/updateorder": { + "post": { "tags": [ - "ProjectTemplate Files" + "Project Template Automations" ], - "summary": "Returns the projecttemplate file version with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByProjectTemplateNameAndProjectTemplateIdAndFileIdAndVersionId", + "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", + "name": "projectTemplateId", "in": "path", - "description": "The id of the projecttemplate.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -25544,9 +24950,9 @@ } }, { - "name": "fileId", + "name": "automationId", "in": "path", - "description": "The id of the file.", + "description": "The id of the automation.", "required": true, "schema": { "type": "string", @@ -25554,9 +24960,9 @@ } }, { - "name": "versionId", + "name": "actionId", "in": "path", - "description": "The id of the file version.", + "description": "The id of the action.", "required": true, "schema": { "type": "string", @@ -25564,29 +24970,23 @@ } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileVersion" - } + "requestBody": { + "description": "The model to update the order.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrderForm" } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "required": true + }, + "responses": { + "204": { + "description": "No Content" }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -25607,33 +25007,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projecttemplates/{projecttemplateId}/files/{fileId}/versions/{versionId}/download": { - "get": { + "/projecttemplates/{projectTemplateId}/automations/{automationId}/reapply": { + "post": { "tags": [ - "ProjectTemplateFiles" + "Project Template Automations" ], - "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": "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": "projecttemplateId", - "in": "path", - "description": "The id of the projecttemplate.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "automationId", "in": "path", - "description": "The id of the file.", + "description": "The id of the automation.", "required": true, "schema": { "type": "string", @@ -25641,9 +25032,9 @@ } }, { - "name": "versionId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the file version.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -25652,16 +25043,8 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -25675,30 +25058,29 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projecttimebookings": { + "/projecttemplates/{projectTemplateId}/customfielddefinitions": { "get": { "tags": [ - "TimeBookings" + "CustomFields" ], - "summary": "Returns a list of time bookings.", + "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": "GetProjectTimeBookings", + "operationId": "GetProjectTemplateCustomFieldDefinitionsByProjectTemplateId", "parameters": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "projectTemplateId", + "in": "path", + "description": "The id of the project template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -25709,11 +25091,21 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TimeBooking" + "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" } } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -25729,20 +25121,44 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/projecttemplates/{projectTemplateId}/customfielddefinitions/{customFieldDefinitionId}": { + "put": { "tags": [ - "TimeBookings" + "CustomFields" + ], + "summary": "Updates the order of a custom field definition for the specified project template.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutProjectTemplateCustomFieldDefinitionByProjectTemplateIdAndCustomFieldDefinitionId", + "parameters": [ + { + "name": "projectTemplateId", + "in": "path", + "description": "The id of the project template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "customFieldDefinitionId", + "in": "path", + "description": "The id of the custom field definition.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "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.", + "description": "The model used to update the order of the custom field definition.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeBookingForm" + "$ref": "#/components/schemas/CustomFieldOrderPutForm" } } }, @@ -25754,23 +25170,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeBooking" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/CustomFieldOrderForm" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -25791,23 +25197,24 @@ "v1" ], "x-access": { - "any": "true" - } + "admin": "true", + "project-manage-config": "write" + } } }, - "/projecttimebookings/{timeBookingId}": { - "delete": { + "/projecttemplates/{projectTemplateId}/deletetags": { + "post": { "tags": [ - "TimeBookings" + "ProjectTemplateTags" ], - "summary": "Deletes a time booking by id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "DeleteProjectTimeBooking", + "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": "timeBookingId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the time booking to delete.", + "description": "The id of the project template to remove tags from.", "required": true, "schema": { "type": "string", @@ -25815,10 +25222,27 @@ } } ], + "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": { @@ -25838,6 +25262,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -25851,21 +25285,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } - }, - "put": { + } + }, + "/projecttemplates/{projectTemplateId}/linkcustomfielddefinition": { + "post": { "tags": [ - "TimeBookings" + "CustomFields" ], - "summary": "Updates a given time booking.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PutProjectTimeBooking", + "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", "parameters": [ { - "name": "timeBookingId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the time booking.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -25874,26 +25311,19 @@ } ], "requestBody": { - "description": "The model to update the time booking.", + "description": "The model used to link the custom field definition.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeBookingForm" + "$ref": "#/components/schemas/LinkCustomFieldDefinitionForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeBooking" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -25905,8 +25335,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -25927,26 +25357,28 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/projecttypes": { + "/projecttemplates/{projectTemplateId}/milestones": { "get": { "tags": [ - "ProjectTypes" + "ProjectMilestoneTemplates" ], - "summary": "Returns all existing project types.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTypes", + "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": "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 project template.", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } }, { @@ -25970,7 +25402,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ProjectType" + "$ref": "#/components/schemas/ProjectMilestoneTemplate" } } } @@ -25988,21 +25420,35 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "read" } }, "post": { "tags": [ - "ProjectTypes" + "ProjectMilestoneTemplates" ], - "summary": "Creates a new project type.", + "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": "PostProjectType", + "operationId": "PostProjectTemplateMilestonesByProjectTemplateId", + "parameters": [ + { + "name": "projectTemplateId", + "in": "path", + "description": "The id of the project template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "requestBody": { + "description": "The model containing milestone template details.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectTypeForm" + "$ref": "#/components/schemas/ProjectMilestoneTemplateForm" } } }, @@ -26014,7 +25460,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectType" + "$ref": "#/components/schemas/ProjectMilestoneTemplate" } } } @@ -26036,28 +25482,40 @@ } } }, - "/projecttypes/icons": { - "get": { + "/projecttemplates/{projectTemplateId}/milestones/{milestoneId}": { + "delete": { "tags": [ - "ProjectTypes" + "ProjectMilestoneTemplates" ], - "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" - } - } - } + "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", + "in": "path", + "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", + "format": "uuid" } } + ], + "responses": { + "204": { + "description": "No Content" + } }, "security": [ { @@ -26070,23 +25528,32 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } - } - }, - "/projecttypes/{projectTypeId}": { + }, "get": { "tags": [ - "ProjectTypes" + "ProjectMilestoneTemplates" ], - "summary": "Retrieves a project type by its ID.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTypeById", + "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": "projectTypeId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project type.", + "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", @@ -26100,17 +25567,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectType" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectMilestoneTemplate" } } } @@ -26127,21 +25584,32 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "read" } }, "put": { "tags": [ - "ProjectTypes" + "ProjectMilestoneTemplates" ], - "summary": "Updates an existing project type.", + "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": "PutProjectTypeById", + "operationId": "PutProjectTemplateMilestoneByProjectTemplateIdAndMilestoneId", "parameters": [ { - "name": "projectTypeId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project type.", + "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", @@ -26150,11 +25618,11 @@ } ], "requestBody": { - "description": "The model to update the project type.", + "description": "The model containing updated milestone template details.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectTypeForm" + "$ref": "#/components/schemas/ProjectMilestoneTemplateForm" } } }, @@ -26166,17 +25634,58 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectType" + "$ref": "#/components/schemas/ProjectMilestoneTemplate" } } } - }, - "400": { - "description": "Bad Request", + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/projecttemplates/{projectTemplateId}/projectstatuses": { + "get": { + "tags": [ + "ProjectTemplates" + ], + "summary": "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 to retrieve statuses for.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectStatus" + } } } } @@ -26203,24 +25712,21 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } - } - }, - "/projecttypes/{projectTypeId}/delete": { + }, "post": { "tags": [ - "ProjectTypes" + "ProjectTemplates" ], - "summary": "Deletes a project type and reassigns related projects and templates.", + "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": "PostProjectTypeDeleteByProjectTypeId", + "operationId": "PostProjectTemplateProjectStatusesByProjectTemplateId", "parameters": [ { - "name": "projectTypeId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project type.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -26229,19 +25735,26 @@ } ], "requestBody": { - "description": "The model to delete the project type.", + "description": "The model to add the project status to the template.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteProjectTypeForm" + "$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", @@ -26253,6 +25766,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -26280,19 +25803,19 @@ } } }, - "/projecttypes/{projectTypeId}/setarchived": { + "/projecttemplates/{projectTemplateId}/setcustomfields": { "post": { "tags": [ - "ProjectTypes" + "CustomFields" ], - "summary": "Archives or unarchives the project type with the specified id.", + "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": "PostProjectTypeSetArchivedByProjectTypeId", + "operationId": "PostProjectTemplateSetCustomFieldsByProjectTemplateId", "parameters": [ { - "name": "projectTypeId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the project type.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -26301,25 +25824,22 @@ } ], "requestBody": { + "description": "The list of custom field values to set.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ArchivedForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFieldPostForm" + } } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectType" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -26338,23 +25858,36 @@ } } }, - "/roles": { + "/projecttemplates/{projectTemplateId}/tags": { "get": { "tags": [ - "Roles" + "ProjectTemplateTags" ], - "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 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": "showArchived", - "in": "query", - "description": "Whether to show archived roles.", + "name": "projectTemplateId", + "in": "path", + "description": "The id of the project template to get tags for.", + "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": { @@ -26365,59 +25898,24 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Role" + "$ref": "#/components/schemas/BaseTagModel" } } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "workspace-manage-config": "read" - } - }, - "post": { - "tags": [ - "Roles" - ], - "summary": "Creates a new role with specified permissions.", - "description": "\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostRole", - "requestBody": { - "description": "The role form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RoleForm" - } - } }, - "required": true - }, - "responses": { - "200": { - "description": "OK", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Role" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -26439,42 +25937,37 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "write" - }, - "x-subscriptionlevel": { - "minimumPlan": "standard" + "project-manage-config": "read" } } }, - "/roles/moveuser": { - "post": { + "/projecttemplates/{projectTemplateId}/taskbundle": { + "get": { "tags": [ - "Roles" + "ProjectTemplates" ], - "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" - } + "summary": "Retrieves the task bundle associated with a project template.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTemplateTaskBundleByProjectTemplateId", + "parameters": [ + { + "name": "projectTemplateId", + "in": "path", + "description": "The id of the project template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - }, - "required": true - }, + } + ], "responses": { "200": { - "description": "OK" - }, - "400": { - "description": "Bad Request", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TaskBundleResult" } } } @@ -26501,20 +25994,29 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } } }, - "/roles/users": { + "/projecttemplates/{projectTemplateId}/taskstatuses": { "get": { "tags": [ - "Roles" + "ProjectTemplates" ], - "summary": "Returns all users in roles of the workspace.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetRolesUsers", - "parameters": [ + "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" }, @@ -26526,16 +26028,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": { @@ -26546,60 +26038,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/UserInRole" + "$ref": "#/components/schemas/TaskStatus" } } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "workspace-manage-config": "read" - }, - "x-internal": "true" - } - }, - "/roles/{roleId}": { - "get": { - "tags": [ - "Roles" - ], - "summary": "Returns the role with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetRoleById", - "parameters": [ - { - "name": "roleId", - "in": "path", - "description": "The id of the role.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Role" - } - } - } }, "404": { "description": "Not Found", @@ -26623,22 +26066,21 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "read" + "any": "true" } }, - "put": { + "post": { "tags": [ - "Roles" + "ProjectTemplates" ], - "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": "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": "roleId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the role.", + "description": "The id of the project template.", "required": true, "schema": { "type": "string", @@ -26647,11 +26089,11 @@ } ], "requestBody": { - "description": "The role form payload.", + "description": "The task Status form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RoleForm" + "$ref": "#/components/schemas/TaskStatusForm" } } }, @@ -26663,7 +26105,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Role" + "$ref": "#/components/schemas/TaskStatus" } } } @@ -26701,23 +26143,33 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "write" + "project-manage-config": "write" } } }, - "/roles/{roleId}/adduser": { - "post": { + "/projecttemplates/{projectTemplateId}/taskstatuses/{taskStatusId}": { + "delete": { "tags": [ - "Roles" + "ProjectTemplates" ], - "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 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": "roleId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the role.", + "description": "The id of the project template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskStatusId", + "in": "path", + "description": "The id of the task status.", "required": true, "schema": { "type": "string", @@ -26725,20 +26177,9 @@ } } ], - "requestBody": { - "description": "The user in role form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserInRoleForm" - } - } - }, - "required": true - }, "responses": { - "200": { - "description": "OK" + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -26759,16 +26200,6 @@ } } } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -26783,23 +26214,31 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "write" + "project-manage-config": "write" } - } - }, - "/roles/{roleId}/deactivatedmenuitems": { + }, "get": { "tags": [ - "Roles" + "ProjectTemplates" ], - "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": "GetRoleDeactivatedMenuItemsByRoleId", + "summary": "Returns the task status of the project template with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTemplateTaskStatusByProjectTemplateIdAndTaskStatusId", "parameters": [ { - "name": "roleId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the role.", + "description": "The id of the project template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskStatusId", + "in": "path", + "description": "The id of the task status.", "required": true, "schema": { "type": "string", @@ -26813,19 +26252,13 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } - }, - "example": [ - "https://www.awork.com" - ] + "$ref": "#/components/schemas/TaskStatus" + } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -26846,22 +26279,31 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "read" + "any": "true" } }, - "post": { + "put": { "tags": [ - "Roles" + "ProjectTemplates" ], - "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", + "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": "roleId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the role.", + "description": "The id of the project template.", + "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", @@ -26870,22 +26312,26 @@ } ], "requestBody": { - "description": "The list of menu item keys.", + "description": "The model used to update the task status.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } + "$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", @@ -26920,23 +26366,23 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "write" + "project-manage-config": "write" } } }, - "/roles/{roleId}/delete": { + "/projecttemplates/{projectTemplateId}/unlinkcustomfielddefinition": { "post": { "tags": [ - "Roles" + "CustomFields" ], - "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", + "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": "roleId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the role.", + "description": "The id of the project template to unlink the custom field definition from.", "required": true, "schema": { "type": "string", @@ -26945,11 +26391,11 @@ } ], "requestBody": { - "description": "The delete role form payload.", + "description": "The model used to unlink the custom field definition.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteRoleForm" + "$ref": "#/components/schemas/UnlinkCustomFieldDefinitionForm" } } }, @@ -26978,16 +26424,6 @@ } } } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -27002,40 +26438,28 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "write" + "project-manage-config": "write" } } }, - "/roles/{roleId}/permissions": { - "get": { + "/projecttemplates/{projectTemplateId}/unlinkworkflow": { + "post": { "tags": [ - "Roles" + "Workflows" ], - "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": "GetRolePermissionsByRoleId", + "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": "roleId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the role.", + "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": { @@ -27044,10 +26468,17 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/PermissionOfGlobalRole" - } + "$ref": "#/components/schemas/ProjectTemplate" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -27075,21 +26506,23 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "read" + "project-manage-config": "write" } - }, + } + }, + "/projecttemplates/{projectTemplateId}/updateprojectstatusorder": { "post": { "tags": [ - "Roles" + "ProjectTemplates" ], - "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": "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": "roleId", + "name": "projectTemplateId", "in": "path", - "description": "The id of the role.", + "description": "The id of the project template to update the status order for.", "required": true, "schema": { "type": "string", @@ -27098,27 +26531,17 @@ } ], "requestBody": { - "description": "The permission of role form payload.", + "description": "The model to update the project template status order.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PermissionOfRoleForm" + "$ref": "#/components/schemas/UpdateProjectStatusOrderForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PermissionOfProjectRole" - } - } - } - }, "204": { "description": "No Content" }, @@ -27132,8 +26555,8 @@ } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -27159,19 +26582,19 @@ } } }, - "/roles/{roleId}/setarchived": { + "/projecttemplates/{projecttemplateId}/externalfiles": { "post": { "tags": [ - "Roles" + "ProjectTemplateFiles" ], - "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": "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": "roleId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the role.", + "description": "The id of the projecttemplate.", "required": true, "schema": { "type": "string", @@ -27180,15 +26603,25 @@ } ], "requestBody": { - "description": "The archived form payload.", + "description": "List of file forms.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ArchivedForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" + } + } + }, + "application/*+json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" + } } } - }, - "required": true + } }, "responses": { "200": { @@ -27196,27 +26629,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Role" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -27233,37 +26646,65 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/roles/{roleId}/users": { - "get": { + "/projecttemplates/{projecttemplateId}/files": { + "delete": { "tags": [ - "Roles" + "ProjectTemplateFiles" ], - "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", + "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": "roleId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the role.", + "description": "The id of the projecttemplate.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, + } + ], + "responses": { + "204": { + "description": "No Content" + } + }, + "security": [ { - "name": "showArchived", - "in": "query", - "description": "Whether to show archived users.", + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "get": { + "tags": [ + "ProjectTemplateFiles" + ], + "summary": "Returns all files of the projecttemplate with the specified id.", + "description": "Returns all file metadata of the projecttemplate with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTemplateFiles", + "parameters": [ + { + "name": "projecttemplateId", + "in": "path", + "description": "The id of the projecttemplate.", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } }, { @@ -27287,21 +26728,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/UserInRole" + "$ref": "#/components/schemas/FileInfo" } } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -27315,34 +26746,21 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "read" + "any": "true" } - } - }, - "/roles/{roleId}/users/{userId}/activate": { + }, "post": { "tags": [ - "Roles" + "ProjectTemplateFiles" ], - "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", + "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": "roleId", - "in": "path", - "description": "The id of the role.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "userId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the user.", + "description": "The id of the projecttemplate.", "required": true, "schema": { "type": "string", @@ -27350,29 +26768,42 @@ } } ], - "responses": { - "200": { - "description": "OK" - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "required": [ + "File" + ], + "type": "object", + "properties": { + "File": { + "type": "string", + "format": "binary" + } + } + }, + "encoding": { + "File": { + "style": "form" } } } - }, - "500": { - "description": "Internal Server Error", + } + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } + }, + "400": { + "description": "Bad Request" } }, "security": [ @@ -27386,34 +26817,23 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } } }, - "/roles/{roleId}/users/{userId}/deactivate": { + "/projecttemplates/{projecttemplateId}/files/byurl": { "post": { "tags": [ - "Roles" + "ProjectTemplateFiles" ], - "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", + "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": "roleId", - "in": "path", - "description": "The id of the role.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "userId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the user.", + "description": "The id of the projecttemplate the file is linked to.", "required": true, "schema": { "type": "string", @@ -27421,26 +26841,28 @@ } } ], - "responses": { - "200": { - "description": "OK" - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "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" } } - }, - "500": { - "description": "Internal Server Error", + } + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -27457,50 +26879,43 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } } }, - "/roles/{roleName}": { - "get": { + "/projecttemplates/{projecttemplateId}/files/{fileId}": { + "delete": { "tags": [ - "Roles" + "ProjectTemplateFiles" ], - "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", + "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": "roleName", + "name": "projecttemplateId", "in": "path", - "description": "The name of the role.", + "description": "The id of the projecttemplate.", "required": true, "schema": { - "type": "string" + "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/Role" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -27514,51 +26929,35 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "read" + "any": "true" } - } - }, - "/search": { + }, "get": { "tags": [ - "Search" + "ProjectTemplate Files" ], - "summary": "Performs a full-text search across workspace entities.", - "description": "This endpoint enables powerful full-text search capabilities across multiple types.\r\n It returns a ranked list of matching entities based on relevance and respects user permissions.\r\n \r\n The search functionality includes:\r\n - Cross-entity search across various entity types in the workspace.\r\n - Relevance-based scoring and ranking of results.\r\n - Respecting user access permissions for all returned results.\r\n - Customizable result filtering by entity type and status.\r\n\r\nAny authenticated user.", - "operationId": "GetSearch", + "summary": "Returns the file with the specified id of the projecttemplate with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByProjectTemplateNameAndProjectTemplateIdAndFileId", "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.", + "name": "projecttemplateId", + "in": "path", + "description": "The id of the projecttemplate.", + "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "format": "uuid" } }, { - "name": "includeClosedAndStuck", - "in": "query", - "description": "If true, the result will include entities where the status is closed, stuck and done.", + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, "schema": { - "type": "boolean" + "type": "string", + "format": "uuid" } } ], @@ -27568,13 +26967,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchResults" + "$ref": "#/components/schemas/FileInfo" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -27583,8 +26982,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -27607,47 +27006,58 @@ "x-access": { "any": "true" } - } - }, - "/sharedfiles": { - "get": { + }, + "put": { "tags": [ - "SharedFiles" + "ProjectTemplateFiles" ], - "summary": "Returns a shared file.", - "description": "Returns the shared file for the provided token.\r\n\r\nAllows unauthenticated access.", - "operationId": "GetSharedFiles", + "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": "token", - "in": "query", - "description": "The token to allow access.", + "name": "projecttemplateId", + "in": "path", + "description": "The id of the projecttemplate.", "required": true, "schema": { - "type": "string" + "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" - }, - "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" } } - }, - "404": { - "description": "Not Found", + } + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -27664,78 +27074,54 @@ "v1" ], "x-access": { - "anonymous": "true" + "any": "true" } } }, - "/taskbundles": { - "get": { + "/projecttemplates/{projecttemplateId}/files/{fileId}/changeentity": { + "post": { "tags": [ - "TaskBundles" + "ProjectTemplateFiles" ], - "summary": "Lists task bundles.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTaskBundles", + "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": [ { - "$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/TaskBundle" - } - } - } + "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": [ - "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.", + "description": "The model to change the entity information of the file.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskBundleForm" + "$ref": "#/components/schemas/FileEntityForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileEntityForm" } } - }, - "required": true + } }, "responses": { "200": { @@ -27743,17 +27129,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskBundle" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -27770,24 +27146,33 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/taskbundles/fromproject/{projectId}": { + "/projecttemplates/{projecttemplateId}/files/{fileId}/copy": { "post": { "tags": [ - "TaskBundles" + "ProjectTemplateFiles" ], - "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": "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": "projectId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the project.", + "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", @@ -27796,15 +27181,19 @@ } ], "requestBody": { - "description": "The model to create a task bundle from a project.", + "description": "The model to change the entity information of the file.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateTaskBundleFromProjectForm" + "$ref": "#/components/schemas/FileCopyForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileCopyForm" } } - }, - "required": true + } }, "responses": { "200": { @@ -27812,17 +27201,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskBundle" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -27839,59 +27218,74 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/taskbundles/fromtasklist/{taskListId}": { - "post": { + "/projecttemplates/{projecttemplateId}/files/{fileId}/download": { + "get": { "tags": [ - "TaskBundles" + "ProjectTemplateFiles" ], - "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", + "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": "taskListId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the task list.", + "description": "The id of the projecttemplate.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The form to create a task bundle from a task list.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskBundleFromTaskListForm" - } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "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/TaskBundle" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string", + "format": "binary" } } } @@ -27908,29 +27302,57 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/taskbundles/icons": { + "/projecttemplates/{projecttemplateId}/files/{fileId}/pdf": { "get": { "tags": [ - "TaskBundles" + "ProjectTemplateFiles" ], - "summary": "Lists available task bundle icons.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTaskBundlesIcons", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { + "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": "array", - "items": { - "type": "string" - } + "type": "string", + "format": "binary" } } } @@ -27951,19 +27373,29 @@ } } }, - "/taskbundles/{taskBundleId}": { - "delete": { + "/projecttemplates/{projecttemplateId}/files/{fileId}/shareurl": { + "get": { "tags": [ - "TaskBundles" + "ProjectTemplateFiles" ], - "summary": "Deletes a task bundle.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "DeleteTaskBundleById", + "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": "taskBundleId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the task bundle.", + "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", @@ -27972,8 +27404,15 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } } }, "security": [ @@ -27987,27 +27426,50 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } - }, + } + }, + "/projecttemplates/{projecttemplateId}/files/{fileId}/versions": { "get": { "tags": [ - "TaskBundles" + "ProjectTemplateFiles" ], - "summary": "Gets a task bundle by id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTaskBundleById", + "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": "taskBundleId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the task bundle.", + "description": "The id of the projecttemplate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -28016,17 +27478,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskBundle" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileVersion" + } } } } @@ -28046,18 +27501,28 @@ "any": "true" } }, - "put": { + "post": { "tags": [ - "TaskBundles" + "ProjectTemplateFiles" ], - "summary": "Updates a task bundle.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PutTaskBundleById", + "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": "taskBundleId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the task bundle.", + "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", @@ -28066,15 +27531,27 @@ } ], "requestBody": { - "description": "The task bundle form payload.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/TaskBundleForm" + "required": [ + "File" + ], + "type": "object", + "properties": { + "File": { + "type": "string", + "format": "binary" + } + } + }, + "encoding": { + "File": { + "style": "form" + } } } - }, - "required": true + } }, "responses": { "200": { @@ -28082,20 +27559,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskBundle" + "$ref": "#/components/schemas/FileVersion" } } } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "400": { + "description": "Bad Request" } }, "security": [ @@ -28109,55 +27579,73 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/taskbundles/{taskBundleId}/copy": { - "post": { + "/projecttemplates/{projecttemplateId}/files/{fileId}/versions/{versionId}": { + "get": { "tags": [ - "TaskBundles" + "ProjectTemplate Files" ], - "summary": "Creates a copy of an existing task bundle.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundleCopyByTaskBundleId", + "summary": "Returns the projecttemplate file version with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByProjectTemplateNameAndProjectTemplateIdAndFileIdAndVersionId", "parameters": [ { - "name": "taskBundleId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the task bundle.", + "description": "The id of the projecttemplate.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The model containing the data to copy the task bundle.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CopyTaskBundleForm" - } + }, + { + "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/TaskBundle" + "$ref": "#/components/schemas/FileVersion" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -28178,24 +27666,43 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/taskbundles/{taskBundleId}/taskdependencytemplates": { + "/projecttemplates/{projecttemplateId}/files/{fileId}/versions/{versionId}/download": { "get": { "tags": [ - "TaskDependencyTemplates" + "ProjectTemplateFiles" ], - "summary": "Returns all task dependency templates for a given task bundle.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", - "operationId": "GetTaskBundleTaskDependencyTemplatesByTaskBundleId", + "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": "taskBundleId", + "name": "projecttemplateId", "in": "path", - "description": "The id of the task bundle.", + "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", @@ -28209,40 +27716,60 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskDependencyTemplate" - } + "type": "string", + "format": "binary" } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/projecttimebookings": { + "get": { + "tags": [ + "TimeBookings" + ], + "summary": "Returns a list of time bookings.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTimeBookings", + "parameters": [ + { + "$ref": "#/components/parameters/page" }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + { + "$ref": "#/components/parameters/pageSize" }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + { + "$ref": "#/components/parameters/orderby" }, - "404": { - "description": "Not Found", + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/TimeBooking" + } } } } @@ -28259,35 +27786,22 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "read" + "any": "true" } }, "post": { "tags": [ - "TaskDependencyTemplates" - ], - "summary": "Creates a task dependency template for two task templates of the given task bundle.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundleTaskDependencyTemplatesByTaskBundleId", - "parameters": [ - { - "name": "taskBundleId", - "in": "path", - "description": "The id of the task bundle.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "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 describing the task dependency template to create.", + "description": "The model to create the time booking.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskDependencyTemplateForm" + "$ref": "#/components/schemas/TimeBookingForm" } } }, @@ -28299,7 +27813,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskDependencyTemplate" + "$ref": "#/components/schemas/TimeBooking" } } } @@ -28323,16 +27837,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -28346,34 +27850,23 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/taskbundles/{taskBundleId}/taskdependencytemplates/{taskDependencyTemplateId}": { + "/projecttimebookings/{timeBookingId}": { "delete": { "tags": [ - "TaskDependencyTemplates" + "TimeBookings" ], - "summary": "Deletes the task dependency template from the task bundle.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "DeleteTaskBundleTaskDependencyTemplateByTaskBundleIdAndTaskDependencyTemplateId", + "summary": "Deletes a time booking by id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteProjectTimeBooking", "parameters": [ { - "name": "taskBundleId", - "in": "path", - "description": "The id of the task bundle.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskDependencyTemplateId", + "name": "timeBookingId", "in": "path", - "description": "The task Dependency Template Id.", + "description": "The id of the time booking to delete.", "required": true, "schema": { "type": "string", @@ -28385,8 +27878,8 @@ "204": { "description": "No Content" }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -28395,8 +27888,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -28417,32 +27910,21 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } }, - "get": { + "put": { "tags": [ - "TaskDependencyTemplates" + "TimeBookings" ], - "summary": "Returns a task dependency template by id for a given task bundle.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", - "operationId": "GetTaskBundleTaskDependencyTemplateByTaskBundleIdAndTaskDependencyTemplateId", + "summary": "Updates a given time booking.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PutProjectTimeBooking", "parameters": [ { - "name": "taskBundleId", - "in": "path", - "description": "The id of the task bundle.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskDependencyTemplateId", + "name": "timeBookingId", "in": "path", - "description": "The task Dependency Template Id.", + "description": "The id of the time booking.", "required": true, "schema": { "type": "string", @@ -28450,13 +27932,24 @@ } } ], + "requestBody": { + "description": "The model to update the time booking.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TimeBookingForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskDependencyTemplate" + "$ref": "#/components/schemas/TimeBooking" } } } @@ -28480,16 +27973,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -28503,28 +27986,26 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "read" + "any": "true" } } }, - "/taskbundles/{taskBundleId}/tasklisttemplates": { + "/projecttypes": { "get": { "tags": [ - "TaskBundles" + "ProjectTypes" ], - "summary": "Lists task list templates for a task bundle.", + "summary": "Returns all existing project types.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTaskBundleTaskListTemplatesByTaskBundleId", + "operationId": "GetProjectTypes", "parameters": [ { - "name": "taskBundleId", - "in": "path", - "description": "The id of the task bundle.", - "required": true, + "name": "showArchived", + "in": "query", + "description": "Whether to include archived project types in the results. Default is false.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } }, { @@ -28548,21 +28029,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/NestedTaskList" + "$ref": "#/components/schemas/ProjectType" } } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -28581,29 +28052,16 @@ }, "post": { "tags": [ - "TaskBundles" - ], - "summary": "Creates a task list template for a bundle.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundleTaskListTemplatesByTaskBundleId", - "parameters": [ - { - "name": "taskBundleId", - "in": "path", - "description": "The id of the task bundle to create the task list template for.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "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": { - "description": "The model to create a task list template.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskListForm" + "$ref": "#/components/schemas/ProjectTypeForm" } } }, @@ -28615,17 +28073,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NestedTaskList" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ProjectType" } } } @@ -28643,50 +28091,28 @@ ], "x-access": { "admin": "true", - "task-manage-config": "write" + "project-manage-config": "write" } } }, - "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}": { - "delete": { + "/projecttypes/icons": { + "get": { "tags": [ - "TaskBundles" - ], - "summary": "Deletes a task list template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "DeleteTaskBundleTaskListTemplateByTaskBundleIdAndTaskListTemplateId", - "parameters": [ - { - "name": "taskBundleId", - "in": "path", - "description": "The id of the task bundle.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListTemplateId", - "in": "path", - "description": "The task List Template Id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "ProjectTypes" ], + "summary": "Retrieves all available project type icons.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTypesIcons", "responses": { - "204": { - "description": "No Content" - }, - "404": { - "description": "Not Found", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "type": "string" + } } } } @@ -28703,32 +28129,23 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } - }, + } + }, + "/projecttypes/{projectTypeId}": { "get": { "tags": [ - "TaskBundles" + "ProjectTypes" ], - "summary": "Gets a task list template.", + "summary": "Retrieves a project type by its ID.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTaskBundleTaskListTemplateByTaskBundleIdAndTaskListTemplateId", + "operationId": "GetProjectTypeById", "parameters": [ { - "name": "taskBundleId", - "in": "path", - "description": "The id of the task bundle.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListTemplateId", + "name": "projectTypeId", "in": "path", - "description": "The task list template id.", + "description": "The id of the project type.", "required": true, "schema": { "type": "string", @@ -28742,7 +28159,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NestedTaskList" + "$ref": "#/components/schemas/ProjectType" } } } @@ -28774,26 +28191,16 @@ }, "put": { "tags": [ - "TaskBundles" + "ProjectTypes" ], - "summary": "Updates a task list template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PutTaskBundleTaskListTemplateByTaskBundleIdAndTaskListTemplateId", + "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": "taskBundleId", - "in": "path", - "description": "The id of the task bundle.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListTemplateId", + "name": "projectTypeId", "in": "path", - "description": "The task list template id.", + "description": "The id of the project type.", "required": true, "schema": { "type": "string", @@ -28802,11 +28209,11 @@ } ], "requestBody": { - "description": "The task list bundle put form.", + "description": "The model to update the project type.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskListBundlePutForm" + "$ref": "#/components/schemas/ProjectTypeForm" } } }, @@ -28818,7 +28225,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NestedTaskList" + "$ref": "#/components/schemas/ProjectType" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -28846,33 +28263,23 @@ ], "x-access": { "admin": "true", - "task-manage-config": "write" + "project-manage-config": "write" } } }, - "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/addtasktemplates": { + "/projecttypes/{projectTypeId}/delete": { "post": { "tags": [ - "TaskBundles" + "ProjectTypes" ], - "summary": "Adds task templates to a task list template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundleTaskListTemplateAddTaskTemplatesByTaskBundleIdAndTaskListTemplateId", + "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": "taskBundleId", - "in": "path", - "description": "The id of the task bundle.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListTemplateId", + "name": "projectTypeId", "in": "path", - "description": "The task List Template Id.", + "description": "The id of the project type.", "required": true, "schema": { "type": "string", @@ -28881,32 +28288,19 @@ } ], "requestBody": { - "description": "The task Template To Task List Template list.", + "description": "The model to delete the project type.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskTemplateToTaskListTemplate" - } + "$ref": "#/components/schemas/DeleteProjectTypeForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ReorderingResult" - } - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -28941,33 +28335,23 @@ ], "x-access": { "admin": "true", - "task-manage-config": "write" + "project-manage-config": "write" } } }, - "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/removetasktemplates": { + "/projecttypes/{projectTypeId}/setarchived": { "post": { "tags": [ - "TaskBundles" + "ProjectTypes" ], - "summary": "Removes task templates from a task list template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundleTaskListTemplateRemoveTaskTemplatesByTaskBundleIdAndTaskListTemplateId", + "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": "taskBundleId", - "in": "path", - "description": "The id of the task bundle.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListTemplateId", + "name": "projectTypeId", "in": "path", - "description": "The task List Template Id.", + "description": "The id of the project type.", "required": true, "schema": { "type": "string", @@ -28976,40 +28360,22 @@ } ], "requestBody": { - "description": "The guid list.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/schemas/ArchivedForm" } } }, "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/ProjectType" } } } @@ -29027,37 +28393,26 @@ ], "x-access": { "admin": "true", - "task-manage-config": "write" + "project-manage-config": "write" } } }, - "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/tasktemplates": { + "/roles": { "get": { "tags": [ - "TaskBundles" + "Roles" ], - "summary": "Lists task templates inside a task list template.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTaskBundleTaskListTemplateTaskTemplatesByTaskBundleIdAndTaskListTemplateId", + "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", "parameters": [ { - "name": "taskBundleId", - "in": "path", - "description": "The id of the task bundle.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListTemplateId", - "in": "path", - "description": "The task list template id.", - "required": true, + "name": "showArchived", + "in": "query", + "description": "Whether to show archived roles.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } } ], @@ -29069,21 +28424,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TaskTemplate" + "$ref": "#/components/schemas/Role" } } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -29097,63 +28442,41 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "read" } - } - }, - "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/tasktemplates/{taskTemplateId}": { - "get": { + }, + "post": { "tags": [ - "TaskBundles" + "Roles" ], - "summary": "Gets a task template inside a task list template.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTaskBundleTaskListTemplateTaskTemplateByTaskBundleIdAndTaskListTemplateIdAndTaskTemplateId", - "parameters": [ - { - "name": "taskBundleId", - "in": "path", - "description": "The id of the task bundle.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListTemplateId", - "in": "path", - "description": "The task list template id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "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 role form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleForm" + } } }, - { - "name": "taskTemplateId", - "in": "path", - "description": "The id of the task template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskTemplate" + "$ref": "#/components/schemas/Role" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -29174,64 +28497,36 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" + }, + "x-subscriptionlevel": { + "minimumPlan": "standard" } } }, - "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/tasktemplates/{taskTemplateId}/updateorder": { + "/roles/moveuser": { "post": { "tags": [ - "TaskBundles" - ], - "summary": "Updates the order of a task template inside a task list template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundleTaskListTemplateTaskTemplateUpdateOrderByTaskBundleIdAndTaskListTemplateIdAndTaskTemplateId", - "parameters": [ - { - "name": "taskBundleId", - "in": "path", - "description": "The id of the task bundle.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskListTemplateId", - "in": "path", - "description": "The task List Template Id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskTemplateId", - "in": "path", - "description": "The id of the task template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Roles" ], + "summary": "Moves a user from their current role to another role.", + "description": "Moves a user from their current role to another role.\r\n At least one user needs to remain in the admin role.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostRolesMoveUser", "requestBody": { - "description": "The task In Task List Update Order form.", + "description": "The move user in role payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskInTaskListUpdateOrderForm" + "$ref": "#/components/schemas/MoveUserInRole" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK" }, "400": { "description": "Bad Request", @@ -29266,61 +28561,52 @@ ], "x-access": { "admin": "true", - "task-manage-config": "write" + "workspace-manage-config": "write" } } }, - "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/updateorder": { - "post": { + "/roles/users": { + "get": { "tags": [ - "TaskBundles" + "Roles" ], - "summary": "Updates the order of task templates in a task list template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundleTaskListTemplateUpdateOrderByTaskBundleIdAndTaskListTemplateId", + "summary": "Returns all users in roles of the workspace.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "operationId": "GetRolesUsers", "parameters": [ { - "name": "taskBundleId", - "in": "path", - "description": "The id of the task bundle.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" }, { - "name": "taskListTemplateId", - "in": "path", - "description": "The task List Template Id.", + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$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", - "format": "uuid" + "default": "true" } } ], - "requestBody": { - "description": "The update Order form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateOrderForm" - } - } - }, - "required": true - }, "responses": { - "204": { - "description": "No Content" - }, - "404": { - "description": "Not Found", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/UserInRole" + } } } } @@ -29338,40 +28624,29 @@ ], "x-access": { "admin": "true", - "task-manage-config": "write" - } + "workspace-manage-config": "read" + }, + "x-internal": true } }, - "/taskbundles/{taskBundleId}/tasktemplates": { + "/roles/{roleId}": { "get": { "tags": [ - "TaskTemplates" + "Roles" ], - "summary": "Returns all task templates of the task bundle with the specified id.", - "description": "Returns all task templates of the task bundle with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskBundleTaskTemplatesByTaskBundleId", + "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": "taskBundleId", + "name": "roleId", "in": "path", - "description": "The id of the task bundle.", + "description": "The id of the role.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -29380,10 +28655,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskTemplate" - } + "$ref": "#/components/schemas/Role" } } } @@ -29410,21 +28682,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "read" } }, - "post": { + "put": { "tags": [ - "TaskTemplates" + "Roles" ], - "summary": "Creates a new task template for the task bundle with the specified id.", - "description": "Creates a new task template for the task bundle with the specified id.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundleTaskTemplatesByTaskBundleId", + "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": "taskBundleId", + "name": "roleId", "in": "path", - "description": "The id of the task bundle.", + "description": "The id of the role.", "required": true, "schema": { "type": "string", @@ -29433,11 +28706,11 @@ } ], "requestBody": { - "description": "The task Template form payload.", + "description": "The role form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskTemplateForm" + "$ref": "#/components/schemas/RoleForm" } } }, @@ -29449,7 +28722,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskTemplate" + "$ref": "#/components/schemas/Role" } } } @@ -29487,33 +28760,23 @@ ], "x-access": { "admin": "true", - "task-manage-config": "write" + "workspace-manage-config": "write" } } }, - "/taskbundles/{taskBundleId}/tasktemplates/{taskTemplateId}": { - "delete": { + "/roles/{roleId}/adduser": { + "post": { "tags": [ - "TaskTemplates" + "Roles" ], - "summary": "Deletes the task template for the task bundle with the specified id.", - "description": "Deletes the task template for the task bundle with the specified id.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "DeleteTaskBundleTaskTemplateByTaskBundleIdAndTaskTemplateId", + "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": "taskBundleId", - "in": "path", - "description": "The id of the task bundle.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskTemplateId", + "name": "roleId", "in": "path", - "description": "The id of the task template.", + "description": "The id of the role.", "required": true, "schema": { "type": "string", @@ -29521,9 +28784,30 @@ } } ], + "requestBody": { + "description": "The user in role form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserInRoleForm" + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, "404": { "description": "Not Found", @@ -29534,6 +28818,16 @@ } } } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -29548,31 +28842,23 @@ ], "x-access": { "admin": "true", - "task-manage-config": "write" + "workspace-manage-config": "write" } - }, + } + }, + "/roles/{roleId}/deactivatedmenuitems": { "get": { "tags": [ - "TaskTemplates" + "Roles" ], - "summary": "Returns the task template of the task bundle with the specified id.", - "description": "Returns the task template of the task bundle with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskBundleTaskTemplateByTaskBundleIdAndTaskTemplateId", + "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": "GetRoleDeactivatedMenuItemsByRoleId", "parameters": [ { - "name": "taskBundleId", - "in": "path", - "description": "The id of the task bundle.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskTemplateId", + "name": "roleId", "in": "path", - "description": "The id of the task template.", + "description": "The id of the role.", "required": true, "schema": { "type": "string", @@ -29586,13 +28872,19 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskTemplate" - } + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + "https://www.awork.com" + ] } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -29613,31 +28905,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "read" } }, - "put": { + "post": { "tags": [ - "TaskTemplates" + "Roles" ], - "summary": "Updates the task template for the task bundle with the specified id.", - "description": "Updates the task template for the task bundle with the specified id.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PutTaskBundleTaskTemplateByTaskBundleIdAndTaskTemplateId", + "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": "taskBundleId", - "in": "path", - "description": "The id of the task bundle.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskTemplateId", + "name": "roleId", "in": "path", - "description": "The id of the task template.", + "description": "The id of the role.", "required": true, "schema": { "type": "string", @@ -29646,23 +28929,29 @@ } ], "requestBody": { - "description": "The task Template form payload.", + "description": "The list of menu item keys.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskTemplateForm" + "type": "array", + "items": { + "type": "string" + } } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskTemplate" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -29690,23 +28979,23 @@ ], "x-access": { "admin": "true", - "task-manage-config": "write" + "workspace-manage-config": "write" } } }, - "/taskbundles/{taskBundleId}/tasktemplates/{taskTemplateId}/setassignees": { + "/roles/{roleId}/delete": { "post": { "tags": [ - "TaskTemplates" + "Roles" ], - "summary": "Assigns a list of users to task templates.", - "description": "Users that are not passed and are already assigned will be removed.\r\n Removes existing task template assignments and adds the new assignment.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskBundlesTaskTemplatesSetAssigneesByTaskBundleIdAndTaskTemplateId", + "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": "taskTemplateId", + "name": "roleId", "in": "path", - "description": "The id of the task template.", + "description": "The id of the role.", "required": true, "schema": { "type": "string", @@ -29715,15 +29004,11 @@ } ], "requestBody": { - "description": "The id of the users.", + "description": "The delete role form payload.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/schemas/DeleteRoleForm" } } }, @@ -29733,6 +29018,16 @@ "204": { "description": "No Content" }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -29742,6 +29037,16 @@ } } } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -29756,46 +29061,52 @@ ], "x-access": { "admin": "true", - "task-manage-config": "write" + "workspace-manage-config": "write" } } }, - "/taskdependencies": { - "post": { + "/roles/{roleId}/permissions": { + "get": { "tags": [ - "TaskDependencies" + "Roles" ], - "summary": "Creates a new task dependency.", - "description": "To create a task dependency, the user needs to be the assignee of both tasks or have `ProjectPlanning`\r\n permissions in general or in the project the tasks are related to.", - "operationId": "PostTaskDependency", - "requestBody": { - "description": "The task Dependency form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskDependencyForm" - } + "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": "GetRolePermissionsByRoleId", + "parameters": [ + { + "name": "roleId", + "in": "path", + "description": "The id of the role.", + "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/TaskDependency" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/PermissionOfGlobalRole" + } } } } @@ -29822,23 +29133,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "read" } - } - }, - "/taskdependencies/{taskDependencyId}": { - "delete": { + }, + "post": { "tags": [ - "TaskDependencies" + "Roles" ], - "summary": "Deletes a task dependency.", - "description": "To delete a task dependency, the User needs to be the assignee of both tasks or have 'ProjectPlanning'\r\n permissions in general or in the project the task are related to.", - "operationId": "DeleteTaskdependencyByTaskDependencyId", + "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": "taskDependencyId", + "name": "roleId", "in": "path", - "description": "The id of the task dependency.", + "description": "The id of the role.", "required": true, "schema": { "type": "string", @@ -29846,12 +29156,33 @@ } } ], + "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" + } + } + } + }, "204": { "description": "No Content" }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -29860,8 +29191,8 @@ } } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { @@ -29882,24 +29213,37 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/tasks": { + "/roles/{roleId}/setarchived": { "post": { "tags": [ - "Tasks" + "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", + "parameters": [ + { + "name": "roleId", + "in": "path", + "description": "The id of the role.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Creates a new project or private task.", - "description": "The user mast either have `project-planning-data:write` permissions, be assigned to the parent task (if a parent task is specified) or create a private task.", - "operationId": "PostTask", "requestBody": { - "description": "The general Task Post form payload.", + "description": "The archived form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralTaskPostForm" + "$ref": "#/components/schemas/ArchivedForm" } } }, @@ -29911,7 +29255,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskModel" + "$ref": "#/components/schemas/Role" } } } @@ -29926,8 +29270,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -29948,39 +29292,62 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/tasks/assignuserbyemail": { - "post": { + "/roles/{roleId}/users": { + "get": { "tags": [ - "Tasks" + "Roles" ], - "summary": "Invites a user by email and assigns them to a task.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostTasksAssignUserByEmail", - "requestBody": { - "description": "The assign By Email form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AssignByEmailForm" - } + "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" } }, - "required": true - }, + { + "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": { "200": { - "description": "OK" - }, - "400": { - "description": "Bad Request", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/UserInRole" + } } } } @@ -30007,53 +29374,47 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "read" } } }, - "/tasks/batch/{operation}": { + "/roles/{roleId}/users/{userId}/activate": { "post": { "tags": [ - "Tasks" + "Roles" ], - "summary": "Edits multiple tasks using the specified operation.", - "description": "Returns MultiStatus including the list of successful and failed tasks.\r\n \r\n Supported Operations:\r\n
    >\r\n
  • movetoproject: Moves all tasks to a new project.
  • movetotasklist: Moves all tasks to a new task list inside the same project.
  • moveundertask: Moves every selected task (and their subtasks) under the specified parent task, validating project boundaries.
  • setdates: Sets the due and optionally start date for all tasks.
  • adjustdates: Offsets start and due dates by the specified number of days while respecting the user's timezone.
  • addtags: Adds a list of tags to all tasks in the list that don't already have the tag.
  • delete: Deletes all tasks. Optional including time trackings.
  • changetypeofwork: Changes the type of work for a list of tasks. Optionally also for the related timetrackings.
  • assignusers: Assigns a list of users to a list of tasks.
  • unassignusers: Unassigns a list of users from a list of tasks. If the UserIds are not provided, all users are unassigned.
  • setprio: Sets the prio flag for a list of tasks.
  • changetaskstatus: Sets the task status for a list of tasks.
  • copy: Creates copies of all specified tasks (including subtasks) and reorders them to maintain hierarchy.
  • plannerbatch: Multiple operations to a single task. Used in the planner.
The user must have `write` permissions on all tasks as well as related entities modified by the operation.", - "operationId": "PostTasksBatchByOperation", + "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": "operation", + "name": "roleId", "in": "path", - "description": "The operation to perform on all tasks.", + "description": "The id of the role.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "description": "The id of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } ], - "requestBody": { - "description": "The model describing the batch task operation.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BatchOperationForm" - } - } - }, - "required": true - }, "responses": { - "207": { - "description": "Multi-Status", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MultiStatusResult" - } - } - } + "200": { + "description": "OK" }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -30062,8 +29423,8 @@ } } }, - "401": { - "description": "Unauthorized", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { @@ -30084,38 +29445,57 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/tasks/changebasetypes": { + "/roles/{roleId}/users/{userId}/deactivate": { "post": { "tags": [ - "Tasks" + "Roles" ], - "summary": "Changes the base type for multiple tasks.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostTasksChangeBaseTypes", - "requestBody": { - "description": "The tasks Change Base Types form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TasksChangeBaseTypesForm" - } + "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" } }, - "required": true - }, + { + "name": "userId", + "in": "path", + "description": "The id of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK" }, - "207": { - "description": "Multi-Status" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "400": { - "description": "Bad Request", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { @@ -30136,42 +29516,37 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/tasks/changelists": { - "post": { + "/roles/{roleName}": { + "get": { "tags": [ - "Tasks" + "Roles" ], - "summary": "Changes the lists of tasks.", - "description": "Adds tasks to lists, removes them and reorders tasks within lists.\r\n\r\nAny authenticated user.", - "operationId": "PostTasksChangeLists", - "requestBody": { - "description": "The change Task List forms.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChangeTaskListsForm" - } - } + "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" } - }, - "required": true - }, + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChangeTaskListsForm" - } + "$ref": "#/components/schemas/Role" } } } @@ -30198,93 +29573,77 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "read" } } }, - "/tasks/changestatuses": { - "post": { + "/search": { + "get": { "tags": [ - "Tasks" + "Search" ], - "summary": "Changes statuses of tasks.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostTasksChangeStatuses", - "requestBody": { - "description": "The change Status form list.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChangeStatusForm" - } - } + "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" } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" + { + "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" + } }, - "207": { - "description": "Multi-Status" + { + "name": "top", + "in": "query", + "description": "Count of top results. Default: 20.", + "schema": { + "type": "integer", + "format": "int32" + } }, - "400": { - "description": "Bad Request", + { + "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/ErrorResponse" + "$ref": "#/components/schemas/SearchResults" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasks/changesubtasks": { - "post": { - "tags": [ - "Tasks" - ], - "summary": "Changes the parent task and the order of subtasks.", - "description": "Changes parent task and order of subtasks. If the parent task of a subtask changed, its lists, base type and entity\r\n will change to match the parent ones.\r\n It is not possible to change a task to subtask if the task already has subtasks.\r\n\r\nAny authenticated user.", - "operationId": "PostTasksChangeSubtasks", - "requestBody": { - "description": "The subtask Changes model.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChangeSubtasksPostForm" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -30309,31 +29668,28 @@ } } }, - "/tasks/changesubtaskstoparent": { - "post": { + "/sharedfiles": { + "get": { "tags": [ - "Tasks" + "SharedFiles" ], - "summary": "Convert subtasks to a parent task.", - "description": "Convert subtasks to a parent task. If list ids are not provided it will keep the same lists as the old parent task,\r\n placing the task as last item in the lists.\r\n If multiple list ids are provided per task, the lists will be overwritten with the lists provided. In this case, if an\r\n order is not provided, it will be put as the last item in the list.\r\n\r\nAny authenticated user.", - "operationId": "PostTasksChangeSubtasksToParent", - "requestBody": { - "description": "The change Subtasks To Parent Post form list.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChangeSubtasksToParentPostForm" - } - } + "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" } - }, - "required": true - }, + } + ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK" }, "400": { "description": "Bad Request", @@ -30344,51 +29700,9 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasks/changetypeofwork": { - "post": { - "tags": [ - "Tasks" - ], - "summary": "Changes the type of work for a batch of tasks.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostTasksChangeTypeOfWork", - "requestBody": { - "description": "The tasks Change Types form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TasksChangeTypesForm" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, - "207": { - "description": "Multi-Status" }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -30409,42 +29723,42 @@ "v1" ], "x-access": { - "any": "true" + "anonymous": "true" } } }, - "/tasks/delete": { - "post": { + "/taskbundles": { + "get": { "tags": [ - "Tasks" + "TaskBundles" ], - "summary": "Deletes tasks and optionally related time entries.", - "description": "Returns 207 MultiStatus when individual deletions fail.\r\n\r\nAny authenticated user.", - "operationId": "PostTasksDelete", - "requestBody": { - "description": "The model describing the task deletion request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TasksDeleteForm" - } - } + "summary": "Lists task bundles.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTaskBundles", + "parameters": [ + { + "$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", + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskBundle" + } } } } @@ -30463,43 +29777,38 @@ "x-access": { "any": "true" } - } - }, - "/tasks/deletetags": { + }, "post": { "tags": [ - "TaskTags" + "TaskBundles" ], - "summary": "Removes a tag from all project tasks.", - "description": "Removes a tag from all project tasks.\r\n\r\nThe user must be an admin or have `project-planning-data:write` permissions.", - "operationId": "PostTasksDeleteTags", + "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 model to delete the tag from all tasks.", + "description": "The task bundle form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteTagForm" + "$ref": "#/components/schemas/TaskBundleForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TaskBundle" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -30521,36 +29830,48 @@ ], "x-access": { "admin": "true", - "project-planning-data": "write" + "task-manage-config": "write" } } }, - "/tasks/key/{taskIdentifier}": { - "get": { + "/taskbundles/fromproject/{projectId}": { + "post": { "tags": [ - "Tasks" + "TaskBundles" ], - "summary": "Returns the task with the specified key.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTasksKeyByTaskIdentifier", + "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": "taskIdentifier", + "name": "projectId", "in": "path", - "description": "The task identifier to lookup (for example, KEY-123).", + "description": "The id of the project.", "required": true, "schema": { - "type": "string" + "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/TaskModel" + "$ref": "#/components/schemas/TaskBundle" } } } @@ -30564,26 +29885,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": [ @@ -30597,45 +29898,55 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/tasks/settaskpriority": { + "/taskbundles/fromtasklist/{taskListId}": { "post": { "tags": [ - "Tasks" + "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", + "description": "The id of the task list.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Sets the priority flag for a task.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostTasksSetTaskPriority", "requestBody": { - "description": "The task Set Prio form payload.", + "description": "The form to create a task bundle from a task list.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskSetPrioForm" + "$ref": "#/components/schemas/TaskBundleFromTaskListForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TaskBundle" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -30656,18 +29967,19 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/tasks/tags": { + "/taskbundles/icons": { "get": { "tags": [ - "TaskTags" + "TaskBundles" ], - "summary": "Returns all task tags that are currently in use by tasks.", - "description": "Returns all task tags that are currently in use by tasks ordered by count.\r\n\r\nAny authenticated user.", - "operationId": "GetTasksTags", + "summary": "Lists available task bundle icons.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTaskBundlesIcons", "responses": { "200": { "description": "OK", @@ -30676,21 +29988,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/BaseTagModel" + "type": "string" } } } } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -30708,41 +30010,29 @@ } } }, - "/tasks/updatetags": { - "post": { + "/taskbundles/{taskBundleId}": { + "delete": { "tags": [ - "TaskTags" + "TaskBundles" ], - "summary": "Updates a tag globally for all project tasks.", - "description": "Updates a tag for all project tasks.\r\n\r\nThe user must be an admin or have `project-planning-data:write` permissions.", - "operationId": "PostTasksUpdateTags", - "requestBody": { - "description": "The model to update the tag including the old and new tag names.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TagUpdateForm" - } + "summary": "Deletes a task bundle.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "DeleteTaskBundleById", + "parameters": [ + { + "name": "taskBundleId", + "in": "path", + "description": "The id of the task bundle.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - }, - "required": true - }, + } + ], "responses": { "204": { "description": "No Content" - }, - "207": { - "description": "Multi-Status" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -30757,23 +30047,21 @@ ], "x-access": { "admin": "true", - "project-planning-data": "write" + "task-manage-config": "write" } - } - }, - "/tasks/{taskId}": { + }, "get": { "tags": [ - "Tasks" + "TaskBundles" ], - "summary": "Returns the task with the specified id.", - "description": "The required permissions depend on the base type of the task.\r\n If the task is a project task, 'read' permissions on the 'project-planning-data' feature are required.\r\n For a user's private task, no special permissions are required.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskById", + "summary": "Gets a task bundle by id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTaskBundleById", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -30787,17 +30075,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskModel" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TaskBundle" } } } @@ -30829,16 +30107,16 @@ }, "put": { "tags": [ - "Tasks" + "TaskBundles" ], - "summary": "Updates the task with the specified id.", - "description": "To update the task, the user needs to be the assignee of the task or 'ProjectPlanning'\r\n permissions in general or in the project the task is related to.\r\n\r\nAny authenticated user.", - "operationId": "PutTaskById", + "summary": "Updates a task bundle.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PutTaskBundleById", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -30847,11 +30125,11 @@ } ], "requestBody": { - "description": "The model describing the task updates.", + "description": "The task bundle form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralTaskForm" + "$ref": "#/components/schemas/TaskBundleForm" } } }, @@ -30863,13 +30141,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskModel" + "$ref": "#/components/schemas/TaskBundle" } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -30877,19 +30155,68 @@ } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "task-manage-config": "write" + } + } + }, + "/taskbundles/{taskBundleId}/copy": { + "post": { + "tags": [ + "TaskBundles" + ], + "summary": "Creates a copy of an existing task bundle.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundleCopyByTaskBundleId", + "parameters": [ + { + "name": "taskBundleId", + "in": "path", + "description": "The id of the task bundle.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model containing the data to copy the task bundle.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CopyTaskBundleForm" + } + } }, - "401": { - "description": "Unauthorized", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TaskBundle" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -30910,40 +30237,29 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/tasks/{taskId}/activities": { + "/taskbundles/{taskBundleId}/taskdependencytemplates": { "get": { "tags": [ - "Task Activities" + "TaskDependencyTemplates" ], - "summary": "Returns all activities of the task with the specified id.", - "description": "The activities contain information about the type of the activity, which property was changed and by whom.\r\n This contains changes to first-level properties of the task, like name, description, status, etc., as well as several related entities, such as tags, assignments, etc.\r\n This does not include activities of sub-entities, like tasks of a project or comments on a task.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskActivities", + "summary": "Returns all task dependency templates for a given task bundle.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", + "operationId": "GetTaskBundleTaskDependencyTemplatesByTaskBundleId", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -30954,7 +30270,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ActivityModel" + "$ref": "#/components/schemas/TaskDependencyTemplate" } } } @@ -31002,23 +30318,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "read" } - } - }, - "/tasks/{taskId}/addtags": { + }, "post": { "tags": [ - "TaskTags" + "TaskDependencyTemplates" ], - "summary": "Adds a batch of tags to the task with the specified id.", - "description": "The request fails if one of the tags is invalid (e.g. empty or duplicate).\r\n To add tags to a task the user must have `write` permissions on the specified task.", - "operationId": "PostTaskAddTagsByTaskId", + "summary": "Creates a task dependency template for two task templates of the given task bundle.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundleTaskDependencyTemplatesByTaskBundleId", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task to add the tags to.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -31027,14 +30342,11 @@ } ], "requestBody": { - "description": "The model with the tags to be added.", + "description": "The model describing the task dependency template to create.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TagForm" - } + "$ref": "#/components/schemas/TaskDependencyTemplateForm" } } }, @@ -31046,10 +30358,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "$ref": "#/components/schemas/TaskDependencyTemplate" } } } @@ -31073,6 +30382,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -31086,23 +30405,34 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/tasks/{taskId}/checklistitems": { - "get": { + "/taskbundles/{taskBundleId}/taskdependencytemplates/{taskDependencyTemplateId}": { + "delete": { "tags": [ - "ChecklistItems" + "TaskDependencyTemplates" ], - "summary": "Returns the checklist items for the task with the specified id.", - "description": "The user must have at least `read` permissions on the specified task.", - "operationId": "GetTaskChecklistItemsByTaskId", + "summary": "Deletes the task dependency template from the task bundle.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "DeleteTaskBundleTaskDependencyTemplateByTaskBundleIdAndTaskDependencyTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task bundle.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskDependencyTemplateId", + "in": "path", + "description": "The task Dependency Template Id.", "required": true, "schema": { "type": "string", @@ -31111,18 +30441,8 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChecklistItem" - } - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", @@ -31156,21 +30476,32 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } }, - "post": { + "get": { "tags": [ - "ChecklistItems" + "TaskDependencyTemplates" ], - "summary": "Creates a checklist item for a task with the specified id.", - "description": "The required permissions depend on the base type of the task. If the task is a project task, the user must have either `project-master-data:write` permissions or be assigned to the task. For a user's private task, no special permissions are required.", - "operationId": "PostTaskChecklistItemsByTaskId", + "summary": "Returns a task dependency template by id for a given task bundle.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", + "operationId": "GetTaskBundleTaskDependencyTemplateByTaskBundleIdAndTaskDependencyTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task bundle.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskDependencyTemplateId", + "in": "path", + "description": "The task Dependency Template Id.", "required": true, "schema": { "type": "string", @@ -31178,24 +30509,23 @@ } } ], - "requestBody": { - "description": "The checklist item form.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChecklistItemForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItem" + "$ref": "#/components/schemas/TaskDependencyTemplate" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -31232,28 +30562,41 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "read" } } }, - "/tasks/{taskId}/checklistitems/tosubtasks": { - "post": { + "/taskbundles/{taskBundleId}/tasklisttemplates": { + "get": { "tags": [ - "ChecklistItems" + "TaskBundles" ], - "summary": "Converts all checklist items of the specified task to subtasks.", - "description": "The user must have at least `write` permissions on the specified task.", - "operationId": "PostTaskChecklistItemsToSubtasksByTaskId", + "summary": "Lists task list templates for a task bundle.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTaskBundleTaskListTemplatesByTaskBundleId", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -31264,14 +30607,14 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TaskModel" + "$ref": "#/components/schemas/NestedTaskList" } } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -31279,13 +30622,59 @@ } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "TaskBundles" + ], + "summary": "Creates a task list template for a bundle.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundleTaskListTemplatesByTaskBundleId", + "parameters": [ + { + "name": "taskBundleId", + "in": "path", + "description": "The id of the task bundle to create the task list template for.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The model to create a task list template.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskListForm" + } + } }, - "401": { - "description": "Unauthorized", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/NestedTaskList" } } } @@ -31312,23 +30701,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/tasks/{taskId}/checklistitems/{checklistItemId}": { + "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}": { "delete": { "tags": [ - "ChecklistItems" + "TaskBundles" ], - "summary": "Deletes a checklist item from a task.", - "description": "The user must have at least `write` permissions on the specified task.", - "operationId": "DeleteTaskChecklistItemByTaskIdAndChecklistItemId", + "summary": "Deletes a task list template.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "DeleteTaskBundleTaskListTemplateByTaskBundleIdAndTaskListTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -31336,9 +30726,9 @@ } }, { - "name": "checklistItemId", + "name": "taskListTemplateId", "in": "path", - "description": "The id of the checklist item to delete.", + "description": "The task List Template Id.", "required": true, "schema": { "type": "string", @@ -31350,16 +30740,6 @@ "204": { "description": "No Content" }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -31382,21 +30762,22 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } }, "get": { "tags": [ - "ChecklistItems" + "TaskBundles" ], - "summary": "Returns the checklist item with the specified id for a task.", - "description": "The user must have at least `read` permissions on the specified task.", - "operationId": "GetTaskChecklistItemByTaskIdAndChecklistItemId", + "summary": "Gets a task list template.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTaskBundleTaskListTemplateByTaskBundleIdAndTaskListTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -31404,9 +30785,9 @@ } }, { - "name": "checklistItemId", + "name": "taskListTemplateId", "in": "path", - "description": "The id of the checklist item.", + "description": "The task list template id.", "required": true, "schema": { "type": "string", @@ -31420,17 +30801,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItem" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/NestedTaskList" } } } @@ -31462,16 +30833,16 @@ }, "put": { "tags": [ - "ChecklistItems" + "TaskBundles" ], - "summary": "Updates a checklist item for a task with the specified id.", - "description": "The required permissions depend on the base type of the task. If the task is a project task, the user must have either `project-master-data:write` permissions or be assigned to the task. For a user's private task, no special permissions are required.", - "operationId": "PutTaskChecklistItemByTaskIdAndChecklistItemId", + "summary": "Updates a task list template.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PutTaskBundleTaskListTemplateByTaskBundleIdAndTaskListTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -31479,9 +30850,9 @@ } }, { - "name": "checklistItemId", + "name": "taskListTemplateId", "in": "path", - "description": "The id of the checklist item.", + "description": "The task list template id.", "required": true, "schema": { "type": "string", @@ -31490,11 +30861,11 @@ } ], "requestBody": { - "description": "The checklist item form.", + "description": "The task list bundle put form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItemForm" + "$ref": "#/components/schemas/TaskListBundlePutForm" } } }, @@ -31506,17 +30877,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItem" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/NestedTaskList" } } } @@ -31543,90 +30904,55 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/tasks/{taskId}/comments": { - "delete": { + "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/addtasktemplates": { + "post": { "tags": [ - "TaskComments" + "TaskBundles" ], - "summary": "Deletes all comments of the specified task.", - "description": "Deletes all comments of the specified task.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCommentsByTaskNameAndTaskId", + "summary": "Adds task templates to a task list template.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundleTaskListTemplateAddTaskTemplatesByTaskBundleIdAndTaskListTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "responses": { - "204": { - "description": "No Content" }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "get": { - "tags": [ - "TaskComments" - ], - "summary": "Returns all comments of the task with the specified id.", - "description": "Returns all comments of the task with the specified id. The user needs read permissions on the task.\r\n\r\nAny authenticated user.", - "operationId": "GetCommentsByTaskNameAndTaskId", - "parameters": [ { - "name": "taskId", + "name": "taskListTemplateId", "in": "path", - "description": "The id of the task.", + "description": "The task List Template Id.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], + "requestBody": { + "description": "The task Template To Task List Template list.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskTemplateToTaskListTemplate" + } + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", @@ -31635,7 +30961,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/ReorderingResult" } } } @@ -31651,8 +30977,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -31673,21 +30999,34 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } - }, + } + }, + "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/removetasktemplates": { "post": { "tags": [ - "TaskComments" + "TaskBundles" ], - "summary": "Creates a new comment on the task with the specified id.", - "description": "Creates a new comment on the task with the specified id.\r\n A user can only create a comment for him/herself, except for admins and api users.\r\n \r\n To create a comment the user must have at least `read` permissions on the specified task.", - "operationId": "PostCommentsByTaskNameAndTaskId", + "summary": "Removes task templates from a task list template.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundleTaskListTemplateRemoveTaskTemplatesByTaskBundleIdAndTaskListTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task to create the comment for.", + "description": "The id of the task bundle.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskListTemplateId", + "in": "path", + "description": "The task List Template Id.", "required": true, "schema": { "type": "string", @@ -31696,26 +31035,23 @@ } ], "requestBody": { - "description": "The model to create the comment.", + "description": "The guid list.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CommentForm" + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Comment" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -31727,16 +31063,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -31759,23 +31085,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/tasks/{taskId}/comments/{commentId}": { - "delete": { + "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/tasktemplates": { + "get": { "tags": [ - "TaskComments" + "TaskBundles" ], - "summary": "Deletes the comment with the specified id on the task with the specified id.", - "description": "Deletes the comment with the specified id on the task with the specified id.\r\n The delete includes the reactions of the comment.\r\n If there are any replies to the comment, they will be deleted as well.\r\n\r\nAny authenticated user.", - "operationId": "DeleteCommentByTaskNameAndTaskIdAndCommentId", + "summary": "Lists task templates inside a task list template.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTaskBundleTaskListTemplateTaskTemplatesByTaskBundleIdAndTaskListTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -31783,9 +31110,9 @@ } }, { - "name": "commentId", + "name": "taskListTemplateId", "in": "path", - "description": "The id of the comment.", + "description": "The task list template id.", "required": true, "schema": { "type": "string", @@ -31794,15 +31121,15 @@ } ], "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/TaskTemplate" + } } } } @@ -31831,19 +31158,21 @@ "x-access": { "any": "true" } - }, + } + }, + "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/tasktemplates/{taskTemplateId}": { "get": { "tags": [ - "TaskComments" + "TaskBundles" ], - "summary": "Returns the comment with the specified id of the task with the specified id.", - "description": "Returns the comment with the specified id of the task with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetCommentByTaskNameAndTaskIdAndCommentId", + "summary": "Gets a task template inside a task list template.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTaskBundleTaskListTemplateTaskTemplateByTaskBundleIdAndTaskListTemplateIdAndTaskTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -31851,9 +31180,19 @@ } }, { - "name": "commentId", + "name": "taskListTemplateId", "in": "path", - "description": "The id of the comment.", + "description": "The task list template id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskTemplateId", + "in": "path", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -31867,13 +31206,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Comment" + "$ref": "#/components/schemas/TaskTemplate" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -31896,19 +31235,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/tasktemplates/{taskTemplateId}/updateorder": { + "post": { "tags": [ - "TaskComments" + "TaskBundles" ], - "summary": "Updates the comment with the specified id on the task with the specified id.", - "description": "To update a comment the user must either have at least `read` permissions on the specified task, be the creator of the comment or be admin.", - "operationId": "PutCommentByTaskNameAndTaskIdAndCommentId", + "summary": "Updates the order of a task template inside a task list template.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundleTaskListTemplateTaskTemplateUpdateOrderByTaskBundleIdAndTaskListTemplateIdAndTaskTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -31916,9 +31257,19 @@ } }, { - "name": "commentId", + "name": "taskListTemplateId", "in": "path", - "description": "The id of the comment.", + "description": "The task List Template Id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskTemplateId", + "in": "path", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -31927,29 +31278,22 @@ } ], "requestBody": { - "description": "The model with the updated comment information.", + "description": "The task In Task List Update Order form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CommentPutForm" + "$ref": "#/components/schemas/TaskInTaskListUpdateOrderForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Comment" - } - } - } + "204": { + "description": "No Content" }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -31980,23 +31324,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/tasks/{taskId}/comments/{commentId}/react": { + "/taskbundles/{taskBundleId}/tasklisttemplates/{taskListTemplateId}/updateorder": { "post": { "tags": [ - "TaskComments" + "TaskBundles" ], - "summary": "Updates the reactions of the comment with the specified id on the task with the specified id.", - "description": "To update a reaction of a comment the user must have at least `read` permissions on the specified task.", - "operationId": "PostCommentReactByTaskNameAndTaskIdAndCommentId", + "summary": "Updates the order of task templates in a task list template.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundleTaskListTemplateUpdateOrderByTaskBundleIdAndTaskListTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -32004,9 +31349,9 @@ } }, { - "name": "commentId", + "name": "taskListTemplateId", "in": "path", - "description": "The id of the comment.", + "description": "The task List Template Id.", "required": true, "schema": { "type": "string", @@ -32015,11 +31360,11 @@ } ], "requestBody": { - "description": "The model used to update the reactions of the comment with the specified id.", + "description": "The update Order form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ReactionForm" + "$ref": "#/components/schemas/UpdateOrderForm" } } }, @@ -32029,16 +31374,6 @@ "204": { "description": "No Content" }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -32061,28 +31396,41 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/tasks/{taskId}/copy": { - "post": { + "/taskbundles/{taskBundleId}/tasktemplates": { + "get": { "tags": [ - "Tasks" + "TaskTemplates" ], - "summary": "Creates a copy of the specified task.", - "description": "Comments, files and activity logs are not copied.\r\n To copy a task, the user needs to be the assignee of the task or 'ProjectPlanning'\r\n permissions in general or in the project the task is related to.\r\n If the task is a parent task, it will also copy its subtasks.\r\n\r\nAny authenticated user.", - "operationId": "PostTaskCopyByTaskId", + "summary": "Returns all task templates of the task bundle with the specified id.", + "description": "Returns all task templates of the task bundle with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetTaskBundleTaskTemplatesByTaskBundleId", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -32091,17 +31439,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskModel" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskTemplate" + } } } } @@ -32130,21 +31471,19 @@ "x-access": { "any": "true" } - } - }, - "/tasks/{taskId}/deleterecurrency": { + }, "post": { "tags": [ - "Tasks" + "TaskTemplates" ], - "summary": "Deletes the recurrence rule for a task.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostTaskDeleteRecurrencyByTaskId", + "summary": "Creates a new task template for the task bundle with the specified id.", + "description": "Creates a new task template for the task bundle with the specified id.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundleTaskTemplatesByTaskBundleId", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", @@ -32152,9 +31491,27 @@ } } ], + "requestBody": { + "description": "The task Template form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskTemplateForm" + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskTemplate" + } + } + } }, "400": { "description": "Bad Request", @@ -32166,8 +31523,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -32188,23 +31545,34 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/tasks/{taskId}/deletetags": { - "post": { + "/taskbundles/{taskBundleId}/tasktemplates/{taskTemplateId}": { + "delete": { "tags": [ - "TaskTags" + "TaskTemplates" ], - "summary": "Removes tags from the task with the specified id.", - "description": "Returns 204 NoContent if all tags have been removed successfully.\r\n Returns 207 MultiStatus if at least one tag could not be removed, including the reasons.\r\n \r\n To remove tags from a task the user must have `write` permissions on the specified task.", - "operationId": "PostTaskDeleteTagsByTaskId", + "summary": "Deletes the task template for the task bundle with the specified id.", + "description": "Deletes the task template for the task bundle with the specified id.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "DeleteTaskBundleTaskTemplateByTaskBundleIdAndTaskTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task to remove the tags from.", + "description": "The id of the task bundle.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskTemplateId", + "in": "path", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -32212,39 +31580,12 @@ } } ], - "requestBody": { - "description": "The model with the tags to be removed.", - "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", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -32265,58 +31606,56 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } - } - }, - "/tasks/{taskId}/externalfiles": { - "post": { + }, + "get": { "tags": [ - "TaskFiles" + "TaskTemplates" ], - "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": "Returns the task template of the task bundle with the specified id.", + "description": "Returns the task template of the task bundle with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetTaskBundleTaskTemplateByTaskBundleIdAndTaskTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task bundle.", "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": "taskTemplateId", + "in": "path", + "description": "The id of the task template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } - }, + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/TaskTemplate" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -32335,88 +31674,64 @@ "x-access": { "any": "true" } - } - }, - "/tasks/{taskId}/files": { - "delete": { + }, + "put": { "tags": [ - "TaskFiles" + "TaskTemplates" ], - "summary": "Deletes the files of the specified task.", - "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", - "operationId": "DeleteTaskFiles", + "summary": "Updates the task template for the task bundle with the specified id.", + "description": "Updates the task template for the task bundle with the specified id.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PutTaskBundleTaskTemplateByTaskBundleIdAndTaskTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskBundleId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task bundle.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "responses": { - "204": { - "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "get": { - "tags": [ - "TaskFiles" - ], - "summary": "Returns all files of the task with the specified id.", - "description": "Returns all file metadata of the task with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskFiles", - "parameters": [ + }, { - "name": "taskId", + "name": "taskTemplateId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], + "requestBody": { + "description": "The task Template form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskTemplateForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileInfo" - } + "$ref": "#/components/schemas/TaskTemplate" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -32433,21 +31748,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } - }, + } + }, + "/taskbundles/{taskBundleId}/tasktemplates/{taskTemplateId}/setassignees": { "post": { "tags": [ - "TaskFiles" + "TaskTemplates" ], - "summary": "Creates a new task file for the task with the specified id..", - "description": "Uploads a new task file for the task with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateTaskFile", + "summary": "Assigns a list of users to task templates.", + "description": "Users that are not passed and are already assigned will be removed.\r\n Removes existing task template assignments and adds the new assignment.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskBundlesTaskTemplatesSetAssigneesByTaskBundleIdAndTaskTemplateId", "parameters": [ { - "name": "taskId", + "name": "taskTemplateId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -32456,41 +31774,33 @@ } ], "requestBody": { + "description": "The id of the users.", "content": { - "multipart/form-data": { + "application/json": { "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" + "type": "array", + "items": { + "type": "string", + "format": "uuid" } } } - } + }, + "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } - }, - "400": { - "description": "Bad Request" } }, "security": [ @@ -32504,36 +31814,25 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/tasks/{taskId}/files/byuploadid": { + "/taskdependencies": { "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 task from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", - "operationId": "PostUploadByUploadId", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task to attach the file to.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "TaskDependencies" ], + "summary": "Creates a new task dependency.", + "description": "To create a task dependency, the user needs to be the assignee of both tasks or have `ProjectPlanning`\r\n permissions in general or in the project the tasks are related to.", + "operationId": "PostTaskDependency", "requestBody": { - "description": "The model describing the uploaded file metadata.", + "description": "The task Dependency form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UploadByUploadIdForm" + "$ref": "#/components/schemas/TaskDependencyForm" } } }, @@ -32545,7 +31844,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/TaskDependency" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -32576,19 +31885,19 @@ } } }, - "/tasks/{taskId}/files/byurl": { - "post": { + "/taskdependencies/{taskDependencyId}": { + "delete": { "tags": [ - "TaskFiles" + "TaskDependencies" ], - "summary": "Uploads a new file by providing an url.", - "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", - "operationId": "CreateTaskFileByUrl", + "summary": "Deletes a task dependency.", + "description": "To delete a task dependency, the User needs to be the assignee of both tasks or have 'ProjectPlanning'\r\n permissions in general or in the project the task are related to.", + "operationId": "DeleteTaskdependencyByTaskDependencyId", "parameters": [ { - "name": "taskId", + "name": "taskDependencyId", "in": "path", - "description": "The id of the task the file is linked to.", + "description": "The id of the task dependency.", "required": true, "schema": { "type": "string", @@ -32596,28 +31905,26 @@ } } ], - "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", + "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" } } } @@ -32638,97 +31945,38 @@ } } }, - "/tasks/{taskId}/files/{fileId}": { - "delete": { + "/tasks": { + "post": { "tags": [ - "TaskFiles" + "Tasks" ], - "summary": "Deletes the task file with the specified id.", - "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", - "operationId": "DeleteTaskFile", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Creates a new project or private task.", + "description": "The user mast either have `project-planning-data:write` permissions, be assigned to the parent task (if a parent task is specified) or create a private task.", + "operationId": "PostTask", + "requestBody": { + "description": "The general Task Post form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GeneralTaskPostForm" + } } }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" - } + "required": true }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "get": { - "tags": [ - "Task Files" - ], - "summary": "Returns the file with the specified id of the task with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByTaskNameAndTaskIdAndFileId", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/TaskModel" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -32737,8 +31985,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -32761,58 +32009,47 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/tasks/assignuserbyemail": { + "post": { "tags": [ - "TaskFiles" - ], - "summary": "Updates the metadata of the task file with the specified id.", - "description": "Updates the metadata of the task file with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "UpdateTaskFile", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Tasks" ], + "summary": "Invites a user by email and assigns them to a task.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostTasksAssignUserByEmail", "requestBody": { - "description": "The model to update the file with the specified id.", + "description": "The assign By Email form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" + "$ref": "#/components/schemas/AssignByEmailForm" } } - } + }, + "required": true }, "responses": { "200": { - "description": "OK", + "description": "OK" + }, + "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" } } } @@ -32833,58 +32070,63 @@ } } }, - "/tasks/{taskId}/files/{fileId}/changeentity": { + "/tasks/batch/{operation}": { "post": { "tags": [ - "TaskFiles" + "Tasks" ], - "summary": "Changes the task this file belongs to.", - "description": "Changes the task this file belongs to.\nSwitch to the specified task or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", - "operationId": "ChangeTask", + "summary": "Edits multiple tasks using the specified operation.", + "description": "Returns MultiStatus including the list of successful and failed tasks.\r\n \r\n Supported Operations:\r\n
    >\r\n
  • movetoproject: Moves all tasks to a new project.
  • movetotasklist: Moves all tasks to a new task list inside the same project.
  • moveundertask: Moves every selected task (and their subtasks) under the specified parent task, validating project boundaries.
  • setdates: Sets the due and optionally start date for all tasks.
  • adjustdates: Offsets start and due dates by the specified number of days while respecting the user's timezone.
  • addtags: Adds a list of tags to all tasks in the list that don't already have the tag.
  • delete: Deletes all tasks. Optional including time trackings.
  • changetypeofwork: Changes the type of work for a list of tasks. Optionally also for the related timetrackings.
  • assignusers: Assigns a list of users to a list of tasks.
  • unassignusers: Unassigns a list of users from a list of tasks. If the UserIds are not provided, all users are unassigned.
  • setprio: Sets the prio flag for a list of tasks.
  • changetaskstatus: Sets the task status for a list of tasks.
  • copy: Creates copies of all specified tasks (including subtasks) and reorders them to maintain hierarchy.
  • plannerbatch: Multiple operations to a single task. Used in the planner.
The user must have `write` permissions on all tasks as well as related entities modified by the operation.", + "operationId": "PostTasksBatchByOperation", "parameters": [ { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "operation", "in": "path", - "description": "The id of the file.", + "description": "The operation to perform on all tasks.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "requestBody": { - "description": "The model to change the entity information of the file.", + "description": "The model describing the batch task operation.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" + "$ref": "#/components/schemas/BatchOperationForm" } } - } + }, + "required": true }, "responses": { - "200": { - "description": "OK", + "207": { + "description": "Multi-Status", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/MultiStatusResult" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -32905,58 +32147,38 @@ } } }, - "/tasks/{taskId}/files/{fileId}/copy": { + "/tasks/changebasetypes": { "post": { "tags": [ - "TaskFiles" - ], - "summary": "Copies the file to a new task.", - "description": "Copies the file to a new task (meta and content).\r\n\r\nAny authenticated user.", - "operationId": "CopyToTask", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Tasks" ], + "summary": "Changes the base type for multiple tasks.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostTasksChangeBaseTypes", "requestBody": { - "description": "The model to change the entity information of the file.", + "description": "The tasks Change Base Types form payload.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" + "$ref": "#/components/schemas/TasksChangeBaseTypesForm" } } - } + }, + "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "207": { + "description": "Multi-Status" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -32977,70 +32199,48 @@ } } }, - "/tasks/{taskId}/files/{fileId}/download": { - "get": { + "/tasks/changelists": { + "post": { "tags": [ - "TaskFiles" + "Tasks" ], - "summary": "Returns the content of the task file with the specified id.", - "description": "Returns the content of the task file. Uses the latest file version.\nIf the task file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskFileContent", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "width", - "in": "query", - "description": "Set width to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "height", - "in": "query", - "description": "Set height to resize.", - "schema": { - "type": "number", - "format": "double" + "summary": "Changes the lists of tasks.", + "description": "Adds tasks to lists, removes them and reorders tasks within lists.\r\n\r\nAny authenticated user.", + "operationId": "PostTasksChangeLists", + "requestBody": { + "description": "The change Task List forms.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChangeTaskListsForm" + } + } } }, - { - "name": "crop", - "in": "query", - "description": "Whether to crop the image when resizing it.", - "schema": { - "type": "boolean" - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "type": "array", + "items": { + "$ref": "#/components/schemas/ChangeTaskListsForm" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -33061,53 +32261,41 @@ } } }, - "/tasks/{taskId}/files/{fileId}/pdf": { - "get": { + "/tasks/changestatuses": { + "post": { "tags": [ - "TaskFiles" + "Tasks" ], - "summary": "Returns the content of the file with the specified id as pdf.\ntype or conversion not possible.", - "description": "Returns the content of the task file. Uses the latest file version.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskFileContent", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Changes statuses of tasks.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostTasksChangeStatuses", + "requestBody": { + "description": "The change Status form list.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChangeStatusForm" + } + } } }, - { - "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", + "204": { + "description": "No Content" + }, + "207": { + "description": "Multi-Status" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -33128,43 +32316,38 @@ } } }, - "/tasks/{taskId}/files/{fileId}/shareurl": { - "get": { + "/tasks/changesubtasks": { + "post": { "tags": [ - "TaskFiles" + "Tasks" ], - "summary": "Returns an url to share the file.", - "description": "Returns a url to share the file.\r\n\r\nAny authenticated user.", - "operationId": "GetPublicToken", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Changes the parent task and the order of subtasks.", + "description": "Changes parent task and order of subtasks. If the parent task of a subtask changed, its lists, base type and entity\r\n will change to match the parent ones.\r\n It is not possible to change a task to subtask if the task already has subtasks.\r\n\r\nAny authenticated user.", + "operationId": "PostTasksChangeSubtasks", + "requestBody": { + "description": "The subtask Changes model.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChangeSubtasksPostForm" + } + } } }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], + "required": true + }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -33185,58 +32368,38 @@ } } }, - "/tasks/{taskId}/files/{fileId}/versions": { - "get": { + "/tasks/changesubtaskstoparent": { + "post": { "tags": [ - "TaskFiles" + "Tasks" ], - "summary": "Returns all file versions of the specified task file.", - "description": "Returns all file versions of the specified task file.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskFileVersions", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Convert subtasks to a parent task.", + "description": "Convert subtasks to a parent task. If list ids are not provided it will keep the same lists as the old parent task,\r\n placing the task as last item in the lists.\r\n If multiple list ids are provided per task, the lists will be overwritten with the lists provided. In this case, if an\r\n order is not provided, it will be put as the last item in the list.\r\n\r\nAny authenticated user.", + "operationId": "PostTasksChangeSubtasksToParent", + "requestBody": { + "description": "The change Subtasks To Parent Post form list.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChangeSubtasksToParentPostForm" + } + } } }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], + "required": true + }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileVersion" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -33255,72 +32418,43 @@ "x-access": { "any": "true" } - }, + } + }, + "/tasks/changetypeofwork": { "post": { "tags": [ - "TaskFiles" - ], - "summary": "Uploads a new version of the task file with the specified id.", - "description": "Uploads a new version of an task file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateTaskFileVersion", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Tasks" ], + "summary": "Changes the type of work for a batch of tasks.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostTasksChangeTypeOfWork", "requestBody": { + "description": "The tasks Change Types form payload.", "content": { - "multipart/form-data": { + "application/json": { "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } + "$ref": "#/components/schemas/TasksChangeTypesForm" } } - } + }, + "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/FileVersion" + "$ref": "#/components/schemas/ErrorResponse" } } } - }, - "400": { - "description": "Bad Request" } }, "security": [ @@ -33338,69 +32472,34 @@ } } }, - "/tasks/{taskId}/files/{fileId}/versions/{versionId}": { - "get": { + "/tasks/delete": { + "post": { "tags": [ - "Task Files" + "Tasks" ], - "summary": "Returns the task file version with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByTaskNameAndTaskIdAndFileIdAndVersionId", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Deletes tasks and optionally related time entries.", + "description": "Returns 207 MultiStatus when individual deletions fail.\r\n\r\nAny authenticated user.", + "operationId": "PostTasksDelete", + "requestBody": { + "description": "The model describing the task deletion request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TasksDeleteForm" + } } }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], + "required": true + }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileVersion" - } - } - } + "204": { + "description": "No Content" }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "207": { + "description": "Multi-Status" }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -33425,54 +32524,45 @@ } } }, - "/tasks/{taskId}/files/{fileId}/versions/{versionId}/download": { - "get": { + "/tasks/deletetags": { + "post": { "tags": [ - "TaskFiles" + "TaskTags" ], - "summary": "Returns the content of the task file version with the specified id.", - "description": "Returns the content of the task file version with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskFileVersionContent", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Removes a tag from all project tasks.", + "description": "Removes a tag from all project tasks.\r\n\r\nThe user must be an admin or have `project-planning-data:write` permissions.", + "operationId": "PostTasksDeleteTags", + "requestBody": { + "description": "The model to delete the tag from all tasks.", + "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" }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } - } - ], - "responses": { - "200": { - "description": "OK", + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -33489,27 +32579,27 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-planning-data": "write" } } }, - "/tasks/{taskId}/recurrency": { + "/tasks/key/{taskIdentifier}": { "get": { "tags": [ "Tasks" ], - "summary": "Gets the recurrence rule of a task.", + "summary": "Returns the task with the specified key.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTaskRecurrencyByTaskId", + "operationId": "GetTasksKeyByTaskIdentifier", "parameters": [ { - "name": "taskId", + "name": "taskIdentifier", "in": "path", - "description": "The id of the task.", + "description": "The task identifier to lookup (for example, KEY-123).", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -33519,7 +32609,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RecurrencyModel" + "$ref": "#/components/schemas/TaskModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -33560,36 +32660,20 @@ } } }, - "/tasks/{taskId}/setassignees": { + "/tasks/settaskpriority": { "post": { "tags": [ "Tasks" ], - "summary": "Assigns a list of users to a task.", - "description": "Replaces existing assignments with the provided list.\r\n\r\nAny authenticated user.", - "operationId": "PostTaskSetAssigneesByTaskId", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], + "summary": "Sets the priority flag for a task.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostTasksSetTaskPriority", "requestBody": { - "description": "The id of the users.", + "description": "The task Set Prio form payload.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/schemas/TaskSetPrioForm" } } }, @@ -33609,16 +32693,6 @@ } } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -33645,50 +32719,24 @@ } } }, - "/tasks/{taskId}/setcustomfields": { - "post": { + "/tasks/tags": { + "get": { "tags": [ - "CustomFields" - ], - "summary": "Sets the custom fields for a task.", - "description": "The required properties depend on the type of the custom field.\r\n \r\n The user must have at least `write` permissions on the specified task.", - "operationId": "PostTaskSetCustomFieldsByTaskId", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task to set custom fields for.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "TaskTags" ], - "requestBody": { - "description": "The model containing the details for setting the custom fields for a task.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomFieldPostForm" - } - } - } - }, - "required": true - }, + "summary": "Returns all task tags that are currently in use by tasks.", + "description": "Returns all task tags that are currently in use by tasks ordered by count.\r\n\r\nAny authenticated user.", + "operationId": "GetTasksTags", "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/BaseTagModel" + } } } } @@ -33702,16 +32750,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -33729,35 +32767,20 @@ } } }, - "/tasks/{taskId}/setplannedefforts": { + "/tasks/updatetags": { "post": { "tags": [ - "Tasks" - ], - "summary": "Modifies planned efforts for the given task assignments.", - "description": "Only the provided assignments are updated; missing assignments remain unchanged.\r\n\r\nAny authenticated user.", - "operationId": "PostTaskSetPlannedEffortsByTaskId", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "TaskTags" ], + "summary": "Updates a tag globally for all project tasks.", + "description": "Updates a tag for all project tasks.\r\n\r\nThe user must be an admin or have `project-planning-data:write` permissions.", + "operationId": "PostTasksUpdateTags", "requestBody": { - "description": "The planned Efforts.", + "description": "The model to update the tag including the old and new tag names.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/PlannedEffortForm" - } + "$ref": "#/components/schemas/TagUpdateForm" } } }, @@ -33767,6 +32790,9 @@ "204": { "description": "No Content" }, + "207": { + "description": "Multi-Status" + }, "400": { "description": "Bad Request", "content": { @@ -33776,26 +32802,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": [ @@ -33809,18 +32815,19 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-planning-data": "write" } } }, - "/tasks/{taskId}/setrecurrency": { - "post": { + "/tasks/{taskId}": { + "get": { "tags": [ "Tasks" ], - "summary": "Adds or updates a recurrence rule for a task.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostTaskSetRecurrencyByTaskId", + "summary": "Returns the task with the specified id.", + "description": "The required permissions depend on the base type of the task.\r\n If the task is a project task, 'read' permissions on the 'project-planning-data' feature are required.\r\n For a user's private task, no special permissions are required.\r\n\r\nAny authenticated user.", + "operationId": "GetTaskById", "parameters": [ { "name": "taskId", @@ -33833,27 +32840,13 @@ } } ], - "requestBody": { - "description": "The model describing the recurrence rule to apply.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskRecurrencyForm" - } - } - }, - "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/TaskModel" } } } @@ -33892,21 +32885,19 @@ "x-access": { "any": "true" } - } - }, - "/tasks/{taskId}/tags": { - "get": { + }, + "put": { "tags": [ - "TaskTags" + "Tasks" ], - "summary": "Returns the tags of the task with the specified id.", - "description": "Returns the tags of the task with the specified id ordered by name.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskTagsByTaskId", + "summary": "Updates the task with the specified id.", + "description": "To update the task, the user needs to be the assignee of the task or 'ProjectPlanning'\r\n permissions in general or in the project the task is related to.\r\n\r\nAny authenticated user.", + "operationId": "PutTaskById", "parameters": [ { "name": "taskId", "in": "path", - "description": "The id of the task to get the tags for.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -33914,22 +32905,30 @@ } } ], + "requestBody": { + "description": "The model describing the task updates.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GeneralTaskForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "$ref": "#/components/schemas/TaskModel" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -33937,53 +32936,13 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasks/{taskId}/taskdependencies": { - "get": { - "tags": [ - "TaskDependencies" - ], - "summary": "Returns all task dependencies for a specific task.", - "description": "To get all dependencies of a task, the user needs project planning permissions on that project or be assigned to that task.", - "operationId": "GetTaskTaskdependenciesByTaskId", - "parameters": [ - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskDependency" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -34014,14 +32973,14 @@ } } }, - "/tasks/{taskId}/timeentries": { + "/tasks/{taskId}/activities": { "get": { "tags": [ - "TimeEntries" + "Task Activities" ], - "summary": "Returns all time entries of the specified task.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTaskTimeEntries", + "summary": "Returns all activities of the task with the specified id.", + "description": "The activities contain information about the type of the activity, which property was changed and by whom.\r\n This contains changes to first-level properties of the task, like name, description, status, etc., as well as several related entities, such as tags, assignments, etc.\r\n This does not include activities of sub-entities, like tasks of a project or comments on a task.\r\n\r\nAny authenticated user.", + "operationId": "GetTaskActivities", "parameters": [ { "name": "taskId", @@ -34054,11 +33013,41 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TimeTracking" + "$ref": "#/components/schemas/ActivityModel" } } } } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -34076,19 +33065,19 @@ } } }, - "/tasks/{taskId}/updateorder": { + "/tasks/{taskId}/addtags": { "post": { "tags": [ - "Tasks" + "TaskTags" ], - "summary": "Updates the order of a task within its list.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostTaskUpdateOrderByTaskId", + "summary": "Adds a batch of tags to the task with the specified id.", + "description": "The request fails if one of the tags is invalid (e.g. empty or duplicate).\r\n To add tags to a task the user must have `write` permissions on the specified task.", + "operationId": "PostTaskAddTagsByTaskId", "parameters": [ { "name": "taskId", "in": "path", - "description": "The id of the task.", + "description": "The id of the task to add the tags to.", "required": true, "schema": { "type": "string", @@ -34097,11 +33086,14 @@ } ], "requestBody": { - "description": "The update Order form payload.", + "description": "The model with the tags to be added.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateOrderForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/TagForm" + } } } }, @@ -34115,7 +33107,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ReorderingResult" + "$ref": "#/components/schemas/BaseTagModel" } } } @@ -34140,16 +33132,6 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -34167,14 +33149,26 @@ } } }, - "/taskschedules": { + "/tasks/{taskId}/checklistitems": { "get": { "tags": [ - "TaskSchedules" + "ChecklistItems" + ], + "summary": "Returns the checklist items for the task with the specified id.", + "description": "The user must have at least `read` permissions on the specified task.", + "operationId": "GetTaskChecklistItemsByTaskId", + "parameters": [ + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Returns a list of task schedules.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTaskSchedules", "responses": { "200": { "description": "OK", @@ -34183,7 +33177,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TaskSchedule" + "$ref": "#/components/schemas/ChecklistItem" } } } @@ -34198,6 +33192,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -34216,17 +33220,29 @@ }, "post": { "tags": [ - "TaskSchedules" + "ChecklistItems" + ], + "summary": "Creates a checklist item for a task with the specified id.", + "description": "The required permissions depend on the base type of the task. If the task is a project task, the user must have either `project-master-data:write` permissions or be assigned to the task. For a user's private task, no special permissions are required.", + "operationId": "PostTaskChecklistItemsByTaskId", + "parameters": [ + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Creates a new task schedule for a given task and a given user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostTaskSchedule", "requestBody": { - "description": "The model to create the task schedule.", + "description": "The checklist item form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskScheduleForm" + "$ref": "#/components/schemas/ChecklistItemForm" } } }, @@ -34238,17 +33254,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskSchedule" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ChecklistItem" } } } @@ -34289,14 +33295,14 @@ } } }, - "/taskschedules/bytaskid/{taskId}": { + "/tasks/{taskId}/checklistitems/tosubtasks": { "post": { "tags": [ - "TaskSchedules" + "ChecklistItems" ], - "summary": "Creates task schedules from a task by id.", - "description": "Creates task schedules from a task by id. The task must have start and due date and at least one assignee.\r\n If more than one user is assigned to the task, then the user needs to opt in to create task schedules for all assignees\r\n by setting the\r\n 'createSchedulesForAllAssignees' query param to true. This requires admin or feature permissions.\r\n\r\nAny authenticated user.", - "operationId": "PostTaskSchedulesByTaskIdByTaskId", + "summary": "Converts all checklist items of the specified task to subtasks.", + "description": "The user must have at least `write` permissions on the specified task.", + "operationId": "PostTaskChecklistItemsToSubtasksByTaskId", "parameters": [ { "name": "taskId", @@ -34307,20 +33313,21 @@ "type": "string", "format": "uuid" } - }, - { - "name": "createSchedulesForAllAssignees", - "in": "query", - "description": "Whether to create schedules for all assignees.", - "schema": { - "type": "boolean", - "default": false - } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskModel" + } + } + } + } }, "400": { "description": "Bad Request", @@ -34368,19 +33375,29 @@ } } }, - "/taskschedules/{taskScheduleId}": { + "/tasks/{taskId}/checklistitems/{checklistItemId}": { "delete": { "tags": [ - "TaskSchedules" + "ChecklistItems" ], - "summary": "Deletes a task schedule by id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "DeleteTaskScheduleById", + "summary": "Deletes a checklist item from a task.", + "description": "The user must have at least `write` permissions on the specified task.", + "operationId": "DeleteTaskChecklistItemByTaskIdAndChecklistItemId", "parameters": [ { - "name": "taskScheduleId", + "name": "taskId", "in": "path", - "description": "The id of the task schedule.", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "checklistItemId", + "in": "path", + "description": "The id of the checklist item to delete.", "required": true, "schema": { "type": "string", @@ -34401,6 +33418,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -34419,16 +33446,26 @@ }, "get": { "tags": [ - "TaskSchedules" + "ChecklistItems" ], - "summary": "Returns a task schedule by id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTaskScheduleById", + "summary": "Returns the checklist item with the specified id for a task.", + "description": "The user must have at least `read` permissions on the specified task.", + "operationId": "GetTaskChecklistItemByTaskIdAndChecklistItemId", "parameters": [ { - "name": "taskScheduleId", + "name": "taskId", "in": "path", - "description": "The id of the task schedule.", + "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", @@ -34442,7 +33479,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskSchedule" + "$ref": "#/components/schemas/ChecklistItem" } } } @@ -34484,29 +33521,39 @@ }, "put": { "tags": [ - "TaskSchedules" + "ChecklistItems" ], - "summary": "Updates a given task schedule.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PutTaskScheduleById", + "summary": "Updates a checklist item for a task with the specified id.", + "description": "The required permissions depend on the base type of the task. If the task is a project task, the user must have either `project-master-data:write` permissions or be assigned to the task. For a user's private task, no special permissions are required.", + "operationId": "PutTaskChecklistItemByTaskIdAndChecklistItemId", "parameters": [ { - "name": "taskScheduleId", + "name": "taskId", "in": "path", - "description": "The id of the task schedule.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The model to update the task schedule.", + }, + { + "name": "checklistItemId", + "in": "path", + "description": "The id of the checklist item.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The checklist item form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskSchedulePutForm" + "$ref": "#/components/schemas/ChecklistItemForm" } } }, @@ -34518,13 +33565,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskSchedule" + "$ref": "#/components/schemas/ChecklistItem" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -34533,8 +33580,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -34559,39 +33606,30 @@ } } }, - "/tasktemplates/deletetags": { - "post": { + "/tasks/{taskId}/comments": { + "delete": { "tags": [ - "TaskTemplateTags" + "TaskComments" ], - "summary": "Removes a tag from all task templates.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostDeleteTagForAllTaskTemplates", - "requestBody": { - "description": "The model to remove the tag from all task templates.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteTagForm" - } + "summary": "Deletes all comments of the specified task.", + "description": "Deletes all comments of the specified task.\r\n\r\nAny authenticated user.", + "operationId": "DeleteCommentsByTaskNameAndTaskId", + "parameters": [ + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - }, - "required": true - }, + } + ], "responses": { "204": { "description": "No Content" }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "401": { "description": "Unauthorized", "content": { @@ -34614,19 +33652,40 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } - } - }, - "/tasktemplates/tags": { + }, "get": { "tags": [ - "TaskTemplateTags" + "TaskComments" + ], + "summary": "Returns all comments of the task with the specified id.", + "description": "Returns all comments of the task with the specified id. The user needs read permissions on the task.\r\n\r\nAny authenticated user.", + "operationId": "GetCommentsByTaskNameAndTaskId", + "parameters": [ + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } ], - "summary": "Returns all tags that are currently in use by task templates.", - "description": "Returns all tags that are currently in use by task templates ordered by count.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskTemplateTags", "responses": { "200": { "description": "OK", @@ -34635,50 +33694,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/BaseTagModel" + "$ref": "#/components/schemas/Comment" } } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/tasktemplates/updatetags": { - "post": { - "tags": [ - "TaskTemplateTags" - ], - "summary": "Updates a tag globally for all task templates.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskTemplatesUpdateTags", - "requestBody": { - "description": "The model containing the tag updates.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TagUpdateForm" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" }, "400": { "description": "Bad Request", @@ -34712,24 +33732,21 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } - } - }, - "/tasktemplates/{taskTemplateId}": { - "get": { + }, + "post": { "tags": [ - "TaskTemplates" + "TaskComments" ], - "summary": "Returns the task template with the specified id.", - "description": "Returns the task template with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskTemplateById", + "summary": "Creates a new comment on the task with the specified id.", + "description": "Creates a new comment on the task with the specified id.\r\n A user can only create a comment for him/herself, except for admins and api users.\r\n \r\n To create a comment the user must have at least `read` permissions on the specified task.", + "operationId": "PostCommentsByTaskNameAndTaskId", "parameters": [ { - "name": "taskTemplateId", + "name": "taskId", "in": "path", - "description": "The id of the task template.", + "description": "The id of the task to create the comment for.", "required": true, "schema": { "type": "string", @@ -34737,13 +33754,44 @@ } } ], + "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/TaskTemplate" + "$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" } } } @@ -34774,19 +33822,29 @@ } } }, - "/tasktemplates/{taskTemplateId}/addtags": { - "post": { + "/tasks/{taskId}/comments/{commentId}": { + "delete": { "tags": [ - "TaskTemplateTags" + "TaskComments" ], - "summary": "Adds a batch of tags to the task template with the specified id.", - "description": "The request fails if one of the tags is invalid (e.g. empty or duplicate).\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostCreateTaskTemplateTag", + "summary": "Deletes the comment with the specified id on the task with the specified id.", + "description": "Deletes the comment with the specified id on the task with the specified id.\r\n The delete includes the reactions of the comment.\r\n If there are any replies to the comment, they will be deleted as well.\r\n\r\nAny authenticated user.", + "operationId": "DeleteCommentByTaskNameAndTaskIdAndCommentId", "parameters": [ { - "name": "taskTemplateId", + "name": "taskId", "in": "path", - "description": "The id of the task template to add tags to.", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "commentId", + "in": "path", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -34794,36 +33852,12 @@ } } ], - "requestBody": { - "description": "The model with the tags to be added.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TagForm" - } - } - } - }, - "required": true - }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } - } - } - } + "204": { + "description": "No Content" }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -34832,8 +33866,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -34854,24 +33888,31 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } - } - }, - "/tasktemplates/{taskTemplateId}/checklistitemtemplates": { + }, "get": { "tags": [ - "TaskBundles" + "TaskComments" ], - "summary": "Lists checklist item templates for a task template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", - "operationId": "GetTaskTemplateChecklistItemTemplatesByTaskTemplateId", + "summary": "Returns the comment with the specified id of the task with the specified id.", + "description": "Returns the comment with the specified id of the task with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetCommentByTaskNameAndTaskIdAndCommentId", "parameters": [ { - "name": "taskTemplateId", + "name": "taskId", "in": "path", - "description": "The id of the task template.", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "commentId", + "in": "path", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -34885,16 +33926,13 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChecklistItemTemplate" - } + "$ref": "#/components/schemas/Comment" } } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -34915,22 +33953,31 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "read" + "any": "true" } }, - "post": { + "put": { "tags": [ - "TaskBundles" + "TaskComments" ], - "summary": "Creates a checklist item template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskTemplateChecklistItemTemplatesByTaskTemplateId", + "summary": "Updates the comment with the specified id on the task with the specified id.", + "description": "To update a comment the user must either have at least `read` permissions on the specified task, be the creator of the comment or be admin.", + "operationId": "PutCommentByTaskNameAndTaskIdAndCommentId", "parameters": [ { - "name": "taskTemplateId", + "name": "taskId", "in": "path", - "description": "The id of the task template.", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "commentId", + "in": "path", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -34939,11 +33986,11 @@ } ], "requestBody": { - "description": "The checklist Item Template form.", + "description": "The model with the updated comment information.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItemTemplateForm" + "$ref": "#/components/schemas/CommentPutForm" } } }, @@ -34955,13 +34002,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItemTemplate" + "$ref": "#/components/schemas/Comment" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -34992,24 +34039,23 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/tasktemplates/{taskTemplateId}/checklistitemtemplates/{checklistItemTemplateId}": { - "delete": { + "/tasks/{taskId}/comments/{commentId}/react": { + "post": { "tags": [ - "TaskBundles" + "TaskComments" ], - "summary": "Deletes a checklist item template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "DeleteTaskTemplateChecklistItemTemplateByTaskTemplateIdAndChecklistItemTemplateId", + "summary": "Updates the reactions of the comment with the specified id on the task with the specified id.", + "description": "To update a reaction of a comment the user must have at least `read` permissions on the specified task.", + "operationId": "PostCommentReactByTaskNameAndTaskIdAndCommentId", "parameters": [ { - "name": "taskTemplateId", + "name": "taskId", "in": "path", - "description": "The id of the task template.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -35017,9 +34063,9 @@ } }, { - "name": "checklistItemTemplateId", + "name": "commentId", "in": "path", - "description": "The checklist Item Template Id.", + "description": "The id of the comment.", "required": true, "schema": { "type": "string", @@ -35027,10 +34073,31 @@ } } ], + "requestBody": { + "description": "The model used to update the reactions of the comment with the specified id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReactionForm" + } + } + }, + "required": true + }, "responses": { "204": { "description": "No Content" }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -35053,32 +34120,23 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } - }, - "get": { + } + }, + "/tasks/{taskId}/copy": { + "post": { "tags": [ - "TaskBundles" + "Tasks" ], - "summary": "Gets a checklist item template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", - "operationId": "GetTaskTemplateChecklistItemTemplateByTaskTemplateIdAndChecklistItemTemplateId", + "summary": "Creates a copy of the specified task.", + "description": "Comments, files and activity logs are not copied.\r\n To copy a task, the user needs to be the assignee of the task or 'ProjectPlanning'\r\n permissions in general or in the project the task is related to.\r\n If the task is a parent task, it will also copy its subtasks.\r\n\r\nAny authenticated user.", + "operationId": "PostTaskCopyByTaskId", "parameters": [ { - "name": "taskTemplateId", - "in": "path", - "description": "The id of the task template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "checklistItemTemplateId", + "name": "taskId", "in": "path", - "description": "The checklist item template id.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -35092,7 +34150,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItemTemplate" + "$ref": "#/components/schemas/TaskModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -35119,32 +34187,23 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "read" + "any": "true" } - }, - "put": { + } + }, + "/tasks/{taskId}/deleterecurrency": { + "post": { "tags": [ - "TaskBundles" + "Tasks" ], - "summary": "Updates a checklist item template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PutTaskTemplateChecklistItemTemplateByTaskTemplateIdAndChecklistItemTemplateId", + "summary": "Deletes the recurrence rule for a task.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostTaskDeleteRecurrencyByTaskId", "parameters": [ { - "name": "taskTemplateId", - "in": "path", - "description": "The id of the task template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "checklistItemTemplateId", + "name": "taskId", "in": "path", - "description": "The checklist Item Template Id.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -35152,27 +34211,9 @@ } } ], - "requestBody": { - "description": "The checklist Item Template form.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChecklistItemTemplateForm" - } - } - }, - "required": true - }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChecklistItemTemplate" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -35184,8 +34225,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -35206,75 +34247,23 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/tasktemplates/{taskTemplateId}/deleterecurrency": { + "/tasks/{taskId}/deletetags": { "post": { "tags": [ - "TaskBundles" + "TaskTags" ], - "summary": "Deletes recurrence information from a task template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskTemplateDeleteRecurrencyByTaskTemplateId", + "summary": "Removes tags from the task with the specified id.", + "description": "Returns 204 NoContent if all tags have been removed successfully.\r\n Returns 207 MultiStatus if at least one tag could not be removed, including the reasons.\r\n \r\n To remove tags from a task the user must have `write` permissions on the specified task.", + "operationId": "PostTaskDeleteTagsByTaskId", "parameters": [ { - "name": "taskTemplateId", + "name": "taskId", "in": "path", - "description": "The id of the task template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "task-manage-config": "write" - } - } - }, - "/tasktemplates/{taskTemplateId}/deletetags": { - "post": { - "tags": [ - "TaskTemplateTags" - ], - "summary": "Removes tags from the task template with the specified id.", - "description": "Returns 204 NoContent if all tags have been removed successfully.\r\n Returns 207 MultiStatus if at least one tag could not be removed, including the reasons.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostDeleteTaskTemplatesTags", - "parameters": [ - { - "name": "taskTemplateId", - "in": "path", - "description": "The id of the task template to remove tags from.", + "description": "The id of the task to remove the tags from.", "required": true, "schema": { "type": "string", @@ -35283,7 +34272,7 @@ } ], "requestBody": { - "description": "The list of tags to remove from the task template.", + "description": "The model with the tags to be removed.", "content": { "application/json": { "schema": { @@ -35334,341 +34323,24 @@ "x-api-versions": [ "v1" ], - "x-access": { - "admin": "true", - "task-manage-config": "write" - } - } - }, - "/tasktemplates/{taskTemplateId}/recurrency": { - "get": { - "tags": [ - "TaskBundles" - ], - "summary": "Gets recurrency details for a task template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", - "operationId": "GetTaskTemplateRecurrencyByTaskTemplateId", - "parameters": [ - { - "name": "taskTemplateId", - "in": "path", - "description": "The id of the task template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskRecurrencyForm" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "task-manage-config": "read" - } - } - }, - "/tasktemplates/{taskTemplateId}/setcustomfields": { - "post": { - "tags": [ - "CustomFields" - ], - "summary": "Sets the custom fields for the specified task template.", - "description": "The required properties depend on the type of the custom field. Only task templates which are linked to a project template may have custom fields set.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostTaskTemplateSetCustomFieldsByTaskTemplateId", - "parameters": [ - { - "name": "taskTemplateId", - "in": "path", - "description": "The id of the task template to set custom fields for.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model containing the details for setting the custom fields for a task template.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomFieldPostForm" - } - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "project-manage-config": "write" - } - } - }, - "/tasktemplates/{taskTemplateId}/setrecurrency": { - "post": { - "tags": [ - "TaskBundles" - ], - "summary": "Adds or updates a recurrence rule for a task template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTaskTemplateSetRecurrencyByTaskTemplateId", - "parameters": [ - { - "name": "taskTemplateId", - "in": "path", - "description": "The id of the task template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "description": "The model describing the recurrence rule to apply.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskBundleRecurrencyForm" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "task-manage-config": "write" - } - } - }, - "/tasktemplates/{taskTemplateId}/tags": { - "get": { - "tags": [ - "TaskTemplateTags" - ], - "summary": "Returns the tags of the task template with the specified id.", - "description": "Returns the tags of the task template with the specified id ordered by name.\r\n\r\nAny authenticated user.", - "operationId": "GetTagsByTaskTemplateId", - "parameters": [ - { - "name": "taskTemplateId", - "in": "path", - "description": "The id of the task template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], "x-access": { "any": "true" } } }, - "/tasktemplates/{taskTemplateId}/taskdependencytemplates": { - "get": { - "tags": [ - "TaskDependencyTemplates" - ], - "summary": "Returns the task dependency templates for a given task template.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", - "operationId": "GetTaskTemplateTaskDependencyTemplatesByTaskTemplateId", - "parameters": [ - { - "name": "taskTemplateId", - "in": "path", - "description": "The id of the task template.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskDependencyTemplate" - } - } - } - } - }, - "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", - "task-manage-config": "read" - } - } - }, - "/tasktemplates/{tasktemplateId}/externalfiles": { + "/tasks/{taskId}/externalfiles": { "post": { "tags": [ - "TaskTemplateFiles" + "TaskFiles" ], "summary": "Endpoint to batch create external files without uploading.", "description": "Endpoint to create file infos with batch operation.\nCreated file infos don't have a version.\r\n\r\nAny authenticated user.", "operationId": "CreateExternalFiles", "parameters": [ { - "name": "tasktemplateId", + "name": "taskId", "in": "path", - "description": "The id of the tasktemplate.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -35724,19 +34396,19 @@ } } }, - "/tasktemplates/{tasktemplateId}/files": { + "/tasks/{taskId}/files": { "delete": { "tags": [ - "TaskTemplateFiles" + "TaskFiles" ], - "summary": "Deletes the files of the specified tasktemplate.", + "summary": "Deletes the files of the specified task.", "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", - "operationId": "DeleteTaskTemplateFiles", + "operationId": "DeleteTaskFiles", "parameters": [ { - "name": "tasktemplateId", + "name": "taskId", "in": "path", - "description": "The id of the tasktemplate.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -35765,16 +34437,16 @@ }, "get": { "tags": [ - "TaskTemplateFiles" + "TaskFiles" ], - "summary": "Returns all files of the tasktemplate with the specified id.", - "description": "Returns all file metadata of the tasktemplate with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskTemplateFiles", + "summary": "Returns all files of the task with the specified id.", + "description": "Returns all file metadata of the task with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetTaskFiles", "parameters": [ { - "name": "tasktemplateId", + "name": "taskId", "in": "path", - "description": "The id of the tasktemplate.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -35825,16 +34497,16 @@ }, "post": { "tags": [ - "TaskTemplateFiles" + "TaskFiles" ], - "summary": "Creates a new tasktemplate file for the tasktemplate with the specified id..", - "description": "Uploads a new tasktemplate file for the tasktemplate with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateTaskTemplateFile", + "summary": "Creates a new task file for the task with the specified id..", + "description": "Uploads a new task file for the task with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", + "operationId": "CreateTaskFile", "parameters": [ { - "name": "tasktemplateId", + "name": "taskId", "in": "path", - "description": "The id of the tasktemplate.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -35895,19 +34567,19 @@ } } }, - "/tasktemplates/{tasktemplateId}/files/byuploadid": { + "/tasks/{taskId}/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 tasktemplate from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", + "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file task from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", "operationId": "PostUploadByUploadId", "parameters": [ { - "name": "tasktemplateId", + "name": "taskId", "in": "path", - "description": "The id of the tasktemplate to attach the file to.", + "description": "The id of the task to attach the file to.", "required": true, "schema": { "type": "string", @@ -35963,19 +34635,19 @@ } } }, - "/tasktemplates/{tasktemplateId}/files/byurl": { + "/tasks/{taskId}/files/byurl": { "post": { "tags": [ - "TaskTemplateFiles" + "TaskFiles" ], "summary": "Uploads a new file by providing an url.", "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", - "operationId": "CreateTaskTemplateFileByUrl", + "operationId": "CreateTaskFileByUrl", "parameters": [ { - "name": "tasktemplateId", + "name": "taskId", "in": "path", - "description": "The id of the tasktemplate the file is linked to.", + "description": "The id of the task the file is linked to.", "required": true, "schema": { "type": "string", @@ -36025,19 +34697,19 @@ } } }, - "/tasktemplates/{tasktemplateId}/files/{fileId}": { + "/tasks/{taskId}/files/{fileId}": { "delete": { "tags": [ - "TaskTemplateFiles" + "TaskFiles" ], - "summary": "Deletes the tasktemplate file with the specified id.", + "summary": "Deletes the task file with the specified id.", "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", - "operationId": "DeleteTaskTemplateFile", + "operationId": "DeleteTaskFile", "parameters": [ { - "name": "tasktemplateId", + "name": "taskId", "in": "path", - "description": "The id of the tasktemplate.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -36076,16 +34748,16 @@ }, "get": { "tags": [ - "TaskTemplate Files" + "Task Files" ], - "summary": "Returns the file with the specified id of the tasktemplate with the specified id.", + "summary": "Returns the file with the specified id of the task with the specified id.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByTaskTemplateNameAndTaskTemplateIdAndFileId", + "operationId": "GetFilesByTaskNameAndTaskIdAndFileId", "parameters": [ { - "name": "tasktemplateId", + "name": "taskId", "in": "path", - "description": "The id of the tasktemplate.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -36151,16 +34823,16 @@ }, "put": { "tags": [ - "TaskTemplateFiles" + "TaskFiles" ], - "summary": "Updates the metadata of the tasktemplate file with the specified id.", - "description": "Updates the metadata of the tasktemplate file with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "UpdateTaskTemplateFile", + "summary": "Updates the metadata of the task file with the specified id.", + "description": "Updates the metadata of the task file with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "UpdateTaskFile", "parameters": [ { - "name": "tasktemplateId", + "name": "taskId", "in": "path", - "description": "The id of the tasktemplate.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -36220,19 +34892,19 @@ } } }, - "/tasktemplates/{tasktemplateId}/files/{fileId}/changeentity": { + "/tasks/{taskId}/files/{fileId}/changeentity": { "post": { "tags": [ - "TaskTemplateFiles" + "TaskFiles" ], - "summary": "Changes the tasktemplate this file belongs to.", - "description": "Changes the tasktemplate this file belongs to.\nSwitch to the specified tasktemplate or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", - "operationId": "ChangeTaskTemplate", + "summary": "Changes the task this file belongs to.", + "description": "Changes the task this file belongs to.\nSwitch to the specified task or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", + "operationId": "ChangeTask", "parameters": [ { - "name": "tasktemplateId", + "name": "taskId", "in": "path", - "description": "The id of the tasktemplate.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -36292,19 +34964,19 @@ } } }, - "/tasktemplates/{tasktemplateId}/files/{fileId}/copy": { + "/tasks/{taskId}/files/{fileId}/copy": { "post": { "tags": [ - "TaskTemplateFiles" + "TaskFiles" ], - "summary": "Copies the file to a new tasktemplate.", - "description": "Copies the file to a new tasktemplate (meta and content).\r\n\r\nAny authenticated user.", - "operationId": "CopyToTaskTemplate", + "summary": "Copies the file to a new task.", + "description": "Copies the file to a new task (meta and content).\r\n\r\nAny authenticated user.", + "operationId": "CopyToTask", "parameters": [ { - "name": "tasktemplateId", + "name": "taskId", "in": "path", - "description": "The id of the tasktemplate.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -36364,19 +35036,19 @@ } } }, - "/tasktemplates/{tasktemplateId}/files/{fileId}/download": { + "/tasks/{taskId}/files/{fileId}/download": { "get": { "tags": [ - "TaskTemplateFiles" + "TaskFiles" ], - "summary": "Returns the content of the tasktemplate file with the specified id.", - "description": "Returns the content of the tasktemplate file. Uses the latest file version.\nIf the tasktemplate file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskTemplateFileContent", + "summary": "Returns the content of the task file with the specified id.", + "description": "Returns the content of the task file. Uses the latest file version.\nIf the task file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", + "operationId": "GetTaskFileContent", "parameters": [ { - "name": "tasktemplateId", + "name": "taskId", "in": "path", - "description": "The id of the tasktemplate.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -36448,19 +35120,19 @@ } } }, - "/tasktemplates/{tasktemplateId}/files/{fileId}/pdf": { + "/tasks/{taskId}/files/{fileId}/pdf": { "get": { "tags": [ - "TaskTemplateFiles" + "TaskFiles" ], "summary": "Returns the content of the file with the specified id as pdf.\ntype or conversion not possible.", - "description": "Returns the content of the tasktemplate file. Uses the latest file version.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskTemplateFileContent", + "description": "Returns the content of the task file. Uses the latest file version.\r\n\r\nAny authenticated user.", + "operationId": "GetTaskFileContent", "parameters": [ { - "name": "tasktemplateId", + "name": "taskId", "in": "path", - "description": "The id of the tasktemplate.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -36515,19 +35187,19 @@ } } }, - "/tasktemplates/{tasktemplateId}/files/{fileId}/shareurl": { + "/tasks/{taskId}/files/{fileId}/shareurl": { "get": { "tags": [ - "TaskTemplateFiles" + "TaskFiles" ], "summary": "Returns an url to share the file.", "description": "Returns a url to share the file.\r\n\r\nAny authenticated user.", "operationId": "GetPublicToken", "parameters": [ { - "name": "tasktemplateId", + "name": "taskId", "in": "path", - "description": "The id of the tasktemplate.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -36572,19 +35244,19 @@ } } }, - "/tasktemplates/{tasktemplateId}/files/{fileId}/versions": { + "/tasks/{taskId}/files/{fileId}/versions": { "get": { "tags": [ - "TaskTemplateFiles" + "TaskFiles" ], - "summary": "Returns all file versions of the specified tasktemplate file.", - "description": "Returns all file versions of the specified tasktemplate file.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskTemplateFileVersions", + "summary": "Returns all file versions of the specified task file.", + "description": "Returns all file versions of the specified task file.\r\n\r\nAny authenticated user.", + "operationId": "GetTaskFileVersions", "parameters": [ { - "name": "tasktemplateId", + "name": "taskId", "in": "path", - "description": "The id of the tasktemplate.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -36645,16 +35317,16 @@ }, "post": { "tags": [ - "TaskTemplateFiles" + "TaskFiles" ], - "summary": "Uploads a new version of the tasktemplate file with the specified id.", - "description": "Uploads a new version of an tasktemplate file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateTaskTemplateFileVersion", + "summary": "Uploads a new version of the task file with the specified id.", + "description": "Uploads a new version of an task file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", + "operationId": "CreateTaskFileVersion", "parameters": [ { - "name": "tasktemplateId", + "name": "taskId", "in": "path", - "description": "The id of the tasktemplate.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -36725,19 +35397,19 @@ } } }, - "/tasktemplates/{tasktemplateId}/files/{fileId}/versions/{versionId}": { + "/tasks/{taskId}/files/{fileId}/versions/{versionId}": { "get": { "tags": [ - "TaskTemplate Files" + "Task Files" ], - "summary": "Returns the tasktemplate file version with the specified id.", + "summary": "Returns the task file version with the specified id.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByTaskTemplateNameAndTaskTemplateIdAndFileIdAndVersionId", + "operationId": "GetFilesVersionsByTaskNameAndTaskIdAndFileIdAndVersionId", "parameters": [ { - "name": "tasktemplateId", + "name": "taskId", "in": "path", - "description": "The id of the tasktemplate.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -36812,19 +35484,19 @@ } } }, - "/tasktemplates/{tasktemplateId}/files/{fileId}/versions/{versionId}/download": { + "/tasks/{taskId}/files/{fileId}/versions/{versionId}/download": { "get": { "tags": [ - "TaskTemplateFiles" + "TaskFiles" ], - "summary": "Returns the content of the tasktemplate file version with the specified id.", - "description": "Returns the content of the tasktemplate file version with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetTaskTemplateFileVersionContent", + "summary": "Returns the content of the task file version with the specified id.", + "description": "Returns the content of the task file version with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetTaskFileVersionContent", "parameters": [ { - "name": "tasktemplateId", + "name": "taskId", "in": "path", - "description": "The id of the tasktemplate.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -36880,44 +35552,24 @@ } } }, - "/teams": { + "/tasks/{taskId}/recurrency": { "get": { "tags": [ - "Teams" + "Tasks" ], - "summary": "Returns all teams.", - "description": "When team restrictions are applied for the workspace, the user must either be an admin or member of the team to retrieve it.", - "operationId": "GetTeams", + "summary": "Gets the recurrence rule of a task.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTaskRecurrencyByTaskId", "parameters": [ { - "name": "includeUserIds", - "in": "query", - "description": "Whether to include the ids of users that are in the team.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "includeProjectIds", - "in": "query", - "description": "Whether to include the ids of projects that are assigned to the team.", + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "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": { @@ -36926,54 +35578,27 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Team" - } + "$ref": "#/components/schemas/RecurrencyModel" } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, - "post": { - "tags": [ - "Teams" - ], - "summary": "Creates a new team.", - "description": "\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin.", - "operationId": "PostTeam", - "requestBody": { - "description": "The model used to create the team.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TeamForm" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } }, - "required": true - }, - "responses": { - "200": { - "description": "OK", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Team" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -36990,26 +35615,23 @@ "v1" ], "x-access": { - "admin": "true" - }, - "x-subscriptionlevel": { - "minimumPlan": "standard" + "any": "true" } } }, - "/teams/{teamId}": { - "delete": { + "/tasks/{taskId}/setassignees": { + "post": { "tags": [ - "Teams" + "Tasks" ], - "summary": "Deletes the team with the specified id.", - "description": "\r\n\r\nThe user must be an admin.", - "operationId": "DeleteTeamById", + "summary": "Assigns a list of users to a task.", + "description": "Replaces existing assignments with the provided list.\r\n\r\nAny authenticated user.", + "operationId": "PostTaskSetAssigneesByTaskId", "parameters": [ { - "name": "teamId", + "name": "taskId", "in": "path", - "description": "The id of the team to delete.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -37017,10 +35639,45 @@ } } ], + "requestBody": { + "description": "The id of the users.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + } + }, + "required": true + }, "responses": { "204": { "description": "No Content" }, + "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": { @@ -37043,53 +35700,54 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } - }, - "get": { + } + }, + "/tasks/{taskId}/setcustomfields": { + "post": { "tags": [ - "Teams" + "CustomFields" ], - "summary": "Returns the team with the specified id.", - "description": "When team restrictions are applied for the workspace, the user must either be an admin or member of the team to retrieve it.", - "operationId": "GetTeamById", + "summary": "Sets the custom fields for a task.", + "description": "The required properties depend on the type of the custom field.\r\n \r\n The user must have at least `write` permissions on the specified task.", + "operationId": "PostTaskSetCustomFieldsByTaskId", "parameters": [ { - "name": "teamId", + "name": "taskId", "in": "path", - "description": "The id of the team.", + "description": "The id of the task to set custom fields for.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "name": "includeUserIds", - "in": "query", - "description": "Whether to include the ids of users that are in the team.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "includeProjectIds", - "in": "query", - "description": "Whether to include the ids of projects that are assigned to the team.", - "schema": { - "type": "boolean", - "default": false - } } ], + "requestBody": { + "description": "The model containing the details for setting the custom fields for a task.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFieldPostForm" + } + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Team" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -37128,62 +35786,62 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/tasks/{taskId}/setplannedefforts": { + "post": { "tags": [ - "Teams" + "Tasks" ], - "summary": "Updates the team with the specified id.", - "description": "\r\n\r\nThe user must be an admin.", - "operationId": "PutTeamById", + "summary": "Modifies planned efforts for the given task assignments.", + "description": "Only the provided assignments are updated; missing assignments remain unchanged.\r\n\r\nAny authenticated user.", + "operationId": "PostTaskSetPlannedEffortsByTaskId", "parameters": [ { - "name": "teamId", + "name": "taskId", "in": "path", - "description": "The id of the team to update.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "name": "includeUserIds", - "in": "query", - "description": "Whether to include the ids of users that are in the team.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "includeProjectIds", - "in": "query", - "description": "Whether to include the ids of projects that are assigned to the team.", - "schema": { - "type": "boolean", - "default": false - } } ], "requestBody": { - "description": "The model with the team data.", + "description": "The planned Efforts.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TeamForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/PlannedEffortForm" + } } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Team" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -37210,23 +35868,23 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/teams/{teamId}/addprojects": { + "/tasks/{taskId}/setrecurrency": { "post": { "tags": [ - "Teams" + "Tasks" ], - "summary": "Adds projects to the specified team.", - "description": "The user must have `project-master-data:write` permissions or be the owner of the projects.", - "operationId": "PostTeamAddProjectsByTeamId", + "summary": "Adds or updates a recurrence rule for a task.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostTaskSetRecurrencyByTaskId", "parameters": [ { - "name": "teamId", + "name": "taskId", "in": "path", - "description": "The id of the team.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -37235,36 +35893,32 @@ } ], "requestBody": { - "description": "The model with the list of project ids to add.", + "description": "The model describing the recurrence rule to apply.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/schemas/TaskRecurrencyForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectInTeam" - } + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -37299,19 +35953,19 @@ } } }, - "/teams/{teamId}/addusers": { - "post": { + "/tasks/{taskId}/tags": { + "get": { "tags": [ - "Teams" + "TaskTags" ], - "summary": "Adds users to the specified team.", - "description": "\r\n\r\nThe user must be an admin.", - "operationId": "PostTeamAddUsersByTeamId", + "summary": "Returns the tags of the task with the specified id.", + "description": "Returns the tags of the task with the specified id ordered by name.\r\n\r\nAny authenticated user.", + "operationId": "GetTaskTagsByTaskId", "parameters": [ { - "name": "teamId", + "name": "taskId", "in": "path", - "description": "The id of the team.", + "description": "The id of the task to get the tags for.", "required": true, "schema": { "type": "string", @@ -37319,21 +35973,6 @@ } } ], - "requestBody": { - "description": "The model with the list of user ids to add.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", @@ -37342,24 +35981,14 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/UserInTeam" + "$ref": "#/components/schemas/BaseTagModel" } } } } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -37380,23 +36009,23 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/teams/{teamId}/removeprojects": { - "post": { + "/tasks/{taskId}/taskdependencies": { + "get": { "tags": [ - "Teams" + "TaskDependencies" ], - "summary": "Removes projects from the specified team.", - "description": "The user must have `project-master-data:write` permissions or be the owner of the projects.", - "operationId": "PostTeamRemoveProjectsByTeamId", + "summary": "Returns all task dependencies for a specific task.", + "description": "To get all dependencies of a task, the user needs project planning permissions on that project or be assigned to that task.", + "operationId": "GetTaskTaskdependenciesByTaskId", "parameters": [ { - "name": "teamId", + "name": "taskId", "in": "path", - "description": "The id of the team.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -37404,27 +36033,22 @@ } } ], - "requestBody": { - "description": "The model with the list of project ids to remove.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskDependency" + } } } } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -37432,13 +36056,65 @@ } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/tasks/{taskId}/timeentries": { + "get": { + "tags": [ + "TimeEntries" + ], + "summary": "Returns all time entries of the specified task.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTaskTimeEntries", + "parameters": [ + { + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, - "404": { - "description": "Not Found", + { + "$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/TimeTracking" + } } } } @@ -37459,19 +36135,19 @@ } } }, - "/teams/{teamId}/removeusers": { + "/tasks/{taskId}/updateorder": { "post": { "tags": [ - "Teams" + "Tasks" ], - "summary": "Removes users from the specified team.", - "description": "\r\n\r\nThe user must be an admin.", - "operationId": "PostTeamRemoveUsersByTeamId", + "summary": "Updates the order of a task within its list.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostTaskUpdateOrderByTaskId", "parameters": [ { - "name": "teamId", + "name": "taskId", "in": "path", - "description": "The id of the team.", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -37480,23 +36156,29 @@ } ], "requestBody": { - "description": "The model with the list of user ids to remove.", + "description": "The update Order form payload.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/schemas/UpdateOrderForm" } } }, "required": true }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ReorderingResult" + } + } + } + } }, "400": { "description": "Bad Request", @@ -37508,6 +36190,16 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -37530,32 +36222,18 @@ "v1" ], "x-access": { - "admin": "true" + "any": "true" } } }, - "/temporaryfiles": { + "/taskschedules": { "get": { "tags": [ - "Temporary Files" + "TaskSchedules" ], - "summary": "Returns all temporary files of the current user.", + "summary": "Returns a list of task schedules.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTemporaryFiles", - "parameters": [ - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" - } - ], + "operationId": "GetTaskSchedules", "responses": { "200": { "description": "OK", @@ -37564,11 +36242,21 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/TaskSchedule" } } } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -37587,19 +36275,21 @@ }, "post": { "tags": [ - "Temporary Files" + "TaskSchedules" ], - "summary": "Creates a new temporary file.", + "summary": "Creates a new task schedule for a given task and a given user.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostTemporaryFiles", + "operationId": "PostTaskSchedule", "requestBody": { + "description": "The model to create the task schedule.", "content": { - "multipart/form-data": { + "application/json": { "schema": { - "$ref": "#/components/schemas/FileUploadModel" + "$ref": "#/components/schemas/TaskScheduleForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -37607,7 +36297,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/TaskSchedule" } } } @@ -37621,49 +36311,13 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - }, - "/temporaryfiles/{fileId}": { - "get": { - "tags": [ - "Temporary Files" - ], - "summary": "Returns the temporary file with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTemporaryFilesByFileId", - "parameters": [ - { - "name": "fileId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -37692,48 +36346,53 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/taskschedules/bytaskid/{taskId}": { + "post": { "tags": [ - "Temporary Files" + "TaskSchedules" ], - "summary": "Updates the meta information of the temporary file with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PutTemporaryFilesByFileId", + "summary": "Creates task schedules from a task by id.", + "description": "Creates task schedules from a task by id. The task must have start and due date and at least one assignee.\r\n If more than one user is assigned to the task, then the user needs to opt in to create task schedules for all assignees\r\n by setting the\r\n 'createSchedulesForAllAssignees' query param to true. This requires admin or feature permissions.\r\n\r\nAny authenticated user.", + "operationId": "PostTaskSchedulesByTaskIdByTaskId", "parameters": [ { - "name": "fileId", + "name": "taskId", "in": "path", + "description": "The id of the task.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "createSchedulesForAllAssignees", + "in": "query", + "description": "Whether to create schedules for all assignees.", + "schema": { + "type": "boolean", + "default": false + } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - } - }, - "required": true - }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -37768,18 +36427,19 @@ } } }, - "/temporaryfiles/{fileId}/download": { - "get": { + "/taskschedules/{taskScheduleId}": { + "delete": { "tags": [ - "Temporary Files" + "TaskSchedules" ], - "summary": "Returns the content of the temporary file with the specified id.", + "summary": "Deletes a task schedule by id.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTemporaryFilesDownloadByFileId", + "operationId": "DeleteTaskScheduleById", "parameters": [ { - "name": "fileId", + "name": "taskScheduleId", "in": "path", + "description": "The id of the task schedule.", "required": true, "schema": { "type": "string", @@ -37788,11 +36448,11 @@ } ], "responses": { - "200": { - "description": "OK" + "204": { + "description": "No Content" }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -37815,20 +36475,19 @@ "x-access": { "any": "true" } - } - }, - "/temporaryfiles/{fileId}/setentity": { - "post": { + }, + "get": { "tags": [ - "Temporary Files" + "TaskSchedules" ], - "summary": "Sets the temporary file to a global or entity file.", + "summary": "Returns a task schedule by id.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostTemporaryFilesSetEntityByFileId", + "operationId": "GetTaskScheduleById", "parameters": [ { - "name": "fileId", + "name": "taskScheduleId", "in": "path", + "description": "The id of the task schedule.", "required": true, "schema": { "type": "string", @@ -37836,29 +36495,19 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/TaskSchedule" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -37891,72 +36540,32 @@ "x-access": { "any": "true" } - } - }, - "/timebookings": { - "get": { + }, + "put": { "tags": [ - "TimeBookings" + "TaskSchedules" ], - "summary": "Returns a list of time bookings.", + "summary": "Updates a given task schedule.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTimeBookings", + "operationId": "PutTaskScheduleById", "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/TimeBooking" - } - } - } + "name": "taskScheduleId", + "in": "path", + "description": "The id of the task schedule.", + "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": "PostTimeBooking", "requestBody": { - "description": "The model to create the time booking.", + "description": "The model to update the task schedule.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeBookingForm" + "$ref": "#/components/schemas/TaskSchedulePutForm" } } }, @@ -37968,7 +36577,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeBooking" + "$ref": "#/components/schemas/TaskSchedule" } } } @@ -38009,26 +36618,25 @@ } } }, - "/timebookings/{timeBookingId}": { - "delete": { + "/tasktemplates/deletetags": { + "post": { "tags": [ - "TimeBookings" + "TaskTemplateTags" ], - "summary": "Deletes a time booking by id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "DeleteTimeBookingById", - "parameters": [ - { - "name": "timeBookingId", - "in": "path", - "description": "The id of the time booking to delete.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Removes a tag from all task templates.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostDeleteTagForAllTaskTemplates", + "requestBody": { + "description": "The model to remove the tag from all task templates.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteTagForm" + } } - } - ], + }, + "required": true + }, "responses": { "204": { "description": "No Content" @@ -38065,49 +36673,71 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } - }, - "put": { + } + }, + "/tasktemplates/tags": { + "get": { "tags": [ - "TimeBookings" + "TaskTemplateTags" ], - "summary": "Updates a given time booking.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PutTimeBookingById", - "parameters": [ - { - "name": "timeBookingId", - "in": "path", - "description": "The id of the time booking.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Returns all tags that are currently in use by task templates.", + "description": "Returns all tags that are currently in use by task templates ordered by count.\r\n\r\nAny authenticated user.", + "operationId": "GetTaskTemplateTags", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } + } + } } } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/tasktemplates/updatetags": { + "post": { + "tags": [ + "TaskTemplateTags" ], + "summary": "Updates a tag globally for all task templates.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskTemplatesUpdateTags", "requestBody": { - "description": "The model to update the time booking.", + "description": "The model containing the tag updates.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeBookingForm" + "$ref": "#/components/schemas/TagUpdateForm" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeBooking" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -38141,39 +36771,29 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/timeentries": { + "/tasktemplates/{taskTemplateId}": { "get": { "tags": [ - "TimeEntries" + "TaskTemplates" ], - "summary": "Returns all time entries.", - "description": "Returns all time entries.\r\n Depending on the time entry, the calling users has to have several permissions to get the time entry.\r\n No permissions are required if the calling user is owner of this time entry (this includes external timetrackings from connected projects).\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions on the 'project-timetracking' feature are necessary (this does NOT include external timetrackings from connected projects).\r\n\r\nAny authenticated user.", - "operationId": "GetTimeEntries", + "summary": "Returns the task template with the specified id.", + "description": "Returns the task template with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetTaskTemplateById", "parameters": [ { - "name": "searchReindex", - "in": "query", - "description": "Whether to reindex for search.", + "name": "taskTemplateId", + "in": "path", + "description": "The id of the task template.", + "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": { @@ -38182,10 +36802,17 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TimeTracking" - } + "$ref": "#/components/schemas/TaskTemplate" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -38204,20 +36831,37 @@ "x-access": { "any": "true" } - }, + } + }, + "/tasktemplates/{taskTemplateId}/addtags": { "post": { "tags": [ - "TimeEntries" + "TaskTemplateTags" + ], + "summary": "Adds a batch of tags to the task template with the specified id.", + "description": "The request fails if one of the tags is invalid (e.g. empty or duplicate).\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostCreateTaskTemplateTag", + "parameters": [ + { + "name": "taskTemplateId", + "in": "path", + "description": "The id of the task template to add tags to.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Creates a new time entry.", - "description": "Creates a new time entry.\r\n Depending on the time entry, the calling users has to have several permissions to create the time entry.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user needs permissions on:\r\n 'project-planning-data' if it is a project task.\r\n\r\nAny authenticated user.", - "operationId": "PostTimeEntry", "requestBody": { - "description": "The time entry data.", + "description": "The model with the tags to be added.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeEntryPostForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/TagForm" + } } } }, @@ -38229,7 +36873,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } } } } @@ -38266,47 +36913,108 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/timeentries/batch/{operation}": { + "/tasktemplates/{taskTemplateId}/checklistitemtemplates": { + "get": { + "tags": [ + "TaskBundles" + ], + "summary": "Lists checklist item templates for a task template.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", + "operationId": "GetTaskTemplateChecklistItemTemplatesByTaskTemplateId", + "parameters": [ + { + "name": "taskTemplateId", + "in": "path", + "description": "The id of the task template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChecklistItemTemplate" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "task-manage-config": "read" + } + }, "post": { "tags": [ - "TimeEntries" + "TaskBundles" ], - "summary": "Edits multiple time entries using the specified operation.", - "description": "The user is only allowed to edit time entries they have permissions for.\r\n Returns MultiStatus. Includes the list of successfully changed, not found, unauthorized, and invalid time entry ids.\r\n Returns BadRequest if the validation of the form fails, f.e. the new type of work cannot be found.\r\n Returns NotFound if the operation route value is not supported.\r\n \r\n Supported Operations:\r\n
    \r\n
  • \r\n delete: Deletes all time entries. Only admins can delete already billed time entries.
  • \r\n
  • \r\n setTypeOfWork: Changes the type of work for a list of time entries.
  • \r\n
  • \r\n setIsBillable: Changes the billability for a list of time entries. Already billed time entries can only be changed to\r\n being unbillable by admins. In this case, the IsBilled flag is also set to false.
  • \r\n
  • \r\n setIsBilled: Changes the billing status for a list of time entries. Only admins can change the billing status back to\r\n unbilled for already billed time entries.
  • \r\n
  • \r\n setProject: Changes the project for a list of time entries. Only admins can change the project for already billed time\r\n entries. Setting the project unsets the previous project and task.
  • \r\n
  • \r\n setTask: Changes the task for a list of time entries. Only admins can change the task for already billed time entries.\r\n Setting the task automatically sets the project if that task is a project task.
  • \r\n
  • \r\n setUser: Changes the user for a list of time entries. Only admins can change the user for already billed time entries.
  • \r\n
\r\n\r\nAny authenticated user.", - "operationId": "PostTimeEntriesBatchByOperation", + "summary": "Creates a checklist item template.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskTemplateChecklistItemTemplatesByTaskTemplateId", "parameters": [ { - "name": "operation", + "name": "taskTemplateId", "in": "path", - "description": "The batch operation type.", + "description": "The id of the task template.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "requestBody": { - "description": "The time entry batch operation data.", + "description": "The checklist Item Template form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeEntryBatchOperationForm" + "$ref": "#/components/schemas/ChecklistItemTemplateForm" } } }, "required": true }, "responses": { - "207": { - "description": "Multi-Status", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MultiStatusResult" + "$ref": "#/components/schemas/ChecklistItemTemplate" } } } @@ -38343,35 +37051,47 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/timeentries/delete": { - "post": { + "/tasktemplates/{taskTemplateId}/checklistitemtemplates/{checklistItemTemplateId}": { + "delete": { "tags": [ - "TimeEntries" + "TaskBundles" ], - "summary": "Deletes the time entry with the specified ids.", - "description": "This endpoint is deprecated, please use the batch endpoint POST /timeentries/batch/delete instead.\r\n \r\n Deletes the time entries with the specified ids.\r\n Depending on the time entry, the calling users has to have several permissions to delete the time entries.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user needs permissions on:\r\n 'project-planning-data' if it is a project task.\r\n If the time entry is billed, Admin permissions are required.\r\n\r\nAny authenticated user.", - "operationId": "PostTimeEntriesDelete", - "requestBody": { - "description": "The time entry ids to delete.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteTimeEntriesForm" - } + "summary": "Deletes a checklist item template.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "DeleteTaskTemplateChecklistItemTemplateByTaskTemplateIdAndChecklistItemTemplateId", + "parameters": [ + { + "name": "taskTemplateId", + "in": "path", + "description": "The id of the task template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "checklistItemTemplateId", + "in": "path", + "description": "The checklist Item Template Id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "responses": { "204": { "description": "No Content" }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -38381,7 +37101,6 @@ } } }, - "deprecated": true, "security": [ { "oauth2": [ @@ -38393,49 +37112,46 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } - } - }, - "/timeentries/setbillable": { - "post": { + }, + "get": { "tags": [ - "TimeEntries" + "TaskBundles" ], - "summary": "Sets the time entries with the specified ids to billable.", - "description": "Depending on the time entry, the calling users has to have several permissions to edit the time entries.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user must have 'write'\r\n permissions on:\r\n 'project-timetracking' if it is a project task.\r\n\r\nAny authenticated user.", - "operationId": "PostTimeEntriesSetBillable", - "requestBody": { - "description": "The time entry ids and billable flag.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SetTimeEntryBillableForm" - } + "summary": "Gets a checklist item template.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", + "operationId": "GetTaskTemplateChecklistItemTemplateByTaskTemplateIdAndChecklistItemTemplateId", + "parameters": [ + { + "name": "taskTemplateId", + "in": "path", + "description": "The id of the task template.", + "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" - } - } + { + "name": "checklistItemTemplateId", + "in": "path", + "description": "The checklist item template id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - }, - "401": { - "description": "Unauthorized", + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ChecklistItemTemplate" } } } @@ -38451,7 +37167,6 @@ } } }, - "deprecated": true, "security": [ { "oauth2": [ @@ -38463,45 +37178,63 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "read" } - } - }, - "/timeentries/setbilled": { - "post": { + }, + "put": { "tags": [ - "TimeEntries" + "TaskBundles" + ], + "summary": "Updates a checklist item template.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PutTaskTemplateChecklistItemTemplateByTaskTemplateIdAndChecklistItemTemplateId", + "parameters": [ + { + "name": "taskTemplateId", + "in": "path", + "description": "The id of the task template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "checklistItemTemplateId", + "in": "path", + "description": "The checklist Item Template Id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Sets the time entries with the specified ids to billed.", - "description": "Depending on the time entry, the calling users has to have several permissions to edit the time entries.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user needs permissions on:\r\n 'project-planning-data' if it is a project task.\r\n If the time entry is billed, the permissions can be ignored because there is no change.\r\n\r\nAny authenticated user.", - "operationId": "PostTimeEntriesSetBilled", "requestBody": { - "description": "The time entry ids and billed flag.", + "description": "The checklist Item Template form.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SetTimeEntryBilledForm" + "$ref": "#/components/schemas/ChecklistItemTemplateForm" } } }, "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/ChecklistItemTemplate" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -38521,7 +37254,6 @@ } } }, - "deprecated": true, "security": [ { "oauth2": [ @@ -38533,29 +37265,31 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/timeentries/settypeofwork": { + "/tasktemplates/{taskTemplateId}/deleterecurrency": { "post": { "tags": [ - "TimeEntries" + "TaskBundles" ], - "summary": "Sets the type of work of the specified timeentries.", - "description": "Depending on the time entry, the calling users has to have several permissions to edit the time entries.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user needs permissions on:\r\n 'project-planning-data' if it is a project task.\r\n\r\nAny authenticated user.", - "operationId": "PostTimeEntriesSetTypeOfWork", - "requestBody": { - "description": "The time entry ids and type of work.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SetTimeEntryTypeOfWork" - } + "summary": "Deletes recurrence information from a task template.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskTemplateDeleteRecurrencyByTaskTemplateId", + "parameters": [ + { + "name": "taskTemplateId", + "in": "path", + "description": "The id of the task template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - }, - "required": true - }, + } + ], "responses": { "204": { "description": "No Content" @@ -38569,29 +37303,8 @@ } } } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, - "deprecated": true, "security": [ { "oauth2": [ @@ -38603,24 +37316,40 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/timeentries/setunbillable": { + "/tasktemplates/{taskTemplateId}/deletetags": { "post": { "tags": [ - "TimeEntries" + "TaskTemplateTags" + ], + "summary": "Removes tags from the task template with the specified id.", + "description": "Returns 204 NoContent if all tags have been removed successfully.\r\n Returns 207 MultiStatus if at least one tag could not be removed, including the reasons.\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostDeleteTaskTemplatesTags", + "parameters": [ + { + "name": "taskTemplateId", + "in": "path", + "description": "The id of the task template to remove tags from.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Sets the time entries with the specified ids to unbillable.", - "description": "Already billed time entries cannot be set to unbillable -> Badrequest\r\n Depending on the time entry, the calling users has to have several permissions to edit the time entries.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user needs write\r\n permissions on:\r\n 'project-timetracking' if it is a project task.\r\n\r\nAny authenticated user.", - "operationId": "PostTimeEntriesSetUnbillable", "requestBody": { - "description": "The time entry ids and billable flag.", + "description": "The list of tags to remove from the task template.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SetTimeEntryBillableForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/DeleteTagForm" + } } } }, @@ -38630,6 +37359,9 @@ "204": { "description": "No Content" }, + "207": { + "description": "Multi-Status" + }, "400": { "description": "Bad Request", "content": { @@ -38649,19 +37381,8 @@ } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, - "deprecated": true, "security": [ { "oauth2": [ @@ -38673,35 +37394,44 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/timeentries/setunbilled": { - "post": { + "/tasktemplates/{taskTemplateId}/recurrency": { + "get": { "tags": [ - "TimeEntries" + "TaskBundles" ], - "summary": "Sets the time entries with the specified ids to unbilled.", - "description": "For setting already billed time entries to unbilled, the user needs to have admin permissions.\r\n\r\nAny authenticated user.", - "operationId": "PostTimeEntriesSetUnBilled", - "requestBody": { - "description": "The time entry ids and billed flag.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SetTimeEntryBilledForm" - } + "summary": "Gets recurrency details for a task template.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", + "operationId": "GetTaskTemplateRecurrencyByTaskTemplateId", + "parameters": [ + { + "name": "taskTemplateId", + "in": "path", + "description": "The id of the task template.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - }, - "required": true - }, + } + ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskRecurrencyForm" + } + } + } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -38711,7 +37441,6 @@ } } }, - "deprecated": true, "security": [ { "oauth2": [ @@ -38723,50 +37452,65 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "read" } } }, - "/timeentries/simplified": { - "get": { + "/tasktemplates/{taskTemplateId}/setcustomfields": { + "post": { "tags": [ - "TimeEntries" + "CustomFields" ], - "summary": "Retrieves all time entries with a simplified model based on the grouping parameter.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTimeEntriesSimplified", + "summary": "Sets the custom fields for the specified task template.", + "description": "The required properties depend on the type of the custom field. Only task templates which are linked to a project template may have custom fields set.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostTaskTemplateSetCustomFieldsByTaskTemplateId", "parameters": [ { - "name": "grouping", - "in": "query", - "description": "The grouping type.", + "name": "taskTemplateId", + "in": "path", + "description": "The id of the task template to set custom fields for.", + "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], + "requestBody": { + "description": "The model containing the details for setting the custom fields for a task template.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFieldPostForm" + } + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SimplifiedTimeTracking" - } + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -38783,23 +37527,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/timeentries/{timeEntryId}": { - "delete": { + "/tasktemplates/{taskTemplateId}/setrecurrency": { + "post": { "tags": [ - "TimeEntries" + "TaskBundles" ], - "summary": "Deletes the time entry with the specified id.", - "description": "Deletes the time entry with the specified id.\r\n Depending on the time entry, the calling users has to have several permissions to delete the time entry.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is billed, Admin permissions are required.\r\n\r\nAny authenticated user.", - "operationId": "DeleteTimeEntryById", + "summary": "Adds or updates a recurrence rule for a task template.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTaskTemplateSetRecurrencyByTaskTemplateId", "parameters": [ { - "name": "timeEntryId", + "name": "taskTemplateId", "in": "path", - "description": "The id of the time entry.", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -38807,22 +37552,23 @@ } } ], + "requestBody": { + "description": "The model describing the recurrence rule to apply.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskBundleRecurrencyForm" + } + } + }, + "required": true + }, "responses": { "204": { "description": "No Content" }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -38843,21 +37589,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } - }, + } + }, + "/tasktemplates/{taskTemplateId}/tags": { "get": { "tags": [ - "TimeEntries" + "TaskTemplateTags" ], - "summary": "Get a time entry by id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTimeEntryById", + "summary": "Returns the tags of the task template with the specified id.", + "description": "Returns the tags of the task template with the specified id ordered by name.\r\n\r\nAny authenticated user.", + "operationId": "GetTagsByTaskTemplateId", "parameters": [ { - "name": "timeEntryId", + "name": "taskTemplateId", "in": "path", - "description": "The id of the time entry.", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -38871,7 +37620,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } } } } @@ -38890,19 +37642,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/tasktemplates/{taskTemplateId}/taskdependencytemplates": { + "get": { "tags": [ - "TimeEntries" + "TaskDependencyTemplates" ], - "summary": "Updates the time entry with the specified id.", - "description": "Updates the time entry with the specified id.\r\n Depending on the time entry, the calling users has to have several permissions to update the time entry:\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user needs permissions on:\r\n 'project-planning-data' if it is a project task.\r\n The break duration of the time entry is kept the same. The break duration cannot be smaller than the duration of the\r\n time entry. To remove the breaks, use the endpoint POST /timeentries/{id}/removeBreaks.\r\n Following combination of times and duration are allowed for already completed time entries:\r\n - start time (local or utc) and end time (local or utc) (this option always takes precedence)\r\n - start time (local or utc) and duration\r\n - end time (local or utc) and duration\r\n For running time entries, you can only update the start time (local or utc) while the duration stays 0.\r\n\r\nAny authenticated user.", - "operationId": "PutTimeEntryById", + "summary": "Returns the task dependency templates for a given task template.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:read` permissions.", + "operationId": "GetTaskTemplateTaskDependencyTemplatesByTaskTemplateId", "parameters": [ { - "name": "timeEntryId", + "name": "taskTemplateId", "in": "path", - "description": "The id of the time entry.", + "description": "The id of the task template.", "required": true, "schema": { "type": "string", @@ -38910,34 +37664,16 @@ } } ], - "requestBody": { - "description": "The time entry data to update.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeTrackingPutForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskDependencyTemplate" + } } } } @@ -38974,23 +37710,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "read" } } }, - "/timeentries/{timeEntryId}/removebreaks": { + "/tasktemplates/{tasktemplateId}/externalfiles": { "post": { "tags": [ - "TimeEntries" + "TaskTemplateFiles" ], - "summary": "Handles removing all breaks from a time entry, effectively resuming the timer.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "PostTimeEntryRemoveBreaks", + "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": "timeEntryId", + "name": "tasktemplateId", "in": "path", - "description": "The id of the time entry.", + "description": "The id of the tasktemplate.", "required": true, "schema": { "type": "string", @@ -38998,51 +37735,34 @@ } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeTracking" + "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" - } - } - }, - "/timereports": { - "get": { - "tags": [ - "TimeReports" - ], - "summary": "Returns all time reports of a user.", - "description": "Returns time reports the user created as well as the shared time reports of\r\n other users.\r\n\r\nAny authenticated user.", - "operationId": "GetTimeReports", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TimeReport" - } + "$ref": "#/components/schemas/FileInfo" } } } @@ -39063,28 +37783,30 @@ } } }, - "/timetracking/settings": { - "get": { + "/tasktemplates/{tasktemplateId}/files": { + "delete": { "tags": [ - "TimeTrackingSettings" + "TaskTemplateFiles" ], - "summary": "Returns the global timetracking settings.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTimeTrackingSettings", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TimeTrackingSetting" - } - } - } + "summary": "Deletes the files of the specified tasktemplate.", + "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", + "operationId": "DeleteTaskTemplateFiles", + "parameters": [ + { + "name": "tasktemplateId", + "in": "path", + "description": "The id of the tasktemplate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } + ], + "responses": { + "204": { + "description": "No Content" + } }, "security": [ { @@ -39099,24 +37821,23 @@ "x-access": { "any": "true" } - } - }, - "/typeofwork": { + }, "get": { "tags": [ - "TypeOfWork" + "TaskTemplateFiles" ], - "summary": "Gets all types of work.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTypesOfWork", + "summary": "Returns all files of the tasktemplate with the specified id.", + "description": "Returns all file metadata of the tasktemplate with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetTaskTemplateFiles", "parameters": [ { - "name": "showArchived", - "in": "query", - "description": "The show Archived.", + "name": "tasktemplateId", + "in": "path", + "description": "The id of the tasktemplate.", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } }, { @@ -39140,7 +37861,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TypeOfWork" + "$ref": "#/components/schemas/FileInfo" } } } @@ -39163,21 +37884,45 @@ }, "post": { "tags": [ - "TypeOfWork" + "TaskTemplateFiles" + ], + "summary": "Creates a new tasktemplate file for the tasktemplate with the specified id..", + "description": "Uploads a new tasktemplate file for the tasktemplate with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", + "operationId": "CreateTaskTemplateFile", + "parameters": [ + { + "name": "tasktemplateId", + "in": "path", + "description": "The id of the tasktemplate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Creates a new type of work.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PostTypesOfWork", "requestBody": { - "description": "The type Of Work form payload.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/TypeOfWorkForm" + "required": [ + "File" + ], + "type": "object", + "properties": { + "File": { + "type": "string", + "format": "binary" + } + } + }, + "encoding": { + "File": { + "style": "form" + } } } - }, - "required": true + } }, "responses": { "200": { @@ -39185,59 +37930,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TypeOfWork" + "$ref": "#/components/schemas/FileInfo" } } } }, "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "task-manage-config": "write" - } - } - }, - "/typeofwork/icons": { - "get": { - "tags": [ - "TypeOfWork" - ], - "summary": "Gets all possible icons for type of work.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTypesOfWorkIcons", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } - } + "description": "Bad Request" } }, "security": [ @@ -39255,19 +37954,19 @@ } } }, - "/typeofwork/{typeOfWorkId}": { - "get": { + "/tasktemplates/{tasktemplateId}/files/byuploadid": { + "post": { "tags": [ - "TypeOfWork" + "FileUpload" ], - "summary": "Gets the type of work with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetTypeOfWorkById", + "summary": "Creates a file from an upload id.", + "description": "After a file has been uploaded to an upload URL generated from the endpoint, this endpoint can be used to create a file tasktemplate from the uploaded file by providing the upload id.\r\n\r\nAny authenticated user.", + "operationId": "PostUploadByUploadId", "parameters": [ { - "name": "typeOfWorkId", + "name": "tasktemplateId", "in": "path", - "description": "The id of the type of work.", + "description": "The id of the tasktemplate to attach the file to.", "required": true, "schema": { "type": "string", @@ -39275,13 +37974,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/TypeOfWork" + "$ref": "#/components/schemas/FileInfo" } } } @@ -39310,19 +38020,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/tasktemplates/{tasktemplateId}/files/byurl": { + "post": { "tags": [ - "TypeOfWork" + "TaskTemplateFiles" ], - "summary": "Changes the properties of an existing type of work.", - "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", - "operationId": "PutTypeOfWorkById", + "summary": "Uploads a new file by providing an url.", + "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", + "operationId": "CreateTaskTemplateFileByUrl", "parameters": [ { - "name": "typeOfWorkId", + "name": "tasktemplateId", "in": "path", - "description": "The id of the type of work.", + "description": "The id of the tasktemplate the file is linked to.", "required": true, "schema": { "type": "string", @@ -39331,15 +38043,19 @@ } ], "requestBody": { - "description": "The type Of Work form payload.", + "description": "The url, name and description of the file.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TypeOfWorkForm" + "$ref": "#/components/schemas/FilePostForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FilePostForm" } } - }, - "required": true + } }, "responses": { "200": { @@ -39347,27 +38063,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TypeOfWork" - } - } - } - }, - "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/FileInfo" } } } @@ -39384,24 +38080,33 @@ "v1" ], "x-access": { - "admin": "true", - "task-manage-config": "write" + "any": "true" } } }, - "/typeofwork/{typeOfWorkId}/delete": { - "post": { + "/tasktemplates/{tasktemplateId}/files/{fileId}": { + "delete": { "tags": [ - "TypeOfWork" + "TaskTemplateFiles" ], - "summary": "Deletes the type of work with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostTypeOfWorkDeleteByTypeOfWorkId", + "summary": "Deletes the tasktemplate file with the specified id.", + "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", + "operationId": "DeleteTaskTemplateFile", "parameters": [ { - "name": "typeOfWorkId", + "name": "tasktemplateId", "in": "path", - "description": "The id of the type of work.", + "description": "The id of the tasktemplate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -39409,40 +38114,9 @@ } } ], - "requestBody": { - "description": "The model containing the new type of work id to substitute.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteTaskTypeForm" - } - } - }, - "required": true - }, "responses": { "204": { "description": "No Content" - }, - "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": [ @@ -39456,24 +38130,31 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } - } - }, - "/typeofwork/{typeOfWorkId}/setarchived": { - "post": { + }, + "get": { "tags": [ - "TypeOfWork" + "TaskTemplate Files" ], - "summary": "Archives or unarchives the type of work with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostTypeOfWorkSetArchivedByTypeOfWorkId", + "summary": "Returns the file with the specified id of the tasktemplate with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByTaskTemplateNameAndTaskTemplateIdAndFileId", "parameters": [ { - "name": "typeOfWorkId", + "name": "tasktemplateId", "in": "path", - "description": "The id of the type of work.", + "description": "The id of the tasktemplate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -39481,30 +38162,19 @@ } } ], - "requestBody": { - "description": "The archived form payload.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArchivedForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TypeOfWork" + "$ref": "#/components/schemas/FileInfo" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -39535,52 +38205,60 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } - } - }, - "/users": { - "get": { + }, + "put": { "tags": [ - "Users" + "TaskTemplateFiles" ], - "summary": "Returns all users with their details.", - "description": "Returns all users with their details like status, contact info and more.\r\n Returns all users if the user has read permissions on the feature\r\n user-master-data, otherwise returns only his own user.\r\n Archived users are excluded by default. You can include them by setting the 'showArchived' query parameter.\r\n If the permissions have UserTeamsData Feature, the filter for teams is applied.\r\n Beware that this will also include API users in the response.\r\n\r\nAny authenticated user.", - "operationId": "GetUsers", + "summary": "Updates the metadata of the tasktemplate file with the specified id.", + "description": "Updates the metadata of the tasktemplate file with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "UpdateTaskTemplateFile", "parameters": [ { - "name": "showArchived", - "in": "query", - "description": "Whether to show archived users.", + "name": "tasktemplateId", + "in": "path", + "description": "The id of the tasktemplate.", + "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 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/User" - } + "$ref": "#/components/schemas/FileInfo" } } } @@ -39601,38 +38279,61 @@ } } }, - "/users/autofill/{email}": { - "get": { + "/tasktemplates/{tasktemplateId}/files/{fileId}/changeentity": { + "post": { "tags": [ - "Users" + "TaskTemplateFiles" ], - "summary": "Tries to retrieve user name and gender for the specified email.", - "description": "Returns the first name, last name and gender of the given email address.\r\n\r\nAny authenticated user.", - "operationId": "GetUsersAutofillByEmail", + "summary": "Changes the tasktemplate this file belongs to.", + "description": "Changes the tasktemplate this file belongs to.\nSwitch to the specified tasktemplate or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", + "operationId": "ChangeTaskTemplate", "parameters": [ { - "name": "email", + "name": "tasktemplateId", "in": "path", - "description": "The user's email.", + "description": "The id of the tasktemplate.", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } ], + "requestBody": { + "description": "The model to change the entity information of the file.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileEntityForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileEntityForm" + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AutofillUser" + "$ref": "#/components/schemas/FileInfo" } } } - }, - "204": { - "description": "No Content" } }, "security": [ @@ -39650,28 +38351,61 @@ } } }, - "/users/deletetags": { + "/tasktemplates/{tasktemplateId}/files/{fileId}/copy": { "post": { "tags": [ - "UserTags" + "TaskTemplateFiles" + ], + "summary": "Copies the file to a new tasktemplate.", + "description": "Copies the file to a new tasktemplate (meta and content).\r\n\r\nAny authenticated user.", + "operationId": "CopyToTaskTemplate", + "parameters": [ + { + "name": "tasktemplateId", + "in": "path", + "description": "The id of the tasktemplate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Removes a tag from all users.", - "description": "\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", - "operationId": "PostUsersDeleteTags", "requestBody": { - "description": "The model with the tag to be removed.", + "description": "The model to change the entity information of the file.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteTagForm" + "$ref": "#/components/schemas/FileCopyForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileCopyForm" } } - }, - "required": true + } }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } } }, "security": [ @@ -39685,36 +38419,74 @@ "v1" ], "x-access": { - "admin": "true", - "user-master-data": "write" + "any": "true" } } }, - "/users/me": { + "/tasktemplates/{tasktemplateId}/files/{fileId}/download": { "get": { "tags": [ - "Users" + "TaskTemplateFiles" + ], + "summary": "Returns the content of the tasktemplate file with the specified id.", + "description": "Returns the content of the tasktemplate file. Uses the latest file version.\nIf the tasktemplate file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", + "operationId": "GetTaskTemplateFileContent", + "parameters": [ + { + "name": "tasktemplateId", + "in": "path", + "description": "The id of the tasktemplate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "width", + "in": "query", + "description": "Set width to resize.", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "height", + "in": "query", + "description": "Set height to resize.", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "crop", + "in": "query", + "description": "Whether to crop the image when resizing it.", + "schema": { + "type": "boolean" + } + } ], - "summary": "Returns the currently logged-in user and workspace.", - "description": "This is an alternate URL for the /me endpoint.\r\n\r\nAny authenticated user.", - "operationId": "GetUsersMe", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserAndWorkspace" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string", + "format": "binary" } } } @@ -39735,44 +38507,42 @@ } } }, - "/users/projecttimebookings": { + "/tasktemplates/{tasktemplateId}/files/{fileId}/pdf": { "get": { "tags": [ - "TimeBookings" + "TaskTemplateFiles" ], - "summary": "Returns the time bookings in a specified time range for a list of users.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetProjectTimeBookingsForUsers", + "summary": "Returns the content of the file with the specified id as pdf.\ntype or conversion not possible.", + "description": "Returns the content of the tasktemplate file. Uses the latest file version.\r\n\r\nAny authenticated user.", + "operationId": "GetTaskTemplateFileContent", "parameters": [ { - "name": "userIds", - "in": "query", - "description": "The ids of the users.", + "name": "tasktemplateId", + "in": "path", + "description": "The id of the tasktemplate.", "required": true, "schema": { "type": "string", - "description": "This class is used to bind a querystring list of Guid (as a comma-separated list) to the List of Guid parameter in a\nminimal API endpoint.", - "example": "123e4567-e89b-12d3-a456-426614174000,223e4567-e89b-12d3-a456-426614174001" + "format": "uuid" } }, { - "name": "intervalStart", - "in": "query", - "description": "The start of the interval.", + "name": "fileId", + "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", - "format": "date" + "format": "uuid" } }, { - "name": "intervalEnd", + "name": "inline", "in": "query", - "description": "The end of the interval.", - "required": true, + "description": "If inline is false, content-disposition header is attachment.", "schema": { - "type": "string", - "format": "date" + "type": "boolean", + "default": false } } ], @@ -39782,30 +38552,8 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GetTimeBookingForUsersResult" - } - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string", + "format": "binary" } } } @@ -39826,24 +38574,43 @@ } } }, - "/users/tags": { + "/tasktemplates/{tasktemplateId}/files/{fileId}/shareurl": { "get": { "tags": [ - "UserTags" + "TaskTemplateFiles" + ], + "summary": "Returns an url to share the file.", + "description": "Returns a url to share the file.\r\n\r\nAny authenticated user.", + "operationId": "GetPublicToken", + "parameters": [ + { + "name": "tasktemplateId", + "in": "path", + "description": "The id of the tasktemplate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Returns all tags that are currently in use.", - "description": "Returns all tags that are currently in use ordered by count.\r\n\r\nAny authenticated user.", - "operationId": "GetUsersTags", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "type": "string" } } } @@ -39864,45 +38631,46 @@ } } }, - "/users/timebookings": { + "/tasktemplates/{tasktemplateId}/files/{fileId}/versions": { "get": { "tags": [ - "TimeBookings" + "TaskTemplateFiles" ], - "summary": "Returns the time bookings in a specified time range for a list of users.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetUsersTimeBookings", + "summary": "Returns all file versions of the specified tasktemplate file.", + "description": "Returns all file versions of the specified tasktemplate file.\r\n\r\nAny authenticated user.", + "operationId": "GetTaskTemplateFileVersions", "parameters": [ { - "name": "userIds", - "in": "query", - "description": "The ids of the users.", + "name": "tasktemplateId", + "in": "path", + "description": "The id of the tasktemplate.", "required": true, "schema": { "type": "string", - "description": "This class is used to bind a querystring list of Guid (as a comma-separated list) to the List of Guid parameter in a\nminimal API endpoint.", - "example": "123e4567-e89b-12d3-a456-426614174000,223e4567-e89b-12d3-a456-426614174001" + "format": "uuid" } }, { - "name": "intervalStart", - "in": "query", - "description": "The start of the interval.", + "name": "fileId", + "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", - "format": "date" + "format": "uuid" } }, { - "name": "intervalEnd", - "in": "query", - "description": "The end of the interval.", - "required": true, - "schema": { - "type": "string", - "format": "date" - } + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -39913,31 +38681,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/GetTimeBookingForUsersResult" + "$ref": "#/components/schemas/FileVersion" } } } } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -39953,49 +38701,72 @@ "x-access": { "any": "true" } - } - }, - "/users/updatetags": { + }, "post": { "tags": [ - "UserTags" + "TaskTemplateFiles" + ], + "summary": "Uploads a new version of the tasktemplate file with the specified id.", + "description": "Uploads a new version of an tasktemplate file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", + "operationId": "CreateTaskTemplateFileVersion", + "parameters": [ + { + "name": "tasktemplateId", + "in": "path", + "description": "The id of the tasktemplate.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Updates a tag globally for all users.", - "description": "\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", - "operationId": "PostUsersUpdateTags", "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/TagUpdateForm" + "required": [ + "File" + ], + "type": "object", + "properties": { + "File": { + "type": "string", + "format": "binary" + } + } + }, + "encoding": { + "File": { + "style": "form" + } } } - }, - "required": true + } }, "responses": { "200": { - "description": "OK" - }, - "400": { - "description": "Bad Request", + "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": [ @@ -40009,77 +38780,47 @@ "v1" ], "x-access": { - "admin": "true", - "user-master-data": "write" + "any": "true" } } }, - "/users/workload": { + "/tasktemplates/{tasktemplateId}/files/{fileId}/versions/{versionId}": { "get": { "tags": [ - "Workload" + "TaskTemplate Files" ], - "summary": "Returns the users' workloads per day.", - "description": "Returns the users' workloads per day for projects, tasks, task schedules and calendar events\r\n that have an overlap with the interval specified by intervalStart and intervalEnd.\r\n Takes into consideration weekly availability, absences, user capacity, planned efforts, as well as project budget.\r\n\r\nThe user must be an admin or have `user-planning-data:read` permissions.", - "operationId": "GetUsersWorkload", + "summary": "Returns the tasktemplate file version with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByTaskTemplateNameAndTaskTemplateIdAndFileIdAndVersionId", "parameters": [ { - "name": "userIds", - "in": "query", - "description": "The ids of the users to get the workload for, as a comma-separated list of Guids.", + "name": "tasktemplateId", + "in": "path", + "description": "The id of the tasktemplate.", "required": true, "schema": { "type": "string", - "description": "This class is used to bind a querystring list of Guid (as a comma-separated list) to the List of Guid parameter in a\nminimal API endpoint.", - "example": "123e4567-e89b-12d3-a456-426614174000,223e4567-e89b-12d3-a456-426614174001" + "format": "uuid" } }, { - "name": "intervalStart", - "in": "query", - "description": "The start of the interval to filter by.", + "name": "fileId", + "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", - "format": "date-time" + "format": "uuid" } }, { - "name": "intervalEnd", - "in": "query", - "description": "The end of the interval to filter by.", + "name": "versionId", + "in": "path", + "description": "The id of the file version.", "required": true, "schema": { "type": "string", - "format": "date-time" - } - }, - { - "name": "roughPlanningFrom", - "in": "query", - "description": "The number of days from today when the rough planning should start.", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "fetchDetails", - "in": "query", - "description": "(Optional - default: false) If set to true, the result will contain the hierarchy of elements that are contributing\n to the workload (projects, tasks, appointments).\n Otherwise it will return only the workload value.\n Works only for single day queries.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "ignoreCalendarEvents", - "in": "query", - "description": "Whether to ignore calendar events. Can significantly improve performance.", - "schema": { - "type": "boolean", - "default": false + "format": "uuid" } } ], @@ -40089,16 +38830,13 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GetWorkloadForUsersResult" - } + "$ref": "#/components/schemas/FileVersion" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -40107,8 +38845,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -40129,51 +38867,58 @@ "v1" ], "x-access": { - "admin": "true", - "user-planning-data": "read" + "any": "true" } } }, - "/users/{userId}": { - "delete": { + "/tasktemplates/{tasktemplateId}/files/{fileId}/versions/{versionId}/download": { + "get": { "tags": [ - "Users" + "TaskTemplateFiles" ], - "summary": "Deletes the user with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `user-manage-config:delete` permissions.", - "operationId": "DeleteUserById", + "summary": "Returns the content of the tasktemplate file version with the specified id.", + "description": "Returns the content of the tasktemplate file version with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetTaskTemplateFileVersionContent", "parameters": [ { - "name": "userId", + "name": "tasktemplateId", "in": "path", - "description": "The id of the user.", + "description": "The id of the tasktemplate.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "responses": { - "204": { - "description": "No Content" }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "404": { - "description": "Not Found", + { + "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/ErrorResponse" + "type": "string", + "format": "binary" } } } @@ -40190,27 +38935,48 @@ "v1" ], "x-access": { - "admin": "true", - "user-manage-config": "delete" + "any": "true" } - }, + } + }, + "/teams": { "get": { "tags": [ - "Users" + "Teams" ], - "summary": "Returns the user with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetUserById", + "summary": "Returns all teams.", + "description": "When team restrictions are applied for the workspace, the user must either be an admin or member of the team to retrieve it.", + "operationId": "GetTeams", "parameters": [ { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, + "name": "includeUserIds", + "in": "query", + "description": "Whether to include the ids of users that are in the team.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false + } + }, + { + "name": "includeProjectIds", + "in": "query", + "description": "Whether to include the ids of projects that are assigned to the team.", + "schema": { + "type": "boolean", + "default": false } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -40219,27 +38985,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "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/Team" + } } } } @@ -40259,31 +39008,19 @@ "any": "true" } }, - "put": { + "post": { "tags": [ - "Users" - ], - "summary": "Updates the user with the specified id.", - "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:write` permissions.", - "operationId": "PutUserById", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Teams" ], + "summary": "Creates a new team.", + "description": "\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin.", + "operationId": "PostTeam", "requestBody": { - "description": "The model to update the user.", + "description": "The model used to create the team.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserForm" + "$ref": "#/components/schemas/TeamForm" } } }, @@ -40295,17 +39032,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Team" } } } @@ -40322,25 +39049,26 @@ "v1" ], "x-access": { - "admin": "true", - "owner": "true", - "user-master-data": "write" + "admin": "true" + }, + "x-subscriptionlevel": { + "minimumPlan": "standard" } } }, - "/users/{userId}/activate": { - "post": { + "/teams/{teamId}": { + "delete": { "tags": [ - "Users" + "Teams" ], - "summary": "Activates the user with the specified id.", - "description": "The user is then allowed to sign in again and will be notified via email.\r\n\r\nThe user must be an admin or have `user-manage-config:write` permissions.", - "operationId": "PostUserActivateByUserId", + "summary": "Deletes the team with the specified id.", + "description": "\r\n\r\nThe user must be an admin.", + "operationId": "DeleteTeamById", "parameters": [ { - "name": "userId", + "name": "teamId", "in": "path", - "description": "The id of the user.", + "description": "The id of the team to delete.", "required": true, "schema": { "type": "string", @@ -40352,26 +39080,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": { @@ -40394,61 +39102,59 @@ "v1" ], "x-access": { - "admin": "true", - "user-manage-config": "write" + "admin": "true" } - } - }, - "/users/{userId}/addtags": { - "post": { + }, + "get": { "tags": [ - "UserTags" + "Teams" ], - "summary": "Adds a batch of tags to the user with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", - "operationId": "PostUserAddTagsByUserId", + "summary": "Returns the team with the specified id.", + "description": "When team restrictions are applied for the workspace, the user must either be an admin or member of the team to retrieve it.", + "operationId": "GetTeamById", "parameters": [ { - "name": "userId", + "name": "teamId", "in": "path", - "description": "The id of the user to add tags to.", + "description": "The id of the team.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "description": "The model with the tags to be added.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TagForm" - } - } + }, + { + "name": "includeUserIds", + "in": "query", + "description": "Whether to include the ids of users that are in the team.", + "schema": { + "type": "boolean", + "default": false } }, - "required": true - }, + { + "name": "includeProjectIds", + "in": "query", + "description": "Whether to include the ids of projects that are assigned to the team.", + "schema": { + "type": "boolean", + "default": false + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseTagModel" - } + "$ref": "#/components/schemas/Team" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -40457,8 +39163,8 @@ } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -40479,24 +39185,21 @@ "v1" ], "x-access": { - "admin": "true", - "user-master-data": "write" + "any": "true" } - } - }, - "/users/{userId}/allavailabletasks": { - "get": { + }, + "put": { "tags": [ - "AssignedTasks" + "Teams" ], - "summary": "Returns all tasks the specified user is allowed to see.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetUserAllAvailableTasksByUserId", + "summary": "Updates the team with the specified id.", + "description": "\r\n\r\nThe user must be an admin.", + "operationId": "PutTeamById", "parameters": [ { - "name": "userId", + "name": "teamId", "in": "path", - "description": "The id of the user.", + "description": "The id of the team to update.", "required": true, "schema": { "type": "string", @@ -40504,28 +39207,52 @@ } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" + "name": "includeUserIds", + "in": "query", + "description": "Whether to include the ids of users that are in the team.", + "schema": { + "type": "boolean", + "default": false + } }, { - "$ref": "#/components/parameters/filterby" + "name": "includeProjectIds", + "in": "query", + "description": "Whether to include the ids of projects that are assigned to the team.", + "schema": { + "type": "boolean", + "default": false + } } ], + "requestBody": { + "description": "The model with the team data.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } + "$ref": "#/components/schemas/Team" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -40542,69 +39269,45 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/users/{userId}/assignedtasks": { - "get": { + "/teams/{teamId}/addprojects": { + "post": { "tags": [ - "AssignedTasks" + "Teams" ], - "summary": "Returns all tasks assigned to the specified user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetUserAssignedTasksByUserId", + "summary": "Adds projects to the specified team.", + "description": "The user must have `project-master-data:write` permissions or be the owner of the projects.", + "operationId": "PostTeamAddProjectsByTeamId", "parameters": [ { - "name": "userId", + "name": "teamId", "in": "path", - "description": "The id of the user to get the tasks for.", + "description": "The id of the team.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "name": "inProgress", - "in": "query", - "description": "Whether to return only assigned project tasks of running projects. Defaults to true.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "assignedOnFrom", - "in": "query", - "description": "The start date for filtering by assignment date. If set, tasks are returned only when the assignment date is greater or equal than this value.", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "assignedOnTo", - "in": "query", - "description": "The end date for filtering by assignment date. If set, tasks are returned only when the assignment date is less or equal than this value.", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], + "requestBody": { + "description": "The model with the list of project ids to add.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", @@ -40613,11 +39316,31 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TaskModel" + "$ref": "#/components/schemas/ProjectInTeam" } } } } + }, + "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": [ @@ -40635,29 +39358,19 @@ } } }, - "/users/{userId}/assignedtasks/{taskId}": { - "get": { + "/teams/{teamId}/addusers": { + "post": { "tags": [ - "AssignedTasks" + "Teams" ], - "summary": "Returns the assigned task with the specified id of a specified user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetUserAssignedTaskByUserIdAndTaskId", + "summary": "Adds users to the specified team.", + "description": "\r\n\r\nThe user must be an admin.", + "operationId": "PostTeamAddUsersByTeamId", "parameters": [ { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskId", + "name": "teamId", "in": "path", - "description": "The id of the task to return.", + "description": "The id of the team.", "required": true, "schema": { "type": "string", @@ -40665,19 +39378,37 @@ } } ], + "requestBody": { + "description": "The model with the list of user ids to add.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskModel" + "type": "array", + "items": { + "$ref": "#/components/schemas/UserInTeam" + } } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -40708,23 +39439,23 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/users/{userId}/capacity": { - "get": { + "/teams/{teamId}/removeprojects": { + "post": { "tags": [ - "UserCapacities" + "Teams" ], - "summary": "Returns the capacity of the specified user.", - "description": "Returns the capacity of the specified user.\r\n User planning data or admin permissions are required if the capacity of the specified user\r\n does not belong to the calling user.\r\n\r\nAny authenticated user.", - "operationId": "GetUserCapacityByUserId", + "summary": "Removes projects from the specified team.", + "description": "The user must have `project-master-data:write` permissions or be the owner of the projects.", + "operationId": "PostTeamRemoveProjectsByTeamId", "parameters": [ { - "name": "userId", + "name": "teamId", "in": "path", - "description": "The id of the user.", + "description": "The id of the team.", "required": true, "schema": { "type": "string", @@ -40732,19 +39463,37 @@ } } ], + "requestBody": { + "description": "The model with the list of project ids to remove.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserCapacity" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -40767,19 +39516,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/teams/{teamId}/removeusers": { + "post": { "tags": [ - "UserCapacities" + "Teams" ], - "summary": "Updates the capacity of the specified user.", - "description": "Updates the capacity of the user with the specified id.\r\n User planning data or admin permissions are required if the capacity of the specified user\r\n does not belong to the calling user.\r\n\r\nAny authenticated user.", - "operationId": "PutUserCapacityByUserId", + "summary": "Removes users from the specified team.", + "description": "\r\n\r\nThe user must be an admin.", + "operationId": "PostTeamRemoveUsersByTeamId", "parameters": [ { - "name": "userId", + "name": "teamId", "in": "path", - "description": "The user whose capacity should be updated.", + "description": "The id of the team.", "required": true, "schema": { "type": "string", @@ -40788,29 +39539,36 @@ } ], "requestBody": { - "description": "Updated capacity values for each day of the week.", + "description": "The model with the list of user ids to remove.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserCapacityForm" + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserCapacity" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -40831,29 +39589,19 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true" } } }, - "/users/{userId}/contactinfo": { + "/temporaryfiles": { "get": { "tags": [ - "Users" + "Temporary Files" ], - "summary": "Returns the contact infos of the user with the specified id.", - "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:read` permissions.", - "operationId": "GetUserContactInfoByUserId", + "summary": "Returns all temporary files of the current user.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTemporaryFiles", "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, { "$ref": "#/components/parameters/page" }, @@ -40875,21 +39623,11 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ContactInfo" + "$ref": "#/components/schemas/FileInfo" } } } } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } } }, "security": [ @@ -40903,40 +39641,24 @@ "v1" ], "x-access": { - "admin": "true", - "owner": "true", - "user-master-data": "read" + "any": "true" } }, "post": { "tags": [ - "Users" - ], - "summary": "Creates a new contact info for the user with the specified id.", - "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:write` permissions.", - "operationId": "PostUserContactInfoByUserId", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The user to add contact information to.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Temporary Files" ], + "summary": "Creates a new temporary file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostTemporaryFiles", "requestBody": { - "description": "The model containing contact information details including address, phone number, and type.", "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/ContactInfoFormForUsers" + "$ref": "#/components/schemas/FileUploadModel" } } - }, - "required": true + } }, "responses": { "200": { @@ -40944,13 +39666,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContactInfo" + "$ref": "#/components/schemas/FileInfo" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -40971,35 +39693,22 @@ "v1" ], "x-access": { - "admin": "true", - "owner": "true", - "user-master-data": "write" + "any": "true" } } }, - "/users/{userId}/contactinfo/{contactInfoId}": { - "delete": { + "/temporaryfiles/{fileId}": { + "get": { "tags": [ - "Users" + "Temporary Files" ], - "summary": "Deletes the contact info of the user with the specified id.", - "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:write` permissions.", - "operationId": "DeleteUserContactInfoByUserIdAndContactInfoId", + "summary": "Returns the temporary file with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTemporaryFilesByFileId", "parameters": [ { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "contactInfoId", + "name": "fileId", "in": "path", - "description": "The id of the contact info.", "required": true, "schema": { "type": "string", @@ -41008,15 +39717,12 @@ } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -41043,33 +39749,20 @@ "v1" ], "x-access": { - "admin": "true", - "owner": "true", - "user-master-data": "write" + "any": "true" } }, - "get": { + "put": { "tags": [ - "Users" + "Temporary Files" ], - "summary": "Returns the contact info of the user with the specified id.", - "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:read` permissions.", - "operationId": "GetUserContactInfoByUserIdAndContactInfoId", + "summary": "Updates the meta information of the temporary file with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PutTemporaryFilesByFileId", "parameters": [ { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "contactInfoId", + "name": "fileId", "in": "path", - "description": "The id of the contact info.", "required": true, "schema": { "type": "string", @@ -41077,13 +39770,33 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfoUpdateForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContactInfo" + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -41110,33 +39823,85 @@ "v1" ], "x-access": { - "admin": "true", - "owner": "true", - "user-master-data": "read" + "any": "true" } - }, - "put": { + } + }, + "/temporaryfiles/{fileId}/download": { + "get": { "tags": [ - "Users" + "Temporary Files" ], - "summary": "Updates the contact info of the user with the specified id.", - "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:write` permissions.", - "operationId": "PutUserContactInfoByUserIdAndContactInfoId", + "summary": "Returns the content of the temporary file with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTemporaryFilesDownloadByFileId", "parameters": [ { - "name": "userId", + "name": "fileId", "in": "path", - "description": "The id of the user.", + "description": "The temporary file to download.", "required": true, "schema": { "type": "string", "format": "uuid" } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "206": { + "description": "Partial Content" + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, + "416": { + "description": "Range Not Satisfiable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ { - "name": "contactInfoId", + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/temporaryfiles/{fileId}/setentity": { + "post": { + "tags": [ + "Temporary Files" + ], + "summary": "Sets the temporary file to a global or entity file.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PostTemporaryFilesSetEntityByFileId", + "parameters": [ + { + "name": "fileId", "in": "path", - "description": "The id of the contact info.", "required": true, "schema": { "type": "string", @@ -41145,11 +39910,10 @@ } ], "requestBody": { - "description": "The contact info model.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContactInfoFormForUsers" + "$ref": "#/components/schemas/FileEntityForm" } } }, @@ -41161,7 +39925,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ContactInfo" + "$ref": "#/components/schemas/FileInfo" } } } @@ -41198,39 +39962,30 @@ "v1" ], "x-access": { - "admin": "true", - "owner": "true", - "user-master-data": "write" + "any": "true" } } }, - "/users/{userId}/deactivate": { - "post": { + "/timebookings": { + "get": { "tags": [ - "Users" + "TimeBookings" ], - "summary": "Deactivates the user with the specified id.", - "description": "A deactivated user can no longer sign in.\r\n This is only possible if the user is not the last admin user.\r\n\r\nThe user must be an admin or have `user-manage-config:write` permissions.", - "operationId": "PostUserDeactivateByUserId", + "summary": "Returns a list of time bookings.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTimeBookings", "parameters": [ { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" }, { - "name": "includeSummary", - "in": "query", - "description": "Whether to return the private project orphan resolution summary.", - "schema": { - "type": "boolean", - "default": false - } + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -41239,26 +39994,60 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PostUserDeactivateByUserIdResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/TimeBooking" + } } } } + } + }, + "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": "PostTimeBooking", + "requestBody": { + "description": "The model to create the time booking.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TimeBookingForm" + } + } }, - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TimeBooking" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -41267,8 +40056,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -41289,24 +40078,23 @@ "v1" ], "x-access": { - "admin": "true", - "user-manage-config": "write" + "any": "true" } } }, - "/users/{userId}/deletetags": { - "post": { + "/timebookings/{timeBookingId}": { + "delete": { "tags": [ - "UserTags" + "TimeBookings" ], - "summary": "Removes tags from the user with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", - "operationId": "PostUserDeleteTagsByUserId", + "summary": "Deletes a time booking by id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "DeleteTimeBookingById", "parameters": [ { - "name": "userId", + "name": "timeBookingId", "in": "path", - "description": "The id of the user whose tags should be removed.", + "description": "The id of the time booking to delete.", "required": true, "schema": { "type": "string", @@ -41314,26 +40102,29 @@ } } ], - "requestBody": { - "description": "The model with the tags to be removed.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DeleteTagForm" - } - } - } - }, - "required": true - }, "responses": { "204": { "description": "No Content" }, - "207": { - "description": "Multi-Status" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -41347,24 +40138,21 @@ "v1" ], "x-access": { - "admin": "true", - "user-master-data": "write" + "any": "true" } - } - }, - "/users/{userId}/externalfiles": { - "post": { + }, + "put": { "tags": [ - "UserFiles" + "TimeBookings" ], - "summary": "Endpoint to batch create external files without uploading.", - "description": "Endpoint to create file infos with batch operation.\nCreated file infos don't have a version.\r\n\r\nAny authenticated user.", - "operationId": "CreateExternalFiles", + "summary": "Updates a given time booking.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "PutTimeBookingById", "parameters": [ { - "name": "userId", + "name": "timeBookingId", "in": "path", - "description": "The id of the user.", + "description": "The id of the time booking.", "required": true, "schema": { "type": "string", @@ -41373,25 +40161,15 @@ } ], "requestBody": { - "description": "List of file forms.", + "description": "The model to update the time booking.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } - } - }, - "application/*+json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalFileForm" - } + "$ref": "#/components/schemas/TimeBookingForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -41399,7 +40177,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$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" } } } @@ -41420,61 +40218,22 @@ } } }, - "/users/{userId}/files": { - "delete": { - "tags": [ - "UserFiles" - ], - "summary": "Deletes the files of the specified user.", - "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", - "operationId": "DeleteUserFiles", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - }, + "/timeentries": { "get": { "tags": [ - "UserFiles" + "TimeEntries" ], - "summary": "Returns all files of the user with the specified id.", - "description": "Returns all file metadata of the user with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetUserFiles", + "summary": "Returns all time entries.", + "description": "Returns all time entries.\r\n Depending on the time entry, the calling users has to have several permissions to get the time entry.\r\n No permissions are required if the calling user is owner of this time entry (this includes external timetrackings from connected projects).\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions on the 'project-timetracking' feature are necessary (this does NOT include external timetrackings from connected projects).\r\n\r\nAny authenticated user.", + "operationId": "GetTimeEntries", "parameters": [ { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, + "name": "searchReindex", + "in": "query", + "description": "Whether to reindex for search.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } }, { @@ -41498,7 +40257,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/TimeTracking" } } } @@ -41521,45 +40280,21 @@ }, "post": { "tags": [ - "UserFiles" - ], - "summary": "Creates a new user file for the user with the specified id..", - "description": "Uploads a new user file for the user with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateUserFile", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "TimeEntries" ], + "summary": "Creates a new time entry.", + "description": "Creates a new time entry.\r\n Depending on the time entry, the calling users has to have several permissions to create the time entry.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user needs permissions on:\r\n 'project-planning-data' if it is a project task.\r\n\r\nAny authenticated user.", + "operationId": "PostTimeEntry", "requestBody": { + "description": "The time entry data.", "content": { - "multipart/form-data": { + "application/json": { "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } + "$ref": "#/components/schemas/TimeEntryPostForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -41567,13 +40302,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/TimeTracking" } } } }, "400": { - "description": "Bad Request" + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -41591,48 +40343,63 @@ } } }, - "/users/{userId}/files/byurl": { + "/timeentries/batch/{operation}": { "post": { "tags": [ - "UserFiles" + "TimeEntries" ], - "summary": "Uploads a new file by providing an url.", - "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", - "operationId": "CreateUserFileByUrl", + "summary": "Edits multiple time entries using the specified operation.", + "description": "The user is only allowed to edit time entries they have permissions for.\r\n Returns MultiStatus. Includes the list of successfully changed, not found, unauthorized, and invalid time entry ids.\r\n Returns BadRequest if the validation of the form fails, f.e. the new type of work cannot be found.\r\n Returns NotFound if the operation route value is not supported.\r\n \r\n Supported Operations:\r\n
    \r\n
  • \r\n delete: Deletes all time entries. Only admins can delete already billed time entries.
  • \r\n
  • \r\n setTypeOfWork: Changes the type of work for a list of time entries.
  • \r\n
  • \r\n setIsBillable: Changes the billability for a list of time entries. Already billed time entries can only be changed to\r\n being unbillable by admins. In this case, the IsBilled flag is also set to false.
  • \r\n
  • \r\n setIsBilled: Changes the billing status for a list of time entries. Only admins can change the billing status back to\r\n unbilled for already billed time entries.
  • \r\n
  • \r\n setProject: Changes the project for a list of time entries. Only admins can change the project for already billed time\r\n entries. Setting the project unsets the previous project and task.
  • \r\n
  • \r\n setTask: Changes the task for a list of time entries. Only admins can change the task for already billed time entries.\r\n Setting the task automatically sets the project if that task is a project task.
  • \r\n
  • \r\n setUser: Changes the user for a list of time entries. Only admins can change the user for already billed time entries.
  • \r\n
\r\n\r\nAny authenticated user.", + "operationId": "PostTimeEntriesBatchByOperation", "parameters": [ { - "name": "userId", + "name": "operation", "in": "path", - "description": "The id of the user the file is linked to.", + "description": "The batch operation type.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "requestBody": { - "description": "The url, name and description of the file.", + "description": "The time entry batch operation data.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" + "$ref": "#/components/schemas/TimeEntryBatchOperationForm" } } - } + }, + "required": true }, "responses": { - "200": { - "description": "OK", + "207": { + "description": "Multi-Status", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/MultiStatusResult" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -41653,44 +40420,44 @@ } } }, - "/users/{userId}/files/{fileId}": { - "delete": { + "/timeentries/delete": { + "post": { "tags": [ - "UserFiles" + "TimeEntries" ], - "summary": "Deletes the user file with the specified id.", - "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", - "operationId": "DeleteUserFile", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Deletes the time entry with the specified ids.", + "description": "This endpoint is deprecated, please use the batch endpoint POST /timeentries/batch/delete instead.\r\n \r\n Deletes the time entries with the specified ids.\r\n Depending on the time entry, the calling users has to have several permissions to delete the time entries.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user needs permissions on:\r\n 'project-planning-data' if it is a project task.\r\n If the time entry is billed, Admin permissions are required.\r\n\r\nAny authenticated user.", + "operationId": "PostTimeEntriesDelete", + "requestBody": { + "description": "The time entry ids to delete.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteTimeEntriesForm" + } } }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], + "required": true + }, "responses": { "204": { "description": "No Content" - } - }, - "security": [ - { - "oauth2": [ + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "deprecated": true, + "security": [ + { + "oauth2": [ "full_access" ] } @@ -41701,43 +40468,37 @@ "x-access": { "any": "true" } - }, - "get": { + } + }, + "/timeentries/setbillable": { + "post": { "tags": [ - "User Files" + "TimeEntries" ], - "summary": "Returns the file with the specified id of the user with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByUserNameAndUserIdAndFileId", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Sets the time entries with the specified ids to billable.", + "description": "Depending on the time entry, the calling users has to have several permissions to edit the time entries.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user must have 'write'\r\n permissions on:\r\n 'project-timetracking' if it is a project task.\r\n\r\nAny authenticated user.", + "operationId": "PostTimeEntriesSetBillable", + "requestBody": { + "description": "The time entry ids and billable flag.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetTimeEntryBillableForm" + } } }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], + "required": true + }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -41763,6 +40524,7 @@ } } }, + "deprecated": true, "security": [ { "oauth2": [ @@ -41776,63 +40538,63 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/timeentries/setbilled": { + "post": { "tags": [ - "UserFiles" - ], - "summary": "Updates the metadata of the user file with the specified id.", - "description": "Updates the metadata of the user file with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "UpdateUserFile", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "TimeEntries" ], + "summary": "Sets the time entries with the specified ids to billed.", + "description": "Depending on the time entry, the calling users has to have several permissions to edit the time entries.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user needs permissions on:\r\n 'project-planning-data' if it is a project task.\r\n If the time entry is billed, the permissions can be ignored because there is no change.\r\n\r\nAny authenticated user.", + "operationId": "PostTimeEntriesSetBilled", "requestBody": { - "description": "The model to update the file with the specified id.", + "description": "The time entry ids and billed flag.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileInfoUpdateForm" + "$ref": "#/components/schemas/SetTimeEntryBilledForm" } } - } + }, + "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, + "deprecated": true, "security": [ { "oauth2": [ @@ -41848,63 +40610,61 @@ } } }, - "/users/{userId}/files/{fileId}/changeentity": { + "/timeentries/settypeofwork": { "post": { "tags": [ - "UserFiles" - ], - "summary": "Changes the user this file belongs to.", - "description": "Changes the user this file belongs to.\nSwitch to the specified user or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", - "operationId": "ChangeUser", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "TimeEntries" ], + "summary": "Sets the type of work of the specified timeentries.", + "description": "Depending on the time entry, the calling users has to have several permissions to edit the time entries.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user needs permissions on:\r\n 'project-planning-data' if it is a project task.\r\n\r\nAny authenticated user.", + "operationId": "PostTimeEntriesSetTypeOfWork", "requestBody": { - "description": "The model to change the entity information of the file.", + "description": "The time entry ids and type of work.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" + "$ref": "#/components/schemas/SetTimeEntryTypeOfWork" } } - } + }, + "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, + "deprecated": true, "security": [ { "oauth2": [ @@ -41920,63 +40680,61 @@ } } }, - "/users/{userId}/files/{fileId}/copy": { + "/timeentries/setunbillable": { "post": { "tags": [ - "UserFiles" - ], - "summary": "Copies the file to a new user.", - "description": "Copies the file to a new user (meta and content).\r\n\r\nAny authenticated user.", - "operationId": "CopyToUser", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "TimeEntries" ], + "summary": "Sets the time entries with the specified ids to unbillable.", + "description": "Already billed time entries cannot be set to unbillable -> Badrequest\r\n Depending on the time entry, the calling users has to have several permissions to edit the time entries.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user needs write\r\n permissions on:\r\n 'project-timetracking' if it is a project task.\r\n\r\nAny authenticated user.", + "operationId": "PostTimeEntriesSetUnbillable", "requestBody": { - "description": "The model to change the entity information of the file.", + "description": "The time entry ids and billable flag.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" + "$ref": "#/components/schemas/SetTimeEntryBillableForm" } } - } + }, + "required": true }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } } }, + "deprecated": true, "security": [ { "oauth2": [ @@ -41992,75 +40750,41 @@ } } }, - "/users/{userId}/files/{fileId}/download": { - "get": { + "/timeentries/setunbilled": { + "post": { "tags": [ - "UserFiles" + "TimeEntries" ], - "summary": "Returns the content of the user file with the specified id.", - "description": "Returns the content of the user file. Uses the latest file version.\nIf the user file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", - "operationId": "GetUserFileContent", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "width", - "in": "query", - "description": "Set width to resize.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "height", - "in": "query", - "description": "Set height to resize.", - "schema": { - "type": "number", - "format": "double" + "summary": "Sets the time entries with the specified ids to unbilled.", + "description": "For setting already billed time entries to unbilled, the user needs to have admin permissions.\r\n\r\nAny authenticated user.", + "operationId": "PostTimeEntriesSetUnBilled", + "requestBody": { + "description": "The time entry ids and billed flag.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetTimeEntryBilledForm" + } } }, - { - "name": "crop", - "in": "query", - "description": "Whether to crop the image when resizing it.", - "schema": { - "type": "boolean" - } - } - ], + "required": true + }, "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/ErrorResponse" } } } } }, + "deprecated": true, "security": [ { "oauth2": [ @@ -42076,43 +40800,34 @@ } } }, - "/users/{userId}/files/{fileId}/pdf": { + "/timeentries/simplified": { "get": { "tags": [ - "UserFiles" + "TimeEntries" ], - "summary": "Returns the content of the file with the specified id as pdf.\ntype or conversion not possible.", - "description": "Returns the content of the user file. Uses the latest file version.\r\n\r\nAny authenticated user.", - "operationId": "GetUserFileContent", + "summary": "Retrieves all time entries with a simplified model based on the grouping parameter.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTimeEntriesSimplified", "parameters": [ { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, + "name": "grouping", + "in": "query", + "description": "The grouping type.", "schema": { - "type": "string", - "format": "uuid" + "type": "string" } }, { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/parameters/page" }, { - "name": "inline", - "in": "query", - "description": "If inline is false, content-disposition header is attachment.", - "schema": { - "type": "boolean", - "default": false - } + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -42121,8 +40836,10 @@ "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "type": "array", + "items": { + "$ref": "#/components/schemas/SimplifiedTimeTracking" + } } } } @@ -42143,29 +40860,19 @@ } } }, - "/users/{userId}/files/{fileId}/shareurl": { - "get": { + "/timeentries/{timeEntryId}": { + "delete": { "tags": [ - "UserFiles" + "TimeEntries" ], - "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 time entry with the specified id.", + "description": "Deletes the time entry with the specified id.\r\n Depending on the time entry, the calling users has to have several permissions to delete the time entry.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is billed, Admin permissions are required.\r\n\r\nAny authenticated user.", + "operationId": "DeleteTimeEntryById", "parameters": [ { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "timeEntryId", "in": "path", - "description": "The id of the file.", + "description": "The id of the time entry.", "required": true, "schema": { "type": "string", @@ -42174,12 +40881,25 @@ } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -42198,48 +40918,24 @@ "x-access": { "any": "true" } - } - }, - "/users/{userId}/files/{fileId}/versions": { + }, "get": { "tags": [ - "UserFiles" + "TimeEntries" ], - "summary": "Returns all file versions of the specified user file.", - "description": "Returns all file versions of the specified user file.\r\n\r\nAny authenticated user.", - "operationId": "GetUserFileVersions", + "summary": "Get a time entry by id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTimeEntryById", "parameters": [ { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "timeEntryId", "in": "path", - "description": "The id of the file.", + "description": "The id of the time entry.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -42248,10 +40944,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileVersion" - } + "$ref": "#/components/schemas/TimeTracking" } } } @@ -42271,28 +40964,18 @@ "any": "true" } }, - "post": { + "put": { "tags": [ - "UserFiles" + "TimeEntries" ], - "summary": "Uploads a new version of the user file with the specified id.", - "description": "Uploads a new version of an user file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateUserFileVersion", + "summary": "Updates the time entry with the specified id.", + "description": "Updates the time entry with the specified id.\r\n Depending on the time entry, the calling users has to have several permissions to update the time entry:\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user needs permissions on:\r\n 'project-planning-data' if it is a project task.\r\n The break duration of the time entry is kept the same. The break duration cannot be smaller than the duration of the\r\n time entry. To remove the breaks, use the endpoint POST /timeentries/{id}/removeBreaks.\r\n Following combination of times and duration are allowed for already completed time entries:\r\n - start time (local or utc) and end time (local or utc) (this option always takes precedence)\r\n - start time (local or utc) and duration\r\n - end time (local or utc) and duration\r\n For running time entries, you can only update the start time (local or utc) while the duration stays 0.\r\n\r\nAny authenticated user.", + "operationId": "PutTimeEntryById", "parameters": [ { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "timeEntryId", "in": "path", - "description": "The id of the file.", + "description": "The id of the time entry.", "required": true, "schema": { "type": "string", @@ -42301,27 +40984,15 @@ } ], "requestBody": { + "description": "The time entry data to update.", "content": { - "multipart/form-data": { + "application/json": { "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } + "$ref": "#/components/schemas/TimeTrackingPutForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -42329,13 +41000,40 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" + "$ref": "#/components/schemas/TimeTracking" } } } }, "400": { - "description": "Bad Request" + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -42353,39 +41051,19 @@ } } }, - "/users/{userId}/files/{fileId}/versions/{versionId}": { - "get": { + "/timeentries/{timeEntryId}/removebreaks": { + "post": { "tags": [ - "User Files" + "TimeEntries" ], - "summary": "Returns the user file version with the specified id.", + "summary": "Handles removing all breaks from a time entry, effectively resuming the timer.", "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesVersionsByUserNameAndUserIdAndFileIdAndVersionId", + "operationId": "PostTimeEntryRemoveBreaks", "parameters": [ { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "versionId", + "name": "timeEntryId", "in": "path", - "description": "The id of the file version.", + "description": "The id of the time entry.", "required": true, "schema": { "type": "string", @@ -42399,27 +41077,45 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileVersion" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TimeTracking" } } } - }, - "404": { - "description": "Not Found", + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/timereports": { + "get": { + "tags": [ + "TimeReports" + ], + "summary": "Returns all time reports of a user.", + "description": "Returns time reports the user created as well as the shared time reports of\r\n other users.\r\n\r\nAny authenticated user.", + "operationId": "GetTimeReports", + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/TimeReport" + } } } } @@ -42440,54 +41136,24 @@ } } }, - "/users/{userId}/files/{fileId}/versions/{versionId}/download": { + "/timetracking/settings": { "get": { "tags": [ - "UserFiles" - ], - "summary": "Returns the content of the user file version with the specified id.", - "description": "Returns the content of the user file version with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetUserFileVersionContent", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "TimeTrackingSettings" ], + "summary": "Returns the global timetracking settings.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTimeTrackingSettings", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "type": "array", + "items": { + "$ref": "#/components/schemas/TimeTrackingSetting" + } } } } @@ -42508,23 +41174,22 @@ } } }, - "/users/{userId}/otherprivatetasks": { + "/typeofwork": { "get": { "tags": [ - "PrivateTasks" + "TypeOfWork" ], - "summary": "Returns all private tasks that a user created and assigned to someone else.", - "description": "Private tasks are always created for the current user but can be reassigned to other users afterwards.\r\n This endpoint returns all private tasks that were originally created by the user but were reassigned to someone else.\r\n\r\nAny authenticated user.", - "operationId": "GetUserOtherPrivateTasksByUserId", + "summary": "Gets all types of work.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTypesOfWork", "parameters": [ { - "name": "userId", - "in": "path", - "description": "The id of the user that created the private tasks.", - "required": true, + "name": "showArchived", + "in": "query", + "description": "The show Archived.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } }, { @@ -42548,24 +41213,58 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TaskModel" + "$ref": "#/components/schemas/TypeOfWork" } } } } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "TypeOfWork" + ], + "summary": "Creates a new type of work.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PostTypesOfWork", + "requestBody": { + "description": "The type Of Work form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TypeOfWorkForm" + } + } }, - "401": { - "description": "Unauthorized", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TypeOfWork" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -42585,34 +41284,63 @@ "x-api-versions": [ "v1" ], + "x-access": { + "admin": "true", + "task-manage-config": "write" + } + } + }, + "/typeofwork/icons": { + "get": { + "tags": [ + "TypeOfWork" + ], + "summary": "Gets all possible icons for type of work.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTypesOfWorkIcons", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], "x-access": { "any": "true" } } }, - "/users/{userId}/otherprivatetasks/{taskId}": { + "/typeofwork/{typeOfWorkId}": { "get": { "tags": [ - "PrivateTasks" + "TypeOfWork" ], - "summary": "Returns a private task that a user created and assigned to someone else.", - "description": "Private tasks are always created for the current user but can be reassigned to other users afterwards.\r\n This endpoint returns a private task that was originally created by the user but was reassigned to someone else.\r\n\r\nAny authenticated user.", - "operationId": "GetUserOtherPrivateTaskByUserIdAndTaskId", + "summary": "Gets the type of work with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetTypeOfWorkById", "parameters": [ { - "name": "userId", - "in": "path", - "description": "The id of the user the task is assigned to.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskId", + "name": "typeOfWorkId", "in": "path", - "description": "The id of the task to return.", + "description": "The id of the type of work.", "required": true, "schema": { "type": "string", @@ -42626,17 +41354,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskModel" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TypeOfWork" } } } @@ -42665,31 +41383,19 @@ "x-access": { "any": "true" } - } - }, - "/users/{userId}/otherprivatetasks/{taskId}/checklistitems": { - "get": { + }, + "put": { "tags": [ - "ChecklistItems" + "TypeOfWork" ], - "summary": "Returns the checklist items for a private task with the specified id.", - "description": "The user must be the creator of the task.", - "operationId": "GetUserOtherPrivateTaskChecklistItemsByUserIdAndTaskId", + "summary": "Changes the properties of an existing type of work.", + "description": "\r\n\r\nThe user must be an admin or have `task-manage-config:write` permissions.", + "operationId": "PutTypeOfWorkById", "parameters": [ { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskId", + "name": "typeOfWorkId", "in": "path", - "description": "The id of the task.", + "description": "The id of the type of work.", "required": true, "schema": { "type": "string", @@ -42697,22 +41403,30 @@ } } ], + "requestBody": { + "description": "The type Of Work form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TypeOfWorkForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChecklistItem" - } + "$ref": "#/components/schemas/TypeOfWork" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -42743,43 +41457,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "task-manage-config": "write" } } }, - "/users/{userId}/otherprivatetasks/{taskId}/checklistitems/{checklistItemId}": { - "get": { + "/typeofwork/{typeOfWorkId}/delete": { + "post": { "tags": [ - "ChecklistItems" + "TypeOfWork" ], - "summary": "Returns a checklist item for a private task with the specified id.", - "description": "The user must be the creator of the task.", - "operationId": "GetUserOtherPrivateTaskChecklistItemByUserIdAndTaskIdAndChecklistItemId", + "summary": "Deletes the type of work with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostTypeOfWorkDeleteByTypeOfWorkId", "parameters": [ { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskId", - "in": "path", - "description": "The id of the task.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "checklistItemId", + "name": "typeOfWorkId", "in": "path", - "description": "The id of the checklist item.", + "description": "The id of the type of work.", "required": true, "schema": { "type": "string", @@ -42787,19 +41482,23 @@ } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChecklistItem" - } + "requestBody": { + "description": "The model containing the new type of work id to substitute.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteTaskTypeForm" } } }, - "401": { - "description": "Unauthorized", + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -42830,58 +41529,55 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/users/{userId}/privatetasks": { - "get": { + "/typeofwork/{typeOfWorkId}/setarchived": { + "post": { "tags": [ - "PrivateTasks" + "TypeOfWork" ], - "summary": "Returns all private tasks of the user with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetUserPrivateTasksByUserId", + "summary": "Archives or unarchives the type of work with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostTypeOfWorkSetArchivedByTypeOfWorkId", "parameters": [ { - "name": "userId", + "name": "typeOfWorkId", "in": "path", - "description": "The id of the user to fetch private tasks for.", + "description": "The id of the type of work.", "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 archived form payload.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ArchivedForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskModel" - } + "$ref": "#/components/schemas/TypeOfWork" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -42912,27 +41608,27 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/users/{userId}/privatetasks/taskstatuses": { + "/users": { "get": { "tags": [ - "PrivateTasks" + "Users" ], - "summary": "Returns the task statuses for private tasks for the specified user.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetPrivateTaskStatusesByUserId", + "summary": "Returns all users with their details.", + "description": "Returns all users with their details like status, contact info and more.\r\n Returns all users if the user has read permissions on the feature\r\n user-master-data, otherwise returns only his own user.\r\n Archived users are excluded by default. You can include them by setting the 'showArchived' query parameter.\r\n If the permissions have UserTeamsData Feature, the filter for teams is applied.\r\n Beware that this will also include API users in the response.\r\n\r\nAny authenticated user.", + "operationId": "GetUsers", "parameters": [ { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, + "name": "showArchived", + "in": "query", + "description": "Whether to show archived users.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } }, { @@ -42956,7 +41652,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/TaskStatus" + "$ref": "#/components/schemas/User" } } } @@ -42978,33 +41674,22 @@ } } }, - "/users/{userId}/privatetasks/{taskId}": { + "/users/autofill/{email}": { "get": { "tags": [ - "PrivateTasks" + "Users" ], - "summary": "Returns the private task of a user with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetUserPrivateTaskByUserIdAndTaskId", + "summary": "Tries to retrieve user name and gender for the specified email.", + "description": "Returns the first name, last name and gender of the given email address.\r\n\r\nAny authenticated user.", + "operationId": "GetUsersAutofillByEmail", "parameters": [ { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskId", + "name": "email", "in": "path", - "description": "The id of the task.", + "description": "The user's email.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -43014,17 +41699,85 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskModel" + "$ref": "#/components/schemas/AutofillUser" } } } }, - "401": { - "description": "Unauthorized", + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/users/deletetags": { + "post": { + "tags": [ + "UserTags" + ], + "summary": "Removes a tag from all users.", + "description": "\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", + "operationId": "PostUsersDeleteTags", + "requestBody": { + "description": "The model with the tag to be removed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteTagForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "user-master-data": "write" + } + } + }, + "/users/me": { + "get": { + "tags": [ + "Users" + ], + "summary": "Returns the currently logged-in user and workspace.", + "description": "This is an alternate URL for the /me endpoint.\r\n\r\nAny authenticated user.", + "operationId": "GetUsersMe", + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/UserAndWorkspace" } } } @@ -43055,33 +41808,44 @@ } } }, - "/users/{userId}/privatetasks/{taskId}/checklistitems": { + "/users/projecttimebookings": { "get": { "tags": [ - "ChecklistItems" + "TimeBookings" ], - "summary": "Returns the checklist for a private task with the specified id.", - "description": "The user must be be assigned to the task.", - "operationId": "GetUserPrivateTaskChecklistItemsByUserIdAndTaskId", + "summary": "Returns the time bookings in a specified time range for a list of users.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetProjectTimeBookingsForUsers", "parameters": [ { - "name": "userId", - "in": "path", - "description": "The id of the user.", + "name": "userIds", + "in": "query", + "description": "The ids of the users.", "required": true, "schema": { "type": "string", - "format": "uuid" + "description": "This class is used to bind a querystring list of Guid (as a comma-separated list) to the List of Guid parameter in a\nminimal API endpoint.", + "example": "123e4567-e89b-12d3-a456-426614174000,223e4567-e89b-12d3-a456-426614174001" } }, { - "name": "taskId", - "in": "path", - "description": "The id of the task.", + "name": "intervalStart", + "in": "query", + "description": "The start of the interval.", "required": true, "schema": { "type": "string", - "format": "uuid" + "format": "date" + } + }, + { + "name": "intervalEnd", + "in": "query", + "description": "The end of the interval.", + "required": true, + "schema": { + "type": "string", + "format": "date" } } ], @@ -43093,14 +41857,14 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ChecklistItem" + "$ref": "#/components/schemas/GetTimeBookingForUsersResult" } } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -43109,8 +41873,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -43135,43 +41899,82 @@ } } }, - "/users/{userId}/privatetasks/{taskId}/checklistitems/{checklistItemId}": { + "/users/tags": { "get": { "tags": [ - "ChecklistItems" + "UserTags" ], - "summary": "Retrieves a checklist item from a private task.", - "description": "The user must be assigned to the task.", - "operationId": "GetUserPrivateTaskChecklistItemByUserIdAndTaskIdAndChecklistItemId", + "summary": "Returns all tags that are currently in use.", + "description": "Returns all tags that are currently in use ordered by count.\r\n\r\nAny authenticated user.", + "operationId": "GetUsersTags", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/users/timebookings": { + "get": { + "tags": [ + "TimeBookings" + ], + "summary": "Returns the time bookings in a specified time range for a list of users.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetUsersTimeBookings", "parameters": [ { - "name": "userId", - "in": "path", - "description": "The id of the user.", + "name": "userIds", + "in": "query", + "description": "The ids of the users.", "required": true, "schema": { "type": "string", - "format": "uuid" + "description": "This class is used to bind a querystring list of Guid (as a comma-separated list) to the List of Guid parameter in a\nminimal API endpoint.", + "example": "123e4567-e89b-12d3-a456-426614174000,223e4567-e89b-12d3-a456-426614174001" } }, { - "name": "taskId", - "in": "path", - "description": "The id of the task.", + "name": "intervalStart", + "in": "query", + "description": "The start of the interval.", "required": true, "schema": { "type": "string", - "format": "uuid" + "format": "date" } }, { - "name": "checklistItemId", - "in": "path", - "description": "The id of the checklist item to retrieve.", + "name": "intervalEnd", + "in": "query", + "description": "The end of the interval.", "required": true, "schema": { "type": "string", - "format": "uuid" + "format": "date" } } ], @@ -43181,13 +41984,16 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChecklistItem" + "type": "array", + "items": { + "$ref": "#/components/schemas/GetTimeBookingForUsersResult" + } } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -43196,8 +42002,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -43222,32 +42028,19 @@ } } }, - "/users/{userId}/setarchived": { + "/users/updatetags": { "post": { "tags": [ - "Users" - ], - "summary": "Archives or unarchives the user with the specified id.", - "description": "Archived objects can not be used any longer but still exist for being referenced by other entities.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostUserSetArchivedByUserId", - "parameters": [ - { - "name": "userId", - "in": "path", - "description": "The id of the user.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "UserTags" ], + "summary": "Updates a tag globally for all users.", + "description": "\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", + "operationId": "PostUsersUpdateTags", "requestBody": { - "description": "The model to archive or unarchive the user.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ArchivedForm" + "$ref": "#/components/schemas/TagUpdateForm" } } }, @@ -43255,14 +42048,7 @@ }, "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExtendedUser" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -43297,27 +42083,76 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "user-master-data": "write" } } }, - "/users/{userId}/tags": { + "/users/workload": { "get": { "tags": [ - "UserTags" + "Workload" ], - "summary": "Returns the tags of the users with the specified id.", - "description": "Returns the tags of the user with the specified id ordered by name.\r\n \r\n To read the tags of a user the user must have 'read' permissions on the specified user.", - "operationId": "GetUserTagsByUserId", + "summary": "Returns the users' workloads per day.", + "description": "Returns the users' workloads per day for projects, tasks, task schedules and calendar events\r\n that have an overlap with the interval specified by intervalStart and intervalEnd.\r\n Takes into consideration weekly availability, absences, user capacity, planned efforts, as well as project budget.\r\n\r\nThe user must be an admin or have `user-planning-data:read` permissions.", + "operationId": "GetUsersWorkload", "parameters": [ { - "name": "userId", - "in": "path", - "description": "The id of the user to get the tags for.", + "name": "userIds", + "in": "query", + "description": "The ids of the users to get the workload for, as a comma-separated list of Guids.", "required": true, "schema": { "type": "string", - "format": "uuid" + "description": "This class is used to bind a querystring list of Guid (as a comma-separated list) to the List of Guid parameter in a\nminimal API endpoint.", + "example": "123e4567-e89b-12d3-a456-426614174000,223e4567-e89b-12d3-a456-426614174001" + } + }, + { + "name": "intervalStart", + "in": "query", + "description": "The start of the interval to filter by.", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "intervalEnd", + "in": "query", + "description": "The end of the interval to filter by.", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "roughPlanningFrom", + "in": "query", + "description": "The number of days from today when the rough planning should start.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "fetchDetails", + "in": "query", + "description": "(Optional - default: false) If set to true, the result will contain the hierarchy of elements that are contributing\n to the workload (projects, tasks, appointments).\n Otherwise it will return only the workload value.\n Works only for single day queries.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "ignoreCalendarEvents", + "in": "query", + "description": "Whether to ignore calendar events. Can significantly improve performance.", + "schema": { + "type": "boolean", + "default": false } } ], @@ -43329,14 +42164,14 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/BaseTagModel" + "$ref": "#/components/schemas/GetWorkloadForUsersResult" } } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -43345,8 +42180,8 @@ } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -43367,23 +42202,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "user-planning-data": "read" } } }, - "/users/{userId}/tasks/tags": { - "get": { + "/users/{userId}": { + "delete": { "tags": [ - "AssignedTasks" + "Users" ], - "summary": "Returns all task tags the specified user is allowed to see.", - "description": "The tags can be filtered by the properties of the task model.\r\n\r\nAny authenticated user.", - "operationId": "GetUserTasksTagsByUserId", + "summary": "Deletes the user with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `user-manage-config:delete` permissions.", + "operationId": "DeleteUserById", "parameters": [ { "name": "userId", "in": "path", - "description": "The id of the user to get the tags for.", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -43392,15 +42228,25 @@ } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "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" } } } @@ -43417,18 +42263,17 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "user-manage-config": "delete" } - } - }, - "/users/{userId}/timeentries/last": { + }, "get": { "tags": [ - "TimeEntries" + "Users" ], - "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": "GetLastTimeEntriesByUserId", + "summary": "Returns the user with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetUserById", "parameters": [ { "name": "userId", @@ -43447,13 +42292,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "$ref": "#/components/schemas/User" } } } }, - "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": [ @@ -43467,19 +42329,16 @@ "v1" ], "x-access": { - "admin": "true", - "owner": "true" + "any": "true" } - } - }, - "/users/{userId}/timetracking/pause": { - "post": { + }, + "put": { "tags": [ - "TimeTracking" + "Users" ], - "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": "PostPauseTimeTrackingByUserId", + "summary": "Updates the user with the specified id.", + "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:write` permissions.", + "operationId": "PutUserById", "parameters": [ { "name": "userId", @@ -43492,19 +42351,37 @@ } } ], + "requestBody": { + "description": "The model to update the user.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserForm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "$ref": "#/components/schemas/User" } } } }, - "204": { - "description": "No Content" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -43518,18 +42395,20 @@ "v1" ], "x-access": { - "owner": "true" + "admin": "true", + "owner": "true", + "user-master-data": "write" } } }, - "/users/{userId}/timetracking/resume": { + "/users/{userId}/activate": { "post": { "tags": [ - "TimeTracking" + "Users" ], - "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": "PostResumeTimeTrackingByUserId", + "summary": "Activates the user with the specified id.", + "description": "The user is then allowed to sign in again and will be notified via email.\r\n\r\nThe user must be an admin or have `user-manage-config:write` permissions.", + "operationId": "PostUserActivateByUserId", "parameters": [ { "name": "userId", @@ -43543,18 +42422,38 @@ } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "204": { - "description": "No Content" + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -43568,23 +42467,24 @@ "v1" ], "x-access": { - "owner": "true" + "admin": "true", + "user-manage-config": "write" } } }, - "/users/{userId}/timetracking/start": { + "/users/{userId}/addtags": { "post": { "tags": [ - "TimeTracking" + "UserTags" ], - "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": "PostStartTimeTrackingByUserId", + "summary": "Adds a batch of tags to the user with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", + "operationId": "PostUserAddTagsByUserId", "parameters": [ { "name": "userId", "in": "path", - "description": "The id of the user.", + "description": "The id of the user to add tags to.", "required": true, "schema": { "type": "string", @@ -43593,11 +42493,14 @@ } ], "requestBody": { - "description": "The model describing the time tracking to start.", + "description": "The model with the tags to be added.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/StartTimeTrackingForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/TagForm" + } } } }, @@ -43609,7 +42512,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -43627,18 +42553,18 @@ ], "x-access": { "admin": "true", - "owner": "true" + "user-master-data": "write" } } }, - "/users/{userId}/timetracking/stop": { - "post": { + "/users/{userId}/allavailabletasks": { + "get": { "tags": [ - "TimeTracking" + "AssignedTasks" ], - "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": "PostStopTimeTrackingByUserId", + "summary": "Returns all tasks the specified user is allowed to see.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetUserAllAvailableTasksByUserId", "parameters": [ { "name": "userId", @@ -43649,30 +42575,33 @@ "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StopTimeTrackingForm" - } - } - } - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TimeTracking" + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskModel" + } } } } - }, - "204": { - "description": "No Content" } }, "security": [ @@ -43686,20 +42615,56 @@ "v1" ], "x-access": { - "admin": "true", - "owner": "true" + "any": "true" } } }, - "/webhooks": { + "/users/{userId}/assignedtasks": { "get": { "tags": [ - "Webhooks" + "AssignedTasks" ], - "summary": "Returns all configured webhooks.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetWebhooks", + "summary": "Returns all tasks assigned to the specified user.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetUserAssignedTasksByUserId", "parameters": [ + { + "name": "userId", + "in": "path", + "description": "The id of the user to get the tasks for.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "inProgress", + "in": "query", + "description": "Whether to return only assigned project tasks of running projects. Defaults to true.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "assignedOnFrom", + "in": "query", + "description": "The start date for filtering by assignment date. If set, tasks are returned only when the assignment date is greater or equal than this value.", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "assignedOnTo", + "in": "query", + "description": "The end date for filtering by assignment date. If set, tasks are returned only when the assignment date is less or equal than this value.", + "schema": { + "type": "string", + "format": "date-time" + } + }, { "$ref": "#/components/parameters/page" }, @@ -43721,7 +42686,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/WebhookConfig" + "$ref": "#/components/schemas/TaskModel" } } } @@ -43739,40 +42704,53 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "read" + "any": "true" } - }, - "post": { + } + }, + "/users/{userId}/assignedtasks/{taskId}": { + "get": { "tags": [ - "Webhooks" + "AssignedTasks" ], - "summary": "Creates a new webhook.", - "description": "The receiver type is inferred from the URI. All unknown receivers are treated as 'custom'.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PostWebhook", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebhookConfigForm" - } + "summary": "Returns the assigned task with the specified id of a specified user.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetUserAssignedTaskByUserIdAndTaskId", + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "The id of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "taskId", + "in": "path", + "description": "The id of the task to return.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WebhookConfig" + "$ref": "#/components/schemas/TaskModel" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -43780,42 +42758,13 @@ } } } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "workspace-manage-config": "write" - } - } - }, - "/webhooks/eventtypes": { - "get": { - "tags": [ - "Webhooks" - ], - "summary": "Returns all available event types.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetWebhookEventTypes", - "responses": { - "200": { - "description": "OK", + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -43836,24 +42785,43 @@ } } }, - "/webhooks/eventtypes/slack": { + "/users/{userId}/capacity": { "get": { "tags": [ - "Webhooks" + "UserCapacities" + ], + "summary": "Returns the capacity of the specified user.", + "description": "Returns the capacity of the specified user.\r\n User planning data or admin permissions are required if the capacity of the specified user\r\n does not belong to the calling user.\r\n\r\nAny authenticated user.", + "operationId": "GetUserCapacityByUserId", + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "The id of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Returns all available event types for Slack webhooks.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetSlackEventTypes", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/UserCapacity" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -43872,20 +42840,19 @@ "x-access": { "any": "true" } - } - }, - "/webhooks/{webhookId}": { - "delete": { + }, + "put": { "tags": [ - "Webhooks" + "UserCapacities" ], - "summary": "Deletes the webhook with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "DeleteWebhook", + "summary": "Updates the capacity of the specified user.", + "description": "Updates the capacity of the user with the specified id.\r\n User planning data or admin permissions are required if the capacity of the specified user\r\n does not belong to the calling user.\r\n\r\nAny authenticated user.", + "operationId": "PutUserCapacityByUserId", "parameters": [ { - "name": "webhookId", + "name": "userId", "in": "path", + "description": "The user whose capacity should be updated.", "required": true, "schema": { "type": "string", @@ -43893,12 +42860,30 @@ } } ], + "requestBody": { + "description": "Updated capacity values for each day of the week.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserCapacityForm" + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserCapacity" + } + } + } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -43919,26 +42904,40 @@ "v1" ], "x-access": { - "admin": "true", - "workspace-manage-config": "write" + "any": "true" } - }, + } + }, + "/users/{userId}/contactinfo": { "get": { "tags": [ - "Webhooks" + "Users" ], - "summary": "Returns the webhook with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetWebhook", + "summary": "Returns the contact infos of the user with the specified id.", + "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:read` permissions.", + "operationId": "GetUserContactInfoByUserId", "parameters": [ { - "name": "webhookId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -43947,7 +42946,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WebhookConfig" + "type": "array", + "items": { + "$ref": "#/components/schemas/ContactInfo" + } } } } @@ -43975,20 +42977,22 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "read" + "owner": "true", + "user-master-data": "read" } }, - "put": { + "post": { "tags": [ - "Webhooks" + "Users" ], - "summary": "Updates the webhook with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", - "operationId": "PutWebhook", + "summary": "Creates a new contact info for the user with the specified id.", + "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:write` permissions.", + "operationId": "PostUserContactInfoByUserId", "parameters": [ { - "name": "webhookId", + "name": "userId", "in": "path", + "description": "The user to add contact information to.", "required": true, "schema": { "type": "string", @@ -43997,10 +43001,11 @@ } ], "requestBody": { + "description": "The model containing contact information details including address, phone number, and type.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WebhookConfigForm" + "$ref": "#/components/schemas/ContactInfoFormForUsers" } } }, @@ -44012,17 +43017,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WebhookConfig" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/ContactInfo" } } } @@ -44050,22 +43045,24 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "write" + "owner": "true", + "user-master-data": "write" } } }, - "/webhooks/{webhookId}/logs": { - "get": { + "/users/{userId}/contactinfo/{contactInfoId}": { + "delete": { "tags": [ - "Webhooks" + "Users" ], - "summary": "Returns all logs of the webhook with the specified id.", - "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", - "operationId": "GetWebhookLogs", + "summary": "Deletes the contact info of the user with the specified id.", + "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:write` permissions.", + "operationId": "DeleteUserContactInfoByUserIdAndContactInfoId", "parameters": [ { - "name": "webhookId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -44073,28 +43070,26 @@ } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "contactInfoId", + "in": "path", + "description": "The id of the contact info.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WebhookLog" - } + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -44122,38 +43117,37 @@ ], "x-access": { "admin": "true", - "workspace-manage-config": "read" + "owner": "true", + "user-master-data": "write" } - } - }, - "/workflows": { + }, "get": { "tags": [ - "Workflows" + "Users" ], - "summary": "Retrieves all workflows.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetWorkflows", + "summary": "Returns the contact info of the user with the specified id.", + "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:read` permissions.", + "operationId": "GetUserContactInfoByUserIdAndContactInfoId", "parameters": [ { - "name": "showArchived", - "in": "query", + "name": "userId", + "in": "path", + "description": "The id of the user.", + "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": "contactInfoId", + "in": "path", + "description": "The id of the contact info.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -44162,10 +43156,17 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Workflow" - } + "$ref": "#/components/schemas/ContactInfo" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -44182,21 +43183,46 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "owner": "true", + "user-master-data": "read" } }, - "post": { + "put": { "tags": [ - "Workflows" + "Users" + ], + "summary": "Updates the contact info of the user with the specified id.", + "description": "\r\n\r\nThe user must be an admin or the creator or have `user-master-data:write` permissions.", + "operationId": "PutUserContactInfoByUserIdAndContactInfoId", + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "The id of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "contactInfoId", + "in": "path", + "description": "The id of the contact info.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Creates a new workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostWorkflow", "requestBody": { + "description": "The contact info model.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WorkflowForm" + "$ref": "#/components/schemas/ContactInfoFormForUsers" } } }, @@ -44208,7 +43234,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Workflow" + "$ref": "#/components/schemas/ContactInfo" } } } @@ -44222,6 +43248,16 @@ } } } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -44236,38 +43272,80 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "owner": "true", + "user-master-data": "write" } } }, - "/workflows/automations/copy": { + "/users/{userId}/deactivate": { "post": { "tags": [ - "Workflow Automations" + "Users" ], - "summary": "Copies automations from one workflow to another.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostCopyWorkflowAutomations", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CopyWorkflowAutomationsForm" - } + "summary": "Deactivates the user with the specified id.", + "description": "A deactivated user can no longer sign in.\r\n This is only possible if the user is not the last admin user.\r\n\r\nThe user must be an admin or have `user-manage-config:write` permissions.", + "operationId": "PostUserDeactivateByUserId", + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "The id of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "includeSummary", + "in": "query", + "description": "Whether to return the private project orphan resolution summary.", + "schema": { + "type": "boolean", + "default": false + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Automation" - } + "$ref": "#/components/schemas/PostUserDeactivateByUserIdResponse" + } + } + } + }, + "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" } } } @@ -44285,22 +43363,23 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "user-manage-config": "write" } } }, - "/workflows/{workflowId}": { - "get": { + "/users/{userId}/deletetags": { + "post": { "tags": [ - "Workflows" + "UserTags" ], - "summary": "Retrieves a specified workflow.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetWorkflowById", + "summary": "Removes tags from the user with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `user-master-data:write` permissions.", + "operationId": "PostUserDeleteTagsByUserId", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", + "description": "The id of the user whose tags should be removed.", "required": true, "schema": { "type": "string", @@ -44308,26 +43387,26 @@ } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Workflow" + "requestBody": { + "description": "The model with the tags to be removed.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DeleteTagForm" } } } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "207": { + "description": "Multi-Status" } }, "security": [ @@ -44341,20 +43420,24 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "user-master-data": "write" } - }, - "put": { + } + }, + "/users/{userId}/externalfiles": { + "post": { "tags": [ - "Workflows" + "UserFiles" ], - "summary": "Updates a workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutWorkflowById", + "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": "workflowId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -44363,14 +43446,25 @@ } ], "requestBody": { + "description": "List of file forms.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WorkflowForm" + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" + } + } + }, + "application/*+json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" + } } } - }, - "required": true + } }, "responses": { "200": { @@ -44378,27 +43472,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Workflow" - } - } - } - }, - "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/FileInfo" } } } @@ -44415,28 +43489,78 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/workflows/{workflowId}/automations": { + "/users/{userId}/files": { + "delete": { + "tags": [ + "UserFiles" + ], + "summary": "Deletes the files of the specified user.", + "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", + "operationId": "DeleteUserFiles", + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "The id of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, "get": { "tags": [ - "Workflow Automations" + "UserFiles" ], - "summary": "Retrieves automations of the specified workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", - "operationId": "GetWorkflowAutomations", + "summary": "Returns all files of the user with the specified id.", + "description": "Returns all file metadata of the user with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetUserFiles", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -44447,7 +43571,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Automation" + "$ref": "#/components/schemas/FileInfo" } } } @@ -44465,21 +43589,21 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "read" + "any": "true" } }, "post": { "tags": [ - "Workflow Automations" + "UserFiles" ], - "summary": "Creates a new automation for a workflow.", - "description": "\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostWorkflowAutomation", + "summary": "Creates a new user file for the user with the specified id..", + "description": "Uploads a new user file for the user with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", + "operationId": "CreateUserFile", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -44489,13 +43613,26 @@ ], "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/AutomationTriggerForm" + "required": [ + "File" + ], + "type": "object", + "properties": { + "File": { + "type": "string", + "format": "binary" + } + } + }, + "encoding": { + "File": { + "style": "form" + } } } - }, - "required": true + } }, "responses": { "200": { @@ -44503,20 +43640,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" + "$ref": "#/components/schemas/FileInfo" } } } }, "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "description": "Bad Request" } }, "security": [ @@ -44530,59 +43660,52 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" - }, - "x-subscriptionlevel": { - "minimumPlan": "standard" + "any": "true" } } }, - "/workflows/{workflowId}/automations/{automationId}": { - "delete": { + "/users/{userId}/files/byurl": { + "post": { "tags": [ - "Workflow Automations" + "UserFiles" ], - "summary": "Deletes a workflow automation by id.", - "description": "Requires specifying whether to delete or unlink synced automations on linked projects/templates.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "DeleteWorkflowAutomation", + "summary": "Uploads a new file by providing an url.", + "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", + "operationId": "CreateUserFileByUrl", "parameters": [ { - "name": "workflowId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", + "name": "userId", "in": "path", + "description": "The id of the user the file is linked to.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "name": "deleteSyncedAutomations", - "in": "query", - "schema": { - "type": "boolean" - } } ], + "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" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -44599,21 +43722,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } - }, - "get": { + } + }, + "/users/{userId}/files/{fileId}": { + "delete": { "tags": [ - "Workflow Automations" + "UserFiles" ], - "summary": "Retrieves a specific automation of the specified workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", - "operationId": "GetWorkflowAutomation", + "summary": "Deletes the user file with the specified id.", + "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", + "operationId": "DeleteUserFile", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -44621,8 +43746,9 @@ } }, { - "name": "automationId", + "name": "fileId", "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -44631,25 +43757,8 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Automation" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -44663,21 +43772,21 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "read" + "any": "true" } }, - "put": { + "get": { "tags": [ - "Workflow Automations" + "User Files" ], - "summary": "Updates an automation of the specified workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutWorkflowAutomation", + "summary": "Returns the file with the specified id of the user with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByUserNameAndUserIdAndFileId", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -44685,8 +43794,9 @@ } }, { - "name": "automationId", + "name": "fileId", "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -44694,29 +43804,19 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AutomationPutForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Automation" + "$ref": "#/components/schemas/FileInfo" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -44747,23 +43847,21 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } - } - }, - "/workflows/{workflowId}/automations/{automationId}/actions": { - "get": { + }, + "put": { "tags": [ - "Workflow Automations" + "UserFiles" ], - "summary": "Gets all actions of an automation of a workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", - "operationId": "GetWorkflowActions", + "summary": "Updates the metadata of the user file with the specified id.", + "description": "Updates the metadata of the user file with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "UpdateUserFile", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -44771,8 +43869,9 @@ } }, { - "name": "automationId", + "name": "fileId", "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -44780,26 +43879,28 @@ } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Action" - } - } + "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" } } - }, - "404": { - "description": "Not Found", + } + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -44816,21 +43917,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "read" + "any": "true" } - }, + } + }, + "/users/{userId}/files/{fileId}/changeentity": { "post": { "tags": [ - "Workflow Automations" + "UserFiles" ], - "summary": "Creates a new action for an automation of a workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostWorkflowAction", + "summary": "Changes the user this file belongs to.", + "description": "Changes the user this file belongs to.\nSwitch to the specified user or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", + "operationId": "ChangeUser", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -44838,8 +43941,9 @@ } }, { - "name": "automationId", + "name": "fileId", "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -44848,14 +43952,19 @@ } ], "requestBody": { + "description": "The model to change the entity information of the file.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ActionForm" + "$ref": "#/components/schemas/FileEntityForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileEntityForm" } } - }, - "required": true + } }, "responses": { "200": { @@ -44863,27 +43972,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" - } - } - } - }, - "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/FileInfo" } } } @@ -44900,32 +43989,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/workflows/{workflowId}/automations/{automationId}/actions/{actionId}": { - "delete": { + "/users/{userId}/files/{fileId}/copy": { + "post": { "tags": [ - "Workflow Automations" + "UserFiles" ], - "summary": "Deletes an action from an automation of a workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "DeleteWorkflowAction", + "summary": "Copies the file to a new user.", + "description": "Copies the file to a new user (meta and content).\r\n\r\nAny authenticated user.", + "operationId": "CopyToUser", "parameters": [ { - "name": "workflowId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -44933,8 +44013,9 @@ } }, { - "name": "actionId", + "name": "fileId", "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -44942,16 +44023,28 @@ } } ], + "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" - }, - "404": { - "description": "Not Found", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/FileInfo" } } } @@ -44968,21 +44061,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } - }, + } + }, + "/users/{userId}/files/{fileId}/download": { "get": { "tags": [ - "Workflow Automations" + "UserFiles" ], - "summary": "Gets a specific action of an automation of a workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", - "operationId": "GetWorkflowAction", + "summary": "Returns the content of the user file with the specified id.", + "description": "Returns the content of the user file. Uses the latest file version.\nIf the user file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", + "operationId": "GetUserFileContent", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -44990,8 +44085,9 @@ } }, { - "name": "automationId", + "name": "fileId", "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -44999,12 +44095,29 @@ } }, { - "name": "actionId", - "in": "path", - "required": true, + "name": "width", + "in": "query", + "description": "Set width to resize.", "schema": { - "type": "string", - "format": "uuid" + "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" } } ], @@ -45014,17 +44127,8 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string", + "format": "binary" } } } @@ -45041,21 +44145,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "read" + "any": "true" } - }, - "put": { + } + }, + "/users/{userId}/files/{fileId}/pdf": { + "get": { "tags": [ - "Workflow Automations" + "UserFiles" ], - "summary": "Updates an action of an automation of a workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutWorkflowAction", + "summary": "Returns the content of the file with the specified id as pdf.\ntype or conversion not possible.", + "description": "Returns the content of the user file. Uses the latest file version.\r\n\r\nAny authenticated user.", + "operationId": "GetUserFileContent", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -45063,8 +44169,9 @@ } }, { - "name": "automationId", + "name": "fileId", "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -45072,52 +44179,23 @@ } }, { - "name": "actionId", - "in": "path", - "required": true, + "name": "inline", + "in": "query", + "description": "If inline is false, content-disposition header is attachment.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ActionForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Action" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string", + "format": "binary" } } } @@ -45134,32 +44212,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/workflows/{workflowId}/automations/{automationId}/actions/{actionId}/updateorder": { - "post": { + "/users/{userId}/files/{fileId}/shareurl": { + "get": { "tags": [ - "Workflow Automations" + "UserFiles" ], - "summary": "Updates the order of an action within an automation of a workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostUpdateWorkflowActionOrder", + "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": "workflowId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "automationId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -45167,8 +44236,9 @@ } }, { - "name": "actionId", + "name": "fileId", "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -45176,26 +44246,13 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateOrderForm" - } - } - }, - "required": true - }, "responses": { - "204": { - "description": "No Content" - }, - "404": { - "description": "Not Found", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "string" } } } @@ -45212,28 +44269,50 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/workflows/{workflowId}/copy": { - "post": { + "/users/{userId}/files/{fileId}/versions": { + "get": { "tags": [ - "Workflows" + "UserFiles" ], - "summary": "Creates a copy of an existing workflow.", - "description": "Creates a new workflow with the same properties as the original.\r\n The new workflow will have a unique name with \" (Copy)\" appended.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostWorkflowCopyByWorkflowId", + "summary": "Returns all file versions of the specified user file.", + "description": "Returns all file versions of the specified user file.\r\n\r\nAny authenticated user.", + "operationId": "GetUserFileVersions", "parameters": [ { - "name": "workflowId", + "name": "userId", + "in": "path", + "description": "The id of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -45242,17 +44321,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Workflow" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/FileVersion" + } } } } @@ -45269,24 +44341,31 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } - } - }, - "/workflows/{workflowId}/customfielddefinitions": { - "get": { + }, + "post": { "tags": [ - "CustomFields" + "UserFiles" ], - "summary": "Returns all custom field definitions linked to a workflow.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetWorkflowCustomFieldDefinitionsByWorkflowId", + "summary": "Uploads a new version of the user file with the specified id.", + "description": "Uploads a new version of an user file.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", + "operationId": "CreateUserFileVersion", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", - "description": "The id of the workflow.", + "description": "The id of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -45294,29 +44373,42 @@ } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" + "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/FileVersion" } } } + }, + "400": { + "description": "Bad Request" } }, "security": [ @@ -45334,19 +44426,19 @@ } } }, - "/workflows/{workflowId}/customfielddefinitions/{customFieldDefinitionId}": { - "put": { + "/users/{userId}/files/{fileId}/versions/{versionId}": { + "get": { "tags": [ - "CustomFields" + "User Files" ], - "summary": "Updates the order of a custom field definition linked to a workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutWorkflowCustomFieldDefinitionByWorkflowIdAndCustomFieldDefinitionId", + "summary": "Returns the user file version with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesVersionsByUserNameAndUserIdAndFileIdAndVersionId", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", - "description": "The workflow Id.", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -45354,9 +44446,19 @@ } }, { - "name": "customFieldDefinitionId", + "name": "fileId", "in": "path", - "description": "The custom field definition Id.", + "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", @@ -45364,24 +44466,23 @@ } } ], - "requestBody": { - "description": "The order update form.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomFieldOrderPutForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomFieldOrderForm" + "$ref": "#/components/schemas/FileVersion" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -45408,93 +44509,43 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/workflows/{workflowId}/delete": { - "post": { + "/users/{userId}/files/{fileId}/versions/{versionId}/download": { + "get": { "tags": [ - "Workflows" + "UserFiles" ], - "summary": "Deletes a workflow.", - "description": "If the workflow is linked to projects or project templates they can either be unlinked\r\n or migrated to another workflow before the workflow is deleted.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostWorkflowDeleteByWorkflowId", + "summary": "Returns the content of the user file version with the specified id.", + "description": "Returns the content of the user file version with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetUserFileVersionContent", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteWorkflowForm" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - }, - "security": [ - { - "oauth2": [ - "full_access" - ] - } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "admin": "true", - "project-manage-config": "write" - } - } - }, - "/workflows/{workflowId}/linkcustomfielddefinition": { - "post": { - "tags": [ - "CustomFields" - ], - "summary": "Links a custom field definition to a workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostWorkflowLinkCustomFieldDefinitionByWorkflowId", - "parameters": [ { - "name": "workflowId", + "name": "versionId", "in": "path", + "description": "The id of the file version.", "required": true, "schema": { "type": "string", @@ -45502,36 +44553,14 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LinkCustomFieldDefinitionForm" - } - } - }, - "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" + "type": "string", + "format": "binary" } } } @@ -45548,23 +44577,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/workflows/{workflowId}/projectstatuses": { + "/users/{userId}/otherprivatetasks": { "get": { "tags": [ - "Workflows" + "PrivateTasks" ], - "summary": "Returns all project statuses of the workflow with the specified id.", - "description": "The user must either have `project-master-data:read` permissions for a linked project, be assigned to a non-deleted task in a linked project, be allowed to see the external workflow, or have admin / `project-manage-config:read` permissions.", - "operationId": "GetWorkflowProjectStatusesByWorkflowId", + "summary": "Returns all private tasks that a user created and assigned to someone else.", + "description": "Private tasks are always created for the current user but can be reassigned to other users afterwards.\r\n This endpoint returns all private tasks that were originally created by the user but were reassigned to someone else.\r\n\r\nAny authenticated user.", + "operationId": "GetUserOtherPrivateTasksByUserId", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", + "description": "The id of the user that created the private tasks.", "required": true, "schema": { "type": "string", @@ -45592,7 +44621,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ProjectStatus" + "$ref": "#/components/schemas/TaskModel" } } } @@ -45632,18 +44661,31 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/users/{userId}/otherprivatetasks/{taskId}": { + "get": { "tags": [ - "Workflows" + "PrivateTasks" ], - "summary": "Creates a new project status for the specified workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostWorkflowProjectStatusesByWorkflowId", + "summary": "Returns a private task that a user created and assigned to someone else.", + "description": "Private tasks are always created for the current user but can be reassigned to other users afterwards.\r\n This endpoint returns a private task that was originally created by the user but was reassigned to someone else.\r\n\r\nAny authenticated user.", + "operationId": "GetUserOtherPrivateTaskByUserIdAndTaskId", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", + "description": "The id of the user the task is assigned to.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskId", + "in": "path", + "description": "The id of the task to return.", "required": true, "schema": { "type": "string", @@ -45651,29 +44693,19 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectStatusForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectStatus" + "$ref": "#/components/schemas/TaskModel" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -45704,23 +44736,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/workflows/{workflowId}/projectstatuses/{projectStatusId}": { + "/users/{userId}/otherprivatetasks/{taskId}/checklistitems": { "get": { "tags": [ - "Workflows" + "ChecklistItems" ], - "summary": "Returns the project status of the workflow with the specified id.", - "description": "The user must either have `project-master-data:read` permissions for a linked project, be assigned to a non-deleted task in a linked project, be allowed to see the external workflow, or have admin / `project-manage-config:read` permissions.", - "operationId": "GetWorkflowProjectStatusByWorkflowIdAndProjectStatusId", + "summary": "Returns the checklist items for a private task with the specified id.", + "description": "The user must be the creator of the task.", + "operationId": "GetUserOtherPrivateTaskChecklistItemsByUserIdAndTaskId", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -45728,8 +44760,9 @@ } }, { - "name": "projectStatusId", + "name": "taskId", "in": "path", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -45743,7 +44776,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectStatus" + "type": "array", + "items": { + "$ref": "#/components/schemas/ChecklistItem" + } } } } @@ -45782,18 +44818,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/users/{userId}/otherprivatetasks/{taskId}/checklistitems/{checklistItemId}": { + "get": { "tags": [ - "Workflows" + "ChecklistItems" ], - "summary": "Updates a project status for the specified workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutWorkflowProjectStatusByWorkflowIdAndProjectStatusId", + "summary": "Returns a checklist item for a private task with the specified id.", + "description": "The user must be the creator of the task.", + "operationId": "GetUserOtherPrivateTaskChecklistItemByUserIdAndTaskIdAndChecklistItemId", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -45801,8 +44840,19 @@ } }, { - "name": "projectStatusId", + "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", @@ -45810,29 +44860,19 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectStatusForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectStatus" + "$ref": "#/components/schemas/ChecklistItem" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -45863,24 +44903,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/workflows/{workflowId}/projectstatuses/{projectStatusId}/delete": { - "post": { + "/users/{userId}/privatetasks": { + "get": { "tags": [ - "Workflows" + "PrivateTasks" ], - "summary": "Deletes a project status from the workflow.", - "description": "A workflow must always have at least one project status to ensure projects\r\n using this workflow have a valid status. If you attempt to delete the last\r\n remaining project status, this endpoint will return a BadRequest error.\r\n \r\n If any projects are currently using this status, you must provide a\r\n NewProjectStatusId in the request body to migrate those projects to a\r\n different status within the same workflow.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostWorkflowProjectStatusDeleteByWorkflowIdAndProjectStatusId", + "summary": "Returns all private tasks of the user with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetUserPrivateTasksByUserId", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", - "description": "The Id of the workflow.", + "description": "The id of the user to fetch private tasks for.", "required": true, "schema": { "type": "string", @@ -45888,33 +44927,34 @@ } }, { - "name": "projectStatusId", - "in": "path", - "description": "The Id of the project status 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" } ], - "requestBody": { - "description": "Optional form containing the new status Id for migration.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteWorkflowProjectStatusForm" + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskModel" + } + } } } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -45945,67 +44985,52 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/workflows/{workflowId}/setarchived": { - "post": { + "/users/{userId}/privatetasks/taskstatuses": { + "get": { "tags": [ - "Workflows" + "PrivateTasks" ], - "summary": "Sets the archived status of a workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostWorkflowSetArchivedByWorkflowId", + "summary": "Returns the task statuses for private tasks for the specified user.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetPrivateTaskStatusesByUserId", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArchivedForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Workflow" - } - } - } - }, - "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/TaskStatus" + } } } } @@ -46022,23 +45047,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/workflows/{workflowId}/taskstatuses": { + "/users/{userId}/privatetasks/{taskId}": { "get": { "tags": [ - "Workflows" + "PrivateTasks" ], - "summary": "Returns all task statuses of the workflow with the specified id.", - "description": "The user must either have `project-master-data:read` permissions for a linked project, be assigned to a non-deleted task in a linked project, be allowed to see the external workflow, or have admin / `project-manage-config:read` permissions.", - "operationId": "GetWorkflowTaskStatusesByWorkflowId", + "summary": "Returns the private task of a user with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetUserPrivateTaskByUserIdAndTaskId", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -46046,16 +45071,14 @@ } }, { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -46064,10 +45087,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaskStatus" - } + "$ref": "#/components/schemas/TaskModel" } } } @@ -46106,18 +45126,31 @@ "x-access": { "any": "true" } - }, - "post": { + } + }, + "/users/{userId}/privatetasks/{taskId}/checklistitems": { + "get": { "tags": [ - "Workflows" + "ChecklistItems" ], - "summary": "Creates a new task status for the specified workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostWorkflowTaskStatusesByWorkflowId", + "summary": "Returns the checklist for a private task with the specified id.", + "description": "The user must be be assigned to the task.", + "operationId": "GetUserPrivateTaskChecklistItemsByUserIdAndTaskId", "parameters": [ { - "name": "workflowId", + "name": "userId", + "in": "path", + "description": "The id of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskId", "in": "path", + "description": "The id of the task.", "required": true, "schema": { "type": "string", @@ -46125,29 +45158,22 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskStatusForm" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatus" + "type": "array", + "items": { + "$ref": "#/components/schemas/ChecklistItem" + } } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -46178,23 +45204,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/workflows/{workflowId}/taskstatuses/{taskStatusId}": { + "/users/{userId}/privatetasks/{taskId}/checklistitems/{checklistItemId}": { "get": { "tags": [ - "Workflows" + "ChecklistItems" ], - "summary": "Returns the task status of the workflow with the specified id.", - "description": "The user must either have `project-master-data:read` permissions for a linked project, be assigned to a non-deleted task in a linked project, be allowed to see the external workflow, or have admin / `project-manage-config:read` permissions.", - "operationId": "GetWorkflowTaskStatusByWorkflowIdAndTaskStatusId", + "summary": "Retrieves a checklist item from a private task.", + "description": "The user must be assigned to the task.", + "operationId": "GetUserPrivateTaskChecklistItemByUserIdAndTaskIdAndChecklistItemId", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -46202,8 +45228,19 @@ } }, { - "name": "taskStatusId", + "name": "taskId", + "in": "path", + "description": "The id of the task.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "checklistItemId", "in": "path", + "description": "The id of the checklist item to retrieve.", "required": true, "schema": { "type": "string", @@ -46217,7 +45254,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatus" + "$ref": "#/components/schemas/ChecklistItem" } } } @@ -46256,27 +45293,21 @@ "x-access": { "any": "true" } - }, - "put": { + } + }, + "/users/{userId}/setarchived": { + "post": { "tags": [ - "Workflows" + "Users" ], - "summary": "Updates a task status for the specified workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PutWorkflowTaskStatusByWorkflowIdAndTaskStatusId", + "summary": "Archives or unarchives the user with the specified id.", + "description": "Archived objects can not be used any longer but still exist for being referenced by other entities.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostUserSetArchivedByUserId", "parameters": [ { - "name": "workflowId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "taskStatusId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -46285,10 +45316,11 @@ } ], "requestBody": { + "description": "The model to archive or unarchive the user.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatusForm" + "$ref": "#/components/schemas/ArchivedForm" } } }, @@ -46300,7 +45332,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TaskStatus" + "$ref": "#/components/schemas/ExtendedUser" } } } @@ -46342,29 +45374,19 @@ } } }, - "/workflows/{workflowId}/taskstatuses/{taskStatusId}/delete": { - "post": { + "/users/{userId}/tags": { + "get": { "tags": [ - "Workflows" + "UserTags" ], - "summary": "Deletes the task status of the workflow with the specified id.", - "description": "A workflow must always have at least one task status of type 'todo' and one\r\n of type 'done'. If you attempt to delete the last status of either type,\r\n this endpoint will return a BadRequest error.\r\n \r\n If any tasks are currently using this status, you must provide a\r\n NewTaskStatusId in the request body to migrate those tasks to a\r\n different status within the same workflow.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostWorkflowTaskStatusDeleteByWorkflowIdAndTaskStatusId", - "parameters": [ - { - "name": "workflowId", - "in": "path", - "description": "The Id of the workflow.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, + "summary": "Returns the tags of the users with the specified id.", + "description": "Returns the tags of the user with the specified id ordered by name.\r\n \r\n To read the tags of a user the user must have 'read' permissions on the specified user.", + "operationId": "GetUserTagsByUserId", + "parameters": [ { - "name": "taskStatusId", + "name": "userId", "in": "path", - "description": "The Id of the task status to delete.", + "description": "The id of the user to get the tags for.", "required": true, "schema": { "type": "string", @@ -46372,23 +45394,22 @@ } } ], - "requestBody": { - "description": "Optional form containing the new status Id for migration.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteWorkflowTaskStatusForm" + "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", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -46419,23 +45440,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/workflows/{workflowId}/unlinkcustomfielddefinition": { - "post": { + "/users/{userId}/tasks/tags": { + "get": { "tags": [ - "CustomFields" + "AssignedTasks" ], - "summary": "Unlinks a custom field definition from a workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostWorkflowUnlinkCustomFieldDefinitionByWorkflowId", + "summary": "Returns all task tags the specified user is allowed to see.", + "description": "The tags can be filtered by the properties of the task model.\r\n\r\nAny authenticated user.", + "operationId": "GetUserTasksTagsByUserId", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", + "description": "The id of the user to get the tags for.", "required": true, "schema": { "type": "string", @@ -46443,36 +45464,16 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UnlinkWorkflowCustomFieldDefinitionForm" - } - } - }, - "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" + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseTagModel" + } } } } @@ -46489,23 +45490,23 @@ "v1" ], "x-access": { - "admin": "true", - "project-manage-config": "write" + "any": "true" } } }, - "/workflows/{workflowId}/updateprojectstatusorder": { - "post": { + "/users/{userId}/timeentries/last": { + "get": { "tags": [ - "Workflows" + "TimeEntries" ], - "summary": "Updates the order of a project status in the workflow.", - "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", - "operationId": "PostWorkflowUpdateProjectStatusOrderByWorkflowId", + "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": "GetLastTimeEntriesByUserId", "parameters": [ { - "name": "workflowId", + "name": "userId", "in": "path", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -46513,39 +45514,19 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateProjectStatusOrderForm" - } - } - }, - "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" } } } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -46560,30 +45541,28 @@ ], "x-access": { "admin": "true", - "project-manage-config": "write" + "owner": "true" } } }, - "/workspaceabsences": { - "get": { + "/users/{userId}/timetracking/pause": { + "post": { "tags": [ - "WorkspaceAbsences" + "TimeTracking" ], - "summary": "Gets all workspace absences.", - "description": "Gets all workspace absences. The result can be filtered, sorted, and paged.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", - "operationId": "GetWorkspaceAbsences", + "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": "PostPauseTimeTrackingByUserId", "parameters": [ { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" + "name": "userId", + "in": "path", + "description": "The id of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -46592,13 +45571,13 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WorkspaceAbsenceModel" - } + "$ref": "#/components/schemas/TimeTracking" } } } + }, + "204": { + "description": "No Content" } }, "security": [ @@ -46612,48 +45591,43 @@ "v1" ], "x-access": { - "admin": "true", - "user-planning-data": "write" + "owner": "true" } - }, + } + }, + "/users/{userId}/timetracking/resume": { "post": { "tags": [ - "WorkspaceAbsences" + "TimeTracking" ], - "summary": "Creates a new workspace absence.", - "description": "Creates a new workspace absence.\r\n A workspace absence is a kind of absence that is applied to all users in a workspace.\r\n It can be used to define special holidays (e.g: company offsite) that apply to all users in a workspace.\r\n It can be limited to a specific absence region, in which case only users in that region will be affected.\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", - "operationId": "PostWorkspaceAbsence", - "requestBody": { - "description": "Workspace absence details including start date, end date, description, and optional region.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WorkspaceAbsenceForm" - } + "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": "PostResumeTimeTrackingByUserId", + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "The id of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - }, - "required": true - }, + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WorkspaceAbsenceModel" + "$ref": "#/components/schemas/TimeTracking" } } } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "204": { + "description": "No Content" } }, "security": [ @@ -46667,27 +45641,23 @@ "v1" ], "x-access": { - "admin": "true", - "user-planning-data": "write" - }, - "x-subscriptionlevel": { - "minimumPlan": "standard" + "owner": "true" } } }, - "/workspaceabsences/{workspaceAbsenceId}": { - "delete": { + "/users/{userId}/timetracking/start": { + "post": { "tags": [ - "WorkspaceAbsences" + "TimeTracking" ], - "summary": "Deletes a workspace absence.", - "description": "Deletes a workspace absence.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", - "operationId": "DeleteWorkspaceAbsenceById", + "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": "PostStartTimeTrackingByUserId", "parameters": [ { - "name": "workspaceAbsenceId", + "name": "userId", "in": "path", - "description": "The workspace absence to delete.", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -46695,16 +45665,24 @@ } } ], - "responses": { - "204": { - "description": "No Content" + "requestBody": { + "description": "The model describing the time tracking to start.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StartTimeTrackingForm" + } + } }, - "404": { - "description": "Not Found", + "required": true + }, + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/TimeTracking" } } } @@ -46722,21 +45700,23 @@ ], "x-access": { "admin": "true", - "user-planning-data": "write" + "owner": "true" } - }, - "put": { + } + }, + "/users/{userId}/timetracking/stop": { + "post": { "tags": [ - "WorkspaceAbsences" + "TimeTracking" ], - "summary": "Updates a workspace absence.", - "description": "Updates a workspace absence.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", - "operationId": "PutWorkspaceAbsenceById", + "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": "PostStopTimeTrackingByUserId", "parameters": [ { - "name": "workspaceAbsenceId", + "name": "userId", "in": "path", - "description": "The workspace absence to update.", + "description": "The id of the user.", "required": true, "schema": { "type": "string", @@ -46745,15 +45725,13 @@ } ], "requestBody": { - "description": "Updated workspace absence details including start date, end date, description, and optional region.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WorkspaceAbsenceForm" + "$ref": "#/components/schemas/StopTimeTrackingForm" } } - }, - "required": true + } }, "responses": { "200": { @@ -46761,30 +45739,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WorkspaceAbsenceModel" - } - } - } - }, - "400": { - "description": "Bad Request", - "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": [ @@ -46799,18 +45760,32 @@ ], "x-access": { "admin": "true", - "user-planning-data": "write" + "owner": "true" } } }, - "/workspaces/types": { + "/webhooks": { "get": { "tags": [ - "Workspaces" + "Webhooks" + ], + "summary": "Returns all configured webhooks.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "operationId": "GetWebhooks", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } ], - "summary": "Returns all available workspace types.", - "description": "\r\n\r\nAllows unauthenticated access.", - "operationId": "GetWorkspacesTypes", "responses": { "200": { "description": "OK", @@ -46819,7 +45794,7 @@ "schema": { "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/WebhookConfig" } } } @@ -46837,43 +45812,40 @@ "v1" ], "x-access": { - "anonymous": "true" + "admin": "true", + "workspace-manage-config": "read" } - } - }, - "/workspaces/{workspaceId}": { - "get": { + }, + "post": { "tags": [ - "Workspaces" + "Webhooks" ], - "summary": "Returns the workspace with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetWorkspacesByWorkspaceId", - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "description": "The id of the workspace.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Creates a new webhook.", + "description": "The receiver type is inferred from the URI. All unknown receivers are treated as 'custom'.\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PostWebhook", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WebhookConfigForm" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Workspace" + "$ref": "#/components/schemas/WebhookConfig" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -46894,58 +45866,67 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/workspaces/{workspaceId}/externalfiles": { - "post": { + "/webhooks/eventtypes": { + "get": { "tags": [ - "WorkspaceFiles" - ], - "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": "workspaceId", - "in": "path", - "description": "The id of the workspace.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "Webhooks" ], - "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 available event types.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetWebhookEventTypes", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } } } } } }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/webhooks/eventtypes/slack": { + "get": { + "tags": [ + "Webhooks" + ], + "summary": "Returns all available event types for Slack webhooks.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetSlackEventTypes", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "type": "string" + } } } } @@ -46966,19 +45947,18 @@ } } }, - "/workspaces/{workspaceId}/files": { + "/webhooks/{webhookId}": { "delete": { "tags": [ - "WorkspaceFiles" + "Webhooks" ], - "summary": "Deletes the files of the specified workspace.", - "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", - "operationId": "DeleteWorkspaceFiles", + "summary": "Deletes the webhook with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "DeleteWebhook", "parameters": [ { - "name": "workspaceId", + "name": "webhookId", "in": "path", - "description": "The id of the workspace.", "required": true, "schema": { "type": "string", @@ -46989,6 +45969,16 @@ "responses": { "204": { "description": "No Content" + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -47002,38 +45992,26 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } }, "get": { "tags": [ - "WorkspaceFiles" + "Webhooks" ], - "summary": "Returns all files of the workspace with the specified id.", - "description": "Returns all file metadata of the workspace with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "GetWorkspaceFiles", + "summary": "Returns the webhook with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "operationId": "GetWebhook", "parameters": [ { - "name": "workspaceId", + "name": "webhookId", "in": "path", - "description": "The id of the workspace.", "required": true, "schema": { "type": "string", "format": "uuid" } - }, - { - "$ref": "#/components/parameters/page" - }, - { - "$ref": "#/components/parameters/pageSize" - }, - { - "$ref": "#/components/parameters/orderby" - }, - { - "$ref": "#/components/parameters/filterby" } ], "responses": { @@ -47042,10 +46020,17 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileInfo" - } + "$ref": "#/components/schemas/WebhookConfig" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -47062,21 +46047,21 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "read" } }, - "post": { + "put": { "tags": [ - "WorkspaceFiles" + "Webhooks" ], - "summary": "Creates a new workspace file for the workspace with the specified id..", - "description": "Uploads a new workspace file for the workspace with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", - "operationId": "CreateWorkspaceFile", + "summary": "Updates the webhook with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:write` permissions.", + "operationId": "PutWebhook", "parameters": [ { - "name": "workspaceId", + "name": "webhookId", "in": "path", - "description": "The id of the workspace.", "required": true, "schema": { "type": "string", @@ -47086,26 +46071,13 @@ ], "requestBody": { "content": { - "multipart/form-data": { + "application/json": { "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } + "$ref": "#/components/schemas/WebhookConfigForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -47113,13 +46085,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/WebhookConfig" } } } }, "400": { - "description": "Bad Request" + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } }, "security": [ @@ -47133,52 +46122,62 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "write" } } }, - "/workspaces/{workspaceId}/files/byurl": { - "post": { + "/webhooks/{webhookId}/logs": { + "get": { "tags": [ - "WorkspaceFiles" + "Webhooks" ], - "summary": "Uploads a new file by providing an url.", - "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", - "operationId": "CreateWorkspaceFileByUrl", + "summary": "Returns all logs of the webhook with the specified id.", + "description": "\r\n\r\nThe user must be an admin or have `workspace-manage-config:read` permissions.", + "operationId": "GetWebhookLogs", "parameters": [ { - "name": "workspaceId", + "name": "webhookId", "in": "path", - "description": "The id of the workspace the file is linked to.", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" } ], - "requestBody": { - "description": "The url, name and description of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FilePostForm" - } - } - } - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/WebhookLog" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -47195,43 +46194,54 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "workspace-manage-config": "read" } } }, - "/workspaces/{workspaceId}/files/{fileId}": { - "delete": { + "/workflows": { + "get": { "tags": [ - "WorkspaceFiles" + "Workflows" ], - "summary": "Deletes the workspace file with the specified id.", - "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", - "operationId": "DeleteWorkspaceFile", + "summary": "Retrieves all workflows.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetWorkflows", "parameters": [ { - "name": "workspaceId", - "in": "path", - "description": "The id of the workspace.", - "required": true, + "name": "showArchived", + "in": "query", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } }, { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "$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/Workflow" + } + } + } + } } }, "security": [ @@ -47248,58 +46258,36 @@ "any": "true" } }, - "get": { + "post": { "tags": [ - "Workspace Files" + "Workflows" ], - "summary": "Returns the file with the specified id of the workspace with the specified id.", - "description": "\r\n\r\nAny authenticated user.", - "operationId": "GetFilesByWorkspaceNameAndWorkspaceIdAndFileId", - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "description": "The id of the workspace.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Creates a new workflow.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostWorkflow", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkflowForm" + } } }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/Workflow" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -47320,52 +46308,28 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } - }, - "put": { + } + }, + "/workflows/automations/copy": { + "post": { "tags": [ - "WorkspaceFiles" - ], - "summary": "Updates the metadata of the workspace file with the specified id.", - "description": "Updates the metadata of the workspace file with the specified id.\r\n\r\nAny authenticated user.", - "operationId": "UpdateWorkspaceFile", - "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" - } - } + "Workflow Automations" ], + "summary": "Copies automations from one workflow to another.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostCopyWorkflowAutomations", "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" + "$ref": "#/components/schemas/CopyWorkflowAutomationsForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -47373,7 +46337,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/Automation" + } } } } @@ -47390,33 +46357,23 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/workspaces/{workspaceId}/files/{fileId}/changeentity": { - "post": { + "/workflows/{workflowId}": { + "get": { "tags": [ - "WorkspaceFiles" + "Workflows" ], - "summary": "Changes the workspace this file belongs to.", - "description": "Changes the workspace this file belongs to.\nSwitch to the specified workspace or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", - "operationId": "ChangeWorkspace", + "summary": "Retrieves a specified workflow.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetWorkflowById", "parameters": [ { - "name": "workspaceId", - "in": "path", - "description": "The id of the workspace.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "workflowId", "in": "path", - "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -47424,28 +46381,23 @@ } } ], - "requestBody": { - "description": "The model to change the entity information of the file.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileEntityForm" - } - } - } - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/Workflow" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -47464,31 +46416,18 @@ "x-access": { "any": "true" } - } - }, - "/workspaces/{workspaceId}/files/{fileId}/copy": { - "post": { + }, + "put": { "tags": [ - "WorkspaceFiles" + "Workflows" ], - "summary": "Copies the file to a new workspace.", - "description": "Copies the file to a new workspace (meta and content).\r\n\r\nAny authenticated user.", - "operationId": "CopyToWorkspace", + "summary": "Updates a workflow.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutWorkflowById", "parameters": [ { - "name": "workspaceId", - "in": "path", - "description": "The id of the workspace.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "workflowId", "in": "path", - "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -47497,19 +46436,14 @@ } ], "requestBody": { - "description": "The model to change the entity information of the file.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileCopyForm" - } - }, - "application/*+json": { - "schema": { - "$ref": "#/components/schemas/FileCopyForm" + "$ref": "#/components/schemas/WorkflowForm" } } - } + }, + "required": true }, "responses": { "200": { @@ -47517,7 +46451,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FileInfo" + "$ref": "#/components/schemas/Workflow" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -47534,64 +46488,28 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "write" } } }, - "/workspaces/{workspaceId}/files/{fileId}/download": { + "/workflows/{workflowId}/automations": { "get": { "tags": [ - "WorkspaceFiles" + "Workflow Automations" ], - "summary": "Returns the content of the workspace file with the specified id.", - "description": "Returns the content of the workspace file. Uses the latest file version.\nIf the workspace file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", - "operationId": "GetWorkspaceFileContent", + "summary": "Retrieves automations of the specified workflow.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", + "operationId": "GetWorkflowAutomations", "parameters": [ { - "name": "workspaceId", - "in": "path", - "description": "The id of the workspace.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fileId", + "name": "workflowId", "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": { @@ -47600,8 +46518,10 @@ "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "type": "array", + "items": { + "$ref": "#/components/schemas/Automation" + } } } } @@ -47618,33 +46538,91 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "read" } - } - }, - "/workspaces/{workspaceId}/files/{fileId}/pdf": { - "get": { + }, + "post": { "tags": [ - "WorkspaceFiles" + "Workflow Automations" ], - "summary": "Returns the content of the file with the specified id as pdf.\ntype or conversion not possible.", - "description": "Returns the content of the workspace file. Uses the latest file version.\r\n\r\nAny authenticated user.", - "operationId": "GetWorkspaceFileContent", + "summary": "Creates a new automation for a workflow.", + "description": "\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostWorkflowAutomation", "parameters": [ { - "name": "workspaceId", + "name": "workflowId", "in": "path", - "description": "The id of the workspace.", "required": true, "schema": { "type": "string", "format": "uuid" } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutomationTriggerForm" + } + } }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Automation" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ { - "name": "fileId", + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + }, + "x-subscriptionlevel": { + "minimumPlan": "standard" + } + } + }, + "/workflows/{workflowId}/automations/{automationId}": { + "delete": { + "tags": [ + "Workflow Automations" + ], + "summary": "Deletes a workflow automation by id.", + "description": "Requires specifying whether to delete or unlink synced automations on linked projects/templates.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "DeleteWorkflowAutomation", + "parameters": [ + { + "name": "workflowId", "in": "path", - "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -47652,12 +46630,76 @@ } }, { - "name": "inline", + "name": "automationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "deleteSyncedAutomations", "in": "query", - "description": "If inline is false, content-disposition header is attachment.", "schema": { - "type": "boolean", - "default": false + "type": "boolean" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + }, + "get": { + "tags": [ + "Workflow Automations" + ], + "summary": "Retrieves a specific automation of the specified workflow.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", + "operationId": "GetWorkflowAutomation", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } ], @@ -47667,8 +46709,17 @@ "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/Automation" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -47685,23 +46736,107 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "read" + } + }, + "put": { + "tags": [ + "Workflow Automations" + ], + "summary": "Updates an automation of the specified workflow.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutWorkflowAutomation", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutomationPutForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Automation" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" } } }, - "/workspaces/{workspaceId}/files/{fileId}/shareurl": { + "/workflows/{workflowId}/automations/{automationId}/actions": { "get": { "tags": [ - "WorkspaceFiles" + "Workflow Automations" ], - "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": "Gets all actions of an automation of a workflow.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", + "operationId": "GetWorkflowActions", "parameters": [ { - "name": "workspaceId", + "name": "workflowId", "in": "path", - "description": "The id of the workspace.", "required": true, "schema": { "type": "string", @@ -47709,9 +46844,8 @@ } }, { - "name": "fileId", + "name": "automationId", "in": "path", - "description": "The id of the file.", "required": true, "schema": { "type": "string", @@ -47725,7 +46859,20 @@ "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/Action" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -47742,321 +46889,10785 @@ "v1" ], "x-access": { - "any": "true" + "admin": "true", + "project-manage-config": "read" + } + }, + "post": { + "tags": [ + "Workflow Automations" + ], + "summary": "Creates a new action for an automation of a workflow.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostWorkflowAction", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActionForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Action" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" } } }, - "/workspaces/{workspaceId}/files/{fileId}/versions": { + "/workflows/{workflowId}/automations/{automationId}/actions/{actionId}": { + "delete": { + "tags": [ + "Workflow Automations" + ], + "summary": "Deletes an action from an automation of a workflow.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "DeleteWorkflowAction", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + }, "get": { "tags": [ - "WorkspaceFiles" + "Workflow Automations" ], - "summary": "Returns all file versions of the specified workspace file.", - "description": "Returns all file versions of the specified workspace file.\r\n\r\nAny authenticated user.", - "operationId": "GetWorkspaceFileVersions", + "summary": "Gets a specific action of an automation of a workflow.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:read` permissions.", + "operationId": "GetWorkflowAction", "parameters": [ { - "name": "workspaceId", + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Action" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "read" + } + }, + "put": { + "tags": [ + "Workflow Automations" + ], + "summary": "Updates an action of an automation of a workflow.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutWorkflowAction", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", "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": "actionId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActionForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Action" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/workflows/{workflowId}/automations/{automationId}/actions/{actionId}/updateorder": { + "post": { + "tags": [ + "Workflow Automations" + ], + "summary": "Updates the order of an action within an automation of a workflow.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostUpdateWorkflowActionOrder", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "automationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "actionId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrderForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/workflows/{workflowId}/copy": { + "post": { + "tags": [ + "Workflows" + ], + "summary": "Creates a copy of an existing workflow.", + "description": "Creates a new workflow with the same properties as the original.\r\n The new workflow will have a unique name with \" (Copy)\" appended.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostWorkflowCopyByWorkflowId", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Workflow" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/workflows/{workflowId}/customfielddefinitions": { + "get": { + "tags": [ + "CustomFields" + ], + "summary": "Returns all custom field definitions linked to a workflow.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetWorkflowCustomFieldDefinitionsByWorkflowId", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "description": "The id of the workflow.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFieldDefinitionWithSelectionOptions" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/workflows/{workflowId}/customfielddefinitions/{customFieldDefinitionId}": { + "put": { + "tags": [ + "CustomFields" + ], + "summary": "Updates the order of a custom field definition linked to a workflow.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutWorkflowCustomFieldDefinitionByWorkflowIdAndCustomFieldDefinitionId", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "description": "The workflow Id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "customFieldDefinitionId", + "in": "path", + "description": "The custom field definition Id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The order update form.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFieldOrderPutForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFieldOrderForm" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/workflows/{workflowId}/delete": { + "post": { + "tags": [ + "Workflows" + ], + "summary": "Deletes a workflow.", + "description": "If the workflow is linked to projects or project templates they can either be unlinked\r\n or migrated to another workflow before the workflow is deleted.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostWorkflowDeleteByWorkflowId", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteWorkflowForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/workflows/{workflowId}/linkcustomfielddefinition": { + "post": { + "tags": [ + "CustomFields" + ], + "summary": "Links a custom field definition to a workflow.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostWorkflowLinkCustomFieldDefinitionByWorkflowId", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LinkCustomFieldDefinitionForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/workflows/{workflowId}/projectstatuses": { + "get": { + "tags": [ + "Workflows" + ], + "summary": "Returns all project statuses of the workflow with the specified id.", + "description": "The user must either have `project-master-data:read` permissions for a linked project, be assigned to a non-deleted task in a linked project, be allowed to see the external workflow, or have admin / `project-manage-config:read` permissions.", + "operationId": "GetWorkflowProjectStatusesByWorkflowId", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectStatus" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "Workflows" + ], + "summary": "Creates a new project status for the specified workflow.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostWorkflowProjectStatusesByWorkflowId", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "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" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/workflows/{workflowId}/projectstatuses/{projectStatusId}": { + "get": { + "tags": [ + "Workflows" + ], + "summary": "Returns the project status of the workflow with the specified id.", + "description": "The user must either have `project-master-data:read` permissions for a linked project, be assigned to a non-deleted task in a linked project, be allowed to see the external workflow, or have admin / `project-manage-config:read` permissions.", + "operationId": "GetWorkflowProjectStatusByWorkflowIdAndProjectStatusId", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "projectStatusId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectStatus" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "Workflows" + ], + "summary": "Updates a project status for the specified workflow.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutWorkflowProjectStatusByWorkflowIdAndProjectStatusId", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "projectStatusId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "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" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/workflows/{workflowId}/projectstatuses/{projectStatusId}/delete": { + "post": { + "tags": [ + "Workflows" + ], + "summary": "Deletes a project status from the workflow.", + "description": "A workflow must always have at least one project status to ensure projects\r\n using this workflow have a valid status. If you attempt to delete the last\r\n remaining project status, this endpoint will return a BadRequest error.\r\n \r\n If any projects are currently using this status, you must provide a\r\n NewProjectStatusId in the request body to migrate those projects to a\r\n different status within the same workflow.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostWorkflowProjectStatusDeleteByWorkflowIdAndProjectStatusId", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "description": "The Id of the workflow.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "projectStatusId", + "in": "path", + "description": "The Id of the project status to delete.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Optional form containing the new status Id for migration.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteWorkflowProjectStatusForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/workflows/{workflowId}/setarchived": { + "post": { + "tags": [ + "Workflows" + ], + "summary": "Sets the archived status of a workflow.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostWorkflowSetArchivedByWorkflowId", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ArchivedForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Workflow" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/workflows/{workflowId}/taskstatuses": { + "get": { + "tags": [ + "Workflows" + ], + "summary": "Returns all task statuses of the workflow with the specified id.", + "description": "The user must either have `project-master-data:read` permissions for a linked project, be assigned to a non-deleted task in a linked project, be allowed to see the external workflow, or have admin / `project-manage-config:read` permissions.", + "operationId": "GetWorkflowTaskStatusesByWorkflowId", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskStatus" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "Workflows" + ], + "summary": "Creates a new task status for the specified workflow.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostWorkflowTaskStatusesByWorkflowId", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "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" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/workflows/{workflowId}/taskstatuses/{taskStatusId}": { + "get": { + "tags": [ + "Workflows" + ], + "summary": "Returns the task status of the workflow with the specified id.", + "description": "The user must either have `project-master-data:read` permissions for a linked project, be assigned to a non-deleted task in a linked project, be allowed to see the external workflow, or have admin / `project-manage-config:read` permissions.", + "operationId": "GetWorkflowTaskStatusByWorkflowIdAndTaskStatusId", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskStatusId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskStatus" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "Workflows" + ], + "summary": "Updates a task status for the specified workflow.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PutWorkflowTaskStatusByWorkflowIdAndTaskStatusId", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskStatusId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "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" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/workflows/{workflowId}/taskstatuses/{taskStatusId}/delete": { + "post": { + "tags": [ + "Workflows" + ], + "summary": "Deletes the task status of the workflow with the specified id.", + "description": "A workflow must always have at least one task status of type 'todo' and one\r\n of type 'done'. If you attempt to delete the last status of either type,\r\n this endpoint will return a BadRequest error.\r\n \r\n If any tasks are currently using this status, you must provide a\r\n NewTaskStatusId in the request body to migrate those tasks to a\r\n different status within the same workflow.\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostWorkflowTaskStatusDeleteByWorkflowIdAndTaskStatusId", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "description": "The Id of the workflow.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "taskStatusId", + "in": "path", + "description": "The Id of the task status to delete.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Optional form containing the new status Id for migration.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteWorkflowTaskStatusForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/workflows/{workflowId}/unlinkcustomfielddefinition": { + "post": { + "tags": [ + "CustomFields" + ], + "summary": "Unlinks a custom field definition from a workflow.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostWorkflowUnlinkCustomFieldDefinitionByWorkflowId", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UnlinkWorkflowCustomFieldDefinitionForm" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/workflows/{workflowId}/updateprojectstatusorder": { + "post": { + "tags": [ + "Workflows" + ], + "summary": "Updates the order of a project status in the workflow.", + "description": "\r\n\r\nThe user must be an admin or have `project-manage-config:write` permissions.", + "operationId": "PostWorkflowUpdateProjectStatusOrderByWorkflowId", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "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": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "project-manage-config": "write" + } + } + }, + "/workspaceabsences": { + "get": { + "tags": [ + "WorkspaceAbsences" + ], + "summary": "Gets all workspace absences.", + "description": "Gets all workspace absences. The result can be filtered, sorted, and paged.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", + "operationId": "GetWorkspaceAbsences", + "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/WorkspaceAbsenceModel" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "user-planning-data": "write" + } + }, + "post": { + "tags": [ + "WorkspaceAbsences" + ], + "summary": "Creates a new workspace absence.", + "description": "Creates a new workspace absence.\r\n A workspace absence is a kind of absence that is applied to all users in a workspace.\r\n It can be used to define special holidays (e.g: company offsite) that apply to all users in a workspace.\r\n It can be limited to a specific absence region, in which case only users in that region will be affected.\r\n\r\nThis endpoint requires the `Standard` plan or higher.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", + "operationId": "PostWorkspaceAbsence", + "requestBody": { + "description": "Workspace absence details including start date, end date, description, and optional region.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceAbsenceForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceAbsenceModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "user-planning-data": "write" + }, + "x-subscriptionlevel": { + "minimumPlan": "standard" + } + } + }, + "/workspaceabsences/{workspaceAbsenceId}": { + "delete": { + "tags": [ + "WorkspaceAbsences" + ], + "summary": "Deletes a workspace absence.", + "description": "Deletes a workspace absence.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", + "operationId": "DeleteWorkspaceAbsenceById", + "parameters": [ + { + "name": "workspaceAbsenceId", + "in": "path", + "description": "The workspace absence to delete.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "user-planning-data": "write" + } + }, + "put": { + "tags": [ + "WorkspaceAbsences" + ], + "summary": "Updates a workspace absence.", + "description": "Updates a workspace absence.\r\n\r\nThe user must be an admin or have `user-planning-data:write` permissions.", + "operationId": "PutWorkspaceAbsenceById", + "parameters": [ + { + "name": "workspaceAbsenceId", + "in": "path", + "description": "The workspace absence to update.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Updated workspace absence details including start date, end date, description, and optional region.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceAbsenceForm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceAbsenceModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "admin": "true", + "user-planning-data": "write" + } + } + }, + "/workspaces/types": { + "get": { + "tags": [ + "Workspaces" + ], + "summary": "Returns all available workspace types.", + "description": "\r\n\r\nAllows unauthenticated access.", + "operationId": "GetWorkspacesTypes", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "anonymous": "true" + } + } + }, + "/workspaces/{workspaceId}": { + "get": { + "tags": [ + "Workspaces" + ], + "summary": "Returns the workspace with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetWorkspacesByWorkspaceId", + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "description": "The id of the workspace.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Workspace" + } + } + } + }, + "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}/externalfiles": { + "post": { + "tags": [ + "WorkspaceFiles" + ], + "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": "workspaceId", + "in": "path", + "description": "The id of the workspace.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "List of file forms.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" + } + } + }, + "application/*+json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalFileForm" + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/workspaces/{workspaceId}/files": { + "delete": { + "tags": [ + "WorkspaceFiles" + ], + "summary": "Deletes the files of the specified workspace.", + "description": "Deletes the metadata and the different versions of the files.\r\n\r\nAny authenticated user.", + "operationId": "DeleteWorkspaceFiles", + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "description": "The id of the workspace.", + "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": [ + "WorkspaceFiles" + ], + "summary": "Returns all files of the workspace with the specified id.", + "description": "Returns all file metadata of the workspace with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "GetWorkspaceFiles", + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "description": "The id of the workspace.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/pageSize" + }, + { + "$ref": "#/components/parameters/orderby" + }, + { + "$ref": "#/components/parameters/filterby" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "post": { + "tags": [ + "WorkspaceFiles" + ], + "summary": "Creates a new workspace file for the workspace with the specified id..", + "description": "Uploads a new workspace file for the workspace with the specified id.\nUse this to upload a file as a form value along with the basic file meta data.\nThe file size must not exceed 1GB.\r\n\r\nAny authenticated user.", + "operationId": "CreateWorkspaceFile", + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "description": "The id of the workspace.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "required": [ + "File" + ], + "type": "object", + "properties": { + "File": { + "type": "string", + "format": "binary" + } + } + }, + "encoding": { + "File": { + "style": "form" + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "400": { + "description": "Bad Request" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/workspaces/{workspaceId}/files/byurl": { + "post": { + "tags": [ + "WorkspaceFiles" + ], + "summary": "Uploads a new file by providing an url.", + "description": "The file needs to be a public available url.\nThe file size must not exceed 100MB.\r\n\r\nAny authenticated user.", + "operationId": "CreateWorkspaceFileByUrl", + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "description": "The id of the workspace the file is linked to.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "The url, name and description of the file.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FilePostForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FilePostForm" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/workspaces/{workspaceId}/files/{fileId}": { + "delete": { + "tags": [ + "WorkspaceFiles" + ], + "summary": "Deletes the workspace file with the specified id.", + "description": "Deletes the metadata and the different versions of the file.\r\n\r\nAny authenticated user.", + "operationId": "DeleteWorkspaceFile", + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "description": "The id of the workspace.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "No Content" + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "get": { + "tags": [ + "Workspace Files" + ], + "summary": "Returns the file with the specified id of the workspace with the specified id.", + "description": "\r\n\r\nAny authenticated user.", + "operationId": "GetFilesByWorkspaceNameAndWorkspaceIdAndFileId", + "parameters": [ + { + "name": "workspaceId", + "in": "path", + "description": "The id of the workspace.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + }, + "put": { + "tags": [ + "WorkspaceFiles" + ], + "summary": "Updates the metadata of the workspace file with the specified id.", + "description": "Updates the metadata of the workspace file with the specified id.\r\n\r\nAny authenticated user.", + "operationId": "UpdateWorkspaceFile", + "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": { + "description": "The model to update the file with the specified id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfoUpdateForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileInfoUpdateForm" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/workspaces/{workspaceId}/files/{fileId}/changeentity": { + "post": { + "tags": [ + "WorkspaceFiles" + ], + "summary": "Changes the workspace this file belongs to.", + "description": "Changes the workspace this file belongs to.\nSwitch to the specified workspace or to a global file\nif the 'EntityId' of the model is set to null.\r\n\r\nAny authenticated user.", + "operationId": "ChangeWorkspace", + "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": { + "description": "The model to change the entity information of the file.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileEntityForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileEntityForm" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/workspaces/{workspaceId}/files/{fileId}/copy": { + "post": { + "tags": [ + "WorkspaceFiles" + ], + "summary": "Copies the file to a new workspace.", + "description": "Copies the file to a new workspace (meta and content).\r\n\r\nAny authenticated user.", + "operationId": "CopyToWorkspace", + "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": { + "description": "The model to change the entity information of the file.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileCopyForm" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FileCopyForm" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfo" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/workspaces/{workspaceId}/files/{fileId}/download": { + "get": { + "tags": [ + "WorkspaceFiles" + ], + "summary": "Returns the content of the workspace file with the specified id.", + "description": "Returns the content of the workspace file. Uses the latest file version.\nIf the workspace file is an image and the width and height are set,\nthe image will be resized before it is returned.\r\n\r\nAny authenticated user.", + "operationId": "GetWorkspaceFileContent", + "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": "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" + } + } + }, + "/workspaces/{workspaceId}/files/{fileId}/pdf": { + "get": { + "tags": [ + "WorkspaceFiles" + ], + "summary": "Returns the content of the file with the specified id as pdf.\ntype or conversion not possible.", + "description": "Returns the content of the workspace file. Uses the latest file version.\r\n\r\nAny authenticated user.", + "operationId": "GetWorkspaceFileContent", + "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": "inline", + "in": "query", + "description": "If inline is false, content-disposition header is attachment.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/workspaces/{workspaceId}/files/{fileId}/shareurl": { + "get": { + "tags": [ + "WorkspaceFiles" + ], + "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": "workspaceId", + "in": "path", + "description": "The id of the workspace.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fileId", + "in": "path", + "description": "The id of the file.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + }, + "security": [ + { + "oauth2": [ + "full_access" + ] + } + ], + "x-api-versions": [ + "v1" + ], + "x-access": { + "any": "true" + } + } + }, + "/workspaces/{workspaceId}/files/{fileId}/versions": { + "get": { + "tags": [ + "WorkspaceFiles" + ], + "summary": "Returns all file versions of the specified workspace file.", + "description": "Returns all file versions of the specified workspace file.\r\n\r\nAny authenticated user.", + "operationId": "GetWorkspaceFileVersions", + "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" + } + }, + { + "$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": { + "enum": [ + "read", + "manage" + ], + "type": "string", + "description": "The access level to grant." + } + }, + "additionalProperties": false, + "description": "Changes a contributor's access level for an agent." + }, + "AgentConnectorConfigurationRequestModel": { + "required": [ + "connectionMode" + ], + "type": "object", + "properties": { + "connectionMode": { + "maxLength": 25, + "minLength": 1, + "enum": [ + "actingUser", + "specificConnection" + ], + "type": "string", + "description": "How the agent selects a connection for the connector." + }, + "connectionId": { + "type": "string", + "description": "The connection id to use.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + } + }, + "additionalProperties": false, + "description": "Configures an agent's connector connection." + }, + "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 a connector." + }, + "AgentContributorRequestModel": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The user who receives access.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "accessLevel": { + "enum": [ + "read", + "manage" + ], + "type": "string", + "description": "The access level to grant." + } + }, + "additionalProperties": false, + "description": "Shares an agent with a user." + }, + "AgentContributorResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The access grant id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "userId": { + "type": "string", + "description": "The user who receives access.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "accessLevel": { + "enum": [ + "read", + "manage" + ], + "type": "string", + "description": "The access level granted to the user." + } + }, + "additionalProperties": false, + "description": "Represents a user the agent is shared with." + }, + "AgentDefaultsResponseModel": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The matching agent thread type.", + "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": "Provides agent thread defaults." + }, + "AgentDelegationResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The delegation id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "agentId": { + "type": "string", + "description": "The parent agent that owns the delegation.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "delegatedAgentId": { + "type": "string", + "description": "The agent that receives the delegated work.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "name": { + "type": "string", + "description": "The delegation name shown in workflow settings.", + "nullable": true + }, + "description": { + "type": "string", + "description": "A short explanation of the delegated work.", + "nullable": true + }, + "executionMode": { + "enum": [ + "orchestracted" + ], + "type": "string", + "description": "How the parent agent invokes the delegated agent." + }, + "promptOverride": { + "type": "string", + "description": "Additional instructions supplied to the delegated agent.", + "nullable": true + }, + "sortOrder": { + "type": "integer", + "description": "The delegation's display order.", + "format": "int32" + } + }, + "additionalProperties": false, + "description": "Describes a delegation from one agent to another." + }, + "AgentMemoryResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The memory id assigned by Mem0.", + "nullable": true + }, + "memory": { + "type": "string", + "description": "The memory text inferred and stored by Mem0.", + "nullable": true + }, + "scope": { + "type": "string", + "description": "The memory scope.", + "nullable": true + }, + "projectId": { + "type": "string", + "description": "The project id when the memory is project-scoped.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "clientId": { + "type": "string", + "description": "The client id when the memory is client-scoped.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "score": { + "type": "number", + "description": "The relevance score returned by Mem0 search.", + "format": "double", + "nullable": true + }, + "createdAt": { + "type": "string", + "description": "The creation timestamp returned by Mem0.", + "format": "date-time", + "nullable": true + }, + "updatedAt": { + "type": "string", + "description": "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 a connection for a Custom agent connector." + }, + "AgentParticipationResponseModel": { + "type": "object", + "properties": { + "participationId": { + "type": "string", + "description": "The participation identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "agentId": { + "type": "string", + "description": "The participating agent.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "agentName": { + "type": "string", + "description": "The agent name captured for the audit record.", + "nullable": true + }, + "threadId": { + "type": "string", + "description": "The latest thread available for the agent in this context.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "responsibleUserId": { + "type": "string", + "description": "The responsible user of the latest run.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "firstThreadRunId": { + "type": "string", + "description": "The first run in the participation.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "lastThreadRunId": { + "type": "string", + "description": "The latest run in the participation.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "createdOn": { + "type": "string", + "description": "When participation was first recorded.", + "format": "date-time" + }, + "updatedOn": { + "type": "string", + "description": "When participation was last updated.", + "format": "date-time" + }, + "threadAvailable": { + "type": "boolean", + "description": "Whether the thread is still available." + }, + "canReadThread": { + "type": "boolean", + "description": "Whether the requester can open the thread." + }, + "canReadRunHistory": { + "type": "boolean", + "description": "Whether the requester can inspect the participation's run history." + }, + "canInvokeAgent": { + "type": "boolean", + "description": "Whether the requester can run the agent in this context." + }, + "canCancelAgent": { + "type": "boolean", + "description": "Whether the requester can cancel the current agent run." + }, + "triggeredByUserId": { + "type": "string", + "description": "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": "The run identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "executingUserId": { + "type": "string", + "description": "The user whose permissions applied to the run.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "triggeredByUserId": { + "type": "string", + "description": "The user who triggered the run.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "triggerType": { + "type": "string", + "description": "How the run was triggered.", + "nullable": true + }, + "status": { + "type": "string", + "description": "The terminal or active run status.", + "nullable": true + }, + "startedOn": { + "type": "string", + "description": "When execution started.", + "format": "date-time", + "nullable": true + }, + "completedOn": { + "type": "string", + "description": "When execution completed.", + "format": "date-time", + "nullable": true + }, + "failureReason": { + "type": "string", + "description": "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": "The source agent used to import the selected preset.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "versionNumber": { + "type": "integer", + "description": "The preset version number.", + "format": "int32" + }, + "name": { + "type": "string", + "description": "The localized display name.", + "nullable": true + }, + "description": { + "type": "string", + "description": "The localized short description.", + "nullable": true + }, + "detailedDescription": { + "type": "string", + "description": "The localized detailed catalog description.", + "nullable": true + }, + "systemPrompt": { + "type": "string", + "description": "The published system instructions.", + "nullable": true + }, + "modelPresetKey": { + "type": "string", + "description": "The target workspace model preset key used when importing.", + "nullable": true + }, + "modelProvider": { + "type": "string", + "description": "The model provider from the workspace Balanced preset.", + "nullable": true + }, + "modelName": { + "type": "string", + "description": "The model from the workspace Balanced preset.", + "nullable": true + }, + "reasoningLevel": { + "type": "string", + "description": "The reasoning level from the workspace Balanced preset.", + "nullable": true + }, + "importBlocker": { + "type": "string", + "description": "The code that explains why the preset cannot be imported.", + "nullable": true + }, + "importWarnings": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Codes for capabilities that will be disabled on import.", + "nullable": true + }, + "webSearchEnabled": { + "type": "boolean", + "description": "Whether web search is enabled in the preset." + }, + "aworkAccessEnabled": { + "type": "boolean", + "description": "Whether awork access is enabled in the preset." + }, + "googleGenAiAccessEnabled": { + "type": "boolean", + "description": "Whether Google image generation is enabled in the preset." + }, + "openAiImageGenerationAccessEnabled": { + "type": "boolean", + "description": "Whether OpenAI image generation is enabled in the preset." + }, + "hasAvatar": { + "type": "boolean", + "description": "Whether the preset has an avatar." + }, + "skillNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The skill names included in the preset.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Describes an agent preset available to import." + }, + "AgentPresetDefinitionResponseModel": { + "type": "object", + "properties": { + "sourceAgentId": { + "type": "string", + "description": "The source agent, which also identifies the preset.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "sourceAgentName": { + "type": "string", + "description": "The source agent name when the preset was published.", + "nullable": true + }, + "language": { + "type": "string", + "description": "The published language.", + "nullable": true + }, + "detailedDescription": { + "type": "string", + "description": "The detailed catalog description.", + "nullable": true + }, + "isPublished": { + "type": "boolean", + "description": "Whether the preset is currently visible to customers." + }, + "latestPublishedVersionNumber": { + "type": "integer", + "description": "The active preset version number.", + "format": "int32" + }, + "nextVersionNumber": { + "type": "integer", + "description": "The version number assigned by the next publication.", + "format": "int32" + }, + "versions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentPresetVersionSummaryResponseModel" + }, + "description": "The saved preset version history.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Describes an agent preset and its publication status." + }, + "AgentPresetSourceAgentResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The source agent id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "name": { + "type": "string", + "description": "The agent name.", + "nullable": true + }, + "description": { + "type": "string", + "description": "The short agent description.", + "nullable": true + }, + "presetKey": { + "type": "string", + "description": "The model preset key.", + "nullable": true + }, + "modelProvider": { + "type": "string", + "description": "The model provider.", + "nullable": true + }, + "modelName": { + "type": "string", + "description": "The model name.", + "nullable": true + }, + "reasoningLevel": { + "type": "string", + "description": "The reasoning level.", + "nullable": true + }, + "systemPrompt": { + "type": "string", + "description": "The current system prompt.", + "nullable": true + }, + "webSearchEnabled": { + "type": "boolean", + "description": "Whether web search is enabled." + }, + "aworkAccessEnabled": { + "type": "boolean", + "description": "Whether awork access is enabled." + }, + "googleGenAiAccessEnabled": { + "type": "boolean", + "description": "Whether Google image generation is enabled." + }, + "openAiImageGenerationAccessEnabled": { + "type": "boolean", + "description": "Whether OpenAI image generation is enabled." + }, + "publicationBlockers": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The source features that prevent preset publication.", + "nullable": true + }, + "includedSkillNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The names of skills copied when the preset is imported.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Describes a custom agent used as a source for a preset." + }, + "AgentPresetVersionSummaryResponseModel": { + "type": "object", + "properties": { + "versionNumber": { + "type": "integer", + "description": "The preset version number.", + "format": "int32" + }, + "publishedOn": { + "type": "string", + "description": "When this version was published.", + "format": "date-time" + }, + "isPublished": { + "type": "boolean", + "description": "Whether this version remains published." + }, + "isActive": { + "type": "boolean", + "description": "Whether this version is currently available to import." + } + }, + "additionalProperties": false, + "description": "Describes an agent preset version." + }, + "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": "🇪🇺" + }, + "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 available providers and their models.", + "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": "Describes the models available to the workspace." + }, + "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 stable provider key.", + "nullable": true, + "example": "openai" + }, + "displayName": { + "type": "string", + "description": "The provider name shown to users.", + "nullable": true, + "example": "OpenAI" + }, + "defaultModel": { + "type": "string", + "description": "The provider model selected by default.", + "nullable": true, + "example": "gpt-5.6-terra" + }, + "models": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The available provider model keys.", + "nullable": true + }, + "modelDetails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentRuntimeModelResponseModel" + }, + "description": "Rich model metadata for model pickers.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Describes the models available from one provider." + }, + "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." + }, + "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": { + "name": { + "type": "string", + "description": "The schedule display name.", + "nullable": true + }, + "id": { + "type": "string", + "description": "The schedule id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "createdOn": { + "type": "string", + "description": "When the schedule was created.", + "format": "date-time" + }, + "agentId": { + "type": "string", + "description": "The agent id that is executed by this schedule.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "ownerUserId": { + "type": "string", + "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": "Optional custom instructions. An omitted or null prompt means no custom instructions.", + "nullable": true + }, + "cronRule": { + "type": "string", + "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.", + "nullable": true + }, + "projectId": { + "type": "string", + "description": "The optional project context id.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "taskId": { + "type": "string", + "description": "The optional task context id.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "isEnabled": { + "type": "boolean", + "description": "Whether this schedule is active." + }, + "needsAttention": { + "type": "boolean", + "description": "Whether the schedule needs user attention." + }, + "lastFailureReason": { + "type": "string", + "description": "The latest rejection reason.", + "nullable": true + }, + "consecutiveFailureCount": { + "type": "integer", + "description": "The number of consecutive failed scheduled executions.", + "format": "int32" + }, + "lastAttemptOn": { + "type": "string", + "description": "The latest occurrence time.", + "format": "date-time", + "nullable": true + }, + "lastSuccessfulRunOn": { + "type": "string", + "description": "The latest accepted occurrence time.", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents a scheduled agent run configuration." + }, + "AgentSessionSourceType": { + "enum": [ + "manual", + "project", + "task", + "client", + "workflow", + "automation" + ], + "type": "string", + "description": "Identifies the product source that created a custom-agent thread." + }, + "AgentSkillLinkResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The agent-skill link id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "agentId": { + "type": "string", + "description": "The agent that uses the skill.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "skillId": { + "type": "string", + "description": "The linked skill id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "skillKey": { + "type": "string", + "description": "The linked skill's stable key.", + "nullable": true + }, + "skillName": { + "type": "string", + "description": "The linked skill's display name.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Describes a skill linked to an agent." + }, + "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 public agent 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 shown to users.", + "nullable": true, + "example": "Client Status Reporter" + }, + "description": { + "type": "string", + "description": "A short explanation of what the agent does.", + "nullable": true, + "example": "Prepares client-ready project status reports." + }, + "currentSystemPromptVersionId": { + "type": "string", + "description": "The current system prompt version.", + "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 model preset key.", + "nullable": true, + "example": "balanced" + }, + "reasoningLevel": { + "type": "string", + "description": "The configured reasoning level.", + "nullable": true, + "example": "medium" + }, + "systemPrompt": { + "type": "string", + "description": "The 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 skills linked to the agent.", + "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": { + "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.", + "example": "manage" + } + }, + "additionalProperties": false, + "description": "Describes a custom agent and its current configuration." + }, + "AgentThreadArtifactResponseModel": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "The file path relative to the thread workspace.", + "nullable": true + }, + "fileName": { + "type": "string", + "description": "The final segment of the file path.", + "nullable": true + }, + "mimeType": { + "type": "string", + "description": "The file's MIME type.", + "nullable": true + }, + "sizeBytes": { + "type": "integer", + "description": "The file size in bytes.", + "format": "int64" + }, + "sha256": { + "type": "string", + "description": "The lowercase SHA-256 digest of the file content.", + "nullable": true + }, + "modifiedOn": { + "type": "string", + "description": "When the file was last modified.", + "format": "date-time", + "nullable": true + }, + "createdOn": { + "type": "string", + "description": "When the file was created.", + "format": "date-time", + "nullable": true + } + }, + "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": { + "sequence": { + "type": "integer", + "description": "The event's durable order within the thread.", + "format": "int64" + }, + "eventName": { + "type": "string", + "description": "The runtime event type.", + "nullable": true + }, + "dataJson": { + "type": "string", + "description": "The event payload as JSON.", + "nullable": true + }, + "traceId": { + "type": "string", + "description": "The distributed trace that produced the event.", + "nullable": true + }, + "createdOn": { + "type": "string", + "description": "When the event was created.", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "description": "The user or service that created the event.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "updatedOn": { + "type": "string", + "description": "When the event was last updated.", + "format": "date-time", + "nullable": true + }, + "updatedBy": { + "type": "string", + "description": "The user or service that last updated the event.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + } + }, + "additionalProperties": false, + "description": "Describes a persisted agent thread event." + }, + "AgentThreadInvocationType": { + "enum": [ + "chat", + "task-assignment", + "project-assignment" + ], + "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": { + "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 that owns the message.", + "format": "uuid", + "example": "6cbb219e-839d-4d23-b273-3a78bbd842ae" + }, + "parentThreadId": { + "type": "string", + "description": "The parent thread for a delegated message.", + "format": "uuid", + "nullable": true, + "example": "b5a57e4d-0eec-45b6-b55e-4b70bf0f2a18" + }, + "role": { + "type": "string", + "description": "The message author's role.", + "nullable": true, + "example": "agent" + }, + "content": { + "type": "string", + "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-generated idempotency key for a user message.", + "nullable": true, + "example": "client-status-2026-08-29" + }, + "runtimeMessageId": { + "type": "string", + "description": "The stable message reference used by the runtime provider.", + "nullable": true, + "example": "msg_01K4CLIENTSTATUS" + }, + "model": { + "type": "string", + "description": "The model that produced the message.", + "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 custom agent that produced the message, if applicable.", + "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 distributed trace that produced the message.", + "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": "Describes a message in an agent thread." + }, + "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": "Describes an agent thread." + }, + "AgentThreadSeenRequestModel": { + "type": "object", + "properties": { + "updateSequence": { + "maximum": 9223372036854776000, + "minimum": 1, + "type": "integer", + "description": "The rendered thread update sequence to mark as seen.", + "format": "int64" + } + }, + "additionalProperties": false + }, + "AgentThreadSeenResponseModel": { + "type": "object", + "properties": { + "wasUpdated": { + "type": "boolean", + "description": "Whether the seen cursor advanced." + } + }, + "additionalProperties": false + }, + "AgentThreadUpdateCountResponseModel": { + "type": "object", + "properties": { + "updatedCount": { + "type": "integer", + "description": "The updated thread count.", + "format": "int32" + } + }, + "additionalProperties": false + }, + "AgentThreadWorkspaceIdModel": { + "type": "object", + "properties": { + "workspaceId": { + "type": "string", + "description": "The owning workspace id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + } + }, + "additionalProperties": false + }, + "AgentToTeamRequestModel": { + "type": "object", + "properties": { + "teamId": { + "type": "string", + "description": "The team that receives access.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "accessLevel": { + "enum": [ + "read", + "manage" + ], + "type": "string", + "description": "The access level to grant." + } + }, + "additionalProperties": false, + "description": "Shares an agent with a team." + }, + "AgentToTeamResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The access grant id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "teamId": { + "type": "string", + "description": "The team that receives access.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "accessLevel": { + "enum": [ + "read", + "manage" + ], + "type": "string", + "description": "The access level granted to the team." + } + }, + "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": "The workflow step id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "agentId": { + "type": "string", + "description": "The agent that owns the workflow step.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "name": { + "type": "string", + "description": "The workflow step name.", + "nullable": true + }, + "stepKind": { + "enum": [ + "task", + "verifier" + ], + "type": "string", + "description": "The behavior of the workflow step.", + "nullable": true + }, + "delegationId": { + "type": "string", + "description": "The delegation executed by this step, if any.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "nextStepId": { + "type": "string", + "description": "The step to run after this step succeeds.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "rejectStepId": { + "type": "string", + "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": "Additional instructions supplied to this step.", + "nullable": true + }, + "outputName": { + "type": "string", + "description": "The name used to store this step's output.", + "nullable": true + }, + "failureMode": { + "enum": [ + "stop", + "continue" + ], + "type": "string", + "description": "How the workflow handles a failed step.", + "nullable": true + }, + "sortOrder": { + "type": "integer", + "description": "The step's display order.", + "format": "int32" + } + }, + "additionalProperties": false, + "description": "Describes an agent workflow step." + }, + "AiExhaustedQuotaFallbackOptions": { + "type": "object", + "properties": { + "modelProvider": { + "type": "string", + "description": "The provider used for restricted execution.", + "nullable": true + }, + "modelName": { + "type": "string", + "description": "The model used for restricted execution.", + "nullable": true + }, + "reasoningEffort": { + "type": "string", + "description": "The reasoning effort used for restricted execution.", + "nullable": true + }, + "maxOutputTokens": { + "type": "integer", + "description": "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": "The configured paid plan or sponsored profile name.", + "nullable": true, + "example": "Pro" + }, + "planType": { + "$ref": "#/components/schemas/AiQuotaPlanType" + }, + "creditsIncluded": { + "type": "integer", + "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": "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": "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": "The model provider used for exhausted-quota fallback execution. Null outside fallback mode.", + "nullable": true + }, + "fallbackModelName": { + "type": "string", + "description": "The model used for exhausted-quota fallback execution. Null outside fallback mode.", + "nullable": true + }, + "fallbackReasoningEffort": { + "type": "string", + "description": "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": "The user's assigned entitlement plan.", + "nullable": true, + "example": "Starter" + }, + "quotaPlan": { + "type": "string", + "description": "The effective quota plan used for the current period.", + "nullable": true, + "example": "Pro" + }, + "activationBoostEndsOn": { + "type": "string", + "description": "The exclusive end of the first-activation boost. Null when no boost applies.", + "format": "date-time", + "nullable": true + }, + "creditsIncluded": { + "type": "integer", + "description": "The effective primary credit allowance.", + "format": "int64", + "nullable": true, + "example": 7500 + }, + "creditsUsed": { + "type": "integer", + "description": "The whole credits consumed in the current primary period.", + "format": "int64", + "nullable": true, + "example": 1824 + }, + "creditsAvailable": { + "type": "integer", + "description": "The non-negative whole credits remaining in the current primary period.", + "format": "int64", + "nullable": true, + "example": 5676 + }, + "creditsUsedPercentage": { + "type": "number", + "description": "The percentage of primary credits consumed, capped at 100.", + "format": "double", + "nullable": true, + "example": 24.3 + }, + "primaryPeriodEndOn": { + "type": "string", + "description": "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 logical paid plan name. `Starter` is required; additional plan names are allowed.", + "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 + } + ] + }, + "Ultra": { + "creditsPerUsd": 100, + "limits": [ + { + "key": "monthly", + "role": "Primary", + "amountType": "AbsoluteCredits", + "amountValue": 64000, + "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": "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": "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": "The reset identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "scope": { + "type": "string", + "description": "The reset scope.", + "nullable": true + }, + "workspaceId": { + "type": "string", + "description": "The affected workspace, when applicable.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "userId": { + "type": "string", + "description": "The affected user, when applicable.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "resetOn": { + "type": "string", + "description": "The inclusive time from which usage counts again.", + "format": "date-time" + }, + "reason": { + "type": "string", + "description": "The reset explanation.", + "nullable": true + }, + "reference": { + "type": "string", + "description": "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": "The short-lived Azure Speech authorization token.", + "nullable": true + }, + "region": { + "type": "string", + "description": "The Azure Speech region the token belongs to.", + "nullable": true + }, + "expiresInSeconds": { + "type": "integer", + "description": "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": "The thread identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "type": { + "type": "string", + "description": "The thread type.", + "nullable": true + }, + "title": { + "type": "string", + "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": "The human creator identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "agentId": { + "type": "string", + "description": "The associated Agent identifier.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "agentNameSnapshot": { + "type": "string", + "description": "The Agent display name captured for the initial run.", + "nullable": true + }, + "executionType": { + "type": "string", + "description": "The initial execution trigger type: direct, task-assignment, project-assignment, mention, schedule, automation, queue, delegation, or workflow.", + "nullable": true + }, + "projectId": { + "type": "string", + "description": "The project context identifier.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "taskId": { + "type": "string", + "description": "The task context identifier.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "clientId": { + "type": "string", + "description": "The client context identifier.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "status": { + "type": "string", + "description": "The current thread status.", + "nullable": true + }, + "creditsUsed": { + "type": "integer", + "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": "When the thread was created.", + "format": "date-time", + "nullable": true + }, + "lastActivityOn": { + "type": "string", + "description": "When the thread last had user-visible activity.", + "format": "date-time", + "nullable": true + }, + "updatedOn": { + "type": "string", + "description": "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": { + "required": [ + "type" + ], + "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 + }, + "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, + "description": "Configures a new agent 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" + }, + "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.", + "nullable": true, + "example": "custom-agent" + }, + "title": { + "type": "string", + "description": "The thread title.", + "nullable": true, + "example": "Weekly client status report" + }, + "status": { + "enum": [ + "ready", + "accepted", + "queued", + "failed" + ], + "type": "string", + "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", + "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 assigned to the thread.", + "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" + } + }, + "additionalProperties": false, + "description": "Describes a created agent thread." + }, + "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" + }, + "acceptedMessageId": { + "type": "string", + "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" + }, + "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 + }, + "status": { + "enum": [ + "accepted", + "queued", + "failed" + ], + "type": "string", + "description": "Whether the message was accepted for execution, queued behind another message, or failed to start.", + "example": "accepted" + } + }, + "additionalProperties": false, + "description": "Represents the backend's final acceptance decision for one submitted thread message." + }, + "AiThreadMessageProcessingStatusResponseModel": { + "type": "object", + "properties": { + "messageId": { + "type": "string", + "description": "The server-generated identifier of the accepted user message.", + "format": "uuid", + "example": "66fcbdc5-2ae6-43bd-b3ab-f18ccd24909a" + }, + "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." + }, + "AiThreadQueueResponseModel": { + "type": "object", + "properties": { + "messages": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AiThreadQueuedMessageResponseModel" + }, + "description": "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": "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/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", + "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 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": "Represents the complete replacement payload for a queued message." + }, + "AiThreadUpdateRequestModel": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "description": "The project to attach.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "title": { + "type": "string", + "description": "The thread title.", + "nullable": true + }, + "rating": { + "enum": [ + "positive", + "negative" + ], + "type": "string", + "description": "The user rating for the thread.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Updates agent thread details." + }, + "AiToolCall": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The provider tool call identifier.", + "nullable": true, + "example": "call_01K4CLIENTSTATUS" + }, + "toolName": { + "type": "string", + "description": "The runtime tool that was called.", + "nullable": true, + "example": "code_mode_execute" + }, + "connectorId": { + "type": "string", + "description": "The connector that supplied the tool, if applicable.", + "format": "uuid", + "nullable": true, + "example": "7e376777-7834-4af6-9eb8-da065f568d30" + }, + "connectionId": { + "type": "string", + "description": "The connector connection used by the tool, if applicable.", + "format": "uuid", + "nullable": true, + "example": "af18602d-c8aa-4f63-a21e-5a7f59b2412c" + }, + "arguments": { + "type": "object", + "additionalProperties": {}, + "description": "The structured arguments supplied to the tool.", + "nullable": true + }, + "response": { + "type": "string", + "description": "The serialized tool result.", + "nullable": true, + "example": "{\"status\":\"completed\"}" + } + }, + "additionalProperties": false, + "description": "Describes a tool call stored with an agent message." + }, + "AiUserPlanStateInternalModel": { + "type": "object", + "properties": { + "accessSource": { + "type": "string", + "description": "Whether the assignment is paid through Chargebee, sponsored by awork, a trial, 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" + }, + "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" + }, + "primaryPeriodEndOn": { + "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": "The user's assigned entitlement plan.", + "nullable": true + }, + "quotaPlan": { + "type": "string", + "description": "The effective quota plan used for the current period.", + "nullable": true + }, + "activationBoostEndsOn": { + "type": "string", + "description": "The exclusive end of the first-activation boost. Null when no boost applies.", + "format": "date-time", + "nullable": true + }, + "creditsIncluded": { + "type": "integer", + "description": "The effective primary credit allowance.", + "format": "int64", + "nullable": true + }, + "creditsUsed": { + "type": "integer", + "description": "The whole credits consumed in the current primary period.", + "format": "int64", + "nullable": true + }, + "creditsAvailable": { + "type": "integer", + "description": "The non-negative whole credits remaining in the current primary period.", + "format": "int64", + "nullable": true + }, + "creditsUsedPercentage": { + "type": "number", + "description": "The percentage of primary credits consumed, capped at 100.", + "format": "double", + "nullable": true + }, + "primaryPeriodEndOn": { + "type": "string", + "description": "The exclusive end of the current primary credit period.", + "format": "date-time", + "nullable": true + }, + "lastManualResetOn": { + "type": "string", + "description": "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": "The connection identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "name": { + "type": "string", + "description": "The safe connection display name.", + "nullable": true + }, + "connectorId": { + "type": "string", + "description": "The connector identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "connectorName": { + "type": "string", + "description": "The connector display name.", + "nullable": true + }, + "ownerUserId": { + "type": "string", + "description": "The connection owner.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "status": { + "type": "string", + "description": "The authorization state.", + "nullable": true + }, + "isSharedWithWorkspace": { + "type": "boolean", + "description": "Whether the connection is shared with the workspace." + }, + "sharedUserCount": { + "type": "integer", + "description": "The number of direct user shares.", + "format": "int32" + }, + "sharedTeamCount": { + "type": "integer", + "description": "The number of team shares.", + "format": "int32" + }, + "createdOn": { + "type": "string", + "description": "When the connection was created.", + "format": "date-time", + "nullable": true + }, + "updatedOn": { + "type": "string", + "description": "When the connection was last updated.", + "format": "date-time", + "nullable": true + } + }, + "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": { + "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 + }, + "requiresOAuthClientSecret": { + "type": "boolean", + "description": "Whether static OAuth configuration requires a client secret.", + "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": "The agent that receives the delegated work.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "name": { + "type": "string", + "description": "The delegation name shown in workflow settings.", + "nullable": true + }, + "description": { + "type": "string", + "description": "A short explanation of the delegated work.", + "nullable": true + }, + "executionMode": { + "enum": [ + "auto", + "handoff", + "orchestrated", + "orchestracted", + "parallel", + "sequential", + "tool" + ], + "type": "string", + "description": "How the parent agent invokes the delegated agent.", + "nullable": true + }, + "promptOverride": { + "type": "string", + "description": "Additional instructions supplied to the delegated agent.", + "nullable": true + }, + "sortOrder": { + "type": "integer", + "description": "The delegation's display order.", + "format": "int32" + } + }, + "additionalProperties": false, + "description": "Configures a new delegation to another agent." + }, + "CreateAgentMemoryRequestModel": { + "type": "object", + "properties": { + "content": { + "type": "string", + "description": "The content Mem0 should infer memory from.", + "nullable": true + }, + "scope": { + "type": "string", + "description": "The memory scope. Defaults to agent.", + "nullable": true + }, + "projectId": { + "type": "string", + "description": "The project id for project-scoped memory.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "clientId": { + "type": "string", + "description": "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 name shown to users.", + "nullable": true, + "example": "Client Status Reporter" + }, + "description": { + "type": "string", + "description": "A short explanation of what the agent does.", + "nullable": true, + "example": "Prepares client-ready project status reports." + }, + "forkedFromAgentId": { + "type": "string", + "description": "The agent to copy.", + "format": "uuid", + "nullable": true, + "example": "1107cc84-1750-40e1-a86c-86f68d1f05c5" + }, + "modelProvider": { + "type": "string", + "description": "The provider that hosts the model.", + "nullable": true, + "example": "openai" + }, + "modelName": { + "type": "string", + "description": "The model to run.", + "nullable": true, + "example": "gpt-5.6-terra" + }, + "presetKey": { + "type": "string", + "description": "The workspace model preset to use.", + "nullable": true, + "example": "balanced" + }, + "reasoningLevel": { + "type": "string", + "description": "The amount of reasoning the model uses.", + "nullable": true, + "example": "medium" + }, + "systemPrompt": { + "type": "string", + "description": "The instructions that control the agent's behavior.", + "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 the agent can use awork tools.", + "nullable": true, + "example": true + }, + "googleGenAiAccessEnabled": { + "type": "boolean", + "description": "Whether the agent can generate images with Google models.", + "nullable": true, + "example": false + }, + "openAiImageGenerationAccessEnabled": { + "type": "boolean", + "description": "Whether the agent can generate images with OpenAI models.", + "nullable": true, + "example": false + } + }, + "additionalProperties": false, + "description": "Configures a new custom agent." + }, + "CreateAgentScheduleRequestModel": { + "required": [ + "cronRule", + "name" + ], + "type": "object", + "properties": { + "name": { + "maxLength": 255, + "minLength": 1, + "type": "string", + "description": "The schedule display name.", + "example": "Weekly client status report" + }, + "prompt": { + "maxLength": 25000, + "type": "string", + "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": { + "maxLength": 100, + "minLength": 1, + "type": "string", + "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", + "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": "The workflow step name.", + "nullable": true + }, + "stepKind": { + "enum": [ + "task", + "verifier" + ], + "type": "string", + "description": "The behavior of the workflow step.", + "nullable": true + }, + "delegationId": { + "type": "string", + "description": "The delegation executed by this step, if any.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "nextStepId": { + "type": "string", + "description": "The step to run after this step succeeds.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "rejectStepId": { + "type": "string", + "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": "Additional instructions supplied to this step.", + "nullable": true + }, + "outputName": { + "type": "string", + "description": "The name used to store this step's output.", + "nullable": true + }, + "failureMode": { + "enum": [ + "stop", + "continue" + ], + "type": "string", + "description": "How the workflow handles a failed step.", + "nullable": true + }, + "sortOrder": { + "type": "integer", + "description": "The step's display order.", + "format": "int32" + } + }, + "additionalProperties": false, + "description": "Configures a new agent workflow step." + }, + "CreateAiQuotaUsageResetRequestModel": { + "required": [ + "reason", + "scope" + ], + "type": "object", + "properties": { + "scope": { + "maxLength": 100, + "minLength": 1, + "type": "string", + "description": "Whether the reset targets a user, workspace, or all users." + }, + "userId": { + "type": "string", + "description": "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": "The required explanation for the reset." + }, + "reference": { + "maxLength": 255, + "type": "string", + "description": "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": "The stable key used to reference the skill.", + "nullable": true + }, + "name": { + "type": "string", + "description": "The name shown in the skill library.", + "nullable": true + }, + "description": { + "type": "string", + "description": "A short explanation of what the skill does.", + "nullable": true + }, + "instructions": { + "minLength": 1, + "type": "string", + "description": "The Markdown instruction body from `SKILL.md`." + }, + "instructionsSource": { + "type": "string", + "description": "The source from which the instructions were created.", + "nullable": true + }, + "metadata": { + "type": "string", + "description": "The skill frontmatter as a JSON object.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Configures a new reusable skill." + }, + "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": "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": "The evaluated environment." + }, + "triggerType": { + "maxLength": 32, + "minLength": 0, + "type": "string", + "description": "Whether the run was scheduled or manually triggered." + }, + "sourceRevision": { + "maxLength": 64, + "minLength": 0, + "type": "string", + "description": "The evaluation-suite source revision." + }, + "targetBranch": { + "maxLength": 64, + "minLength": 0, + "type": "string", + "description": "The branch reported by the target AI service." + }, + "targetServiceVersion": { + "maxLength": 64, + "minLength": 0, + "type": "string", + "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": "The source workflow URL.", + "nullable": true + }, + "schemaVersion": { + "maximum": 2147483647, + "minimum": 1, + "type": "integer", + "description": "The result schema version.", + "format": "int32" + }, + "suiteVersion": { + "maximum": 2147483647, + "minimum": 1, + "type": "integer", + "description": "The expected suite version.", + "format": "int32" + }, + "manifestFingerprint": { + "maxLength": 128, + "minLength": 64, + "type": "string", + "description": "The SHA-256 fingerprint of the expected case manifest." + }, + "expectedCaseManifestJson": { + "maxLength": 25000, + "minLength": 0, + "type": "string", + "description": "The bounded expected case manifest JSON." + }, + "expectedTrialCount": { + "maximum": 1000, + "minimum": 1, + "type": "integer", + "description": "The number of expected trials.", + "format": "int32" + }, + "startedAt": { + "type": "string", + "description": "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": "The run identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "clientMessageId": { + "type": "string", + "description": "The client message identifier of the run's trigger message, when present.", + "nullable": true + }, + "status": { + "type": "string", + "description": "The run status.", + "nullable": true + }, + "executionMode": { + "type": "string", + "description": "The quota execution mode used by the run.", + "nullable": true + }, + "modelProvider": { + "type": "string", + "description": "The model provider used by the run.", + "nullable": true + }, + "modelName": { + "type": "string", + "description": "The model name used by the run.", + "nullable": true + }, + "reasoningLevel": { + "type": "string", + "description": "The reasoning level snapshot of the run's trigger message, when present.", + "nullable": true + }, + "agentId": { + "type": "string", + "description": "The agent that performed the run, when present.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "systemPromptVersionId": { + "type": "string", + "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": "The summed input tokens, or null when the run has no usage records.", + "format": "int64", + "nullable": true + }, + "outputTokens": { + "type": "integer", + "description": "The summed output tokens, or null when the run has no usage records.", + "format": "int64", + "nullable": true + }, + "cachedInputTokens": { + "type": "integer", + "description": "The summed cached input tokens, or null when the run has no usage records.", + "format": "int64", + "nullable": true + }, + "reasoningTokens": { + "type": "integer", + "description": "The summed reasoning tokens, or null when the run has no usage records.", + "format": "int64", + "nullable": true + }, + "costUsd": { + "type": "number", + "description": "The summed cost in US dollars, or null when any usage record has no cost.", + "format": "double", + "nullable": true + }, + "startedAt": { + "type": "string", + "description": "The time the run started.", + "format": "date-time", + "nullable": true + }, + "completedAt": { + "type": "string", + "description": "The time the run completed, failed, or was cancelled.", + "format": "date-time", + "nullable": true + }, + "toolCallCount": { + "type": "integer", + "description": "The number of tool calls recorded for the run.", + "format": "int32" + }, + "failedToolCallCount": { + "type": "integer", + "description": "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": "The thread identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "agentId": { + "type": "string", + "description": "The thread's custom agent, when present.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "sourceType": { + "type": "string", + "description": "The thread's persisted source type, when present.", + "nullable": true + }, + "runs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EvaluationThreadRunUsageResponseModel" + }, + "description": "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": "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": "The positive number of credits to add to the current period.", + "format": "double", + "example": 1000 + }, + "reason": { + "maxLength": 1000, + "minLength": 1, + "type": "string", + "description": "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": "The name of the new custom agent." + } + }, + "additionalProperties": false, + "description": "Sets the name of a custom agent created from a preset." + }, + "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": "The published language." + }, + "detailedDescription": { + "maxLength": 25000, + "minLength": 1, + "type": "string", + "description": "The detailed catalog description." + } + }, + "additionalProperties": false, + "description": "Sets the language and description for an agent preset." + }, + "RememberAgentSessionMessageRequestModel": { + "type": "object", + "properties": { + "scope": { + "type": "string", + "description": "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": "Sets whether an agent is archived." + }, + "SetAgentScheduleEnabledRequestModel": { + "required": [ + "isEnabled" + ], + "type": "object", + "properties": { + "isEnabled": { + "type": "boolean", + "description": "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": "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": "The environment variable name the value belongs to." + }, + "scope": { + "minLength": 1, + "type": "string", + "description": "The scope of the value (\"workspace\" or \"user\")." + }, + "value": { + "minLength": 1, + "type": "string", + "description": "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": "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": "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 user who receives access.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "accessLevel": { + "enum": [ + "read", + "manage" + ], + "type": "string", + "description": "The granted access level." + } + }, + "additionalProperties": false, + "description": "A requested direct user access grant for a skill." + }, + "SkillContributorResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The access grant identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "skillId": { + "type": "string", + "description": "The shared skill identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "userId": { + "type": "string", + "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." + } + }, + "additionalProperties": false, + "description": "A direct user access grant for a skill." + }, + "SkillFileResponseModel": { + "type": "object", + "properties": { + "relativePath": { + "type": "string", + "description": "The path of the file relative to the skill root (for example \"scripts/sync.py\").", + "nullable": true + }, + "sizeBytes": { + "type": "integer", + "description": "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": "The skill identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "createdBy": { + "type": "string", + "description": "The user who created the skill.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "createdOn": { + "type": "string", + "description": "When the skill was created.", + "format": "date-time" + }, + "updatedOn": { + "type": "string", + "description": "When the skill was last updated.", + "format": "date-time", + "nullable": true + }, + "key": { + "type": "string", + "description": "The stable key used to reference the skill.", + "nullable": true + }, + "name": { + "type": "string", + "description": "The name shown in the skill library.", + "nullable": true + }, + "description": { + "type": "string", + "description": "A short explanation of what the skill does.", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The Markdown instruction body from `SKILL.md`.", + "nullable": true + }, + "instructionsSource": { + "type": "string", + "description": "The source from which the instructions were created.", + "nullable": true + }, + "type": { + "enum": [ + "user", + "agent" + ], + "type": "string", + "description": "The ownership type." + }, + "userId": { + "type": "string", + "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 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." + }, + "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 + }, + "linkedAgentCount": { + "type": "integer", + "description": "The number of linked agents.", + "format": "int32" + }, + "metadata": { + "type": "string", + "description": "The skill frontmatter as a JSON object.", + "nullable": true + }, + "hasFiles": { + "type": "boolean", + "description": "Whether the skill includes bundled files." + }, + "secretRequirements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SkillSecretRequirementResponseModel" + }, + "description": "The secrets that the skill declares.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Describes a reusable skill." + }, + "SkillSecretRequirementRequestModel": { + "required": [ + "envVarName", + "scope" + ], + "type": "object", + "properties": { + "envVarName": { + "minLength": 1, + "type": "string", + "description": "The environment variable name the secret is injected as." + }, + "description": { + "type": "string", + "description": "The description shown to users when providing the secret.", + "nullable": true + }, + "scope": { + "minLength": 1, + "enum": [ + "workspace", + "user" + ], + "type": "string", + "description": "Who must provide the secret value." + }, + "isRequired": { + "type": "boolean", + "description": "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": "The secret requirement identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "envVarName": { + "type": "string", + "description": "The environment variable name the secret is injected as.", + "nullable": true + }, + "description": { + "type": "string", + "description": "The description shown to users when providing the secret.", + "nullable": true + }, + "scope": { + "enum": [ + "workspace", + "user" + ], + "type": "string", + "description": "Who must provide the secret value." + }, + "isRequired": { + "type": "boolean", + "description": "Whether the secret is required for the skill to work." + }, + "hasValue": { + "type": "boolean", + "description": "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": "The environment variable name.", + "nullable": true + }, + "scope": { + "enum": [ + "workspace", + "user" + ], + "type": "string", + "description": "Who provided the stored value." + }, + "updatedOn": { + "type": "string", + "description": "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": { + "enum": [ + "read", + "manage" + ], + "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 team that receives access.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "accessLevel": { + "enum": [ + "read", + "manage" + ], + "type": "string", + "description": "The granted access level." + } + }, + "additionalProperties": false, + "description": "A requested team access grant for a skill." + }, + "SkillToTeamResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The access grant identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "skillId": { + "type": "string", + "description": "The shared skill identifier.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "teamId": { + "type": "string", + "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." + } + }, + "additionalProperties": false, + "description": "A team access grant for a skill." + }, + "SystemPromptVersionResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The prompt version id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "agentId": { + "type": "string", + "description": "The agent id.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "versionNumber": { + "type": "integer", + "description": "The version number, assigned in order of creation.", + "format": "int32" + }, + "isCurrent": { + "type": "boolean", + "description": "Whether this is the agent's current system prompt." + }, + "systemPrompt": { + "type": "string", + "description": "The system prompt.", + "nullable": true + }, + "createdOn": { + "type": "string", + "description": "The creation time of the system prompt version.", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "description": "The user who created the system prompt version.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + } + }, + "additionalProperties": false, + "description": "Describes a saved system prompt version." + }, + "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": "The thread whose list state changed.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "isArchived": { + "type": "boolean", + "description": "Whether the thread is archived." + }, + "archivedOn": { + "type": "string", + "description": "When the thread was archived.", + "format": "date-time", + "nullable": true + }, + "isPinned": { + "type": "boolean", + "description": "Whether the thread is pinned." + }, + "pinnedOrder": { + "type": "number", + "description": "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": "The reordered thread.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "order": { + "type": "number", + "description": "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": "The agent that receives the delegated work.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "name": { + "type": "string", + "description": "The delegation name shown in workflow settings.", + "nullable": true + }, + "description": { + "type": "string", + "description": "A short explanation of the delegated work.", + "nullable": true + }, + "executionMode": { + "enum": [ + "auto", + "handoff", + "orchestrated", + "orchestracted", + "parallel", + "sequential", + "tool" + ], + "type": "string", + "description": "How the parent agent invokes the delegated agent.", + "nullable": true + }, + "promptOverride": { + "type": "string", + "description": "Additional instructions supplied to the delegated agent.", + "nullable": true + }, + "sortOrder": { + "type": "integer", + "description": "The delegation's display order.", + "format": "int32" + } + }, + "additionalProperties": false, + "description": "Configures an existing delegation to another agent." + }, + "UpdateAgentRequestModel": { + "required": [ + "aworkAccessEnabled", + "description", + "googleGenAiAccessEnabled", + "name", + "openAiImageGenerationAccessEnabled", + "reasoningLevel", + "systemPrompt", + "webSearchEnabled", + "workspaceAccessLevel" + ], + "type": "object", + "properties": { + "name": { + "maxLength": 255, + "minLength": 1, + "type": "string", + "description": "The name shown to users.", + "example": "Client Status Reporter" + }, + "description": { + "maxLength": 25000, + "type": "string", + "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" + }, + "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 model preset to use.", + "nullable": true, + "example": "balanced" + }, + "reasoningLevel": { + "minLength": 1, + "type": "string", + "description": "The amount of reasoning the model uses.", + "example": "medium" + }, + "systemPrompt": { + "maxLength": 25000, + "type": "string", + "description": "The instructions that control the agent's behavior.", + "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": "Configures an existing custom agent." + }, + "UpdateAgentScheduleRequestModel": { + "required": [ + "cronRule", + "name" + ], + "type": "object", + "properties": { + "name": { + "maxLength": 255, + "minLength": 1, + "type": "string", + "description": "The schedule display name.", + "example": "Weekly client status report" + }, + "prompt": { + "maxLength": 25000, + "type": "string", + "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": { + "maxLength": 100, + "minLength": 1, + "type": "string", + "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", + "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": "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": "The workflow step name.", + "nullable": true + }, + "stepKind": { + "enum": [ + "task", + "verifier" + ], + "type": "string", + "description": "The behavior of the workflow step.", + "nullable": true + }, + "delegationId": { + "type": "string", + "description": "The delegation executed by this step, if any.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "nextStepId": { + "type": "string", + "description": "The step to run after this step succeeds.", + "format": "uuid", + "nullable": true, + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "rejectStepId": { + "type": "string", + "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": "Additional instructions supplied to this step.", + "nullable": true + }, + "outputName": { + "type": "string", + "description": "The name used to store this step's output.", + "nullable": true + }, + "failureMode": { + "enum": [ + "stop", + "continue" + ], + "type": "string", + "description": "How the workflow handles a failed step.", + "nullable": true + }, + "sortOrder": { + "type": "integer", + "description": "The step's display order.", + "format": "int32" + } + }, + "additionalProperties": false, + "description": "Configures an existing agent workflow step." + }, + "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": "The stable key used to reference the skill.", + "nullable": true + }, + "name": { + "type": "string", + "description": "The name shown in the skill library.", + "nullable": true }, - { - "$ref": "#/components/parameters/page" + "description": { + "type": "string", + "description": "A short explanation of what the skill does.", + "nullable": true }, - { - "$ref": "#/components/parameters/pageSize" + "instructions": { + "minLength": 1, + "type": "string", + "description": "The Markdown instruction body from `SKILL.md`." }, - { - "$ref": "#/components/parameters/orderby" + "instructionsSource": { + "type": "string", + "description": "The source from which the instructions were created.", + "nullable": true }, - { - "$ref": "#/components/parameters/filterby" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileVersion" - } - } - } - } + "metadata": { + "type": "string", + "description": "The skill frontmatter as a JSON object.", + "nullable": true } }, - "security": [ - { - "oauth2": [ - "full_access" - ] + "additionalProperties": false, + "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 + }, + "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 } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } + }, + "additionalProperties": false, + "description": "A replacement sharing configuration for a skill." }, - "post": { - "tags": [ - "WorkspaceFiles" + "UpdateThreadPinnedOrderRequestModel": { + "required": [ + "order" ], - "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" - } + "type": "object", + "properties": { + "order": { + "type": "number", + "description": "The target pinned order.", + "format": "double" } + }, + "additionalProperties": false, + "description": "Represents a request to change one pinned thread's order." + }, + "UpdateWorkspaceContextRequestModel": { + "required": [ + "rawContentHtml" ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "required": [ - "File" - ], - "type": "object", - "properties": { - "File": { - "type": "string", - "format": "binary" - } - } - }, - "encoding": { - "File": { - "style": "form" - } - } - } + "type": "object", + "properties": { + "rawContentHtml": { + "maxLength": 25000, + "type": "string", + "description": "The complete workspace context as rich-text HTML." } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileVersion" - } - } - } + "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" }, - "400": { - "description": "Bad Request" + "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" } }, - "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" - } + "additionalProperties": false, + "description": "Identifies a used thread connector." + }, + "UserMemoryResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The memory id assigned by Mem0.", + "nullable": true }, - { - "name": "fileId", - "in": "path", - "description": "The id of the file.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "fact": { + "type": "string", + "description": "The validated governed memory fact.", + "nullable": true }, - { - "name": "versionId", - "in": "path", - "description": "The id of the file version.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "category": { + "type": "string", + "description": "The governed memory category.", + "nullable": true + }, + "status": { + "type": "string", + "description": "The governed lifecycle status.", + "nullable": true + }, + "candidateSource": { + "type": "string", + "description": "Where the memory candidate originated.", + "nullable": true + }, + "createdAt": { + "type": "string", + "description": "The creation timestamp returned by Mem0.", + "format": "date-time", + "nullable": true + }, + "updatedAt": { + "type": "string", + "description": "The update timestamp returned by Mem0.", + "format": "date-time", + "nullable": true } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FileVersion" - } - } - } + }, + "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?" }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "options": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The bounded selectable answers.", + "nullable": true }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "allowCustomText": { + "type": "boolean", + "description": "Whether a custom text answer is accepted.", + "example": false + }, + "interactionType": { + "type": "string", + "description": "The structured interaction type.", + "nullable": true, + "example": "mcp_connection" + }, + "connectorId": { + "type": "string", + "description": "The connector that requires user action.", + "format": "uuid", + "nullable": true, + "example": "7e376777-7834-4af6-9eb8-da065f568d30" + }, + "connectionId": { + "type": "string", + "description": "The connection that requires reauthorization.", + "format": "uuid", + "nullable": true, + "example": "af18602d-c8aa-4f63-a21e-5a7f59b2412c" + }, + "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" - ] + "additionalProperties": false, + "description": "Describes a user action that must complete before an agent run can resume." + }, + "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." + }, + "WorkspaceContextCatalogStatus": { + "enum": [ + "Pending", + "Ready", + "Failed" ], - "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" - } + "type": "string", + "description": "Describes the state of the derived workspace-context catalog." + }, + "WorkspaceContextResponseModel": { + "type": "object", + "properties": { + "rawContentHtml": { + "type": "string", + "description": "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": { - "type": "string", - "format": "binary" - } - } - } + "updatedBy": { + "type": "string", + "description": "The id of the user who last updated the context.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "updatedOn": { + "type": "string", + "description": "When the context was last updated.", + "format": "date-time" + }, + "sections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WorkspaceContextSectionResponseModel" + }, + "description": "The available catalog section summaries.", + "nullable": true } }, - "security": [ - { - "oauth2": [ - "full_access" - ] + "additionalProperties": false, + "description": "Represents saved workspace context and its derived catalog state." + }, + "WorkspaceContextSectionResponseModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The section id used for on-demand loading.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "heading": { + "type": "string", + "description": "The section heading.", + "nullable": true + }, + "whenToLoadHint": { + "type": "string", + "description": "The short hint that describes when to load the section.", + "nullable": true + }, + "order": { + "type": "integer", + "description": "The section order.", + "format": "int32" } - ], - "x-api-versions": [ - "v1" - ], - "x-access": { - "any": "true" - } - } - } - }, - "components": { - "schemas": { + }, + "additionalProperties": false, + "description": "Represents one derived workspace-context catalog entry." + }, "Account": { "type": "object", "properties": { @@ -49186,61 +58797,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": { @@ -49791,77 +59347,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": { @@ -49961,25 +59446,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": { @@ -54876,6 +64342,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, @@ -55302,11 +64776,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.", @@ -60156,78 +69625,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": { @@ -66343,173 +75740,163 @@ "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.", - "format": "date-time", - "nullable": true - }, - "deletedOn": { - "type": "string", - "description": "The date the user was deleted (soft delete).", - "format": "date-time", - "nullable": true - }, - "hasImage": { - "type": "boolean", - "description": "Whether the user has uploaded a profile image.", - "example": true - }, - "shouldMigrateToConnect": { - "type": "boolean", - "description": "Whether the user should be migrated to Connect." - }, - "userContactInfos": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ContactInfo" - }, - "description": "The contact information assigned to this user.", - "nullable": true - }, - "resourceVersion": { - "type": "integer", - "description": "The version of the entity, updated on every modification, to the ticks in UTC.\nNot identical to UpdatedOn.", - "format": "int64", - "readOnly": true, - "example": 637825154598057900 - }, - "tags": { - "type": "array", - "items": { - "$ref": "#/components/schemas/UserTagModel" - }, - "description": "The tags of this user.", - "nullable": true - }, - "teams": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TeamModel" - }, - "description": "The teams the user is associated to.", - "nullable": true - }, - "isExternal": { - "type": "boolean", - "description": "True if this entity is coming from an external workspace (awork Connect).", - "example": true - } - }, - "additionalProperties": false, - "description": "The user model." - }, - "UserAndWorkspace": { - "type": "object", - "properties": { - "firstName": { - "maxLength": 1000, - "minLength": 0, - "type": "string", - "description": "The firstname of the user.", - "nullable": true, - "example": "Carla" - }, - "lastName": { - "maxLength": 1000, - "minLength": 0, - "type": "string", - "description": "The lastname of the user.", - "nullable": true, - "example": "Creative" - }, - "birthDate": { - "type": "string", - "description": "The birthdate of the user.", - "format": "date-time", - "nullable": true, - "example": "1998-04-19T00:00:000Z" - }, - "gender": { - "maxLength": 25, - "minLength": 0, - "type": "string", - "description": "The gender of the user.", - "nullable": true, - "example": "female" - }, - "title": { - "maxLength": 100, - "minLength": 0, - "type": "string", - "description": "The title of the user.", - "nullable": true, - "example": "Miss" - }, - "position": { - "maxLength": 1000, - "minLength": 0, - "type": "string", - "description": "The position of the user.", - "nullable": true - }, - "language": { - "maxLength": 25, - "minLength": 0, - "type": "string", - "description": "The language preference of the user in ISO 639-1 format.", - "nullable": true, - "example": "en-GB" - }, - "id": { - "type": "string", - "description": "The id of the user.", - "format": "uuid", - "example": "123e4567-e89b-12d3-a456-426614174000" - }, - "status": { - "$ref": "#/components/schemas/UserStatus" - }, - "createdOn": { - "type": "string", - "description": "The date this user was created.", - "format": "date-time" - }, - "createdBy": { - "type": "string", - "description": "The id of the user who created this user.", - "format": "uuid", - "example": "123e4567-e89b-12d3-a456-426614174000" - }, - "updatedOn": { - "type": "string", - "description": "The date when this user was last updated.", - "format": "date-time" - }, - "updatedBy": { - "type": "string", - "description": "The id of the user who updated the entity.", - "format": "uuid", - "example": "123e4567-e89b-12d3-a456-426614174000" - }, - "isArchived": { - "type": "boolean", - "description": "Whether this user is archived.\nArchived users are automatically inactive and only exist for reference purposes.", - "example": false - }, - "isDeactivated": { - "type": "boolean", - "description": "Whether the user has been deactivated.", - "example": false - }, - "isAgent": { + "deactivatedOn": { + "type": "string", + "description": "The date the user was deactivated.", + "format": "date-time", + "nullable": true + }, + "deletedOn": { + "type": "string", + "description": "The date the user was deleted (soft delete).", + "format": "date-time", + "nullable": true + }, + "hasImage": { + "type": "boolean", + "description": "Whether the user has uploaded a profile image.", + "example": true + }, + "shouldMigrateToConnect": { + "type": "boolean", + "description": "Whether the user should be migrated to Connect." + }, + "userContactInfos": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContactInfo" + }, + "description": "The contact information assigned to this user.", + "nullable": true + }, + "resourceVersion": { + "type": "integer", + "description": "The version of the entity, updated on every modification, to the ticks in UTC.\nNot identical to UpdatedOn.", + "format": "int64", + "readOnly": true, + "example": 637825154598057900 + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserTagModel" + }, + "description": "The tags of this user.", + "nullable": true + }, + "teams": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TeamModel" + }, + "description": "The teams the user is associated to.", + "nullable": true + }, + "isExternal": { "type": "boolean", - "description": "Whether this user represents an agent.", + "description": "True if this entity is coming from an external workspace (awork Connect).", + "example": true + } + }, + "additionalProperties": false, + "description": "The user model." + }, + "UserAndWorkspace": { + "type": "object", + "properties": { + "firstName": { + "maxLength": 1000, + "minLength": 0, + "type": "string", + "description": "The firstname of the user.", + "nullable": true, + "example": "Carla" + }, + "lastName": { + "maxLength": 1000, + "minLength": 0, + "type": "string", + "description": "The lastname of the user.", + "nullable": true, + "example": "Creative" + }, + "birthDate": { + "type": "string", + "description": "The birthdate of the user.", + "format": "date-time", + "nullable": true, + "example": "1998-04-19T00:00:000Z" + }, + "gender": { + "maxLength": 25, + "minLength": 0, + "type": "string", + "description": "The gender of the user.", + "nullable": true, + "example": "female" + }, + "title": { + "maxLength": 100, + "minLength": 0, + "type": "string", + "description": "The title of the user.", + "nullable": true, + "example": "Miss" + }, + "position": { + "maxLength": 1000, + "minLength": 0, + "type": "string", + "description": "The position of the user.", + "nullable": true + }, + "language": { + "maxLength": 25, + "minLength": 0, + "type": "string", + "description": "The language preference of the user in ISO 639-1 format.", + "nullable": true, + "example": "en-GB" + }, + "id": { + "type": "string", + "description": "The id of the user.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "status": { + "$ref": "#/components/schemas/UserStatus" + }, + "createdOn": { + "type": "string", + "description": "The date this user was created.", + "format": "date-time" + }, + "createdBy": { + "type": "string", + "description": "The id of the user who created this user.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "updatedOn": { + "type": "string", + "description": "The date when this user was last updated.", + "format": "date-time" + }, + "updatedBy": { + "type": "string", + "description": "The id of the user who updated the entity.", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "isArchived": { + "type": "boolean", + "description": "Whether this user is archived.\nArchived users are automatically inactive and only exist for reference purposes.", + "example": false + }, + "isDeactivated": { + "type": "boolean", + "description": "Whether the user has been deactivated.", "example": false }, "deactivatedOn": { @@ -66900,10 +76287,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)." @@ -67025,6 +76408,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.", @@ -68456,6 +77843,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" @@ -68743,7 +78152,8 @@ }, "content": { "description": "Content in JSON format.", - "nullable": true + "nullable": true, + "example": "(JSON formatted response)" } }, "additionalProperties": false @@ -70474,7 +79884,8 @@ }, "value": { "description": "The event value as serialized JSON object", - "nullable": true + "nullable": true, + "example": "(JSON serialized data)" } }, "additionalProperties": false @@ -72465,7 +81876,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 }, @@ -74908,6 +84319,18 @@ } ], "tags": [ + { + "name": "AgentRuntime", + "description": "Sandbox-backed generic agent runtime endpoints." + }, + { + "name": "AgentThreads", + "description": "Manages agent threads." + }, + { + "name": "Custom Agents", + "description": "Create and configure custom agents, sharing, skills, connectors, delegations, workflows, and presets." + }, { "name": "Accounts", "description": "The accounts endpoints allow you to manage the basic account details of a user." @@ -74953,13 +84376,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 +84399,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 +84429,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 +84457,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 +84472,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 +84484,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 +84528,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 +84549,80 @@ "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": "Agent Thread Files", + "description": "Endpoints for files attached to agent threads." + }, + { + "name": "AgentFiles" + }, + { + "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 +84643,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."