openapi: 3.0.1 info: title: Analytics.Conceptual.Service.Interfaces.Public.V1 AnnotationService Workspace API description: Analytics.Conceptual.Service.Interfaces.Public version: V1 servers: - url: /Relativity.REST/api description: The URL prefix for all Kepler services tags: - name: Workspace paths: /v1/workspace/{workspaceId}: get: tags: - Workspace summary: Read workspace description: Returns the workspace with its core properties (client, matter, resource pool, status, SQL server, SQL full-text language, audit fields, etc.). Returns 567 Workspace Temporarily Unavailable when the workspace is still upgrading — clients can safely retry after a short delay. Equivalent to `/v1/workspace/{workspaceId}/false/false` — use the parameterized form to additionally include the `Meta` field or the available `Actions` list. parameters: - name: workspaceId in: path required: true schema: type: integer format: int32 responses: '200': description: OK content: text/plain: schema: $ref: '#/components/schemas/WorkspaceReadResponseV1' application/json: schema: $ref: '#/components/schemas/WorkspaceReadResponseV1' text/json: schema: $ref: '#/components/schemas/WorkspaceReadResponseV1' '401': description: Unauthorized content: text/plain: schema: $ref: '#/components/schemas/ProblemDetails' application/json: schema: $ref: '#/components/schemas/ProblemDetails' text/json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: text/plain: schema: $ref: '#/components/schemas/KeplerProblemDetails' application/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' text/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' '404': description: Not Found content: text/plain: schema: $ref: '#/components/schemas/KeplerProblemDetails' application/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' text/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' '567': description: Workspace Temporarily Unavailable '500': description: Internal Server Error content: text/plain: schema: $ref: '#/components/schemas/KeplerProblemDetails' application/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' text/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' delete: tags: - Workspace summary: Delete workspace description: Soft-deletes the workspace by moving it to the Recycle Bin. The workspace is hidden from normal views but can be recovered via `POST /v1/recycle-bin/workspace/{workspaceId}/recover` or permanently removed via `DELETE /v1/recycle-bin/workspace/{workspaceId}`. parameters: - name: workspaceId in: path required: true schema: type: integer format: int32 responses: '204': description: No Content '400': description: Bad Request content: text/plain: schema: $ref: '#/components/schemas/KeplerProblemDetails' application/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' text/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' '401': description: Unauthorized content: text/plain: schema: $ref: '#/components/schemas/ProblemDetails' application/json: schema: $ref: '#/components/schemas/ProblemDetails' text/json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: text/plain: schema: $ref: '#/components/schemas/KeplerProblemDetails' application/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' text/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' '500': description: Internal Server Error put: tags: - Workspace summary: Update workspace description: Updates the workspace's properties. Include `lastModifiedOn` (timestamp of the last known version) to enforce optimistic concurrency — if the workspace has been modified since, the request fails with 409 Conflict and no changes are applied. On success, returns the updated workspace. parameters: - name: workspaceId in: path required: true schema: type: integer format: int32 requestBody: content: application/json: schema: $ref: '#/components/schemas/WorkspaceRequestEnvelope' text/json: schema: $ref: '#/components/schemas/WorkspaceRequestEnvelope' application/*+json: schema: $ref: '#/components/schemas/WorkspaceRequestEnvelope' responses: '200': description: OK content: text/plain: schema: $ref: '#/components/schemas/WorkspaceReadResponseV1' application/json: schema: $ref: '#/components/schemas/WorkspaceReadResponseV1' text/json: schema: $ref: '#/components/schemas/WorkspaceReadResponseV1' '400': description: Bad Request content: text/plain: schema: $ref: '#/components/schemas/KeplerProblemDetails' application/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' text/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' '401': description: Unauthorized content: text/plain: schema: $ref: '#/components/schemas/ProblemDetails' application/json: schema: $ref: '#/components/schemas/ProblemDetails' text/json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: text/plain: schema: $ref: '#/components/schemas/KeplerProblemDetails' application/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' text/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' '404': description: Not Found content: text/plain: schema: $ref: '#/components/schemas/KeplerProblemDetails' application/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' text/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' '409': description: Conflict content: text/plain: schema: $ref: '#/components/schemas/KeplerProblemDetails' application/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' text/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' '500': description: Internal Server Error content: text/plain: schema: $ref: '#/components/schemas/KeplerProblemDetails' application/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' text/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' /v1/workspace/{workspaceId}/{includeMetadata}/{includeActions}: get: tags: - Workspace summary: Read workspace with optional metadata and actions description: Returns the workspace with its core properties. `includeMetadata` and `includeActions` are required path segments (not query parameters), e.g. `/v1/workspace/{workspaceId}/true/false`. When `includeMetadata` is `true`, the response additionally contains the `Meta` field (list of unsupported and read-only properties on the workspace). When `includeActions` is `true`, the response contains the `Actions` list (REST operations the caller is permitted to perform on the workspace). Returns 567 Workspace Temporarily Unavailable when the workspace is still upgrading — clients can safely retry after a short delay. parameters: - name: workspaceId in: path required: true schema: type: integer format: int32 - name: includeMetadata in: path required: true schema: type: boolean - name: includeActions in: path required: true schema: type: boolean responses: '200': description: OK content: text/plain: schema: $ref: '#/components/schemas/WorkspaceReadResponseV1' application/json: schema: $ref: '#/components/schemas/WorkspaceReadResponseV1' text/json: schema: $ref: '#/components/schemas/WorkspaceReadResponseV1' '401': description: Unauthorized content: text/plain: schema: $ref: '#/components/schemas/ProblemDetails' application/json: schema: $ref: '#/components/schemas/ProblemDetails' text/json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: text/plain: schema: $ref: '#/components/schemas/KeplerProblemDetails' application/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' text/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' '404': description: Not Found content: text/plain: schema: $ref: '#/components/schemas/KeplerProblemDetails' application/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' text/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' '567': description: Workspace Temporarily Unavailable '500': description: Internal Server Error content: text/plain: schema: $ref: '#/components/schemas/KeplerProblemDetails' application/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' text/json: schema: $ref: '#/components/schemas/KeplerProblemDetails' components: schemas: KeplerValidationError: type: object properties: PropertyName: type: string nullable: true ErrorMessage: type: string nullable: true additionalProperties: false WorkspaceUpdateRequest: type: object properties: DownloadHandlerUrl: type: string nullable: true EnableDataGrid: type: boolean nullable: true Matter: $ref: '#/components/schemas/ObjectIdentifierSecurable' Name: type: string nullable: true ProductionRestrictions: $ref: '#/components/schemas/ObjectIdentifierSecurable' ResourcePool: $ref: '#/components/schemas/ObjectIdentifierSecurable' DefaultFileRepository: $ref: '#/components/schemas/ObjectIdentifierSecurable' DataGridFileRepository: $ref: '#/components/schemas/ObjectIdentifierSecurable' DefaultCacheLocation: $ref: '#/components/schemas/ObjectIdentifierSecurable' SqlServer: $ref: '#/components/schemas/ObjectIdentifierSecurable' AzureCredentials: $ref: '#/components/schemas/ObjectIdentifierSecurable' AzureFileSystemCredentials: $ref: '#/components/schemas/ObjectIdentifierSecurable' SqlFullTextLanguage: type: integer format: int32 nullable: true Status: $ref: '#/components/schemas/ObjectIdentifier' Template: $ref: '#/components/schemas/ObjectIdentifierSecurable' WorkspaceAdminGroup: $ref: '#/components/schemas/ObjectIdentifierSecurable' UseCase: type: string nullable: true Keywords: type: string nullable: true Notes: type: string nullable: true UserId: type: integer format: int32 additionalProperties: false DisplayableObjectIdentifierSecurable: type: object properties: Value: $ref: '#/components/schemas/DisplayableObjectIdentifier' Secured: type: boolean additionalProperties: false WorkspaceReadResponseV1: type: object properties: ArtifactID: type: integer format: int32 nullable: true Guids: type: array items: type: string format: uuid nullable: true Name: type: string nullable: true Client: $ref: '#/components/schemas/DisplayableObjectIdentifierSecurable' ClientNumber: $ref: '#/components/schemas/StringSecurable' DownloadHandlerUrl: type: string nullable: true EnableDataGrid: type: boolean Matter: $ref: '#/components/schemas/DisplayableObjectIdentifierSecurable' MatterNumber: $ref: '#/components/schemas/StringSecurable' ProductionRestrictions: $ref: '#/components/schemas/DisplayableObjectIdentifierSecurable' ResourcePool: $ref: '#/components/schemas/DisplayableObjectIdentifierSecurable' DefaultFileRepository: $ref: '#/components/schemas/DisplayableObjectIdentifierSecurable' DataGridFileRepository: $ref: '#/components/schemas/DisplayableObjectIdentifierSecurable' DefaultCacheLocation: $ref: '#/components/schemas/DisplayableObjectIdentifierSecurable' SqlServer: $ref: '#/components/schemas/DisplayableObjectIdentifierSecurable' AzureCredentials: $ref: '#/components/schemas/DisplayableObjectIdentifierSecurable' AzureFileSystemCredentials: $ref: '#/components/schemas/DisplayableObjectIdentifierSecurable' SqlFullTextLanguage: $ref: '#/components/schemas/NameIDPair' Status: $ref: '#/components/schemas/DisplayableObjectIdentifier' Keywords: type: string nullable: true Notes: type: string nullable: true CreatedOn: type: string format: date-time CreatedBy: $ref: '#/components/schemas/DisplayableObjectIdentifier' LastModifiedBy: $ref: '#/components/schemas/DisplayableObjectIdentifier' LastModifiedOn: type: string format: date-time Meta: $ref: '#/components/schemas/Meta' Actions: type: array items: $ref: '#/components/schemas/Action' nullable: true WorkspaceAdminGroup: $ref: '#/components/schemas/DisplayableObjectIdentifierSecurable' UseCase: type: string nullable: true JobID: type: string nullable: true additionalProperties: false StringSecurable: type: object properties: Value: type: string nullable: true Secured: type: boolean additionalProperties: false ObjectIdentifier: type: object properties: ArtifactID: type: integer format: int32 nullable: true Guids: type: array items: type: string format: uuid nullable: true additionalProperties: false ProblemDetails: type: object properties: type: type: string nullable: true title: type: string nullable: true status: type: integer format: int32 nullable: true detail: type: string nullable: true instance: type: string nullable: true additionalProperties: {} DisplayableObjectIdentifier: type: object properties: ArtifactID: type: integer format: int32 nullable: true Guids: type: array items: type: string format: uuid nullable: true Name: type: string nullable: true additionalProperties: false NameIDPair: type: object properties: ID: type: integer format: int32 Name: type: string nullable: true additionalProperties: false Meta: type: object properties: Unsupported: type: array items: type: string nullable: true ReadOnly: type: array items: type: string nullable: true additionalProperties: false ObjectIdentifierSecurable: type: object properties: Value: $ref: '#/components/schemas/ObjectIdentifier' Secured: type: boolean additionalProperties: false Action: type: object properties: Name: type: string nullable: true Verb: type: string nullable: true Href: type: string nullable: true IsAvailable: type: boolean Reason: type: array items: type: string nullable: true additionalProperties: false WorkspaceRequestEnvelope: required: - WorkspaceRequest type: object properties: WorkspaceRequest: $ref: '#/components/schemas/WorkspaceUpdateRequest' LastModifiedOn: type: string format: date-time nullable: true additionalProperties: false KeplerProblemDetails: type: object properties: ErrorType: type: string nullable: true Identifier: type: string nullable: true Message: type: string nullable: true Errors: type: array items: $ref: '#/components/schemas/KeplerValidationError' nullable: true additionalProperties: false