diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index a9b77b8..fbb31b0 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -19753,7 +19753,7 @@ "Workflow" ], "summary": "Update Workflow", - "description": "Updates the workflow in terms of: name, description, and task configuration (and its details). Observe the rules of [JSON Merge Patch Semantics](https://tools.ietf.org/html/rfc7386).", + "description": "Updates the workflow in terms of: name, description, task configuration (and its details), and task type configuration values (`configurationValues`). Observe the rules of [JSON Merge Patch Semantics](https://tools.ietf.org/html/rfc7386).", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -21621,6 +21621,16 @@ "customer" ], "description": "- default : groups in the Root folder (location) provisioned by the system, automatically. Examples: Administrator, Project Manager, Engineer, Terminologist.\r\n- customer : groups provisioned by the system, automatically, for each customer location you add. Examples: Customer Requester, Customer Reviewer.\r\n- vendor : group provisioned by the system, automatically, for each vendor location you add. Examples: Vendor Project Manager.\r\n- custom : groups you can create in a location of your choice. Examples: Project Manager, Translator." + }, + "metadata": { + "title": "Metadata", + "description": "Additional metadata values in a key–value pair format", + "additionalProperties": true, + "example": { + "colour": "green", + "flag-enabled": true, + "max value": 3 + } } } }, @@ -21731,6 +21741,16 @@ "items": { "type": "string" } + }, + "metadata": { + "title": "Metadata", + "description": "Additional metadata values in a key–value pair format", + "additionalProperties": true, + "example": { + "colour": "green", + "flag-enabled": true, + "max value": 3 + } } } }, @@ -26217,7 +26237,7 @@ "description": "The configuration of a task that will be created in the future.", "properties": { "taskTemplate": { - "$ref": "#/components/schemas/object-id" + "$ref": "#/components/schemas/workflow-task-template" }, "scope": { "$ref": "#/components/schemas/task-configuration-scope" @@ -26240,6 +26260,13 @@ "example": "2022-01-12T12:00:00Z", "description": "The due date of the future task.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"", "nullable": true + }, + "configurationValues": { + "type": "array", + "description": "The task type configuration values set on this task. Each item corresponds to a configuration key defined in `taskTemplate.taskType.configurationDefinitions`.", + "items": { + "$ref": "#/components/schemas/workflow-task-type-config-value" + } } }, "required": [ @@ -26310,6 +26337,12 @@ }, "dueBy": { "$ref": "#/components/schemas/date-time" + }, + "configurationValues": { + "type": "array", + "items": { + "$ref": "#/components/schemas/workflow-task-type-config-value" + } } }, "required": [ @@ -27747,6 +27780,13 @@ "completedAt": { "$ref": "#/components/schemas/date-time", "description": "The completion timestamp of the task.
UTC Timezone
Allowed formats:
\"YYYY-MM-DDThh:mmZ\"
\"YYYY-MM-DDThh:mm:ssZ\"
\"YYYY-MM-DDThh:mm:ss.sZ\"
\"YYYY-MM-DDThh:mm:ss.ssZ\"
\"YYYY-MM-DDThh:mm:ss.sssZ\"" + }, + "configurationValues": { + "type": "array", + "description": "The task type configuration values set on this task. Each item corresponds to a configuration key defined in `taskType.configurationDefinitions`.", + "items": { + "$ref": "#/components/schemas/workflow-task-type-config-value" + } } }, "required": [ @@ -27981,6 +28021,13 @@ "$ref": "#/components/schemas/task-type-outcome" } }, + "configurationDefinitions": { + "type": "array", + "description": "Defines the configurable options available for this task type. Each entry describes one configuration option including its data type, default value, allowed values and constraints.", + "items": { + "$ref": "#/components/schemas/task-type-configuration-definition" + } + }, "location": { "$ref": "#/components/schemas/folder-v2" } @@ -27989,6 +28036,87 @@ "id" ] }, + "task-type-configuration-definition": { + "title": "Task Type Configuration Definition", + "type": "object", + "description": "Describes a single configurable option for a task type.", + "properties": { + "id": { + "type": "string", + "description": "The identifier for the configuration option (e.g. `FORCE_CLOSE_MAX_AGE`)." + }, + "name": { + "type": "string", + "description": "Human-readable name for the configuration option." + }, + "description": { + "type": "string", + "description": "Explanation of what this configuration option controls." + }, + "dataType": { + "type": "string", + "description": "The data type of the configuration value.", + "enum": [ + "integer", + "boolean", + "string" + ] + }, + "optional": { + "type": "boolean", + "description": "Whether this configuration option is optional. If `false`, a value must always be supplied." + }, + "defaultValue": { + "description": "The default value applied when no value is explicitly set. The type matches `dataType`. May be `null` when no default is defined.", + "nullable": true, + "type": "object" + }, + "options": { + "type": "array", + "nullable": true, + "description": "Enumerated list of accepted string values. Present only when `dataType` is `string` and the value is restricted to a fixed set. `null` when any value is allowed.", + "items": { + "type": "string" + } + }, + "constraints": { + "type": "array", + "description": "Validation constraints applied to the value (e.g. minimum/maximum for numeric types).", + "items": { + "$ref": "#/components/schemas/task-type-configuration-constraint" + } + } + }, + "required": [ + "id", + "name", + "dataType", + "optional" + ] + }, + "task-type-configuration-constraint": { + "title": "Task Type Configuration Constraint", + "type": "object", + "description": "A validation constraint applied to a task type configuration value.", + "properties": { + "type": { + "type": "string", + "description": "The kind of constraint.", + "enum": [ + "minValue", + "maxValue" + ] + }, + "value": { + "description": "The constraint threshold. Type matches the parent configuration option's `dataType`.", + "type": "object" + } + }, + "required": [ + "type", + "value" + ] + }, "task-outcome": { "title": "Task Outcome", "type": "object", @@ -28072,20 +28200,12 @@ "deprecated": true }, "account": { - "allOf": [ - { - "$ref": "#/components/schemas/account" - } - ], + "allOf": [{ "$ref": "#/components/schemas/account" }], "description": "The account the user is part of.", "deprecated": true }, "location": { - "allOf": [ - { - "$ref": "#/components/schemas/folder-v2" - } - ], + "allOf": [{ "$ref": "#/components/schemas/folder-v2" }], "deprecated": true }, "groups": { @@ -28096,19 +28216,11 @@ "deprecated": true }, "userType": { - "allOf": [ - { - "$ref": "#/components/schemas/user-type" - } - ], + "allOf": [{ "$ref": "#/components/schemas/user-type" }], "deprecated": true }, "status": { - "allOf": [ - { - "$ref": "#/components/schemas/user-status" - } - ], + "allOf": [{ "$ref": "#/components/schemas/user-status" }], "deprecated": true }, "invitationLink": { @@ -28117,11 +28229,7 @@ "deprecated": true }, "membership": { - "allOf": [ - { - "$ref": "#/components/schemas/account-membership-type" - } - ], + "allOf": [{ "$ref": "#/components/schemas/account-membership-type" }], "deprecated": true } }, @@ -31456,6 +31564,16 @@ }, "membership": { "$ref": "#/components/schemas/account-membership-type" + }, + "metadata": { + "title": "Metadata", + "description": "Additional metadata values in a key–value pair format", + "additionalProperties": true, + "example": { + "colour": "green", + "flag-enabled": true, + "max value": 3 + } } } }, @@ -31586,6 +31704,16 @@ "type": "object", "$ref": "#/components/schemas/object-id" } + }, + "metadata": { + "title": "Metadata", + "description": "Additional metadata values in a key–value pair format", + "additionalProperties": true, + "example": { + "colour": "green", + "flag-enabled": true, + "max value": 3 + } } } }, @@ -31770,6 +31898,13 @@ }, "taskTemplate": { "$ref": "#/components/schemas/workflow-task-template" + }, + "configurationValues": { + "type": "array", + "description": "The task type configuration values set on this workflow task. Each item corresponds to a configuration key defined in `taskTemplate.taskType.configurationDefinitions`.", + "items": { + "$ref": "#/components/schemas/workflow-task-type-config-value" + } } }, "required": [ @@ -31816,6 +31951,12 @@ }, "scope": { "$ref": "#/components/schemas/task-configuration-scope-request" + }, + "configurationValues": { + "type": "array", + "items": { + "$ref": "#/components/schemas/workflow-task-type-config-value" + } } }, "required": [ @@ -31825,6 +31966,29 @@ "scope" ] }, + "workflow-task-type-config-value": { + "title": "Workflow Task Type Config Value", + "type": "object", + "description": "A key-value pair representing a task type configuration setting.\n\nValid configuration keys (`id`), data types, options (for string types), and constraints (e.g., min/max for integer types) are defined in the sibling field `taskTemplate.taskType.configurationDefinitions` within the same task configuration.", + "required": [ + "id", + "value" + ], + "properties": { + "id": { + "type": "string", + "description": "The configuration key identifier (e.g. `FORCE_CLOSE_MAX_AGE`, `EDITOR_MODE`, `CONCURRENT_EDITING_ENABLED`)." + }, + "value": { + "description": "The configuration value.", + "type": "object" + } + }, + "example": { + "id": "CONCURRENT_EDITING_ENABLED", + "value": false + } + }, "workflow-task-template": { "title": "Workflow Task Template", "type": "object", @@ -31898,6 +32062,13 @@ "items": { "$ref": "#/components/schemas/workflow-template-transition" } + }, + "configurationValues": { + "type": "array", + "description": "The task type configuration values set on this task. Each item corresponds to a configuration key defined in `taskTemplates.taskType.configurationDefinitions`.", + "items": { + "$ref": "#/components/schemas/workflow-task-type-config-value" + } } }, "required": [ diff --git a/articles/LCPublicAPI/docs/Whats-New.md b/articles/LCPublicAPI/docs/Whats-New.md index 73047de..0fc9272 100644 --- a/articles/LCPublicAPI/docs/Whats-New.md +++ b/articles/LCPublicAPI/docs/Whats-New.md @@ -2,6 +2,13 @@
+## 29 April 2026 +- Tasks can now be [accepted](../api/Public-API.v1-fv.html#/operations/AcceptTask) on behalf of a group. +- We've exposed task type configuration definitions and values across Get and List endpoints for [Projects](../api/Public-API.v1-fv.html#/operations/GetProject), [Project Templates](../api/Public-API.v1-fv.html#/operations/GetProjectTemplate), [Workflows](../api/Public-API.v1-fv.html#/operations/GetWorkflow), [Tasks](../api/Public-API.v1-fv.html#/operations/GetTask), and [Task Types](../api/Public-API.v1-fv.html#/operations/GetTaskType). +- Task type configuration values can now be modified when updating [Workflows](../api/Public-API.v1-fv.html#/operations/UpdateWorkflow) and [Project Plans](../api/Public-API.v1-fv.html#/operations/UpdateProject). +- User and group metadata definitions have been added to the contract for improved data modeling. +- We fixed various bugs. + ## 7 April 2026 - Task owner functionality has been extended to support groups. The [Get Task](../api/Public-API.v1-fv.html#/operations/GetTask) endpoint now returns group information when a task is assigned to a group instead of an individual user. Webhook events have been adapted to support group ownership. - Previous task owner fields linked to user have been deprecated and will be maintained for backwards compatibility for at least 6 months.