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..04c554d 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": "Role and Permission", + "description": "Role and Permission" }, { "name": "Schedule Template", @@ -481,9 +481,6 @@ }, { "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/fields" } ], "description": "Updates an integration application.", @@ -2658,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" @@ -11078,31 +11075,477 @@ "/rate-limits": { "get": { "tags": [ - "Rate Limits" - ], - "summary": "List Rate Limits", - "description": "Retrieves a list of all rate limits applicable for an account.", + "Rate Limits" + ], + "summary": "List Rate Limits", + "description": "Retrieves a list of all rate limits applicable for an account.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/list-rate-limits-response" + } + } + }, + "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.", + "headers": { + "X-LC-TraceId": { + "$ref": "#/components/headers/X-LC-TraceId" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + } + } + } + }, + "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": "ListRateLimits" + } + }, + "/roles": { + "get": { + "tags": [ + "Role and Permission" + ], + "summary": "List Roles", + "description": "Retrieves a list of all roles available for the account.", + "parameters": [ + { + "$ref": "#/components/parameters/Authorization" + }, + { + "$ref": "#/components/parameters/X-LC-Tenant" + }, + { + "$ref": "#/components/parameters/fields" + }, + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/list-roles-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": "ListRoles" + }, + "post": { + "tags": [ + "Role and Permission" + ], + "summary": "Create Role", + "description": "Creates a custom role.\n\nSee [List Permissions](#/operations/ListPermissions) for available permission names.", + "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.\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": { + "$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 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": { + "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": [ + "Role and Permission" + ] + }, + "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. Provisioned roles cannot be modified.", + "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, 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": { + "$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" + } + } + }, + "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", + "tags": [ + "Role and Permission" + ] + }, + "delete": { + "summary": "Delete Role", + "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" }, { "$ref": "#/components/parameters/X-LC-Tenant" - }, - { - "$ref": "#/components/parameters/top" - }, - { - "$ref": "#/components/parameters/skip" } ], "responses": { - "200": { - "description": "", + "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, or provisioned roles cannot be deleted.\n* \"empty\": Empty input for the \"roleId\" path parameter variable.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-rate-limits-response" + "$ref": "#/components/schemas/error-response" } } }, @@ -11112,23 +11555,38 @@ } } }, - "400": { - "description": "Error codes:\n* “invalid”: Invalid input in the query parameter mentioned in the “name” field on the error response.", + "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" + } } }, - "401": { - "description": "The user could not be identified.", + "404": { + "description": "Error codes:\n* \"notFound\": the role could not be found by identifier.", "content": { "application/json": { "schema": { @@ -11143,16 +11601,19 @@ } } }, - "operationId": "ListRateLimits" + "operationId": "DeleteRole", + "tags": [ + "Role and Permission" + ] } }, - "/roles": { + "/permissions": { "get": { "tags": [ - "Roles" + "Role and Permission" ], - "summary": "List Roles", - "description": "Retrieves a list of all roles available for the account.", + "summary": "List Permissions", + "description": "Retrieves a list of all permissions available for the account.", "parameters": [ { "$ref": "#/components/parameters/Authorization" @@ -11163,11 +11624,11 @@ ], "responses": { "200": { - "description": "", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/list-roles-response" + "$ref": "#/components/schemas/list-permissions-response" } } }, @@ -11193,7 +11654,7 @@ } } }, - "operationId": "ListRoles" + "operationId": "ListPermissions" } }, "/schedule-templates": { @@ -11926,13 +12387,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": { @@ -12925,7 +13395,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" @@ -12985,7 +13455,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": { @@ -21137,6 +21607,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 +21720,9 @@ "items": { "type": "string" } + }, + "metadata": { + "$ref": "#/components/schemas/metadata" } } }, @@ -22101,6 +22577,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 Permissions endpoint." + }, "list-perfect-match-candidates-response": { "title": "List PerfectMatch Candidates Response", "type": "object", @@ -26354,6 +26850,7 @@ "description": "Role in the account.", "required": [ "id", + "type", "name" ], "properties": { @@ -26361,9 +26858,155 @@ "type": "string", "description": "The identifier of the role." }, + "type": { + "type": "string", + "description": "The role type.", + "enum": [ + "provisioned", + "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-update-request": { + "title": "Role Update Request", + "type": "object", + "description": "Role update request.", + "properties": { + "name": { + "type": "string", + "description": "Name of the role.", + "minLength": 1, + "maxLength": 100 + }, + "description": { + "type": "string", + "description": "Description of the role.", + "maxLength": 1000 + }, + "permissions": { + "type": "array", + "description": "List of permission names associated with role.", + "minItems": 1, + "items": { + "type": "string", + "examples": [ + "projectCreate", + "identityGroupCreate", + "accountUserRead" + ] + } + } + } + }, + "role-create-request": { + "title": "Role Create Request", + "type": "object", + "description": "Role create request.", + "required": [ + "name", + "permissions" + ], + "allOf": [ + { + "$ref": "#/components/schemas/role-update-request" + } + ] + }, + "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": { + "type": "string", + "description": "The category a permission belongs to.", + "examples": [ + "Projects", + "User Management", + "Resources" + ] + }, + "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.", + "examples": [ + ["projectRead"], + ["identityGroupRead"], + [] + ], + "items": { + "type": "string", + "description": "Name of a dependent permission.", + "examples": [ + "projectRead", + "identityGroupRead", + "accountUserRead" + ] + } + } + } + }, + "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." } } }, @@ -27061,7 +27704,7 @@ } }, "owner": { - "$ref": "#/components/schemas/user" + "$ref": "#/components/schemas/task-owner" }, "assignees": { "type": "array", @@ -27369,6 +28012,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", @@ -30625,6 +31367,16 @@ "targetSegmentsDifferOption" ] }, + "metadata": { + "title": "Metadata", + "type": "object", + "description": "Additional metadata values in a key - value pair format", + "properties": { + "additionalProperties": { + "type": "object" + } + } + }, "user": { "title": "User", "type": "object", @@ -30696,6 +31448,9 @@ }, "membership": { "$ref": "#/components/schemas/account-membership-type" + }, + "metadata": { + "$ref": "#/components/schemas/metadata" } } }, @@ -30722,6 +31477,9 @@ }, "userDetails": { "$ref": "#/components/schemas/user-details" + }, + "metadata": { + "$ref": "#/components/schemas/metadata" } }, "required": [ @@ -30826,6 +31584,9 @@ "type": "object", "$ref": "#/components/schemas/object-id" } + }, + "metadata": { + "$ref": "#/components/schemas/metadata" } } }, 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/Whats-New.md b/articles/LCPublicAPI/docs/Whats-New.md index 0ff17c7..73047de 100644 --- a/articles/LCPublicAPI/docs/Whats-New.md +++ b/articles/LCPublicAPI/docs/Whats-New.md @@ -2,6 +2,12 @@
+## 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), [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 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. 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`|