diff --git a/persistence-service-v1/persistence-service-external-api-v2/src/main/resources/api/redactmanager.yaml b/persistence-service-v1/persistence-service-external-api-v2/src/main/resources/api/redactmanager.yaml index 135dde0ed..d910e2a15 100644 --- a/persistence-service-v1/persistence-service-external-api-v2/src/main/resources/api/redactmanager.yaml +++ b/persistence-service-v1/persistence-service-external-api-v2/src/main/resources/api/redactmanager.yaml @@ -1,14 +1,18 @@ openapi: 3.0.2 info: - title: RedactManager API - version: "4.0.0" + title: RedactManager API - DRAFT + version: "4.1.0" description: | The RedactManager API provides a comprehensive solution for managing resources such as dossiers and their associated files. Users can also retrieve the results package for files that have been processed by the system and reviewed by the users. - The results package can contain the optimized PDF file, the preview PDF, the redacted PDF and correlating redaction reports in different formats. + The results package can contain the optimized PDF file, the preview PDF, the redacted PDF and correlating redaction reports + in different formats. - All endpoints are secured using OAuth2, with the "authorizationCode" being the supported authorization flow. + All endpoints are secured using OAuth2, with the "authorizationCode" being the general supported authorization flow. Obtain a JWT token for authentication and send it in the 'Authorization' header with the format `Bearer {JWT_TOKEN}`. + + Please also note that the `authorizationUrl` and `tokenUrl` in this specification contain `{workspaceId}` placeholders that + must be replaced by your respective RedactManager workspace identifier. Example Headers: ```properties @@ -27,7 +31,7 @@ servers: - url: https://app.redactmanager.com description: RedactManager Cloud Service security: - - FF-OAUTH: [ ] + - FF-OAUTH: [] tags: - name: 1. Dossier Templates description: Operations related to dossier templates. @@ -37,7 +41,9 @@ tags: description: Operations for managing files within a dossier. - name: 4. Downloads description: Operations related to download packages. - - name: 5. License + - name: 5. Users + description: Operations related to users. + - name: 6. License description: Operations related to license information and usage metrics. paths: /api/dossier-templates: @@ -106,7 +112,7 @@ paths: "500": $ref: '#/components/responses/500' /api/dossier-templates/{dossierTemplateId}/dossier-attribute-definitions: - get: # TODO: review endpoint to get dossier attribute definitions + get: # TODO: implement endpoint to get dossier attribute definitions summary: Returns the list of all existing dossier attribute definitions tags: - 1. Dossier Templates @@ -138,7 +144,7 @@ paths: "500": $ref: '#/components/responses/500' /api/dossier-templates/{dossierTemplateId}/file-attribute-definitions: - get: # TODO: review endpoint to get file attribute definitions + get: summary: Returns the list of all existing file attribute definitions tags: - 1. Dossier Templates @@ -328,7 +334,7 @@ paths: "500": $ref: '#/components/responses/500' /api/dossier-templates/{dossierTemplateId}/dossiers/{dossierId}/attributes: - post: # TODO: review endpoint to set or update dossier attribute values + post: # TODO: implement endpoint to set or update dossier attribute values operationId: setDossierAttributes tags: - 2. Dossiers @@ -348,9 +354,9 @@ paths: $ref: '#/components/schemas/DossierAttributes' required: true responses: - "200": + "204": description: | - File attributes successfully updated. + Dossier attributes successfully updated. "400": $ref: '#/components/responses/400' "401": @@ -364,17 +370,17 @@ paths: "500": $ref: '#/components/responses/500' /api/dossier-templates/{dossierTemplateId}/dossiers/{dossierId}/create-download: - post: # TODO: review endpoint to prepare a download for all files of a dossier + post: # TODO: implement endpoint to prepare a download for all files of a dossier operationId: prepareDossierDownload tags: - - 3. Dossiers + - 2. Dossiers summary: (DRAFT) Trigger the creation of a download package for all files of a dossier. description: | To download the results of a redaction, a download package needs to be prepared. This endpoint facilitates to define the content of the download package and to start the creation of it for all files of the dossier. The response of this endpoint contains an identifier for the download that - is needed to query the status until the download package is prepared for download, and - finally to actually download the file once it is available. + is needed to query the status until the download package is prepared, and finally to actually + download the file once it is available. Note: The redacted file will be created for `APPROVED` files only. parameters: @@ -571,7 +577,7 @@ paths: "500": $ref: '#/components/responses/500' /api/dossier-templates/{dossierTemplateId}/dossiers/{dossierId}/files/{fileId}/create-download: - post: # TODO: review endpoint to prepare a download of a single file + post: # TODO: implement endpoint to prepare a download of a single file operationId: prepareFileDownload tags: - 3. Files @@ -587,11 +593,12 @@ paths: parameters: - $ref: '#/components/parameters/dossierTemplateId' - $ref: '#/components/parameters/dossierId' + - $ref: '#/components/parameters/fileId' requestBody: content: application/json: schema: - $ref: '#/components/schemas/FileDownloadRequest' + $ref: '#/components/schemas/DownloadRequest' required: true responses: "200": @@ -654,7 +661,7 @@ paths: "500": $ref: '#/components/responses/500' /api/dossier-templates/{dossierTemplateId}/dossiers/{dossierId}/files/bulk/create-download: - post: # TODO: review endpoint to prepare a bulk download of multiple files + post: # TODO: implement endpoint to prepare a bulk download of multiple files, check if fileIds match the dossierId operationId: prepareBulkDownload tags: - 3. Files @@ -674,7 +681,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/BulkFileDownloadRequest' + $ref: '#/components/schemas/BulkDownloadRequest' required: true responses: "200": @@ -718,7 +725,7 @@ paths: $ref: '#/components/schemas/FileAttributes' required: true responses: - "200": + "204": description: | File attributes successfully updated. "400": @@ -734,13 +741,15 @@ paths: "500": $ref: '#/components/responses/500' /api/download: - get: # TODO: review endpoint to get the status of all downloads of the current user + get: # TODO: implement endpoint to get the status of all downloads of the current user operationId: getDownloadStatusList tags: - 4. Downloads - summary: TODO + summary: Get the list of downloads for the current user description: | - # TODO: add description for endpoint to get the status of all downloads of the current user + This endpoint facilitates to retrieve the list of downloads for the current user. The response contains + status objects that represent each download and provide information on whether the download is still + in preparation, is already available or whether an error occurred when the download package was created. responses: "200": content: @@ -759,17 +768,19 @@ paths: "500": $ref: '#/components/responses/500' /api/downloads/{downloadId}: - get: # TODO: review endpoint to get a single download status by id + get: # TODO: implement endpoint to get a single download status by id operationId: getDownloadStatus tags: - 4. Downloads - summary: TODO + summary: Get the status for a specific download of the current user description: | - # TODO: add description for endpoint to get a single download status by id + This endpoint facilitates to retrieve the status for a specific download. In addition to other + information, the status indicates whether the download is still being prepared, is already + available, or whether an error occurred when the download package was created. parameters: - $ref: '#/components/parameters/downloadId' responses: - "200": # TODO: complete response + "200": content: application/json: schema: @@ -787,7 +798,7 @@ paths: $ref: '#/components/responses/429' "500": $ref: '#/components/responses/500' - delete: # TODO: review endpoint to delete a single download by id + delete: # TODO: implement endpoint to delete a single download by id operationId: deleteDownload tags: - 4. Downloads @@ -797,7 +808,7 @@ paths: parameters: - $ref: '#/components/parameters/downloadId' responses: - "204": # TODO: complete response + "204": description: | Download deletion successful. This confirms the absence of the specified download, irrespective of its previous existence. "400": @@ -813,18 +824,30 @@ paths: "500": $ref: '#/components/responses/500' /api/downloads/{downloadId}/download: - get: # TODO: review endpoint to actually do the download + get: # TODO: implement endpoint to actually do the download operationId: download tags: - 4. Downloads - summary: TODO + - persistence-service + summary: Download the download package. description: | - # TODO: add description for endpoint to actually do the download + This endpoint facilitates to actually download the created download package. The request will + only be successful if the status of the download is `READY`. parameters: - $ref: '#/components/parameters/downloadId' responses: - "200": # TODO: complete response - description: Successfully downloading the file. (TODO rephrase?) + "200": + headers: + Content-Disposition: + schema: + type: string + example: attachment; filename*=utf-8''example.zip + content: + application/octet-stream: + schema: + type: string + format: binary + description: Successfully downloaded the requested file. "400": $ref: '#/components/responses/400' "401": @@ -837,14 +860,20 @@ paths: $ref: '#/components/responses/429' "500": $ref: '#/components/responses/500' - /api/users: - get: # TODO: review endpoint to get a user list + /api/users: # /api/users?username=kresnadi@budisantoso.de + get: # TODO: implement endpoint to get a user list operationId: getUsers tags: - 5. Users + - tenant-user-management summary: TODO description: | - # TODO: add filter parameters to find a user by login or email (optional) + This endpoint facilitates to retrieve a list of known users. + + With the `username` parameter you can filter for a specific user name. If the parameter is + used, the returned list either contains a single matching entry or is empty. + parameters: + - $ref: '#/components/parameters/username' responses: 200: content: @@ -863,13 +892,13 @@ paths: "500": $ref: '#/components/responses/500' /api/users/{userId}: - get: # TODO: review endpoint to get a single user by id + get: # TODO: implement endpoint to get a single user by id operationId: getUserById tags: - 5. Users - summary: TODO + summary: Retrieve a specific user by its identifier. description: | - # TODO: add description for endpoint to get a single user by id + This endpoint facilitates to retrieve a specific user. responses: 200: content: @@ -981,6 +1010,20 @@ components: Some endpoints support a `includeSoftDeleted` parameter: If this is set to `true`, this response is returned only if the file is deleted permanently. + "404-download": + content: + '*/*': + schema: + $ref: '#/components/schemas/ErrorMessage' + description: | + Download not found. This happens if the requested download does not exist for the current user. + "404-user": + content: + '*/*': + schema: + $ref: '#/components/schemas/ErrorMessage' + description: | + User not found. This happens if the requested user does not exist. "409-dossier-conflict": content: '*/*': @@ -988,13 +1031,6 @@ components: $ref: '#/components/schemas/ErrorMessage' description: | Name conflict: The provided name is already in use by another dossier. It needs to be unique in the scope of your workspace. - 422-rules: - content: - '*/*': - schema: - $ref: '#/components/schemas/RuleValidation' - description: | - Invalid rules file: There were validation errors, the rules file is unprocessable. "429": content: '*/*': @@ -1238,6 +1274,26 @@ components: - `true`: The component object's field `componentDetails` stores detailed information about the *source* of its respective value(s). - `false` (default): The component object does not contain a field `componentDetails`. + downloadId: + name: downloadId + in: path + required: true + schema: + type: string + style: simple + explode: false + description: The identifier for the file to download. + username: + name: username + in: query + required: false + schema: + type: string + style: form + explode: true + description: | + If the `username` parameter is set, the user list is filtered for that specific user name. This means the list + either has one matching entry or is empty. schemas: EntityReference: type: object @@ -1345,198 +1401,6 @@ components: entityRuleId: DEF.13.37 type: another_entity_type page: 456 - FileComponents: - type: object - description: Represents file details along with its associated components and values. - properties: - dossierTemplateId: - format: uuid - type: string - description: Identifier for the template associated with the dossier. - dossierId: - format: uuid - type: string - description: Identifier for the dossier. - fileId: - type: string - description: Identifier for the file. - filename: - type: string - description: Name of the file. - components: - type: object - description: A map of component names to their list of values. - additionalProperties: - items: - type: string - type: array - componentDetails: - type: object - description: A map of component names to their detailed representations. - additionalProperties: - $ref: '#/components/schemas/Component' - example: - dossierTemplateId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 - dossierId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 - fileId: 1fdbd888b39059c8cf171df26f62f8a5 - filename: MyFile.pdf - components: - "my component": - - my overwritten component value - - yet another component value - "yet another component": - - only one value - componentDetails: - - name: my component - componentValues: - - value: my overwritten component value - originalValue: the original value - componentRuleId: COM.0.0 - valueDescription: My value description - entityReferences: - - id: bcd22239-cedf-442f-a5a1-1664cba94dc6 - entityRuleId: ABC.0.0 - type: entity_type - page: 123 - - id: b748b89a-5679-4254-9286-1dd652d9970b - entityRuleId: DEF.13.37 - type: another_entity_type - page: 456 - - value: yet another component value - originalValue: yet another component value - componentRuleId: COM.0.1 - valueDescription: Another value description - entityReferences: - - id: 70496456-a016-4679-81b1-6c8856dded6e - entityRuleId: XYZ.0.0 - type: yet_another_entity_type - page: 123 - - name: yet another component - componentValues: - - value: only one value - originalValue: only one value - componentRuleId: COM.0.0 - valueDescription: My value description - entityReferences: - - id: bcd22239-cedf-442f-a5a1-1664cba94dc6 - entityRuleId: ABC.0.0 - type: entity_type - page: 123 - - id: b748b89a-5679-4254-9286-1dd652d9970b - entityRuleId: DEF.13.37 - type: another_entity_type - page: 456 - FileComponentsList: - type: object - description: A list of files and their associated components. - properties: - files: - type: array - description: List of files with their component details. - items: - $ref: '#/components/schemas/FileComponents' - example: - files: - - dossierTemplateId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 - dossierId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 - fileId: 1fdbd888b39059c8cf171df26f62f8a5 - filename: MyFile.pdf - components: - "my component": - - my overwritten component value - - yet another component value - "yet another component": - - only one value - componentDetails: - - name: my component - componentValues: - - value: my overwritten component value - originalValue: the original value - componentRuleId: COM.0.0 - valueDescription: My value description - entityReferences: - - id: bcd22239-cedf-442f-a5a1-1664cba94dc6 - entityRuleId: ABC.0.0 - type: entity_type - page: 123 - - id: b748b89a-5679-4254-9286-1dd652d9970b - entityRuleId: DEF.13.37 - type: another_entity_type - page: 456 - - value: yet another component value - originalValue: yet another component value - componentRuleId: COM.0.1 - valueDescription: Another value description - entityReferences: - - id: 70496456-a016-4679-81b1-6c8856dded6e - entityRuleId: XYZ.0.0 - type: yet_another_entity_type - page: 123 - - name: yet another component - componentValues: - - value: only one value - originalValue: only one value - componentRuleId: COM.0.0 - valueDescription: My value description - entityReferences: - - id: bcd22239-cedf-442f-a5a1-1664cba94dc6 - entityRuleId: ABC.0.0 - type: entity_type - page: 123 - - id: b748b89a-5679-4254-9286-1dd652d9970b - entityRuleId: DEF.13.37 - type: another_entity_type - page: 456 - - dossierTemplateId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 - dossierId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 - fileId: 4d2334def5fced0003888e47cbc270f7 - filename: Copy of MyFile.pdf - components: - "my component": - - my overwritten component value - - yet another component value - "yet another component": - - only one value - componentDetails: - - name: my component - componentValues: - - value: my overwritten component value - originalValue: the original value - componentRuleId: COM.0.0 - valueDescription: My value description - entityReferences: - - id: dadb54d4-587b-4e69-8c07-be9446a33537 - entityRuleId: ABC.0.0 - type: entity_type - page: 123 - - id: 30339f5a-4c19-447f-b0a0-0f14c094037e - entityRuleId: DEF.13.37 - type: another_entity_type - page: 456 - - value: yet another component value - originalValue: yet another component value - componentRuleId: COM.0.1 - valueDescription: Another value description - entityReferences: - - id: 086cd500-97da-44f8-8628-3324d11b4e8d - entityRuleId: XYZ.0.0 - type: yet_another_entity_type - page: 123 - - name: yet another component - componentValues: - - value: only one value - originalValue: only one value - componentRuleId: COM.0.0 - valueDescription: My value description - entityReferences: - - id: dadb54d4-587b-4e69-8c07-be9446a33537 - entityRuleId: ABC.0.0 - type: entity_type - page: 123 - - id: 30339f5a-4c19-447f-b0a0-0f14c094037e - entityRuleId: DEF.13.37 - type: another_entity_type - page: 456 DossierAttributeDefinition: type: object description: | @@ -1755,6 +1619,18 @@ components: filenameMappingCsvColumnHeader: "Filename" delimiter: "," encoding: "UTF-8" + ReportTemplateIdList: + type: array + items: + type: string + format: uuid + uniqueItems: true + description: | + List of template identifiers indicating which templates are used for generating reports or other outputs. + The reports are generated when requesting a download package. + example: + - b79cb3ba-745e-5d9a-8903-4a02327a7e09 + - fb3463a0-7d6e-54a3-bcd8-1b93388c648d DossierAttributes: type: object description: (DRAFT) Additional dossier attributes that can be set @@ -1764,10 +1640,11 @@ components: type: string type: object example: - myDossierAttribute: This is a file attribute value - yetAnotherDossierAttribute: This is yet another file attribute value - numericValuesNeedToBeStrings: "1234" - myDossierDate: "1. January 1337" + attributeIdToValue: + "1049a73c-8013-45d6-8217-0845a4ff1c61": This is a dossier attribute value + "79d5a138-d30a-4014-ad7f-43ffba1f4d04": This is yet another dossier attribute value + "1d30d9e8-4a6c-4ef0-96a0-7bef62e138db": "1234" + "b337b65a-0481-48d9-92e6-79e34760ef01": "1. January 1337" Dossier: type: object description: | @@ -1859,14 +1736,7 @@ components: downloadFileTypes: $ref: '#/components/schemas/DownloadFileTypes' reportTemplateIds: - type: array - items: - type: string - format: uuid - uniqueItems: true - description: | - List of template identifiers indicating which templates are to be used for generating reports or outputs - for this dossier. The reports are generated when requesting a download package. + $ref: '#/components/schemas/ReportTemplateIdList' archivedTime: type: string format: date-time @@ -2018,14 +1888,7 @@ components: description: A unique identifier for a member with access to the dossier. uniqueItems: true reportTemplateIds: - type: array - description: | - An array of identifiers representing templates used for generating reports - or exports from this dossier. - items: - description: An identifier for a report template. - type: string - uniqueItems: true + $ref: "#/components/schemas/ReportTemplateIdList" dossierStatusId: type: string description: | @@ -2180,6 +2043,9 @@ components: - DELTA_PREVIEW - REDACTED type: string + example: + - PREVIEW + - REDACTED DossierTemplateList: description: Represents a list of dossier templates, each encapsulating a set of rules and settings. example: @@ -2253,10 +2119,11 @@ components: type: string type: object example: - myFileAttribute: This is a file attribute value - yetAnotherFileAttribute: This is yet another file attribute value - numericValuesNeedToBeStrings: "1234" - myFileDate: "1. January 1337" + attributeIdToValue: + "9049a73c-8013-45d6-8217-0845a4ff1c61": This is a file attribute value + "59d5a138-d30a-4014-ad7f-43ffba1f4d04": This is yet another file attribute value + "9d30d9e8-4a6c-4ef0-96a0-7bef62e138db": "1234" + "a337b65a-0481-48d9-92e6-79e34760ef01": "1. January 1337" FileDeleteRequest: type: object description: Request payload to initiate the deletion of specific files. @@ -2600,7 +2467,7 @@ components: hasSuggestions: true FileStatusList: type: object - description: Represents a list detailing the status of a bunch of files. + description: Represents a list detailing the status of multiple files. properties: files: type: array @@ -2769,43 +2636,173 @@ components: type: string type: array type: object - RuleValidationMessage: - description: Object containing information about an uploaded rules file. - example: - line: 123 - column: 45 - message: "Unable to Analyse Expression ..." + DownloadStatus: + type: object + description: Detailed information about a specific download. properties: - line: - description: The line number where the error or warning occurs. - format: int32 - type: integer - column: - description: The column number where the error or warning occurs. - format: int32 - type: integer - message: - description: The error or warning message that describes the details. + id: type: string - type: object - RuleValidation: - description: | - Information about the uploaded rules file. The `error` field is empty if there were no validation errors in the uploaded rules file. - example: - errors: - - line: 123 - column: 45 - message: "Unable to Analyse Expression ..." - - line: 234 - column: 5 - message: "Invalid rule syntax ..." - properties: - errors: - description: List of errors found in the uploaded rules file. - items: - $ref: '#/components/schemas/RuleValidationMessage' + format: uuid + description: The unique identifier of the download. + example: b5e2cf01-8bb6-4fcd-ad88-0efb611195da + userId: + type: string + format: uuid + description: The unique identifier of the user who initiated the download. + example: caa8b54a-eb5e-4134-8ae2-a3946a428ec7 + filename: + type: string + description: The name of the download file. + example: my-redacted-dossier.zip + mimeType: + type: string + description: The mime type of the download file. + example: application/octet-stream + errorCause: + type: string + description: | + If the status is `FAILED`, this field contains information about the error that happened + while preparing the download package. This information is intended to be included in a + bug report if the error occurs repeatedly and indicates a general problem with RedactManager. + example: "" + status: + type: string + enum: + - QUEUED + - GENERATING + - COMPRESSING + - READY + - FAILED + description: | + The status of the download file. In particular: + - `QUEUED` - The download job has been created and is waiting to be processed by the system. + - `GENERATING` - The system currently creates the files for the download package. + - `COMPRESSING` - The system creates a ZIP archive that will contain all files of the download package. + - `READY` - The download package is ready for download. Please note that the download will be kept only + for a certain period. This period can be configured in the settings of your RedactManager workspace. + - `FAILED` - An error occurred while preparing the download. The `errorCause` field might contain + additional details on the error. + example: READY + creationDate: + type: string + format: date-time + description: The date and time when the user initiated the download. + example: 2023-03-29T11:41:08.886Z + lastDownload: + type: string + format: date-time + description: The date and time when the user last downloaded the file. + example: 2023-03-29T13:11:05.123Z + fileSize: + type: integer + format: int64 + description: The size of the download file in bytes. + example: 1654231 + dossierId: + type: string + format: uuid + description: The identifier of the dossier to which the content of the download package belongs. + example: 20354d7a-e4fe-47af-8ff6-187bca92f3f9 + fileIds: type: array + items: + type: string + description: The list of file identifiers to which the content of the download package belongs. + example: + - 51d3f70ac322c98dc4db70a2ac44115a + - 1fdbd888b39059c8cf171df26f62f8a5 + downloadFileTypes: + $ref: '#/components/schemas/DownloadFileTypes' + reportTemplateIds: + $ref: '#/components/schemas/ReportTemplateIdList' + DownloadStatusList: type: object + description: Represents a list detailing the status of multiple downloads. + properties: + downloadStatus: + type: array + items: + $ref: '#/components/schemas/DownloadStatus' + description: Each item contains the status details of a download. + DownloadRequest: + type: object + description: Request payload to initiate the preparation of the download. + properties: + downloadFileTypes: + $ref: '#/components/schemas/DownloadFileTypes' + reportTemplateIds: + $ref: '#/components/schemas/ReportTemplateIdList' + redactionPreviewColor: + type: string + example: "#9398a0" + BulkDownloadRequest: + allOf: + - $ref: '#/components/schemas/DownloadRequest' + - type: object + description: Request payload to initiate the preparation of the download of multiple files. + properties: + fileIds: + type: array + description: A list with unique identifiers of the files for which the download is to be prepared. + items: + type: string + description: The unique identifier of a file. + User: + type: object + description: Basic information about a user. + properties: + id: + type: string + format: uuid + description: The unique identifier of the user. + example: efe7eedd-89c5-56f5-984c-0712ee41a2eb + username: + type: string + description: The user name that is used for logging in. + example: myusername + email: + type: string + description: The email address of the user. + example: myusername@example.com + firstName: + type: string + description: The first name of the user. + example: John + lastName: + type: string + description: The last name of the user. + example: Doe + roles: + uniqueItems: true + type: array + description: | + The roles of the user. In particular: + - `USER` - default user permission to work with RedactManager + - `MANAGER` - additional privileges to create and manage dossiers + - `USER_ADMIN` - administration privileges limited to manage users only + - `ADMIN` - general administration privileges + items: + type: string + enum: + - USER + - MANAGER + - USER_ADMIN + - ADMIN + example: + - MANAGER + - ADMIN + active: + type: boolean + description: Indicator if the user is active or not. Only active users can log in. + UserList: + type: object + description: A list of multiple users. + properties: + downloadStatus: + type: array + items: + $ref: '#/components/schemas/User' + description: Each item contains the details of a user. LicenseReport: type: object description: A comprehensive report of licensing metrics and usage statistics. @@ -2984,9 +2981,12 @@ components: - file securitySchemes: FF-OAUTH: + type: oauth2 flows: authorizationCode: - authorizationUrl: /auth/realms/redaction/protocol/openid-connect/auth - scopes: { } - tokenUrl: /auth/realms/redaction/protocol/openid-connect/token - type: oauth2 + authorizationUrl: /auth/realms/{workspaceId}/protocol/openid-connect/auth + tokenUrl: /auth/realms/{workspaceId}/protocol/openid-connect/token + scopes: {} + clientCredentials: + tokenUrl: /auth/realms/{workspaceId}/protocol/openid-connect/token + scopes: {} \ No newline at end of file