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.