From 94d4d5c49053363e146443066d519c3074377256 Mon Sep 17 00:00:00 2001 From: "laszlo.david" Date: Thu, 12 Feb 2026 23:38:43 +0200 Subject: [PATCH 01/22] enhance roles and permission endpoints --- articles/LCPublicAPI/api/Public-API.v1.json | 458 +++++++++++++++++++- 1 file changed, 451 insertions(+), 7 deletions(-) diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index 3791401..d1916c9 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -98,8 +98,8 @@ "description": "Rate Limits" }, { - "name": "Roles", - "description": "Roles" + "name": "Roles and Permissions", + "description": "Roles and Permissions" }, { "name": "Schedule Template", @@ -11127,7 +11127,7 @@ "/roles": { "get": { "tags": [ - "Roles" + "Roles and Permissions" ], "summary": "List Roles", "description": "Retrieves a list of all roles available for the account.", @@ -11137,6 +11137,15 @@ }, { "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + }, + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" } ], "responses": { @@ -11172,6 +11181,386 @@ } }, "operationId": "ListRoles" + }, + "post": { + "tags": [ + "Roles and Permissions" + ], + "summary": "Create Role", + "description": "Creates a custom role.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/role-create-request" + } + } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/role" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the request mentioned in the “name” field on the error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "409": { + "description": "Error codes:\n* “duplicate”: Role with the same name already exists.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "operationId": "CreateRole" + } + }, + "/roles/{roleId}": { + "parameters": [ + { + "schema": { + "type": "string" + }, + "name": "roleId", + "in": "path", + "required": true, + "description": "The role identifier." + } + ], + "get": { + "summary": "Get Role", + "description": "Retrieves a role by identifier.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/role" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* “empty”: Empty input for the “roleId” path parameter variable.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to read the role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": the role could not be found by identifier.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "operationId": "GetRole", + "tags": [ + "Roles and Permissions" + ] + }, + "put": { + "summary": "Update Role", + "description": "Updates a role by identifier. Only custom roles can be updated.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/role-update-request" + } + } + } + }, + "responses": { + "204": { + "description": "No Content", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* “empty”: Empty input for the “roleId” path parameter variable.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to update the role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": the role could not be found by identifier.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "operationId": "UpdateRole", + "tags": [ + "Roles and Permissions" + ] + }, + "delete": { + "summary": "Delete Role", + "description": "Deletes a role by identifier. Only custom roles can be deleted.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "responses": { + "204": { + "description": "No Content", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "400": { + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* “empty”: Empty input for the “roleId” path parameter variable.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "403": { + "description": "Error codes:\n* \"forbidden\": the authenticated user is not allowed to delete the role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "404": { + "description": "Error codes:\n* \"notFound\": the role could not be found by identifier.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "operationId": "DeleteRole", + "tags": [ + "Roles and Permissions" + ] } }, "/schedule-templates": { @@ -26376,19 +26765,74 @@ "description": "Role in the account.", "required": [ "id", + "type", "name" ], - "properties": { - "id": { - "type": "string", - "description": "The identifier of the role." + "allOf": [ + { + "properties": { + "id": { + "type": "string", + "description": "The identifier of the role." + }, + "type": { + "type": "string", + "description": "The role type.", + "enum": [ + "system", + "custom" + ] + } + } }, + { + "$ref": "#/components/schemas/role-no-id" + } + ] + }, + "role-no-id": { + "title": "Role", + "type": "object", + "description": "Role in the account.", + "properties": { "name": { "type": "string", "description": "Name of the role." + }, + "permissions": { + "type": "array", + "description": "List of permissions associated with role.", + "minItems": 1, + "items": { + "type": "string" + } } } }, + "role-create-request": { + "title": "Role Create Request", + "type": "object", + "description": "Role create request.", + "required": [ + "name", + "permissions" + ], + "allOf": [ + { + "$ref": "#/components/schemas/role-no-id" + } + ] + }, + "role-update-request": { + "title": "Role Update Request", + "type": "object", + "description": "Role update request.", + "allOf": [ + { + "$ref": "#/components/schemas/role-no-id" + } + ] + }, "schedule-template": { "title": "Schedule Template", "type": "object", From a52c4062ec8e0d3428bbf0928eb94698e16fdb26 Mon Sep 17 00:00:00 2001 From: "laszlo.david" Date: Thu, 12 Feb 2026 23:49:41 +0200 Subject: [PATCH 02/22] fine tune descriptions, internalize placeholder object --- articles/LCPublicAPI/api/Public-API.v1.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index d1916c9..97861dd 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -11383,7 +11383,7 @@ }, "put": { "summary": "Update Role", - "description": "Updates a role by identifier. Only custom roles can be updated.", + "description": "Updates a role by identifier.\n\n> Note: Only custom roles can be updated. System roles cannot be modified.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -11478,7 +11478,7 @@ }, "delete": { "summary": "Delete Role", - "description": "Deletes a role by identifier. Only custom roles can be deleted.", + "description": "Deletes a role by identifier.\n\n> Note: Only custom roles can be deleted. System roles cannot be removed.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -26794,6 +26794,7 @@ "title": "Role", "type": "object", "description": "Role in the account.", + "x-internal": true, "properties": { "name": { "type": "string", From 2d3009e489ebfbccc063415483b68cbd33db891e Mon Sep 17 00:00:00 2001 From: "laszlo.david" Date: Fri, 13 Feb 2026 09:37:28 +0200 Subject: [PATCH 03/22] add list permissions endpoint --- articles/LCPublicAPI/api/Public-API.v1.json | 149 ++++++++++++++++++++ 1 file changed, 149 insertions(+) diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index 97861dd..bbb5f3b 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -11563,6 +11563,56 @@ ] } }, + "/permissions": { + "get": { + "tags": [ + "Roles and Permissions" + ], + "summary": "List Permissions", + "description": "Retrieves a list of all permissions available for the account.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/list-permissions-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + }, + "401": { + "description": "The user could not be identified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } + } + }, + "operationId": "ListPermissions" + } + }, "/schedule-templates": { "get": { "summary": "List Schedule Templates", @@ -22500,6 +22550,26 @@ ], "description": "A response for the List Roles endpoint." }, + "list-permissions-response": { + "title": "List Permissions Response", + "type": "object", + "properties": { + "itemCount": { + "type": "integer" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/permission" + } + } + }, + "required": [ + "itemCount", + "items" + ], + "description": "A response for the List Roles endpoint." + }, "list-perfect-match-candidates-response": { "title": "List PerfectMatch Candidates Response", "type": "object", @@ -26834,6 +26904,85 @@ } ] }, + "permission": { + "title": "Permission", + "type": "object", + "description": "A single permission which governs access to resources.", + "required": [ + "name", + "description", + "category", + "entityType", + "dependsOn" + ], + "properties": { + "name": { + "type": "string", + "description": "Name of the permission. Examples: projectCreate, identityGroupCreate, accountUserRead" + }, + "description": { + "type": "string", + "description": "Human-readable description of the permission." + }, + "category": { + "$ref": "#/components/schemas/permission-category" + }, + "entityType": { + "$ref": "#/components/schemas/permission-entity-type" + }, + "dependsOn": { + "type": "array", + "description": "List of permission names that this permission depends on. Empty array if no dependencies.", + "items": { + "type": "string", + "description": "Name of a dependent permission. Examples: projectRead, identityGroupRead, accountUserRead" + } + } + } + }, + "permission-category": { + "title": "Permission Category", + "type": "object", + "description": "The category a permission belongs to.", + "required": [ + "name", + "displayName" + ], + "properties": { + "name": { + "type": "string", + "description": "Category identifier. Examples: projectManagement, accountManagement, resources" + }, + "displayName": { + "type": "string", + "description": "Human-readable category name. Examples: Projects, User Management, Resources" + } + } + }, + "permission-entity-type": { + "title": "Permission Entity Type", + "type": "object", + "description": "The entity type a permission applies to.", + "required": [ + "name", + "displayName", + "description" + ], + "properties": { + "name": { + "type": "string", + "description": "Entity type identifier. Examples: project, group, accountUser" + }, + "displayName": { + "type": "string", + "description": "Human-readable entity type name. Examples: Projects, Groups, Users" + }, + "description": { + "type": "string", + "description": "Description of the entity type and its permissions." + } + } + }, "schedule-template": { "title": "Schedule Template", "type": "object", From d417eb6492b58558f9df8dfb6356b139f752b125 Mon Sep 17 00:00:00 2001 From: "laszlo.david" Date: Fri, 13 Feb 2026 09:59:24 +0200 Subject: [PATCH 04/22] add exmaples on permission response fields --- articles/LCPublicAPI/api/Public-API.v1.json | 54 ++++++++++++++++++--- 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index bbb5f3b..9c21a9f 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -26918,7 +26918,12 @@ "properties": { "name": { "type": "string", - "description": "Name of the permission. Examples: projectCreate, identityGroupCreate, accountUserRead" + "description": "Name of the permission.", + "examples": [ + "projectCreate", + "identityGroupCreate", + "accountUserRead" + ] }, "description": { "type": "string", @@ -26933,9 +26938,19 @@ "dependsOn": { "type": "array", "description": "List of permission names that this permission depends on. Empty array if no dependencies.", + "examples": [ + ["projectRead"], + ["identityGroupRead"], + [] + ], "items": { "type": "string", - "description": "Name of a dependent permission. Examples: projectRead, identityGroupRead, accountUserRead" + "description": "Name of a dependent permission.", + "examples": [ + "projectRead", + "identityGroupRead", + "accountUserRead" + ] } } } @@ -26951,11 +26966,21 @@ "properties": { "name": { "type": "string", - "description": "Category identifier. Examples: projectManagement, accountManagement, resources" + "description": "Category identifier.", + "examples": [ + "projectManagement", + "accountManagement", + "resources" + ] }, "displayName": { "type": "string", - "description": "Human-readable category name. Examples: Projects, User Management, Resources" + "description": "Human-readable category name.", + "examples": [ + "Projects", + "User Management", + "Resources" + ] } } }, @@ -26971,15 +26996,30 @@ "properties": { "name": { "type": "string", - "description": "Entity type identifier. Examples: project, group, accountUser" + "description": "Entity type identifier.", + "examples": [ + "project", + "group", + "accountUser" + ] }, "displayName": { "type": "string", - "description": "Human-readable entity type name. Examples: Projects, Groups, Users" + "description": "Human-readable entity type name.", + "examples": [ + "Projects", + "Groups", + "Users" + ] }, "description": { "type": "string", - "description": "Description of the entity type and its permissions." + "description": "Description of the entity type and its permissions.", + "examples": [ + "These permissions provide the ability to manage projects", + "These permissions provide the ability to manage groups", + "These permissions provide the ability to manage users" + ] } } }, From 148119dda0a6b11472bd179906d8b916a2f75609 Mon Sep 17 00:00:00 2001 From: "laszlo.david" Date: Fri, 13 Feb 2026 11:14:52 +0200 Subject: [PATCH 05/22] clean up, add constraints, more detailed descriptions --- articles/LCPublicAPI/api/Public-API.v1.json | 128 ++++++++------------ 1 file changed, 50 insertions(+), 78 deletions(-) diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index 9c21a9f..0f465dd 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -11130,7 +11130,7 @@ "Roles and Permissions" ], "summary": "List Roles", - "description": "Retrieves a list of all roles available for the account.", + "description": "Retrieves a list of all roles available for the account.\n\nSee [List Permissions](#operation/ListPermissions) for further details about permissions.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -11187,7 +11187,7 @@ "Roles and Permissions" ], "summary": "Create Role", - "description": "Creates a custom role.", + "description": "Creates a custom role.\n\nSee [List Permissions](#operation/ListPermissions) for available permission names.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -11287,7 +11287,7 @@ ], "get": { "summary": "Get Role", - "description": "Retrieves a role by identifier.", + "description": "Retrieves a role by identifier.\n\nSee [List Permissions](#operation/ListPermissions) for available permission names.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -11383,7 +11383,7 @@ }, "put": { "summary": "Update Role", - "description": "Updates a role by identifier.\n\n> Note: Only custom roles can be updated. System roles cannot be modified.", + "description": "Updates a role by identifier. Pay special attention to how [updating](../docs/Updating-data-with-PUT.html) works.\n\n> Note: Only custom roles can be updated. System roles cannot be modified.\n\nSee [List Permissions](#operation/ListPermissions) for available permission names.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -11469,6 +11469,21 @@ "$ref": "#/components/headers/X-LC-TraceId" } } + }, + "409": { + "description": "Error codes:\n* \"duplicate\" Role with the same name already exists.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + }, + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + } } }, "operationId": "UpdateRole", @@ -22568,7 +22583,7 @@ "itemCount", "items" ], - "description": "A response for the List Roles endpoint." + "description": "A response for the List Permissions endpoint." }, "list-perfect-match-candidates-response": { "title": "List PerfectMatch Candidates Response", @@ -26868,14 +26883,27 @@ "properties": { "name": { "type": "string", - "description": "Name of the role." + "description": "Name of the role.", + "minLength": 1, + "maxLength": 100 + }, + "description": { + "type": "string", + "description": "Description of the role.", + "minLength": 1, + "maxLength": 1000 }, "permissions": { "type": "array", - "description": "List of permissions associated with role.", + "description": "List of permissions associated with role. See [List Permissions](#operation/ListPermissions) for further details about permissions.", "minItems": 1, "items": { - "type": "string" + "type": "string", + "examples": [ + "projectCreate", + "identityGroupCreate", + "accountUserRead" + ] } } } @@ -26930,10 +26958,22 @@ "description": "Human-readable description of the permission." }, "category": { - "$ref": "#/components/schemas/permission-category" + "type": "string", + "description": "The category a permission belongs to.", + "examples": [ + "Projects", + "User Management", + "Resources" + ] }, "entityType": { - "$ref": "#/components/schemas/permission-entity-type" + "type": "string", + "description": "The entity type a permission applies to.", + "examples": [ + "Projects", + "Groups", + "Users" + ] }, "dependsOn": { "type": "array", @@ -26955,74 +26995,6 @@ } } }, - "permission-category": { - "title": "Permission Category", - "type": "object", - "description": "The category a permission belongs to.", - "required": [ - "name", - "displayName" - ], - "properties": { - "name": { - "type": "string", - "description": "Category identifier.", - "examples": [ - "projectManagement", - "accountManagement", - "resources" - ] - }, - "displayName": { - "type": "string", - "description": "Human-readable category name.", - "examples": [ - "Projects", - "User Management", - "Resources" - ] - } - } - }, - "permission-entity-type": { - "title": "Permission Entity Type", - "type": "object", - "description": "The entity type a permission applies to.", - "required": [ - "name", - "displayName", - "description" - ], - "properties": { - "name": { - "type": "string", - "description": "Entity type identifier.", - "examples": [ - "project", - "group", - "accountUser" - ] - }, - "displayName": { - "type": "string", - "description": "Human-readable entity type name.", - "examples": [ - "Projects", - "Groups", - "Users" - ] - }, - "description": { - "type": "string", - "description": "Description of the entity type and its permissions.", - "examples": [ - "These permissions provide the ability to manage projects", - "These permissions provide the ability to manage groups", - "These permissions provide the ability to manage users" - ] - } - } - }, "schedule-template": { "title": "Schedule Template", "type": "object", From 2927df1ef6d0c73f633943aaaac417338756e290 Mon Sep 17 00:00:00 2001 From: "laszlo.david" Date: Fri, 13 Feb 2026 11:31:36 +0200 Subject: [PATCH 06/22] added more detailed error response descriptions --- articles/LCPublicAPI/api/Public-API.v1.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index 0f465dd..bba76c7 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -11411,7 +11411,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* “empty”: Empty input for the “roleId” path parameter variable.", + "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the \"name\" field on the error response, or system roles cannot be updated.\n* \"empty\": Empty input for the \"roleId\" path parameter variable.", "content": { "application/json": { "schema": { @@ -11512,7 +11512,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* “empty”: Empty input for the “roleId” path parameter variable.", + "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the \"name\" field on the error response, or system roles cannot be deleted.\n* \"empty\": Empty input for the \"roleId\" path parameter variable.", "content": { "application/json": { "schema": { From a7dcd93732a82a59de74e0c4efe7653289e12844 Mon Sep 17 00:00:00 2001 From: "laszlo.david" Date: Fri, 13 Feb 2026 12:02:55 +0200 Subject: [PATCH 07/22] fixed links, refined description --- articles/LCPublicAPI/api/Public-API.v1.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index bba76c7..e2d4a84 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -11130,7 +11130,7 @@ "Roles and Permissions" ], "summary": "List Roles", - "description": "Retrieves a list of all roles available for the account.\n\nSee [List Permissions](#operation/ListPermissions) for further details about permissions.", + "description": "Retrieves a list of all roles available for the account.\n\nSee [List Permissions](#/operations/ListPermissions) for further details about permissions.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -11187,7 +11187,7 @@ "Roles and Permissions" ], "summary": "Create Role", - "description": "Creates a custom role.\n\nSee [List Permissions](#operation/ListPermissions) for available permission names.", + "description": "Creates a custom role.\n\nSee [List Permissions](#/operations/ListPermissions) for available permission names.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -11287,7 +11287,7 @@ ], "get": { "summary": "Get Role", - "description": "Retrieves a role by identifier.\n\nSee [List Permissions](#operation/ListPermissions) for available permission names.", + "description": "Retrieves a role by identifier.\n\nSee [List Permissions](#/operations/ListPermissions) for further details about permissions.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -11383,7 +11383,7 @@ }, "put": { "summary": "Update Role", - "description": "Updates a role by identifier. Pay special attention to how [updating](../docs/Updating-data-with-PUT.html) works.\n\n> Note: Only custom roles can be updated. System roles cannot be modified.\n\nSee [List Permissions](#operation/ListPermissions) for available permission names.", + "description": "Updates a role by identifier. Pay special attention to how [updating](../docs/Updating-data-with-PUT.html) works.\n\nSee [List Permissions](#/operations/ListPermissions) for available permission names.\n\n> Note: Only custom roles can be updated. System roles cannot be modified.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -26895,7 +26895,7 @@ }, "permissions": { "type": "array", - "description": "List of permissions associated with role. See [List Permissions](#operation/ListPermissions) for further details about permissions.", + "description": "List of permissions associated with role.", "minItems": 1, "items": { "type": "string", From b80719bb4ef91803cca929787eb3519713a79e4b Mon Sep 17 00:00:00 2001 From: "laszlo.david" Date: Fri, 13 Feb 2026 13:50:15 +0200 Subject: [PATCH 08/22] expanded permission object on response instead of name only --- articles/LCPublicAPI/api/Public-API.v1.json | 72 ++++++++++----------- 1 file changed, 35 insertions(+), 37 deletions(-) diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index e2d4a84..f4dc0a9 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -11130,7 +11130,7 @@ "Roles and Permissions" ], "summary": "List Roles", - "description": "Retrieves a list of all roles available for the account.\n\nSee [List Permissions](#/operations/ListPermissions) for further details about permissions.", + "description": "Retrieves a list of all roles available for the account.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -11287,7 +11287,7 @@ ], "get": { "summary": "Get Role", - "description": "Retrieves a role by identifier.\n\nSee [List Permissions](#/operations/ListPermissions) for further details about permissions.", + "description": "Retrieves a role by identifier.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -26853,33 +26853,41 @@ "type", "name" ], - "allOf": [ - { - "properties": { - "id": { - "type": "string", - "description": "The identifier of the role." - }, - "type": { - "type": "string", - "description": "The role type.", - "enum": [ - "system", - "custom" - ] - } - } + "properties": { + "id": { + "type": "string", + "description": "The identifier of the role." }, - { - "$ref": "#/components/schemas/role-no-id" + "type": { + "type": "string", + "description": "The role type.", + "enum": [ + "system", + "custom" + ] + }, + "name": { + "type": "string", + "description": "Name of the role." + }, + "description": { + "type": "string", + "description": "Description of the role." + }, + "permissions": { + "type": "array", + "description": "List of permissions associated with role.", + "minItems": 1, + "items": { + "$ref": "#/components/schemas/permission" + } } - ] + } }, - "role-no-id": { - "title": "Role", + "role-update-request": { + "title": "Role Update Request", "type": "object", - "description": "Role in the account.", - "x-internal": true, + "description": "Role update request.", "properties": { "name": { "type": "string", @@ -26895,7 +26903,7 @@ }, "permissions": { "type": "array", - "description": "List of permissions associated with role.", + "description": "List of permission names associated with role.", "minItems": 1, "items": { "type": "string", @@ -26918,17 +26926,7 @@ ], "allOf": [ { - "$ref": "#/components/schemas/role-no-id" - } - ] - }, - "role-update-request": { - "title": "Role Update Request", - "type": "object", - "description": "Role update request.", - "allOf": [ - { - "$ref": "#/components/schemas/role-no-id" + "$ref": "#/components/schemas/role-update-request" } ] }, From 97c7394aabb1adf7ca8d41d114f0bfbfed2634a2 Mon Sep 17 00:00:00 2001 From: vblajan Date: Thu, 5 Mar 2026 10:52:53 +0200 Subject: [PATCH 09/22] converting entity type to object --- articles/LCPublicAPI/api/Public-API.v1.json | 32 ++++++++++++++++----- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index f4dc0a9..85c8725 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -26965,13 +26965,7 @@ ] }, "entityType": { - "type": "string", - "description": "The entity type a permission applies to.", - "examples": [ - "Projects", - "Groups", - "Users" - ] + "$ref": "#/components/schemas/permission-entity-type" }, "dependsOn": { "type": "array", @@ -26993,6 +26987,30 @@ } } }, + "permission-entity-type": { + "title": "Entity Type", + "type": "object", + "description": "The entity type a permission applies to.", + "required": [ + "name", + "description" + ], + "properties": { + "name": { + "type": "string", + "description": "Name of the entity type.", + "examples": [ + "Projects", + "Groups", + "Users" + ] + }, + "description": { + "type": "string", + "description": "Human-readable description of the entity type." + } + } + }, "schedule-template": { "title": "Schedule Template", "type": "object", From 8aaf7ec1d31c1749168870bd545d16c2a692d99b Mon Sep 17 00:00:00 2001 From: vblajan Date: Thu, 12 Mar 2026 23:42:42 +0200 Subject: [PATCH 10/22] adding 403 error on create roles and updated descriptions --- articles/LCPublicAPI/api/Public-API.v1.json | 22 +++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index 85c8725..ad68a3f 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -11225,7 +11225,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the request mentioned in the “name” field on the error response.", + "description": "Error codes:\n* “invalid”: Invalid input in the request mentioned in the “name” field on the error response.\n* \"minSize\": Minimum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.", "content": { "application/json": { "schema": { @@ -11254,6 +11254,16 @@ } } }, + "403": { + "description": "Error codes: \n* \"forbidden\": the authenticated user is not allowed to create the resource.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + } + }, "409": { "description": "Error codes:\n* “duplicate”: Role with the same name already exists.", "content": { @@ -11383,7 +11393,7 @@ }, "put": { "summary": "Update Role", - "description": "Updates a role by identifier. Pay special attention to how [updating](../docs/Updating-data-with-PUT.html) works.\n\nSee [List Permissions](#/operations/ListPermissions) for available permission names.\n\n> Note: Only custom roles can be updated. System roles cannot be modified.", + "description": "Updates a role by identifier. Pay special attention to how [updating](../docs/Updating-data-with-PUT.html) works.\n\nSee [List Permissions](#/operations/ListPermissions) for available permission names.\n\n> Note: Only custom roles can be updated. Provisioned roles cannot be modified.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -11411,7 +11421,7 @@ } }, "400": { - "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the \"name\" field on the error response, or system roles cannot be updated.\n* \"empty\": Empty input for the \"roleId\" path parameter variable.", + "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the \"name\" field on the error response, or provisioned roles cannot be updated.\n* \"empty\": Empty input for the \"roleId\" path parameter variable.\n* \"minSize\": Minimum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.", "content": { "application/json": { "schema": { @@ -11493,7 +11503,7 @@ }, "delete": { "summary": "Delete Role", - "description": "Deletes a role by identifier.\n\n> Note: Only custom roles can be deleted. System roles cannot be removed.", + "description": "Deletes a role by identifier.\n\n> Note: Only custom roles can be deleted. Provisioned roles cannot be removed.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -11512,7 +11522,7 @@ } }, "400": { - "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the \"name\" field on the error response, or system roles cannot be deleted.\n* \"empty\": Empty input for the \"roleId\" path parameter variable.", + "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the \"name\" field on the error response, or provisioned roles cannot be deleted.\n* \"empty\": Empty input for the \"roleId\" path parameter variable.", "content": { "application/json": { "schema": { @@ -26862,7 +26872,7 @@ "type": "string", "description": "The role type.", "enum": [ - "system", + "provisioned", "custom" ] }, From a84de915937f3a6f4f3d33b78406ba75626ffe3d Mon Sep 17 00:00:00 2001 From: vblajan Date: Thu, 12 Mar 2026 23:47:47 +0200 Subject: [PATCH 11/22] moved duplicate exception to 409 for translation engine update --- articles/LCPublicAPI/api/Public-API.v1.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index ad68a3f..b64d0a8 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -13367,7 +13367,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty input in the update translation engine model. Check error details.\n* \"invalidLanguage\": Invalid language code used in language-pair\n* \"duplicate\": Duplicate resources found for the language pair specified in the error details.", + "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.\n* \"empty\": Empty input in the update translation engine model. Check error details.\n* \"invalidLanguage\": Invalid language code used in language-pair", "headers": { "X-LC-TraceId": { "$ref": "#/components/headers/X-LC-TraceId" @@ -13427,7 +13427,7 @@ } }, "409": { - "description": "Error codes:\n\n * \"updateNotAllowed\": Property specified in error response can not be updated because the translation engine provided is a copy assigned to a project.", + "description": "Error codes:\n\n * \"updateNotAllowed\": Property specified in error response can not be updated because the translation engine provided is a copy assigned to a project.\n* \"duplicate\": Duplicate resources found for the language pair specified in the error details.", "content": { "application/json": { "schema": { From 44b3da844abd8526f6c9dcb22aeca17d60654472 Mon Sep 17 00:00:00 2001 From: vblajan Date: Mon, 16 Mar 2026 11:15:50 +0200 Subject: [PATCH 12/22] changed Roles and Permissions to singular --- articles/LCPublicAPI/api/Public-API.v1.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index b64d0a8..d3043fa 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -98,8 +98,8 @@ "description": "Rate Limits" }, { - "name": "Roles and Permissions", - "description": "Roles and Permissions" + "name": "Role and Permission", + "description": "Role and Permission" }, { "name": "Schedule Template", @@ -11127,7 +11127,7 @@ "/roles": { "get": { "tags": [ - "Roles and Permissions" + "Role and Permission" ], "summary": "List Roles", "description": "Retrieves a list of all roles available for the account.", @@ -11184,7 +11184,7 @@ }, "post": { "tags": [ - "Roles and Permissions" + "Role and Permission" ], "summary": "Create Role", "description": "Creates a custom role.\n\nSee [List Permissions](#/operations/ListPermissions) for available permission names.", @@ -11388,7 +11388,7 @@ }, "operationId": "GetRole", "tags": [ - "Roles and Permissions" + "Role and Permission" ] }, "put": { @@ -11498,7 +11498,7 @@ }, "operationId": "UpdateRole", "tags": [ - "Roles and Permissions" + "Role and Permission" ] }, "delete": { @@ -11584,14 +11584,14 @@ }, "operationId": "DeleteRole", "tags": [ - "Roles and Permissions" + "Role and Permission" ] } }, "/permissions": { "get": { "tags": [ - "Roles and Permissions" + "Role and Permission" ], "summary": "List Permissions", "description": "Retrieves a list of all permissions available for the account.", From eea1b7365aef635a5d8b3e22ba0c664a0b952cec Mon Sep 17 00:00:00 2001 From: vblajan Date: Mon, 16 Mar 2026 11:46:31 +0200 Subject: [PATCH 13/22] removing min requirements for description --- articles/LCPublicAPI/api/Public-API.v1.json | 1 - 1 file changed, 1 deletion(-) diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index d3043fa..74c0e96 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -26908,7 +26908,6 @@ "description": { "type": "string", "description": "Description of the role.", - "minLength": 1, "maxLength": 1000 }, "permissions": { From 13842cedbb468746578c4932a17531ee6d29877a Mon Sep 17 00:00:00 2001 From: vblajan Date: Mon, 16 Mar 2026 12:16:29 +0200 Subject: [PATCH 14/22] added missing to 400 exceptions --- articles/LCPublicAPI/api/Public-API.v1.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index 74c0e96..0093ef0 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -11225,7 +11225,7 @@ } }, "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the request mentioned in the “name” field on the error response.\n* \"minSize\": Minimum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.", + "description": "Error codes:\n* “invalid”: Invalid input in the request mentioned in the “name” field on the error response.\n* \"minSize\": Minimum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"missing\": Missing required field for the value mentioned in the \"name\" field on the error response.", "content": { "application/json": { "schema": { @@ -11421,7 +11421,7 @@ } }, "400": { - "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the \"name\" field on the error response, or provisioned roles cannot be updated.\n* \"empty\": Empty input for the \"roleId\" path parameter variable.\n* \"minSize\": Minimum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.", + "description": "Error codes:\n* \"invalid\": Invalid input in the query parameter mentioned in the \"name\" field on the error response, or provisioned roles cannot be updated.\n* \"empty\": Empty input for the \"roleId\" path parameter variable.\n* \"minSize\": Minimum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"maxSize\": Maximum size exceeded for the value mentioned in the \"name\" field on the error response.\n* \"missing\": Missing required field for the value mentioned in the \"name\" field on the error response.", "content": { "application/json": { "schema": { From 5631816cef60d270e2a7c847851e63dd30bd8f98 Mon Sep 17 00:00:00 2001 From: rtriteanrws Date: Wed, 18 Mar 2026 15:37:08 +0200 Subject: [PATCH 15/22] Remove fields parameter reference from Update Application Removed unused fields parameter reference from API specification. --- articles/LCPublicAPI/api/Public-API.v1.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index da42c59..51099e7 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -481,9 +481,6 @@ }, { "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" } ], "description": "Updates an integration application.", From a7ef244bfe4f46196da15d4c0dce65dc968c0448 Mon Sep 17 00:00:00 2001 From: vblajan Date: Tue, 24 Mar 2026 10:51:31 +0200 Subject: [PATCH 16/22] adding metadata values to user and group objects --- articles/LCPublicAPI/api/Public-API.v1.json | 31 +++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index da42c59..da8d566 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -21137,6 +21137,9 @@ "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": { + "$ref": "#/components/schemas/metadata" } } }, @@ -21247,6 +21250,9 @@ "items": { "type": "string" } + }, + "metadata": { + "$ref": "#/components/schemas/metadata" } } }, @@ -30625,6 +30631,22 @@ "targetSegmentsDifferOption" ] }, + "metadata": { + "title": "Metadata", + "type": "object", + "description": "Additional metadata", + "properties": { + "prop1": { + "type": "string" + }, + "prop2": { + "type": "string" + }, + "prop3": { + "type": "string" + } + } + }, "user": { "title": "User", "type": "object", @@ -30696,6 +30718,9 @@ }, "membership": { "$ref": "#/components/schemas/account-membership-type" + }, + "metadata": { + "$ref": "#/components/schemas/metadata" } } }, @@ -30722,6 +30747,9 @@ }, "userDetails": { "$ref": "#/components/schemas/user-details" + }, + "metadata": { + "$ref": "#/components/schemas/metadata" } }, "required": [ @@ -30826,6 +30854,9 @@ "type": "object", "$ref": "#/components/schemas/object-id" } + }, + "metadata": { + "$ref": "#/components/schemas/metadata" } } }, From 54eaaa582dd765797325458c2aa2e57b7bb304e1 Mon Sep 17 00:00:00 2001 From: rtriteanrws Date: Tue, 24 Mar 2026 15:07:37 +0200 Subject: [PATCH 17/22] Fix description for Update Group API --- articles/LCPublicAPI/api/Public-API.v1.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index 51099e7..b8f0ef3 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -2655,7 +2655,7 @@ "Group" ], "summary": "Update Group", - "description": "Updates a group by . We recommend reading this page too [Updating data with PUT](../docs/Updating-data-with-PUT.html).", + "description": "Updates a group. We recommend reading this page too [Updating data with PUT](../docs/Updating-data-with-PUT.html).", "parameters": [ { "$ref": "#/components/parameters/Authorization" From 5d98db3256f12e412a9a8a2462661e6d6c2f1e49 Mon Sep 17 00:00:00 2001 From: vblajan Date: Thu, 26 Mar 2026 18:32:25 +0200 Subject: [PATCH 18/22] updating metadata docs --- articles/LCPublicAPI/api/Public-API.v1.json | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index da8d566..11b4002 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -30634,17 +30634,11 @@ "metadata": { "title": "Metadata", "type": "object", - "description": "Additional metadata", + "description": "Additional metadata values in a key - value pair format", "properties": { - "prop1": { - "type": "string" - }, - "prop2": { - "type": "string" - }, - "prop3": { - "type": "string" - } + "additionalProperties": { + "type": "object" + } } }, "user": { From 7995d103a085e5ea110538fae39a891ca54e0d7a Mon Sep 17 00:00:00 2001 From: Rares Tritean Date: Mon, 6 Apr 2026 17:29:38 +0300 Subject: [PATCH 19/22] 2026.04.R1.PublicAPIService.docs --- RWSTemplate/styles/main.css | 21 ++-- .../development/UI-App-development-guide.md | 11 +- .../blueprints/Testing-with-Docker.md | 2 +- articles/LCPublicAPI/api/Public-API.v1.json | 112 +++++++++++++++++- articles/LCPublicAPI/api/Webhooks.v1.json | 39 +++++- .../Trados-Data-Bridge-APIs-for-Postman.md | 4 +- 6 files changed, 168 insertions(+), 21 deletions(-) diff --git a/RWSTemplate/styles/main.css b/RWSTemplate/styles/main.css index c32c6da..4c71afe 100644 --- a/RWSTemplate/styles/main.css +++ b/RWSTemplate/styles/main.css @@ -624,14 +624,14 @@ article h4 { pre { font-family: monospace, monospace; font-size: 1em; - background-color: #17151b !important; - color: #e6f3ff !important; + background-color: #2d3239 !important; + color: #c1cbd5 !important; word-break: break-all; word-wrap: break-word; border-radius: 4px; border: none; padding: 9.5px; - margin: 0 0 10px; + margin: 20px 10px; font-size: 13px; } @@ -639,7 +639,6 @@ pre code { font-family: monospace, monospace; color: inherit; padding: 0; - background-color: #fafcff; color: inherit; padding: 0; border: none; @@ -647,7 +646,7 @@ pre code { code { font-family: monospace, monospace; - color: #363636; + color: #4d4d4d; background-color: #fafcff; padding: 2px 4px; border-radius: 1px; @@ -673,7 +672,7 @@ a code:hover { } .hljs-string { - color: #A5D6FF; + color: #afdbff; } .hljs-comment { @@ -698,15 +697,19 @@ a code:hover { } .hljs-type { - color: #87ceeb; + color: #9ae2ff; } .hljs-attr { - color: #80CBC4; + color: #9ae2ff; } .hljs-attribute { - color: #87ceeb; + color: #9ae2ff; +} + +.hljs-name { + color: #92e8a9; } .hljs-comment>.hljs-doctag { diff --git a/articles/Extensibility/docs/development/UI-App-development-guide.md b/articles/Extensibility/docs/development/UI-App-development-guide.md index 11206e4..afd01d8 100644 --- a/articles/Extensibility/docs/development/UI-App-development-guide.md +++ b/articles/Extensibility/docs/development/UI-App-development-guide.md @@ -2,8 +2,9 @@ UI extensions offer the possibility to add custom user interface elements and functionality. Custom [buttons and panels can be added to specific places](UI-App-custom-elements-locations.md) within the user interface. -> [!CAUTION] -> #### This feature is currently in BETA. +> [!CAUTION] +> **This feature is currently in BETA.** +> > Please note that in a future phase, we will introduce significant changes as we move towards the official release: > * The current implementation utilizes the authorization token of the logged-in Trados user for the Trados Cloud Platform API and the app's own API calls. In a future update, a different authorization token will be introduced for these operation. > * As a result, access to the Trados Cloud Platform API functionality of a UI extension app will be governed not only by the Trados user's permissions but also by the app's [scopes](App-Descriptor.md#scopes). @@ -231,12 +232,14 @@ Note that adding `script` tags is not allowed and scripts from sources that are ### Notes > [!NOTE] -> #### Custom elements display order +> **Custom elements display order** +> > Within a single UI extension: custom elements in your extension that have the same `location` are displayed in the same order in which they are present in your `ExtensionElement`s array. > > With multiple UI extensions: the display order is determined by the order in which each UI extension's script file is loaded in the Trados UI. > [!NOTE] -> #### Unexpected re-renders +> **Unexpected re-renders** +> > A custom element's `onrender` event can be triggered multiple times depending on state changes in the Trados UI and depending on user's interactions with Trados UI. Subsequently, the corresponding `eventHandler` gets executed multiple times. You can add logic specific to you use-case to protect your UI extension against unneeded execution of `onrender` `eventHandler`. \ No newline at end of file diff --git a/articles/Extensibility/docs/development/blueprints/Testing-with-Docker.md b/articles/Extensibility/docs/development/blueprints/Testing-with-Docker.md index c9e21fa..5112ebb 100644 --- a/articles/Extensibility/docs/development/blueprints/Testing-with-Docker.md +++ b/articles/Extensibility/docs/development/blueprints/Testing-with-Docker.md @@ -34,7 +34,7 @@ To configure your MongoDB follow these steps: ``` 2. Copy the `IPv4 Address` IP address. Note - your IP can change depending on your network settings, and you might need to update it from time to time. 3. Go to your MongoDB `/bin` location (usually 'C:/Program Files/MongoDB/Server/\/bin'), open `mongod.cfg` as Administrator and add the copied address to the `bindIp` configuration setting. For example: - ```conf + ``` ... net: port: 27017 diff --git a/articles/LCPublicAPI/api/Public-API.v1.json b/articles/LCPublicAPI/api/Public-API.v1.json index da42c59..f7cc6a4 100644 --- a/articles/LCPublicAPI/api/Public-API.v1.json +++ b/articles/LCPublicAPI/api/Public-API.v1.json @@ -11926,13 +11926,22 @@ "Task" ], "summary": "Accept Task", - "description": "Accepts a task. The authenticated user becomes the owner of the accepted task and can start work on it.", + "description": "Accepts a task. The authenticated user becomes the owner of the accepted task and can start work on it. Optionally, the task can be accepted on behalf of a group by providing the `onBehalfOfGroup` query parameter. In this case, the authenticated user must be a member of the specified group, and the group must be present in the task's assignee list. The `onBehalfOfGroup` parameter is allowed only if the [task](#/operations/GetTask) has `configuration.CONCURRENT_EDITING_ENABLED = true`.", "parameters": [ { "$ref": "#/components/parameters/Authorization" }, { "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "name": "onBehalfOfGroup", + "in": "query", + "required": false, + "description": "The identifier of the group on behalf of which the task is being accepted. The authenticated user must be a member of the specified group, and the group must be present in the task's assignee list.", + "schema": { + "type": "string" + } } ], "responses": { @@ -27061,7 +27070,7 @@ } }, "owner": { - "$ref": "#/components/schemas/user" + "$ref": "#/components/schemas/task-owner" }, "assignees": { "type": "array", @@ -27369,6 +27378,105 @@ } } }, + "task-owner": { + "title": "Task Owner", + "type": "object", + "description": "Task owner. Based on the \"type\", the following properties can be retrieved: \"user\" or \"group\".", + "properties": { + "type": { + "type": "string", + "enum": [ + "user", + "group" + ], + "description": "The owner type." + }, + "user": { + "$ref": "#/components/schemas/user", + "description": "
default
The user who owns this task.
" + }, + "group": { + "$ref": "#/components/schemas/group", + "description": "
default
The group that owns this task.
" + }, + "id": { + "type": "string", + "description": "User account identifier.", + "deprecated": true + }, + "description": { + "type": "string", + "description": "Description of this account user. For Service account users only.", + "deprecated": true + }, + "email": { + "type": "string", + "description": "
default
The user's email address. Retrieved only for RWS ID (formerly SDL ID) users (not service users) that the authenticated entity is authorized to read.
", + "deprecated": true + }, + "name": { + "type": "string", + "description": "
default
The user's name. Retrieved only for Service users (not RWS ID users) that the authenticated entity is authorized to read.
", + "deprecated": true + }, + "firstName": { + "type": "string", + "description": "
default
The user's first name. Retrieved only for RWS ID (formerly SDL ID) users (not service users) that the authenticated entity is authorized to read.
", + "deprecated": true + }, + "lastName": { + "type": "string", + "description": "
default
The user's last name. Retrieved only for RWS ID (formerly SDL ID) users (not service users) that the authenticated entity is authorized to read.
", + "deprecated": true + }, + "anonymized": { + "type": "boolean", + "description": "
default
This shows if the authenticated entity has access to read the details of the user or not. If true, then the 'anonymizedUserName' should be retrieved.
", + "deprecated": true + }, + "anonymizedUserName": { + "type": "string", + "description": "
default
Retrieved if the authenticated entity does not have access to read the User.
", + "deprecated": true + }, + "account": { + "allOf": [{ "$ref": "#/components/schemas/account" }], + "description": "The account the user is part of.", + "deprecated": true + }, + "location": { + "allOf": [{ "$ref": "#/components/schemas/folder-v2" }], + "deprecated": true + }, + "groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/group" + }, + "deprecated": true + }, + "userType": { + "allOf": [{ "$ref": "#/components/schemas/user-type" }], + "deprecated": true + }, + "status": { + "allOf": [{ "$ref": "#/components/schemas/user-status" }], + "deprecated": true + }, + "invitationLink": { + "type": "string", + "description": "The user's invitation link. Retrieved only for RWS ID (formerly SDL ID) users—not service users. It is available only if the user has not yet accepted the invitation (status is `inactive`).", + "deprecated": true + }, + "membership": { + "allOf": [{ "$ref": "#/components/schemas/account-membership-type" }], + "deprecated": true + } + }, + "required": [ + "type" + ] + }, "task-type-outcome": { "title": "Task Type Outcome", "type": "object", diff --git a/articles/LCPublicAPI/api/Webhooks.v1.json b/articles/LCPublicAPI/api/Webhooks.v1.json index 4710180..5574a61 100644 --- a/articles/LCPublicAPI/api/Webhooks.v1.json +++ b/articles/LCPublicAPI/api/Webhooks.v1.json @@ -56,8 +56,8 @@ "description": "The project containing the error task." }, "owner": { - "$ref": "#/components/schemas/object-id", - "description": "The owner's account user identifier. Returned if the task has an owner." + "$ref": "#/components/schemas/task-event-owner", + "description": "The task owner. Returned if the task has an owner." }, "location": { "$ref": "#/components/schemas/object-id", @@ -441,8 +441,8 @@ "description": "The project containing the task." }, "owner": { - "$ref": "#/components/schemas/object-id", - "description": "The owner's account user identifier. Returned if the task has an owner." + "$ref": "#/components/schemas/task-event-owner", + "description": "The task owner. Returned if the task has an owner." }, "location": { "$ref": "#/components/schemas/object-id", @@ -506,6 +506,37 @@ } } }, + "task-event-owner": { + "title": "Task Event Owner", + "type": "object", + "description": "Task owner. Based on the \"type\", the following properties can be retrieved: \"user\" or \"group\".", + "properties": { + "type": { + "type": "string", + "enum": [ + "user", + "group" + ], + "description": "The owner type." + }, + "user": { + "$ref": "#/components/schemas/object-id", + "description": "The user who owns this task." + }, + "group": { + "$ref": "#/components/schemas/object-id", + "description": "The group that owns this task." + }, + "id": { + "type": "string", + "description": "The owner's account user identifier.", + "deprecated": true + } + }, + "required": [ + "type" + ] + }, "task-event-task-type": { "title": "Task Event Task Type", "type": "object", diff --git a/articles/LCPublicAPI/docs/data-bridge/Trados-Data-Bridge-APIs-for-Postman.md b/articles/LCPublicAPI/docs/data-bridge/Trados-Data-Bridge-APIs-for-Postman.md index ec57374..2b0a512 100644 --- a/articles/LCPublicAPI/docs/data-bridge/Trados-Data-Bridge-APIs-for-Postman.md +++ b/articles/LCPublicAPI/docs/data-bridge/Trados-Data-Bridge-APIs-for-Postman.md @@ -55,7 +55,9 @@ For example, we can get information about a project by using the **List Task Sta Simply fill in your value `projectId eq 'stringValue'` from your $filter parameter section and click SEND. Optionally, you can specify additional OData querys like `projectTemplateName eq 'stringValue' and projectShortId eq numericValue`. -For more options see below table + +For more options see the table below: + | Operators| Description| Example | |----------|------------|---------| | Comparison operators| Use the `eq, ne, gt, ge, lt, le` operators to compare a property and a value. |`$filter=revenue eq 100000`| From a31642299a3c146181074b990d35ddb97ee7416b Mon Sep 17 00:00:00 2001 From: Rares Tritean Date: Tue, 7 Apr 2026 10:56:43 +0300 Subject: [PATCH 20/22] 2026.04.R1.PublicAPIService.docs --- articles/LCPublicAPI/docs/Whats-New.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/articles/LCPublicAPI/docs/Whats-New.md b/articles/LCPublicAPI/docs/Whats-New.md index 0ff17c7..4375c80 100644 --- a/articles/LCPublicAPI/docs/Whats-New.md +++ b/articles/LCPublicAPI/docs/Whats-New.md @@ -2,6 +2,13 @@
+## 6 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. +- We have extended custom role management capabilities. You can now [Create](../api/Public-API.v1-fv.html#/operations/CreateRole) and [Update](../api/Public-API.v1-fv.html#/operations/UpdateRole) custom roles. The [Get](../api/Public-API.v1-fv.html#/operations/GetRole) and [List Roles](../api/Public-API.v1-fv.html#/operations/ListRoles) endpoints have been enhanced to include detailed permissions information. +- We've added metadata support for groups and account users, allowing you to attach custom attributes. +- We fixed various bugs. + ## 6 March 2026 - We've exposed the last modified date as `lastModifiedAt` field for project template endpoints. - You can now read and update adjacent languages for a translation engine. From 56a666037e3c5a96794fb2df4ef6f9e2a240d2f7 Mon Sep 17 00:00:00 2001 From: Rares Tritean Date: Tue, 7 Apr 2026 13:27:18 +0300 Subject: [PATCH 21/22] 2026.04.R1.PublicAPIService.docs --- articles/LCPublicAPI/docs/Whats-New.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/articles/LCPublicAPI/docs/Whats-New.md b/articles/LCPublicAPI/docs/Whats-New.md index 4375c80..cd2ea73 100644 --- a/articles/LCPublicAPI/docs/Whats-New.md +++ b/articles/LCPublicAPI/docs/Whats-New.md @@ -2,10 +2,10 @@
-## 6 April 2026 +## 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. -- We have extended custom role management capabilities. You can now [Create](../api/Public-API.v1-fv.html#/operations/CreateRole) and [Update](../api/Public-API.v1-fv.html#/operations/UpdateRole) custom roles. The [Get](../api/Public-API.v1-fv.html#/operations/GetRole) and [List Roles](../api/Public-API.v1-fv.html#/operations/ListRoles) endpoints have been enhanced to include detailed permissions information. +- We have extended custom role management capabilities. You can now [Create](../api/Public-API.v1-fv.html#/operations/CreateRole), [Update](../api/Public-API.v1-fv.html#/operations/UpdateRole) and [Delete](../api/Public-API.v1-fv.html#/operations/DeleteRole) custom roles. The [Get](../api/Public-API.v1-fv.html#/operations/GetRole) and [List Roles](../api/Public-API.v1-fv.html#/operations/ListRoles) endpoints have been enhanced to include detailed permissions information. We've also introduced a new [List Permissions](../api/Public-API.v1-fv.html#/operations/ListPermissions) endpoint to support custom role management. - We've added metadata support for groups and account users, allowing you to attach custom attributes. - We fixed various bugs. From 7ae47b96cbf612c8b0490dcd0f3c58f8d331f85d Mon Sep 17 00:00:00 2001 From: Rares Tritean Date: Tue, 7 Apr 2026 15:28:25 +0300 Subject: [PATCH 22/22] 2026.04.R1.PublicAPIService.docs --- articles/LCPublicAPI/docs/Whats-New.md | 1 - 1 file changed, 1 deletion(-) diff --git a/articles/LCPublicAPI/docs/Whats-New.md b/articles/LCPublicAPI/docs/Whats-New.md index cd2ea73..73047de 100644 --- a/articles/LCPublicAPI/docs/Whats-New.md +++ b/articles/LCPublicAPI/docs/Whats-New.md @@ -6,7 +6,6 @@ - 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. - We have extended custom role management capabilities. You can now [Create](../api/Public-API.v1-fv.html#/operations/CreateRole), [Update](../api/Public-API.v1-fv.html#/operations/UpdateRole) and [Delete](../api/Public-API.v1-fv.html#/operations/DeleteRole) custom roles. The [Get](../api/Public-API.v1-fv.html#/operations/GetRole) and [List Roles](../api/Public-API.v1-fv.html#/operations/ListRoles) endpoints have been enhanced to include detailed permissions information. We've also introduced a new [List Permissions](../api/Public-API.v1-fv.html#/operations/ListPermissions) endpoint to support custom role management. -- We've added metadata support for groups and account users, allowing you to attach custom attributes. - We fixed various bugs. ## 6 March 2026