{
  "x-generator": "NSwag v14.5.0.0 (NJsonSchema v11.4.0.0 (Newtonsoft.Json v13.0.0.0))",
  "openapi": "3.0.0",
  "info": {
    "title": "Laserfiche Repository API",
    "description": "Welcome to the Laserfiche API Swagger Playground. You can try out any of our API calls against your live Laserfiche Cloud account. Visit the developer center for more details: <a href=\"https://developer.laserfiche.com\">https://developer.laserfiche.com</a><p>Visit the changelog for the list of changes: <a href=\"/repository/v2/changelog\">/repository/v2/changelog</a></p><p><strong>Build# : </strong>1789668804_66f2190122a2e49b6b794b61131fe9c7d8a0520c</p>",
    "version": "2"
  },
  "servers": [
    {
      "url": "https://api.laserfiche.com/repository"
    }
  ],
  "paths": {
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Annotations": {
      "get": {
        "tags": [
          "Annotations"
        ],
        "summary": "Returns all annotations on a document.",
        "description": "- Returns every annotation on every page of the document, as a polymorphic list keyed by annotation type.\n- Requires the \"see annotations\" entry right; redaction content is only revealed to callers with the \"see through redactions\" right.\n- Required OAuth scope: repository.Read",
        "operationId": "ListDocumentAnnotations",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The document entry ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Specifies the order in which items are returned. The maximum number of expressions is 5.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 5
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 6
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the annotations on the document.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Annotation"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested document, page, or annotation was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Pages/{pageNumber}/Annotations": {
      "get": {
        "tags": [
          "Annotations"
        ],
        "summary": "Returns all annotations on a single page of a document.",
        "description": "- Returns the annotations on the requested page, as a polymorphic list keyed by annotation type.\n- Requires the \"see annotations\" entry right; redaction content is only revealed to callers with the \"see through redactions\" right.\n- Required OAuth scope: repository.Read",
        "operationId": "ListPageAnnotations",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The document entry ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "pageNumber",
            "in": "path",
            "required": true,
            "description": "The 1-based page number.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 3
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Specifies the order in which items are returned. The maximum number of expressions is 5.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 6
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 7
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the annotations on the page.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Annotation"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested document, page, or annotation was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Annotations"
        ],
        "summary": "Creates an annotation on a page.",
        "description": "- The request body is a polymorphic annotation discriminated by `annotationType`; supply the writable members for that type.\n- For attachment and bitmap annotations, create the annotation first, then upload its binary content via the dedicated sub-resource.\n- Requires the \"annotate\" entry right.\n- Required OAuth scope: repository.Write",
        "operationId": "CreateAnnotation",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "pageNumber",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 3
          }
        ],
        "requestBody": {
          "x-name": "request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Annotation"
              }
            }
          },
          "required": true,
          "x-position": 4
        },
        "responses": {
          "200": {
            "description": "Successfully created the annotation. Returned the created annotation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Annotation"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested document, page, or annotation was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Pages/{pageNumber}/Annotations/{itemId}": {
      "get": {
        "tags": [
          "Annotations"
        ],
        "summary": "Returns a single annotation by its item ID within a page.",
        "description": "- Returns the annotation, typed by annotation type.\n- Requires the \"see annotations\" entry right; redaction content is only revealed to callers with the \"see through redactions\" right.\n- Required OAuth scope: repository.Read",
        "operationId": "GetAnnotation",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The document entry ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "pageNumber",
            "in": "path",
            "required": true,
            "description": "The 1-based page number.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 3
          },
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "description": "The annotation item ID, unique within the page.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 4
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 5
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the requested annotation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Annotation"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested document, page, or annotation was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Annotations"
        ],
        "summary": "Applies a partial update to an annotation.",
        "description": "- Supply only the members to change; omitted members are left unchanged. The `annotationType` must match the existing annotation.\n- Requires the \"annotate\" entry right.\n- Required OAuth scope: repository.Write",
        "operationId": "UpdateAnnotation",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "pageNumber",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 3
          },
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 4
          }
        ],
        "requestBody": {
          "x-name": "request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Annotation"
              }
            }
          },
          "required": true,
          "x-position": 5
        },
        "responses": {
          "200": {
            "description": "Successfully updated the annotation. Returned the updated annotation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Annotation"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested document, page, or annotation was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Annotations"
        ],
        "summary": "Deletes an annotation.",
        "description": "- Requires the \"annotate\" entry right.\n- Required OAuth scope: repository.Write",
        "operationId": "DeleteAnnotation",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "pageNumber",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 3
          },
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 4
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted the annotation."
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested document, page, or annotation was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Pages/{pageNumber}/Annotations/{itemId}/Attachment": {
      "get": {
        "tags": [
          "Annotations"
        ],
        "summary": "Returns the binary content of an attachment annotation.",
        "description": "- Streams the attached file. Fails with a bad request if the annotation is not an attachment.\n- Requires the \"see annotations\" entry right.\n- Required OAuth scope: repository.Read",
        "operationId": "GetAnnotationAttachment",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The document entry ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "pageNumber",
            "in": "path",
            "required": true,
            "description": "The 1-based page number.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 3
          },
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "description": "The attachment annotation's item ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 4
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 5
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the content of the attachment annotation.",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested document, page, or annotation was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Annotations"
        ],
        "summary": "Uploads the binary content of an attachment annotation.",
        "description": "- Send the file as multipart/form-data under the form field \"file\". The annotation must already exist and be an attachment annotation.\n- Requires the \"annotate\" entry right.\n- Required OAuth scope: repository.Write",
        "operationId": "UploadAnnotationAttachment",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "pageNumber",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 3
          },
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 4
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "file"
                ],
                "properties": {
                  "file": {
                    "type": "string",
                    "description": "The image file to upload. See https://doc.laserfiche.com/ for supported image file formats.",
                    "format": "binary"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Successfully uploaded the attachment content."
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested document, page, or annotation was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/AnnotationReasons": {
      "get": {
        "tags": [
          "Annotations"
        ],
        "summary": "Returns the repository's annotation reasons.",
        "description": "- Returns the redaction reasons defined in the repository.\n- Required OAuth scope: repository.Read",
        "operationId": "ListAnnotationReasons",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 2
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Specifies the order in which items are returned. The maximum number of expressions is 5.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 5
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the repository's annotation reasons.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AnnotationReason"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Annotations"
        ],
        "summary": "Creates an annotation reason.",
        "description": "- Required OAuth scope: repository.Write",
        "operationId": "CreateAnnotationReason",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "requestBody": {
          "x-name": "request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnnotationReasonRequest"
              }
            }
          },
          "required": true,
          "x-position": 2
        },
        "responses": {
          "200": {
            "description": "Successfully created the annotation reason. Returned the created reason.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnotationReason"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Pages/{pageNumber}/Annotations/{itemId}/Image": {
      "put": {
        "tags": [
          "Annotations"
        ],
        "summary": "Uploads the image bytes of a bitmap annotation.",
        "description": "- Send the image as multipart/form-data under the form field \"file\". The annotation must already exist and be a bitmap annotation.\n- Requires the \"annotate\" entry right.\n- Required OAuth scope: repository.Write",
        "operationId": "UploadAnnotationImage",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "pageNumber",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 3
          },
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 4
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "file"
                ],
                "properties": {
                  "file": {
                    "type": "string",
                    "description": "The image file to upload. See https://doc.laserfiche.com/ for supported image file formats.",
                    "format": "binary"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Successfully uploaded the bitmap annotation image."
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested document, page, or annotation was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/AnnotationReasons/{reasonId}": {
      "patch": {
        "tags": [
          "Annotations"
        ],
        "summary": "Updates an annotation reason's text.",
        "description": "- Required OAuth scope: repository.Write",
        "operationId": "UpdateAnnotationReason",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "reasonId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnnotationReasonRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully updated the annotation reason. Returned the updated reason.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnotationReason"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Annotations"
        ],
        "summary": "Deletes an annotation reason.",
        "description": "- When `force` is false, deleting a reason that is in use fails.\n- Required OAuth scope: repository.Write",
        "operationId": "DeleteAnnotationReason",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "reasonId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "force",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 3
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted the annotation reason."
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Attributes": {
      "get": {
        "tags": [
          "Attributes"
        ],
        "summary": "Returns the attribute key value pairs associated with the authenticated user.",
        "description": "- Returns the attribute key value pairs associated with the authenticated user. Alternatively, return only the attribute key value pairs that are associated with the \"Everyone\" group.\n- Attribute keys can be used with subsequent calls to get specific attribute values.\n- Optional query parameters: everyone (bool, default false). When true, this route does not return the attributes that are tied to the currently authenticated user, but rather the attributes assigned to the \"Everyone\" group. Note when this is true, the response does not include both the \"Everyone\" groups attribute and the currently authenticated user, but only the \"Everyone\" groups.\n- Default page size: 100. Allowed OData query options: Select, Count, OrderBy, Skip, Top, SkipToken, Prefer.\n- Required OAuth scope: repository.Read",
        "operationId": "ListAttributes",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "everyone",
            "in": "query",
            "description": "Indicates if attributes associated with the \"Everyone\" group or the currently authenticated user is returned. The default value is false.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 2
          },
          {
            "name": "Prefer",
            "x-originalName": "prefer",
            "in": "header",
            "description": "An optional OData header. Can be used to set the maximum page size using odata.maxpagesize.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Specifies the order in which items are returned. The maximum number of expressions is 5.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 5
          },
          {
            "name": "$top",
            "in": "query",
            "description": "Limits the number of items returned from a collection. The maximum value is 150.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 6
          },
          {
            "name": "$skip",
            "in": "query",
            "description": "Excludes the specified number of items of the queried collection from the result.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 7
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 8
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the list of trustee attribute key value pairs for the authenticated user.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AttributeCollectionResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Attributes/{attributeKey}": {
      "get": {
        "tags": [
          "Attributes"
        ],
        "summary": "Returns an attribute object associated with the authenticated user.",
        "description": "- Returns the attribute associated with the key. Alternatively, return the attribute associated with the key within \"Everyone\" group.\n- Optional query parameters: everyone (bool, default false). When true, the server only searches for the attribute value with the given key upon the authenticated users attributes. If false, only the authenticated users attributes will be queried.\n- Required OAuth scope: repository.Read",
        "operationId": "GetAttribute",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "attributeKey",
            "in": "path",
            "required": true,
            "description": "The requested attribute key.",
            "schema": {
              "type": "string"
            },
            "x-position": 2
          },
          {
            "name": "everyone",
            "in": "query",
            "description": "Indicates if attributes associated with the \"Everyone\" group or the currently authenticated user is returned. The default value is false.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 3
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the specified attribute for the authenticated user.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Attribute"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested attribute key was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/AuditReasons": {
      "get": {
        "tags": [
          "AuditReasons"
        ],
        "summary": "Returns the audit reasons associated with the authenticated user.",
        "description": "- Returns the audit reasons associated with the authenticated user. Inherited audit reasons are included.\n- Only includes audit reasons associated with available API functionalities, like delete entry and export document.\n- If the authenticated user does not have the appropriate Laserfiche feature right, the audit reasons associated with that feature right will not be included.\n- Required OAuth scope: repository.Read",
        "operationId": "ListAuditReasons",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "Prefer",
            "x-originalName": "prefer",
            "in": "header",
            "description": "An optional OData header. Can be used to set the maximum page size using odata.maxpagesize.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 2
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Specifies the order in which items are returned. The maximum number of expressions is 5.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          },
          {
            "name": "$top",
            "in": "query",
            "description": "Limits the number of items returned from a collection. The maximum value is 150.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 5
          },
          {
            "name": "$skip",
            "in": "query",
            "description": "Excludes the specified number of items of the queried collection from the result.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 6
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 7
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned list of audit reasons.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuditReasonCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/FieldDefinitions/{fieldId}": {
      "get": {
        "tags": [
          "FieldDefinitions"
        ],
        "summary": "Returns a single field definition object.",
        "description": "- Returns a single field definition associated with the specified ID. \n- Useful when a route provides a minimal amount of details and more information about the specific field definition is needed.\n- Allowed OData query options: Select\n- Required OAuth scope: repository.Read",
        "operationId": "GetFieldDefinition",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "description": "The requested field definition ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used for formatting. The value should be a standard language tag.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned requested field definition.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FieldDefinition"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Field definition with specified id was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "FieldDefinitions"
        ],
        "summary": "Updates properties of an existing field definition (partial update).",
        "description": "- Partial-update merge semantics. null = leave unchanged; \"\" = clear a string property.\n- FieldType cannot be changed via this endpoint — use the dedicated ChangeFieldType endpoint.\n- ListValues cannot be changed via this endpoint — use the dedicated ListValues endpoints.\n- Required OAuth scope: repository.Write",
        "operationId": "UpdateFieldDefinition",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "description": "The ID of the field definition to update.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The properties to change. Only non-null properties are applied; null leaves the property unchanged. Empty string clears a string property.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateFieldDefinitionRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully updated the field definition.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FieldDefinition"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Field definition with specified id was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "FieldDefinitions"
        ],
        "summary": "Deletes a field definition from the repository.",
        "description": "- Deletes the specified field definition. Behavior when the field is referenced by templates or assigned to entries mirrors the underlying repository server response — if rejected by the server, the response surfaces the server error.\n- Required OAuth scope: repository.Write",
        "operationId": "DeleteFieldDefinition",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "description": "The ID of the field definition to delete.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted the field definition."
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Field definition with specified id was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/FieldDefinitions": {
      "get": {
        "tags": [
          "FieldDefinitions"
        ],
        "summary": "Returns the paged listing of the field definitions available in a repository.",
        "description": "- Returns a paged listing of field definitions available in the specified repository.\n- Useful when trying to find a list of all field definitions available, rather than only those assigned to a specific entry/template.\n- Default page size: 100. Allowed OData query options: Select | Count | OrderBy | Skip | Top | SkipToken | Prefer.\n- Required OAuth scope: repository.Read",
        "operationId": "ListFieldDefinitions",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "Prefer",
            "x-originalName": "prefer",
            "in": "header",
            "description": "An optional OData header. Can be used to set the maximum page size using odata.maxpagesize.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 2
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used for formatting. The value should be a standard language tag.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Specifies the order in which items are returned. The maximum number of expressions is 5.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 5
          },
          {
            "name": "$top",
            "in": "query",
            "description": "Limits the number of items returned from a collection. The maximum value is 150.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 6
          },
          {
            "name": "$skip",
            "in": "query",
            "description": "Excludes the specified number of items of the queried collection from the result.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 7
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 8
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned field definitions.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FieldDefinitionCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "FieldDefinitions"
        ],
        "summary": "Creates a new field definition in the repository.",
        "description": "- Creates a new metadata field definition with the supplied core attributes, flags, and (optionally) initial list values for list-backed fields.\n- Names must be unique within the repository; duplicate-name failures return 400.\n- Required OAuth scope: repository.Write",
        "operationId": "CreateFieldDefinition",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The field definition to create. Name and FieldType are required.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateFieldDefinitionRequest"
              }
            }
          },
          "required": true,
          "x-position": 2
        },
        "responses": {
          "200": {
            "description": "Successfully created the field definition.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FieldDefinition"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/FieldDefinitions/{fieldId}/ListValues": {
      "get": {
        "tags": [
          "FieldDefinitions"
        ],
        "summary": "Returns the list values configured on a list-backed field definition.",
        "description": "- Returns the field's configured list-item values in repository-configured order.\n- Applies only to list-backed fields; non-list fields return an empty array.\n- Required OAuth scope: repository.Read",
        "operationId": "GetFieldListValues",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "description": "The ID of the field definition.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the list values for the field definition.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListValuesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Field definition with specified id was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "FieldDefinitions"
        ],
        "summary": "Replaces the list values for a list-backed field definition.",
        "description": "- Replaces the field's full list-item set wholesale. No partial add/remove endpoints are exposed.\n- Duplicates and empty-string values are rejected with 400.\n- Required OAuth scope: repository.Write",
        "operationId": "ReplaceFieldListValues",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "description": "The ID of the field definition.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The new list of values. Order is preserved. Empty array clears the list.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplaceListValuesRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully replaced the list values for the field definition.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListValuesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Field definition with specified id was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/FieldDefinitions/{fieldId}/ContainingTemplates": {
      "get": {
        "tags": [
          "FieldDefinitions"
        ],
        "summary": "Returns the templates that contain the specified field definition.",
        "description": "- Lists template definitions that include the specified field. Useful before performing destructive operations on the field.\n- Required OAuth scope: repository.Read",
        "operationId": "GetFieldContainingTemplates",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "description": "The ID of the field definition.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Specifies the order in which items are returned. The maximum number of expressions is 5.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 5
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 6
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the templates that contain the field definition.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TemplateDefinition"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Field definition with specified id was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/FieldDefinitions/{fieldId}/AssignedEntryCount": {
      "get": {
        "tags": [
          "FieldDefinitions"
        ],
        "summary": "Returns the count of entries that have a value assigned for the specified field definition.",
        "description": "- Useful for impact analysis before performing destructive operations such as type changes or deletion.\n- Required OAuth scope: repository.Read",
        "operationId": "GetFieldAssignedEntryCount",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "description": "The ID of the field definition.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the count of entries assigned to the field definition.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssignedEntryCountResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Field definition with specified id was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/FieldDefinitions/{fieldId}/Properties": {
      "get": {
        "tags": [
          "FieldDefinitions"
        ],
        "summary": "Gets the custom-properties bag for a field definition.",
        "description": "- Returns the custom-properties bag persisted on the field definition. The bag is an opaque application-defined string → string map scoped to the definition itself (not to a user), useful for attaching integration metadata or application-specific configuration that belongs with the field — for example to encode list-field display preferences such as sort order, or to record an external system's identifier for the field.\n- Keys are application-defined; recommend a namespace prefix (e.g. com.acme.workflow.stage, myapp.kind) to avoid collisions across applications.\n- The response may include entries written by other applications or by system-managed tooling. Callers should leave unrecognized keys untouched on subsequent UpdateFieldProperties calls — round-tripping them in set preserves them, including them in remove deletes them.\n- Required OAuth scope: repository.Read",
        "operationId": "GetFieldProperties",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "description": "The ID of the field definition.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the extended properties for the field definition.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FieldPropertiesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Field definition with specified id was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "FieldDefinitions"
        ],
        "summary": "Partially updates the custom-properties bag for a field definition.",
        "description": "- Entries in set are written (creating or overwriting). Entries in remove are deleted. Properties not mentioned in either are left unchanged.\n- Empty set and empty remove is a no-op and returns the current bag.\n- Returns the full custom-properties bag after the change.\n- The bag is application-defined; the API does not validate key semantics. Recommend namespaced keys (e.g. com.acme.invoice.region, myapp.kind) to avoid collisions.\n- Required OAuth scope: repository.Write",
        "operationId": "UpdateFieldProperties",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "description": "The ID of the field definition.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "Set and/or remove entries on the property bag. Keys not mentioned are left unchanged.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateFieldPropertiesRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully updated the extended properties for the field definition.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FieldPropertiesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Field definition with specified id was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/FieldDefinitions/Merge": {
      "post": {
        "tags": [
          "FieldDefinitions"
        ],
        "summary": "Merges two or more field definitions into a new field definition.",
        "description": "- Combines the values of the source fields into a new field. onConflict controls per-entry value conflicts: Fail (default) aborts on conflict, MakeMultivalue keeps all values, UseFirstField keeps the first and discards the rest.\n- UseFirstField is lossy and requires allowDataLoss = true; otherwise the request is rejected with 400.\n- removeFromTemplates (default false) also removes the source fields from any templates that contain them. The source field definitions themselves are preserved regardless — the merge creates a new field, it does not delete the originals. Callers that want the sources gone must call DeleteFieldDefinition on each after the merge succeeds.\n- autoRename (default false) asks the repository to auto-select a non-conflicting name on collision; whether the repository honors this for merges is version-dependent, so callers should pre-validate newFieldName and treat an \"already exists\" error as a genuine collision.\n- At least two source fields are required.\n- Required OAuth scope: repository.Write",
        "operationId": "MergeFields",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The source field IDs (two or more), the new field name, and merge options.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MergeFieldsRequest"
              }
            }
          },
          "required": true,
          "x-position": 2
        },
        "responses": {
          "200": {
            "description": "Successfully merged the source fields into the new field definition.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FieldDefinition"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Field definition with specified id was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/FieldDefinitions/{fieldId}/ChangeType": {
      "post": {
        "tags": [
          "FieldDefinitions"
        ],
        "summary": "Changes the data type of an existing field definition.",
        "description": "- Converts the field to newFieldType. The conversion can reset type-specific configuration (length, constraint, format), clear list items when leaving the List type, and clear a default value that cannot be reinterpreted in the new type. Entries already assigned the field may have their values dropped if the existing data cannot survive the new type's domain.\n- When the conversion would lose data, allowDataLoss = true is required; otherwise the request is rejected with 400. The server treats the conversion as lossy unless it is one of the explicit safe widenings (Date → DateTime, ShortInteger → LongInteger, ShortInteger → Number, LongInteger → Number) and clearing list items / resetting a constraint / dropping a default would not actually discard data. A field with assigned entries that is not undergoing one of the safe widenings is always treated as lossy.\n- Required OAuth scope: repository.Write",
        "operationId": "ChangeFieldType",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "description": "The ID of the field definition to convert.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The target field type and the data-loss acknowledgement.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeFieldTypeRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully changed the field definition's type.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FieldDefinition"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Field definition with specified id was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/FieldDefinitions/{fieldId}/AccessControl": {
      "get": {
        "tags": [
          "AccessControl"
        ],
        "summary": "Returns the access control list (ACL) of a field definition.",
        "description": "- Returns the field's access control entries (ACEs): the trustee, whether rights are allowed or denied, and the rights themselves. Field ACEs have no scope and are never inherited.\n- The OAuth scope is coarse; the repository session enforces the real permission and returns 403 when the caller lacks the field's ReadPermissions right.\n- Required OAuth scope: repository.Read",
        "operationId": "GetFieldAccessControl",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "description": "The requested field definition ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the field definition's access control list.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FieldAccessControlList"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Field definition with specified id was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "AccessControl"
        ],
        "summary": "Replaces the access control list (ACL) of a field definition.",
        "description": "- Full replace: the supplied entries replace the field's entire explicit ACL. Inherited entries are not accepted (field ACEs are never inherited). Address a trustee by trustee.sid or trustee.accountName (the SID wins when both are given; an account name is resolved to a SID server-side).\n- The OAuth scope is coarse; the repository session enforces the real permission and returns 403 when the caller lacks the field's ChangePermissions right.\n- The entries property is required. A request body that does not include it is rejected with a 400; send an empty array to clear the list.\n- Required OAuth scope: repository.Write",
        "operationId": "SetFieldAccessControl",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "description": "The field definition ID whose ACL to replace.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The access control entries to set.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetFieldAccessControlRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully replaced the field definition's access control list. Returned the updated access control list.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FieldAccessControlList"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Field definition with specified id was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/FieldDefinitions/{fieldId}/Rights": {
      "get": {
        "tags": [
          "AccessControl"
        ],
        "summary": "Returns the rights to a field definition for the current session or a specified trustee.",
        "description": "- Returns the rights a trustee has on the field definition, plus whether the session is read-only. By default these are the effective rights (after group membership, allow/deny resolution, and the privilege overlay); set aclOnly=true for the rights granted by the field's own ACL without that overlay. Omit both trusteeId and trusteeName for the current session.\n- Required OAuth scope: repository.Read",
        "operationId": "GetFieldRights",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "description": "The requested field definition ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "trusteeId",
            "in": "query",
            "description": "An optional trustee SID. When supplied, returns that trustee's rights; otherwise the current session's.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "trusteeName",
            "in": "query",
            "description": "An optional trustee account name, as an alternative to trusteeId. The SID wins when both are supplied.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          },
          {
            "name": "aclOnly",
            "in": "query",
            "description": "Optional. Selects which rights are returned. Default (false): the trustee's effective rights — the net result after allow/deny resolution, group membership, and the repository's privilege overlay (for example, the metadata-management privilege that grants full control over every field regardless of its ACL). When true: only the rights granted by this field definition's own access control list, without that privilege overlay. Group membership is always resolved. Field definitions are not hierarchical, so there is no parent inheritance involved either way.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 5
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the rights for the field definition.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FieldRights"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Field definition with specified id was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/FieldDefinitions/DefaultAccessControl": {
      "get": {
        "tags": [
          "AccessControl"
        ],
        "summary": "Returns the default access control list assigned to newly created field definitions.",
        "description": "- Returns the repository's default field ACL — the access control entries a new field definition inherits at creation time.\n- Required OAuth scope: repository.Read",
        "operationId": "GetDefaultFieldAccessControl",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the default field access control list.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FieldAccessControlList"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "AccessControl"
        ],
        "summary": "Replaces the default access control list assigned to newly created field definitions.",
        "description": "- Full replace: the supplied entries replace the entire default field ACL. Inherited entries are not accepted. Address a trustee by trustee.sid or trustee.accountName (the SID wins when both are given).\n- The entries property is required. A request body that does not include it is rejected with a 400; send an empty array to clear the list.\n- Required OAuth scope: repository.Write",
        "operationId": "SetDefaultFieldAccessControl",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The access control entries to set as the default field ACL.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetFieldAccessControlRequest"
              }
            }
          },
          "required": true,
          "x-position": 2
        },
        "responses": {
          "200": {
            "description": "Successfully replaced the default field access control list. Returned the updated default access control list.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FieldAccessControlList"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/LinkDefinitions": {
      "get": {
        "tags": [
          "LinkDefinitions"
        ],
        "summary": "Returns the link definitions associated with a repository.",
        "description": "- Returns the link definitions in the repository.\n- Provide a repository ID and get a paged listing of link definitions available in the repository. Useful when trying to display all link definitions available, not only links assigned to a specific entry.\n- Default page size: 100. Allowed OData query options: Select | Count | OrderBy | Skip | Top | SkipToken | Prefer.\n- Required OAuth scope: repository.Read",
        "operationId": "ListLinkDefinitions",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "Prefer",
            "x-originalName": "prefer",
            "in": "header",
            "description": "An optional OData header. Can be used to set the maximum page size using odata.maxpagesize.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 2
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Specifies the order in which items are returned. The maximum number of expressions is 5.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          },
          {
            "name": "$top",
            "in": "query",
            "description": "Limits the number of items returned from a collection. The maximum value is 150.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 5
          },
          {
            "name": "$skip",
            "in": "query",
            "description": "Excludes the specified number of items of the queried collection from the result.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 6
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 7
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned link definitions.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LinkDefinitionCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/LinkDefinitions/{linkDefinitionId}": {
      "get": {
        "tags": [
          "LinkDefinitions"
        ],
        "summary": "Returns a single link definition object.",
        "description": "- Returns a single link definition associated with the specified ID.\n- Provide a link definition ID and get the associated link definition. Useful when a route provides a minimal amount of details and more information about the specific link definition is needed.\n- Allowed OData query options: Select\n- Required OAuth scope: repository.Read",
        "operationId": "GetLinkDefinition",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "linkDefinitionId",
            "in": "path",
            "required": true,
            "description": "The requested link definition ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned specified link definition.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LinkDefinition"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Link definition with the specfied id was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/CreateMultipartUploadUrls": {
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Requests Upload URLs to upload a large file in chunks.",
        "description": "- Requests Upload URLs to upload a large file in chunks.\n- Returns an UploadId and an array of URLs to which the file chunks should be written in the same order.\n- To request a new batch of Upload URLs for the same file, set the value of UploadId to the one returned when the first batch of Upload URLs was requested. For requesting the first batch of Upload URLs, leave UploadId empty or null.\n- Example: if a file is going to be uploaded in 10 chunks, the 10 Upload URLs can be retrieved by two successive calls to this api, each call requesting 5 Upload URLs. For this, the first call should have StartingPartNumber=1 and NumberOfParts=5, and the second call should have StartingPartNumber=6 and NumberOfParts=5, along with UploadId returned in the first call.\n- Each Upload URL expires after 15 minutes.\n- Each file chunk written to an Upload URL should be at least 5 MB and at most 5 GB. There is no minimum size limit for the last chunk.\n- The value of NumberOfParts must be in the range [1, 100], meaning that in each call to this api, a maximum of 100 Upload URLs can be requested. \n- The total number of Upload URLs for a single file is 1000, which means (StartingPartNumber + NumberOfParts) should be less than or equal to 1001.\n- Required OAuth scope: repository.Write",
        "operationId": "CreateMultipartUploadUrls",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The request body.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateMultipartUploadUrlsRequest"
              },
              "examples": {
                "1": {
                  "summary": "Request the first batch of URLs",
                  "description": "The body of the CreateMultipartUploadUrls request for requesting a batch of 5 URLs, as the first batch.",
                  "value": {
                    "startingPartNumber": 1,
                    "numberOfParts": 5,
                    "fileName": "Sample.pdf",
                    "mimeType": "application/pdf"
                  }
                },
                "2": {
                  "summary": "Request the second batch of URLs",
                  "description": "The body of the CreateMultipartUploadUrls request for requesting a batch of 5 URLs, as the second batch. The value of UploadId should be the same as the one received in the response of the first request. Any value sent for FileName or MimeType is ignored.",
                  "value": {
                    "uploadId": "VXBsb2FkSWRGcm9tRmlyc3RSZXF1ZXN0",
                    "startingPartNumber": 6,
                    "numberOfParts": 5
                  }
                },
                "3": {
                  "summary": "Request the third batch of URLs",
                  "description": "The body of the CreateMultipartUploadUrls request for requesting a batch of 5 URLs, as the third batch. The value of UploadId should be the same as the one received in the response of the first request. Any value sent for FileName or MimeType is ignored.",
                  "value": {
                    "uploadId": "VXBsb2FkSWRGcm9tRmlyc3RSZXF1ZXN0",
                    "startingPartNumber": 11,
                    "numberOfParts": 5
                  }
                }
              }
            }
          },
          "required": true,
          "x-position": 2
        },
        "responses": {
          "200": {
            "description": "Returned response containing an upload ID and an array of upload URLs.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateMultipartUploadUrlsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Requested repository was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Request is too large.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Folder/ImportUploadedParts": {
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Starts an asynchronous import task to import a document into a folder.",
        "description": "- Imports a new document from previously uploaded parts into the specified folder. The parts are assembled server-side into a single file that is then processed like a direct import.\n- The uploadId is obtained from the CreateMultipartUploadUrls response. The partETags are the ETag values returned by S3 when uploading each file chunk to the pre-signed upload URLs, and should be provided in the order of their associated upload URLs.\n- The assembled file is imported as either the electronic document or image pages, following the same rules as the synchronous POST /Folder/Import:\n  - If the file extension is not in {txt, tif, tiff, bmp, pcx, jpg, jpeg, gif, png}, or if `importAsElectronicDocument=true`, the file is stored as the electronic document. For supported edoc formats, `pdfOptions.generatePages` additionally produces server-rendered image pages, and `pdfOptions.generateText` triggers text extraction from the document (or OCR when the source is image-based).\n  - Otherwise (image extension with `importAsElectronicDocument=false`), the file is imported as image pages. `pdfOptions.generateText` triggers OCR for the resulting pages.\n- Metadata in the body is assigned to the newly created entry.\n- Supports assembled files up to 64 GB — use this endpoint when the file exceeds the size or time limits of the synchronous POST /Folder/Import.\n- Returns 202 Accepted with a task ID. Poll the task endpoint for progress and completion. This route does not support partial success.\n- `imageFiles` and `generateImagePagesText` are not supported on this endpoint; use the synchronous POST /Folder/Import to attach image pages alongside the imported file.\n- Required OAuth scope: repository.Write",
        "operationId": "StartImportUploadedParts",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The entry ID of the folder that the document will be created in.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "autoCreateFolderPath",
            "in": "query",
            "description": "When true, any missing folders in the request's `folderPath` are created; when false (default), a missing folder returns 404.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 4
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used. The value should be a standard language tag. This may be used when setting field values with tokens.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 5
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The request body.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StartImportUploadedPartsRequest"
              }
            }
          },
          "x-position": 3
        },
        "responses": {
          "202": {
            "description": "Operation was started successfully. Returned a long operation task ID.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StartTaskResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Requested repository was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Request is too large.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Import operation failed due to an internal server error. See error for details.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/ExportAsync": {
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Starts an asynchronous export task to export an entry.",
        "description": "- Starts an asynchronous export operation to export an entry.\n- If successful, it returns a taskId which can be used to check the status of the export operation or download the export result, otherwise, it returns an error.\n- When part=Text, a document whose pages carry no text stream is rejected with 400 rather\n  than started and failed later. Text is extracted asynchronously after an import, so a\n  document may briefly have pages but no text; poll hasText on ListPageInfos and retry once\n  it reports true. A document with no pages at all is not rejected here.\n- The download link the completed task carries in result.uri is **single-use**. The first\n  GET returns the file; any later GET of the same link answers 404, and that 404 carries no\n  problem details because it comes from the download service rather than from this API.\n  Save the content on the first download, and start a new export if a download has to be\n  retried.\n- Required OAuth scope: repository.Read",
        "operationId": "StartExportEntry",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The ID of entry to export.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "pageRange",
            "in": "query",
            "description": "A comma-separated range of pages to include. Ex: 1,3,4 or 1-3,5-7,9. This value is ignored when part=Edoc or part=AlternateEdoc.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The request body.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StartExportEntryRequest"
              },
              "examples": {
                "1": {
                  "summary": "Export the image part of a Laserfiche Document",
                  "description": "The body of the export request includes:<br /><ol><li>The audit event information to associate with the export operation.</li><li><strong>part</strong>: the part of the document to export. Options include: <strong>Image, Text, Edoc, AlternateEdoc</strong>.</li><li><strong>imageOptions</strong>: The options applied when exporting as Image.<ul><li><strong>format:</strong> the image format to export as. Options include: <strong>MultiPageTIFF, SinglePageTIFF, PNG, PDF, JPEG</strong>. The default value is MultiPageTIFF. MultiPageTIFF format is a single multi-page TIFF file. SinglePageTIFF format is multiple single-page TIFF files (in a single zip file).</li><li><strong>jpegCompressionLevel:</strong> the quality level for JPEG compression when exporting images. The value must be between 0 and 100 (inclusive). The default value is 70.</li><li><strong>includeAnnotations:</strong> indicates if the annotations need to be included. The default value is true.</li><li><strong>convertPdfAnnotations</strong>: indicates if the annotations on the image need to be converted to PDF annotations when exporting to PDF format. The default value is true. This option is only applicable when exporting to PDF format and includeAnnotations is true.</li><li><strong>pagePrefix</strong>: the page prefix of the individual files, when exporting to multi-file format (e.g.zip). The value must have a length of at most 10 characters and only valid characters that can be included in file names are allowed. The default value is \", Page \".</li><li><strong>includeRedactions</strong>: indicates if redactions are included. The default value is true.</li><li><strong>watermark</strong>: the watermark element added to the image. This includes the following properties: <ul><li><strong>text</strong>: the text of the watermark. The value must be a string with a length of at most 100 characters and must not be all whitespace characters. Using emojis in the text is not supported.</li><li><strong>position</strong>: the position of the watermark. The default value is DeadCenter. Assuming that the page is divided into a 3x3 grid, then position can be specified using the following values: <ul><li>TopLeft, TopCenter, TopRight, MiddleLeft, DeadCenter, MiddleRight, BottomLeft, BottomCenter, BottomRight</li></ul></li><li><strong>rotationAngle</strong>: the rotation angle of the watermark. The value must be between 0 and 360 (inclusive). The default value is 0.</li><li><strong>pageSpanPercentage</strong>: the percentage of the page that the watermark spans on. The value must be between 1 and 100 (inclusive). The default value is 50.</li></ul></li></ul></li></ol>",
                  "value": {
                    "auditReasonId": 0,
                    "auditReasonComment": "",
                    "part": "Image",
                    "imageOptions": {
                      "format": "MultiPageTIFF",
                      "jpegCompressionLevel": 70,
                      "includeAnnotations": true,
                      "convertPdfAnnotations": true,
                      "pagePrefix": ", Page ",
                      "includeRedactions": true,
                      "watermark": {
                        "text": "",
                        "position": "DeadCenter",
                        "rotationAngle": 0,
                        "pageSpanPercentage": 50
                      }
                    }
                  }
                },
                "2": {
                  "summary": "Export the text part of a Laserfiche Document",
                  "description": "The body of the export request includes:<br /><ol><li>The audit event information to associate with the export operation.</li><li><strong>part</strong>: the part of the document to export. Options include: <strong>Image, Text, Edoc, AlternateEdoc</strong>.</li><li><strong>textOptions</strong>: The options applied when exporting as Text.<ul><li><strong>includeRedactions</strong>: indicates if redactions are included. The default value is true.</li><li><strong>redactionCharacter</strong>: the character that replaces the original character in a redacted text. The value must be a string of length 1 and must not be a whitespace character. The default value is \"X\".</li></ul></li></ol>",
                  "value": {
                    "auditReasonId": 0,
                    "auditReasonComment": "",
                    "part": "Text",
                    "textOptions": {
                      "includeRedactions": true,
                      "redactionCharacter": "X"
                    }
                  }
                },
                "3": {
                  "summary": "Export the edoc part of a Laserfiche Document",
                  "description": "The body of the export request includes:<br /><ol><li>The audit event information to associate with the export operation.</li><li><strong>part</strong>: the part of the document to export. Options include: <strong>Image, Text, Edoc, AlternateEdoc</strong>.</li></ol>",
                  "value": {
                    "auditReasonId": 0,
                    "auditReasonComment": "",
                    "part": "Edoc"
                  }
                },
                "4": {
                  "summary": "Export an alternate electronic document of a Laserfiche Document",
                  "description": "The body of the export request includes:<br /><ol><li>The audit event information to associate with the export operation.</li><li><strong>part</strong>: the part of the document to export. Options include: <strong>Image, Text, Edoc, AlternateEdoc</strong>.</li><li><strong>alternateEdocName</strong>: the name of the alternate electronic document to export. Required when part=AlternateEdoc, and rejected for every other part. 1 to 15 characters, each an ASCII letter, an ASCII digit, or one of <strong>!@#$%^&amp;()-+={}[]_~</strong>. Matched exactly, so a name differing only in letter case is not found. Names reserved for internal use are also reported as not found.</li></ol><br />pageRange is ignored for this part, as it is for Edoc: an alternate electronic document is a whole stored stream rather than a rendering of the document's pages.",
                  "value": {
                    "auditReasonId": 0,
                    "auditReasonComment": "",
                    "part": "AlternateEdoc",
                    "alternateEdocName": "audio1"
                  }
                }
              }
            }
          },
          "required": true,
          "x-position": 4
        },
        "responses": {
          "202": {
            "description": "Operation was started successfully. Returned a long operation task ID.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StartTaskResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Requested repository was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Request is too large.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Export operation failed due to an internal server error. See error for details.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Folder/CopyAsync": {
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Starts an asynchronous copy task to copy an entry into a folder.",
        "description": "- Copy a new child entry in the designated folder async, and potentially return a taskId.\n- Provide the parent folder ID, and copy an entry as a child of the designated folder.\n- The status of the operation can be checked via the Tasks route.\n- Token substitution in the name of the copied entry is not supported.\n- Required OAuth scope: repository.Write",
        "operationId": "StartCopyEntry",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The folder ID that the entry will be created in.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used. The value should be a standard language tag.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 4
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The request body.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StartCopyEntryRequest"
              },
              "examples": {
                "1": {
                  "summary": "Copy an entry",
                  "description": "We can copy an entry (marked by sourceId property) to a destination (marked in URL).",
                  "value": {
                    "sourceId": 123,
                    "name": "CopiedEntry",
                    "autoRename": false
                  }
                }
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "202": {
            "description": "Operation was started successfully. Returned a long operation task ID.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StartTaskResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Request is too large.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Operation limit or request limit has been reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Requested repository was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}": {
      "delete": {
        "tags": [
          "Entries"
        ],
        "summary": "Starts an asynchronous delete task to delete an entry.",
        "description": "- Begins a task to delete an entry, and returns a taskId.\n- Provide an entry ID, and queue a delete task to remove it from the repository (includes nested objects if the entry is a Folder type). The entry will not be deleted immediately.\n- Optionally include an audit reason ID and comment in the JSON body. This route returns a taskId, and will run as an asynchronous operation. Check the progress via the Tasks route.\n- Required OAuth scope: repository.Write",
        "operationId": "StartDeleteEntry",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested entry ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The submitted audit reason.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StartDeleteEntryRequest"
              }
            }
          },
          "x-position": 3
        },
        "responses": {
          "202": {
            "description": "Operation was started successfully. Returned a long operation task ID.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StartTaskResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Requested repository was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Request is too large.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Operation limit or request limit has been reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Entries"
        ],
        "summary": "Returns a single entry object.",
        "description": "- Returns a single entry object.\n- Provide an entry ID, and get the entry associated with that ID. Useful when detailed information about the entry is required, such as metadata, path information, etc.\n- If the entry is a subtype (Folder, Document, or Shortcut), the response will automatically include properties specific to that entry type. For example, Document entries include page-related properties such as the number of image pages and whether an electronic document is attached. Entries with an electronic document component include the electronic document size (in bytes). Folder entries include whether the folder is a record series. Shortcut entries include the target entry ID.\n- Optionally pass 'includeChildInfo=true' on a folder to retrieve, on demand, a 'childInfo' object with whether the folder has immediate children, the total immediate-child count, and a per-type breakdown (folder/document/shortcut). Immediate children only — recursive subtree counts are deliberately not supported here (unbounded, DoS-prone on a public API). This is opt-in because it is comparatively expensive; lazy expansion is the recommended pattern for folder tree navigation.\n- Optionally pass 'includeTotalSize=true' on a document to retrieve 'totalDocumentSize' — the full stored size including rendered pages, OCR text, thumbnails, and attachments — in addition to the electronic-document size. Opt-in because it aggregates across all pages.\n- Allowed OData query options: Select.\n- When OData Select query option is used, 'entryType' is always included in the result.\n- Required OAuth scope: repository.Read",
        "operationId": "GetEntry",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested entry ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "includeChildInfo",
            "in": "query",
            "description": "Optional. When true and the entry is a folder, includes a childInfo object reporting whether the folder has immediate children, the total count, and a per-type breakdown (folderCount, documentCount, shortcutCount). Counts are for immediate children only — never recursive/whole-subtree (a recursive count is intentionally not offered here; it would be an unbounded, DoS-prone operation on a public API). Omitted by default because the calculation is comparatively expensive — for tree UIs prefer lazy expansion (load children on demand) over requesting this per node. Ignored for non-folder entries.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 3
          },
          {
            "name": "includeTotalSize",
            "in": "query",
            "description": "Optional. When true and the entry is a document, includes totalDocumentSize — the document's full stored size (electronic document plus page image/text/locations/thumbnail data and attachments), as opposed to electronicDocumentSize which is just the source file. Omitted by default because it aggregates across all of the document's pages. Ignored for non-document entries.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 4
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 5
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved requested entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Entries"
        ],
        "summary": "Update an entry. (Move and/or Rename)",
        "description": "- Update an entry. (Move and/or Rename)\n- Move an entry to a new folder by setting the ParentId in the request body.\n- Rename an entry by setting the Name in the request body.\n- Required OAuth scope: repository.Write",
        "operationId": "UpdateEntry",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested entry ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used. The value should be a standard language tag.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 4
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The request containing the folder ID that the entry will be moved to and the new name the entry will be renamed to.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateEntryRequest"
              },
              "examples": {
                "1": {
                  "summary": "Move an entry",
                  "description": "We can move an entry by specifying the parent folder id in the request body.",
                  "value": {
                    "parentId": 123
                  }
                },
                "2": {
                  "summary": "Rename an entry",
                  "description": "We can rename an entry by specifying the new name of the entry in the request body.",
                  "value": {
                    "name": "NewName",
                    "autoRename": false
                  }
                },
                "3": {
                  "summary": "Move and Rename an entry",
                  "description": "We can move and rename an entry by specifying the parent folder id and the new name of the entry in the request body.",
                  "value": {
                    "parentId": 123,
                    "name": "NewName",
                    "autoRename": false
                  }
                }
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Succesfully moved and/or renamed the entry. Returned updated entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "Entry name conflicts.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Request is too large.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Folder/Import": {
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Imports a new document into the specified folder.",
        "description": "- Imports a new document into the specified folder, optionally with electronic document content, image pages, and metadata.\n- The `file` form field is optional. When provided, it becomes either the electronic document or image pages of the new document:\n  - If the file extension is not in {txt, tif, tiff, bmp, pcx, jpg, jpeg, gif, png}, or if `importAsElectronicDocument=true`, the file is stored as the electronic document. For supported edoc formats, `pdfOptions.generatePages` additionally produces server-rendered image pages, and `pdfOptions.generateText` triggers text extraction from the document (or OCR when the source is image-based).\n  - Otherwise (image extension with `importAsElectronicDocument=false`), the file is imported as image pages. A multi-page TIFF produces multiple pages. `pdfOptions.generateText` triggers OCR for the resulting pages.\n  - A zero-byte file creates an empty document with no electronic document and no pages.\n- The optional `imageFiles` form field accepts up to 10 image files (100 MB aggregate) that are appended as image pages. Set `generateImagePagesText=false` in the body to skip OCR for the pages added via `imageFiles` (default: true).\n- `file` and `imageFiles` can be combined whenever the file is imported as the electronic document — i.e. non-image file types, or image file types with `importAsElectronicDocument=true`. The request returns 400 only when both are provided and the file would itself become image pages (image file type with `importAsElectronicDocument=false`).\n- Metadata in the body is assigned to the newly created entry.\n- Size and time limits: file must be ≤ 100 MB and the request must complete within 60 seconds. These limits may change. Use the asynchronous long-operation import endpoint for larger files or slower imports.\n- Required OAuth scope: repository.Write",
        "operationId": "ImportEntry",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The entry ID of the folder that the document will be created in.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "autoCreateFolderPath",
            "in": "query",
            "description": "When true, any missing folders in the request's `folderPath` are created; when false (default), a missing folder returns 404.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 3
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used. The value should be a standard language tag. This may be used when setting field values with tokens.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 4
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "request"
                ],
                "properties": {
                  "file": {
                    "type": "string",
                    "description": "Optional. The file to import. If the file extension is not in {txt, tif, tiff, bmp, pcx, jpg, jpeg, gif, png}, or if importAsElectronicDocument=true, it is stored as the electronic document. Otherwise (image extension with importAsElectronicDocument=false), it is imported as image pages. A zero-byte file creates an empty document with no electronic document and no pages.",
                    "format": "binary"
                  },
                  "request": {
                    "$ref": "#/components/schemas/ImportEntryRequest"
                  },
                  "imageFiles": {
                    "type": "array",
                    "description": "Optional. Up to 10 image files (100 MB aggregate) that are appended as image pages. Use PUT /Document/Pages to replace existing pages instead of appending.",
                    "items": {
                      "type": "string",
                      "format": "binary"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Document was created successfully. Returns created entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Unable to create document.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Request is too large.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Export": {
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Exports an entry.",
        "description": "- Export an entry.\n- The export may time out if it takes longer than 60 seconds. This value is subject to change at anytime. Use the long operation asynchronous export if you run into this restriction.\n- When part=Text, a document whose pages carry no text stream is rejected with 400 rather\n  than started and failed later. Text is extracted asynchronously after an import, so a\n  document may briefly have pages but no text; poll hasText on ListPageInfos and retry once\n  it reports true. A document with no pages at all is not rejected here.\n- The returned download link is **single-use**. The first GET returns the file; any later\n  GET of the same link answers 404, and that 404 carries no problem details because it\n  comes from the download service rather than from this API. Save the content on the first\n  download, and start a new export if a download has to be retried.\n- Required OAuth scope: repository.Read",
        "operationId": "ExportEntry",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The ID of entry to export.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "pageRange",
            "in": "query",
            "description": "A comma-separated range of pages to include. Ex: 1,3,4 or 1-3,5-7,9. This value is ignored when exporting as Edoc or AlternateEdoc.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The request body.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExportEntryRequest"
              },
              "examples": {
                "1": {
                  "summary": "Export the image part of a Laserfiche Document",
                  "description": "The body of the export request includes:<br /><ol><li>The audit event information to associate with the export operation.</li><li><strong>part</strong>: the part of the document to export. Options include: <strong>Image, Text, Edoc, AlternateEdoc</strong>.</li><li><strong>imageOptions</strong>: The options applied when exporting as Image.<ul><li><strong>format:</strong> the image format to export as. Options include: <strong>MultiPageTIFF, SinglePageTIFF, PNG, PDF, JPEG</strong>. The default value is MultiPageTIFF. MultiPageTIFF format is a single multi-page TIFF file. SinglePageTIFF format is multiple single-page TIFF files (in a single zip file).</li><li><strong>jpegCompressionLevel:</strong> the quality level for JPEG compression when exporting images. The value must be between 0 and 100 (inclusive). The default value is 70.</li><li><strong>includeAnnotations:</strong> indicates if the annotations need to be included. The default value is true.</li><li><strong>convertPdfAnnotations</strong>: indicates if the annotations on the image need to be converted to PDF annotations when exporting to PDF format. The default value is true. This option is only applicable when exporting to PDF format and includeAnnotations is true.</li><li><strong>pagePrefix</strong>: the page prefix of the individual files, when exporting to multi-file format (e.g.zip). The value must have a length of at most 10 characters and only valid characters that can be included in file names are allowed. The default value is \", Page \".</li><li><strong>includeRedactions</strong>: indicates if redactions are included. The default value is true.</li><li><strong>watermark</strong>: the watermark element added to the image. This includes the following properties: <ul><li><strong>text</strong>: the text of the watermark. The value must be a string with a length of at most 100 characters and must not be all whitespace characters. Using emojis in the text is not supported.</li><li><strong>position</strong>: the position of the watermark. The default value is DeadCenter. Assuming that the page is divided into a 3x3 grid, then position can be specified using the following values: <ul><li>TopLeft, TopCenter, TopRight, MiddleLeft, DeadCenter, MiddleRight, BottomLeft, BottomCenter, BottomRight</li></ul></li><li><strong>rotationAngle</strong>: the rotation angle of the watermark. The value must be between 0 and 360 (inclusive). The default value is 0.</li><li><strong>pageSpanPercentage</strong>: the percentage of the page that the watermark spans on. The value must be between 1 and 100 (inclusive). The default value is 50.</li></ul></li></ul></li></ol>",
                  "value": {
                    "auditReasonId": 0,
                    "auditReasonComment": "",
                    "part": "Image",
                    "imageOptions": {
                      "format": "MultiPageTIFF",
                      "jpegCompressionLevel": 70,
                      "includeAnnotations": true,
                      "convertPdfAnnotations": true,
                      "pagePrefix": ", Page ",
                      "includeRedactions": true,
                      "watermark": {
                        "text": "",
                        "position": "DeadCenter",
                        "rotationAngle": 0,
                        "pageSpanPercentage": 50
                      }
                    }
                  }
                },
                "2": {
                  "summary": "Export the text part of a Laserfiche Document",
                  "description": "The body of the export request includes:<br /><ol><li>The audit event information to associate with the export operation.</li><li><strong>part</strong>: the part of the document to export. Options include: <strong>Image, Text, Edoc, AlternateEdoc</strong>.</li><li><strong>textOptions</strong>: The options applied when exporting as Text.<ul><li><strong>includeRedactions</strong>: indicates if redactions are included. The default value is true.</li><li><strong>redactionCharacter</strong>: the character that replaces the original character in a redacted text. The value must be a string of length 1 and must not be a whitespace character. The default value is \"X\".</li></ul></li></ol>",
                  "value": {
                    "auditReasonId": 0,
                    "auditReasonComment": "",
                    "part": "Text",
                    "textOptions": {
                      "includeRedactions": true,
                      "redactionCharacter": "X"
                    }
                  }
                },
                "3": {
                  "summary": "Export the edoc part of a Laserfiche Document",
                  "description": "The body of the export request includes:<br /><ol><li>The audit event information to associate with the export operation.</li><li><strong>part</strong>: the part of the document to export. Options include: <strong>Image, Text, Edoc, AlternateEdoc</strong>.</li></ol>",
                  "value": {
                    "auditReasonId": 0,
                    "auditReasonComment": "",
                    "part": "Edoc"
                  }
                },
                "4": {
                  "summary": "Export an alternate electronic document of a Laserfiche Document",
                  "description": "The body of the export request includes:<br /><ol><li>The audit event information to associate with the export operation.</li><li><strong>part</strong>: the part of the document to export. Options include: <strong>Image, Text, Edoc, AlternateEdoc</strong>.</li><li><strong>alternateEdocName</strong>: the name of the alternate electronic document to export. Required when part=AlternateEdoc, and rejected for every other part. 1 to 15 characters, each an ASCII letter, an ASCII digit, or one of <strong>!@#$%^&amp;()-+={}[]_~</strong>. Matched exactly, so a name differing only in letter case is not found. Names reserved for internal use are also reported as not found.</li></ol><br />pageRange is ignored for this part, as it is for Edoc: an alternate electronic document is a whole stored stream rather than a rendering of the document's pages.",
                  "value": {
                    "auditReasonId": 0,
                    "auditReasonComment": "",
                    "part": "AlternateEdoc",
                    "alternateEdocName": "audio1"
                  }
                }
              }
            }
          },
          "required": true,
          "x-position": 4
        },
        "responses": {
          "200": {
            "description": "Export was successful. Returned a single-use link to download the exported entry. A second download of the same link returns 404.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExportEntryResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Request is too large.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Export operation failed due to an internal server error. See error for details.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/ByPath": {
      "get": {
        "tags": [
          "Entries"
        ],
        "summary": "Returns a single entry object using the entry path.",
        "description": "- Returns a single entry object using the entry path.\n- Optional query parameter: fallbackToClosestAncestor. Use the fallbackToClosestAncestor query parameter to return the closest existing ancestor if the initial entry path is not found.\n- Required OAuth scope: repository.Read",
        "operationId": "GetEntryByPath",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "fullPath",
            "in": "query",
            "required": true,
            "description": "The requested entry path.",
            "schema": {
              "type": "string"
            },
            "x-position": 2
          },
          {
            "name": "fallbackToClosestAncestor",
            "in": "query",
            "description": "An optional query parameter used to indicate whether or not the closest ancestor in the path should be returned if the initial entry path is not found. The default value is false.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 3
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved requested entry or ancestor entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetEntryByPathResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested entry path was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Folder/Children": {
      "get": {
        "tags": [
          "Entries"
        ],
        "summary": "Returns the children entries of a folder.",
        "description": "- Returns the children entries of a folder in the repository.\n- Provide an entry ID (must be a folder), and get a paged listing of entries in that folder. Used as a way of navigating through the repository.\n- Entries returned in the listing are not automatically converted to their subtype (Folder, Shortcut, Document), so clients who want model-specific information should request it via the GET entry by ID route.\n- Optional query parameters: groupByEntryType (bool). This query parameter decides if results are returned in groups based on their entry type. \n- Optionally returns field values for the entries in the folder. Each field name needs to be specified in the request. Maximum limit of 10 field names. If field values are requested, only the first value is returned if it is a multi value field. The remaining field values can be retrieved via the GET fields route. Null or Empty field values should not be used to determine if a field is assigned to the entry.\n- Default page size: 150. Allowed OData query options: Select | Count | OrderBy | Skip | Top | SkipToken | Prefer. OData $OrderBy syntax should follow: \"PropertyName direction,PropertyName2 direction\". Sort order can be either value \"asc\" or \"desc\".\n- Required OAuth scope: repository.Read",
        "operationId": "ListEntries",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The folder ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "groupByEntryType",
            "in": "query",
            "description": "Indicates if the result should be grouped by entry type or not. The default value is false.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 3
          },
          {
            "name": "fields",
            "in": "query",
            "style": "form",
            "explode": true,
            "description": "Optional array of field names. Field values corresponding to the given field names will be returned for each entry.",
            "schema": {
              "type": "array",
              "nullable": true,
              "items": {
                "type": "string"
              }
            },
            "x-position": 4
          },
          {
            "name": "formatFieldValues",
            "in": "query",
            "description": "Indicates if field values should be formatted. Only applicable if Fields are specified. The default value is false.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 5
          },
          {
            "name": "Prefer",
            "x-originalName": "prefer",
            "in": "header",
            "description": "An optional OData header. Can be used to set the maximum page size using odata.maxpagesize.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 6
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used for formatting. The value should be a standard language tag. The formatFieldValues query parameter must be set to true, otherwise culture will not be used for formatting.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 7
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 8
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Specifies the order in which items are returned. The maximum number of expressions is 5.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 10
          },
          {
            "name": "$top",
            "in": "query",
            "description": "Limits the number of items returned from a collection. The maximum value is 150.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 11
          },
          {
            "name": "$skip",
            "in": "query",
            "description": "Excludes the specified number of items of the queried collection from the result.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 12
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 13
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned list of children entries in requested folder.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntryCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Creates a new child entry in a folder.",
        "description": "- Create a new child entry in the designated folder.\n- Provide the parent folder ID, and based on the request body, create a folder/shortcut as a child entry of the designated folder.\n- Required OAuth scope: repository.Write",
        "operationId": "CreateEntry",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The folder ID that the entry will be created in.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "autoCreateFolderPath",
            "in": "query",
            "description": "When true, any missing folders in the request's `folderPath` are created; when false (default), a missing folder returns 404.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 4
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used. The value should be a standard language tag.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 5
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The request body.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateEntryRequest"
              },
              "examples": {
                "1": {
                  "summary": "Create a folder",
                  "description": "We can create a new folder with the given name.",
                  "value": {
                    "entryType": "Folder",
                    "name": "NewFolder",
                    "autoRename": false
                  }
                },
                "2": {
                  "summary": "Create a shortcut",
                  "description": "We can create a new shortcut with the given name to the entry with the targetId.",
                  "value": {
                    "entryType": "Shortcut",
                    "name": "NewShortcut",
                    "autoRename": false,
                    "targetId": 123
                  }
                }
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "201": {
            "description": "Document was created successfully. Returns created entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "Entry name conflicts.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Request is too large.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Fields": {
      "get": {
        "tags": [
          "Entries"
        ],
        "summary": "Returns the fields assigned to an entry.",
        "description": "- Returns the fields assigned to an entry.\n- Provide an entry ID, and get a paged listing of all fields assigned to that entry.\n- Default page size: 100. Allowed OData query options: Select | Count | OrderBy | Skip | Top | SkipToken | Prefer.\n- Required OAuth scope: repository.Read",
        "operationId": "ListFields",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested entry ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "Prefer",
            "x-originalName": "prefer",
            "in": "header",
            "description": "An optional OData header. Can be used to set the maximum page size using odata.maxpagesize.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "formatFieldValues",
            "in": "query",
            "description": "An optional query parameter used to indicate if the field values should be formatted. The default value is false.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 4
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used for formatting. The value should be a standard language tag. The formatFieldValues query parameter must be set to true, otherwise culture will not be used for formatting.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 5
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 6
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Specifies the order in which items are returned. The maximum number of expressions is 5.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 7
          },
          {
            "name": "$top",
            "in": "query",
            "description": "Limits the number of items returned from a collection. The maximum value is 150.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 8
          },
          {
            "name": "$skip",
            "in": "query",
            "description": "Excludes the specified number of items of the queried collection from the result.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 9
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 10
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned field values for requested entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FieldCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Entries"
        ],
        "summary": "Updates the field values assigned to an entry.",
        "description": "- Update the field values assigned to an entry.\n- Provide the new field values to assign to the entry, and remove/reset all previously assigned field values.\n- This is an overwrite action. The request body must include all desired field values, including any existing field values that should remain assigned to the entry. Field values that are not included in the request will be deleted from the entry. If the field value that is not included is part of a template, it will still be assigned (as required by the template), but its value will be reset.\n- The fields property is required. A request body that does not include it is rejected with a 400; send an empty list to clear every field value.\n- Required OAuth scope: repository.Write",
        "operationId": "SetFields",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The entry ID of the entry that will have its fields updated.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used. The value should be a standard language tag. This may be used when setting field values with tokens.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 4
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The request body.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetFieldsRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully updated field values on requested entry. Returned updated fields",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FieldCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Request is too large.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Tags": {
      "get": {
        "tags": [
          "Entries"
        ],
        "summary": "Returns the tags assigned to an entry.",
        "description": "- Returns the tags assigned to an entry.\n- Provide an entry ID, and get a paged listing of tags assigned to that entry.\n- Default page size: 100. Allowed OData query options: Select | Count | OrderBy | Skip | Top | SkipToken | Prefer.\n- Required OAuth scope: repository.Read",
        "operationId": "ListTags",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested entry ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "Prefer",
            "x-originalName": "prefer",
            "in": "header",
            "description": "An optional OData header. Can be used to set the maximum page size using odata.maxpagesize.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Specifies the order in which items are returned. The maximum number of expressions is 5.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 5
          },
          {
            "name": "$top",
            "in": "query",
            "description": "Limits the number of items returned from a collection. The maximum value is 150.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 6
          },
          {
            "name": "$skip",
            "in": "query",
            "description": "Excludes the specified number of items of the queried collection from the result.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 7
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 8
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned tags for requested entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Entries"
        ],
        "summary": "Assigns tags to an entry.",
        "description": "- Assign tags to an entry.\n- Provide an entry ID and a list of tags to assign to that entry.\n- This is an overwrite action. The request must include all tags to assign to the entry, including existing tags that should remain assigned to the entry.\n- The tags property is required. A request body that does not include it is rejected with a 400; send an empty list to unassign every tag.\n- Required OAuth scope: repository.Write",
        "operationId": "SetTags",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested entry ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The tags to add.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetTagsRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully assigned tags to the requested entry. Returned updated tags.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Tag with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Request is too large.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Links": {
      "put": {
        "tags": [
          "Entries"
        ],
        "summary": "Assigns links to an entry.",
        "description": "- Assign links to an entry.\n- Provide an entry ID and a list of links to assign to that entry.\n- This is an overwrite action. The request must include all links to assign to the entry, including existing links that should remain assigned to the entry.\n- The links property is required. A request body that does not include it is rejected with a 400; send an empty list to remove every link.\n- Required OAuth scope: repository.Write",
        "operationId": "SetLinks",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The request repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested entry ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The request body.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetLinksRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully returned list of links assigned to requested entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LinkCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Request is too large.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Entries"
        ],
        "summary": "Returns the links assigned to an entry.",
        "description": "- Returns the links assigned to an entry.\n- Provide an entry ID, and get a paged listing of links assigned to that entry.\n- Default page size: 100. Allowed OData query options: Select | Count | OrderBy | Skip | Top | SkipToken | Prefer.\n- Required OAuth scope: repository.Read",
        "operationId": "ListLinks",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested entry ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "Prefer",
            "x-originalName": "prefer",
            "in": "header",
            "description": "An optional odata header. Can be used to set the maximum page size using odata.maxpagesize.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Specifies the order in which items are returned. The maximum number of expressions is 5.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 5
          },
          {
            "name": "$top",
            "in": "query",
            "description": "Limits the number of items returned from a collection. The maximum value is 150.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 6
          },
          {
            "name": "$skip",
            "in": "query",
            "description": "Excludes the specified number of items of the queried collection from the result.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 7
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 8
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned list of links assigned to requested entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LinkCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Folder/Copy": {
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Copies a new child entry in a folder.",
        "description": "- Copy a new child entry in the designated folder.\n- Provide the parent folder ID, and based on the request body, copy a child entry of the designated folder.\n- Required OAuth scope: repository.Write",
        "operationId": "CopyEntry",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The folder ID that the entry will be created in.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used. The value should be a standard language tag.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 4
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The request body.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CopyEntryRequest"
              },
              "examples": {
                "1": {
                  "summary": "Copy an entry",
                  "description": "We can copy an entry (marked by sourceId property) to a destination (marked in URL).",
                  "value": {
                    "sourceId": 123,
                    "name": "CopiedEntry",
                    "autoRename": false
                  }
                }
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "201": {
            "description": "Entry was copied successfully. Returned copied entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "Entry name conflicts.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Request is too large.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document": {
      "patch": {
        "tags": [
          "Entries"
        ],
        "summary": "Updates a document entry's electronic document, image pages, and/or metadata.",
        "description": "- Updates the electronic document, image pages, and/or metadata of the specified document entry.\n- At least one of `file`, `imageFiles`, or `metadata` must be provided.\n- The `file` form field is optional. When provided, it replaces the electronic document or is imported as image pages, following the same rules as the import endpoint:\n  - If the file extension is not in {txt, tif, tiff, bmp, pcx, jpg, jpeg, gif, png}, or if `importAsElectronicDocument=true`, the file replaces the existing electronic document. For supported edoc formats, `pdfOptions.generatePages` additionally produces server-rendered image pages, and `pdfOptions.generateText` triggers text extraction from the document (or OCR when the source is image-based).\n  - Otherwise (image extension with `importAsElectronicDocument=false`), the file is imported as image pages. `pdfOptions.generateText` triggers OCR for the resulting pages.\n  - A zero-byte file is rejected with 400. To delete the electronic document while preserving pages and metadata, use `DELETE /Document/Edoc`.\n- The optional `imageFiles` form field accepts up to 10 image files (100 MB aggregate) that are appended as image pages. Set `generateImagePagesText=false` in the body to skip OCR for the pages added via `imageFiles` (default: true).\n- `file` and `imageFiles` can be combined whenever the file is imported as the electronic document — i.e. non-image file types, or image file types with `importAsElectronicDocument=true`. The request returns 400 only when both are provided and the file would itself become image pages (image file type with `importAsElectronicDocument=false`).\n- Metadata updates are additive — only fields, tags, and links specified in the request are changed; everything else is preserved. Use PUT /fields, PUT /tags, or PUT /links for replace semantics.\n- Lock/checkout lifecycle: the endpoint executes all requested mutations inside a single lock scope so that only one version is produced. It detects the caller's starting state and preserves it — the caller's existing persistent lock and/or checkout are reused, and the endpoint adds only what's missing for atomicity (checking out when the document is under version control but not checked out, persistently locking when no plock is held). On success, anything the endpoint added is released in reverse order (unlock plock, then check in — creating one version). On error, the endpoint undoes what it acquired (delete plock, undo checkout — no partial version).\n- If the document is checked out or persistently locked by another user, this endpoint returns 423 Locked.\n- Required OAuth scope: repository.Write",
        "operationId": "UpdateDocument",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used. The value should be a standard language tag. This may be used when setting field values with tokens.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "description": "Optional. The electronic document or image file to apply to the existing document. If the file extension is not in {txt, tif, tiff, bmp, pcx, jpg, jpeg, gif, png}, or if importAsElectronicDocument=true, it replaces the existing electronic document. Otherwise (image extension with importAsElectronicDocument=false), it is imported as image pages. A zero-byte file is rejected with 400; use DELETE /Document/Edoc to remove the electronic document.",
                    "format": "binary"
                  },
                  "request": {
                    "$ref": "#/components/schemas/UpdateDocumentRequest"
                  },
                  "imageFiles": {
                    "type": "array",
                    "description": "Optional. Up to 10 image files (100 MB aggregate) that are appended as image pages. Use PUT /Document/Pages to replace existing pages instead of appending.",
                    "items": {
                      "type": "string",
                      "format": "binary"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated the document. Returned the updated entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Request is too large.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document/UpdateUploadedParts": {
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Updates a document entry's electronic document and/or metadata from previously uploaded parts.",
        "description": "- Updates a document entry from previously uploaded parts. The parts are assembled server-side into a single file that is then applied to the existing document.\n- The uploadId is obtained from the CreateMultipartUploadUrls response. The partETags are the ETag values returned by S3 when uploading each file chunk to the pre-signed upload URLs, and should be provided in the order of their associated upload URLs.\n- Use this endpoint when the file exceeds the upload size or time limits of the synchronous PATCH /Document endpoint.\n- The assembled file is applied as either the electronic document or image pages, following the same rules as the synchronous PATCH /Document:\n  - If the file extension is not in {txt, tif, tiff, bmp, pcx, jpg, jpeg, gif, png}, or if `importAsElectronicDocument=true`, the file replaces the existing electronic document. For supported edoc formats, `pdfOptions.generatePages` additionally produces server-rendered image pages, and `pdfOptions.generateText` triggers text extraction from the document (or OCR when the source is image-based).\n  - Otherwise (image extension with `importAsElectronicDocument=false`), the file is imported as image pages. `pdfOptions.generateText` triggers OCR for the resulting pages.\n- If `metadata` is provided, it additively updates the template, fields, tags, and links. Existing values not mentioned in the request are preserved.\n- Returns 202 Accepted with a task ID. Poll the task endpoint for progress and completion.\n- `imageFiles` and `generateImagePagesText` are not supported on this endpoint; use the synchronous PATCH /Document to append image pages or OCR them automatically. Use PUT /Document/Pages to replace existing pages.\n- Required OAuth scope: repository.Write",
        "operationId": "UpdateDocumentUploadedParts",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The request body containing the upload ID, part ETags, and optional metadata.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateDocumentUploadedPartsRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "202": {
            "description": "Successfully started the update document from uploaded parts operation. Returns a task ID for polling progress.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StartTaskResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Request is too large.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Import operation failed due to an internal server error. See error for details.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document/Edoc": {
      "delete": {
        "tags": [
          "Entries"
        ],
        "summary": "Deletes the edoc associated with an entry.",
        "description": "- Delete the edoc associated with the provided entry ID.\n- Required OAuth scope: repository.Write",
        "operationId": "DeleteElectronicDocument",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted edoc associated with the specified entry. Returned the updated entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document/Pages": {
      "delete": {
        "tags": [
          "Entries"
        ],
        "summary": "Deletes the pages associated with an entry.",
        "description": "- Delete the pages associated with the provided entry ID. If no pageRange is specified, all pages will be deleted.\n- Optional parameter: pageRange (default empty). The value should be a comma-separated string which contains non-overlapping single values, or page ranges. Ex: \"1,2,3\", \"1-3,5\", \"2-7,10-12.\"\n- Required OAuth scope: repository.Write",
        "operationId": "DeletePages",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "pageRange",
            "in": "query",
            "description": "The pages to be deleted.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted pages associated with the specified entry. Returned the updated entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Creates new pages in a document.",
        "description": "- Creates one or more new pages in the specified document.\n- Optional imageFiles form field: up to 10 image files, 100 MB aggregate.\n- Optional textPages array in the request JSON part. Aggregate size must be below 100 MB.\n- The two arrays are paired by index: page[i] gets imageFiles[i] and textPages[i].\n- The number of pages created is max(imageFiles.Count, textPages.Count). If one array is shorter, pages beyond its length are created without that part.\n- If neither imageFiles nor textPages is provided, one empty page is created.\n- If pageNumber is omitted, pages are appended to the end. If provided, pages are inserted at that 1-based position; existing pages shift down.\n- generateText requests text extraction from the document's electronic document part; it does not OCR the image pages being written. When generateText is true and imageFiles are present, textPages is ignored because generated text would overwrite any provided text.\n- Required OAuth scope: repository.Write",
        "operationId": "CreatePages",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "pageNumber",
            "in": "query",
            "description": "Optional 1-based page number. If omitted, pages are appended to the end. If provided, pages are inserted at that position.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "generateText",
            "in": "query",
            "description": "If true, requests text extraction from the document's electronic document part after the pages are written. This does not OCR the image pages being written. Default is false.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 4
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "request": {
                    "$ref": "#/components/schemas/PagesContentRequest"
                  },
                  "imageFiles": {
                    "type": "array",
                    "description": "Optional. Up to 10 image files (100 MB aggregate) that are appended as image pages. Use PUT /Document/Pages to replace existing pages instead of appending.",
                    "items": {
                      "type": "string",
                      "format": "binary"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully created pages in the specified document. Returned the updated entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Entries"
        ],
        "summary": "Replaces all pages on the document with new pages from the provided image files and/or text content.",
        "description": "- Deletes all existing pages on the document, then creates new pages from the provided content. This is a single operation — one lock scope, one auto-version if the document is under version control.\n- At least one `imageFile` or `textPage` must be provided. To delete all pages without replacement, use DELETE /Pages.\n- The `imageFiles` and `textPages` arrays are paired by index (same rules as POST /Pages).\n- Required OAuth scope: repository.Write",
        "operationId": "ReplacePages",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "generateText",
            "in": "query",
            "description": "If true, requests text extraction from the document's electronic document part after the pages are created. This does not OCR the image pages being written. Default is false.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 3
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "request": {
                    "$ref": "#/components/schemas/PagesContentRequest"
                  },
                  "imageFiles": {
                    "type": "array",
                    "description": "Optional. Up to 10 image files (100 MB aggregate) that are appended as image pages. Use PUT /Document/Pages to replace existing pages instead of appending.",
                    "items": {
                      "type": "string",
                      "format": "binary"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully replaced all pages in the specified document. Returned the updated entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Entries"
        ],
        "summary": "Returns page information for the pages of a document.",
        "description": "- Returns a list of page properties including image dimensions, rotation angle, and content flags.\n- Pages are returned in ascending pageNumber order; that order is fixed and not configurable.\n- Default page size: 150. Allowed OData query options: Select | Count | SkipToken | Top | Prefer.\n- pageRange filters which pages are returned before paging is applied. Combine pageRange with $top/$skiptoken to paginate within a known range.\n- Required OAuth scope: repository.Read",
        "operationId": "ListPageInfos",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "pageRange",
            "in": "query",
            "description": "Optional comma-separated page numbers and ranges (e.g., \"1,3-5,8-10\"). Ranges must not overlap. When omitted, all pages are returned (subject to paging).",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "Prefer",
            "x-originalName": "prefer",
            "in": "header",
            "description": "An optional OData header. Can be used to set the maximum page size using odata.maxpagesize.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 5
          },
          {
            "name": "$top",
            "in": "query",
            "description": "Limits the number of items returned from a collection. The maximum value is 150.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 6
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 7
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved a paged listing of page information for the document.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PageInfoCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document/Pages/{pageNumber}": {
      "put": {
        "tags": [
          "Entries"
        ],
        "summary": "Writes the image and/or text content of an existing page in the document.",
        "description": "- Overwrites the image and/or text part of the specified page. At least one of `imageFile` or `request` (with text) must be provided.\n- Parts not provided are left unchanged — e.g. providing only `imageFile` replaces the image without affecting existing text.\n- pageNumber is 1-based.\n- Required OAuth scope: repository.Write",
        "operationId": "WritePage",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "pageNumber",
            "in": "path",
            "required": true,
            "description": "The 1-based page number.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 3
          },
          {
            "name": "generateText",
            "in": "query",
            "description": "If true, requests text extraction from the document's electronic document part after writing. This does not OCR the page image being written. Default is false.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 4
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "imageFile": {
                    "type": "string",
                    "description": "Optional. The image file to upload to replace the page's image content. See https://doc.laserfiche.com/ for supported image file formats. At least one of imageFile or request (with text) must be provided.",
                    "format": "binary"
                  },
                  "request": {
                    "$ref": "#/components/schemas/WritePageTextRequest"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully wrote the image content of the specified page. Returned the updated entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document/Pages/Move": {
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Moves pages within a document to a new position.",
        "description": "- Moves the specified pages within the same document to a new position.\n- pageRange: A comma-separated string of non-overlapping single values or page ranges. Ex: \"1,2,3\", \"1-3,5\", \"2-7,10-12.\"\n- destinationPageNumber: The 1-based page number where the pages will be moved before.\n- Required OAuth scope: repository.Write",
        "operationId": "MovePages",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The request body containing the page range and destination.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MovePagesRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully moved pages within the specified document. Returned the updated entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document/Pages/Copy": {
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Copies pages from the source document to a destination document.",
        "description": "- Copies the specified pages from the source document to the destination document.\n- The source document retains its pages; copies are inserted into the destination.\n- pageRange: A comma-separated string of non-overlapping single values or page ranges. Ex: \"1,2,3\", \"1-3,5\", \"2-7,10-12.\" The total number of distinct pages cannot exceed 500.\n- destinationEntryId: The entry ID of the destination document.\n- destinationPageNumber: The 1-based page number in the destination document where pages will be inserted before.\n- Required OAuth scope: repository.Write",
        "operationId": "CopyPages",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The source document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The request body containing the page range, destination entry ID, and destination page number.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CopyPagesRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully copied pages from the source document to the destination document. The source document retains its pages. Returned the updated source entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document/Pages/{pageNumber}/Image/Rotate": {
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Rotates an image page in the document.",
        "description": "- Rotates the image of the specified page by the given angle.\n- rotationAngle: The rotation angle in degrees. Accepted values: 0, 90, 180, 270.\n- pageNumber is 1-based.\n- Required OAuth scope: repository.Write",
        "operationId": "RotateImagePage",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "pageNumber",
            "in": "path",
            "required": true,
            "description": "The 1-based page number of the page to rotate.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 3
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The request body containing the rotation angle.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RotateImagePageRequest"
              }
            }
          },
          "required": true,
          "x-position": 4
        },
        "responses": {
          "200": {
            "description": "Successfully rotated the image page. Returned the updated entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document/AlternateEdocs": {
      "get": {
        "tags": [
          "Entries"
        ],
        "summary": "Returns a paged listing of the alternate electronic documents attached to a document.",
        "description": "- An alternate electronic document is a named binary stream stored alongside the document's primary electronic document, such as an audio recording, a source scan, or sidecar data. It travels with the document through copy, move, versioning, and briefcase operations.\n- Returns the name, MIME type, and size of each stream. This endpoint does not return the stream content.\n- Stream names are at most 15 characters long.\n- Streams are returned in ascending name order; that order is fixed and not configurable.\n- Streams reserved for internal use are not listed.\n- Default page size: 150. Allowed OData query options: Select | Count | Skip | SkipToken | Top | Prefer.\n- Required OAuth scope: repository.Read",
        "operationId": "ListAlternateEdocs",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "Prefer",
            "x-originalName": "prefer",
            "in": "header",
            "description": "An optional OData header. Can be used to set the maximum page size using odata.maxpagesize.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          },
          {
            "name": "$top",
            "in": "query",
            "description": "Limits the number of items returned from a collection. The maximum value is 150.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 5
          },
          {
            "name": "$skip",
            "in": "query",
            "description": "Excludes the specified number of items of the queried collection from the result.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 6
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 7
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved a paged listing of the document's alternate electronic documents.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlternateEdocInfoCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document/AlternateEdoc": {
      "get": {
        "tags": [
          "Entries"
        ],
        "summary": "Returns the metadata of a single alternate electronic document.",
        "description": "- Returns the name, MIME type, and size of the stream. This endpoint does not return the stream content.\n- The name is supplied as a query parameter rather than a path segment, because the legal character set includes characters that are significant to OData URI parsing.\n- Names match exactly. A name that differs only in letter case identifies a different stream on some repository configurations, so no case folding is applied.\n- Streams reserved for internal use are reported as not found.\n- Required OAuth scope: repository.Read",
        "operationId": "GetAlternateEdocInfo",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "name",
            "in": "query",
            "required": true,
            "description": "The name of the alternate electronic document. Matched exactly, so a name differing only in letter case is not found. Names reserved for internal use are also reported as not found.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved the metadata of the specified alternate electronic document.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlternateEdocInfoResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Entries"
        ],
        "summary": "Creates or replaces an alternate electronic document.",
        "description": "- Writes a named binary stream stored alongside the document's primary electronic document, such as an audio recording, a source scan, or sidecar data. The stream is created when the document does not have one under that name, and its content fully replaced when it does. The primary electronic document, the pages, and the metadata are unaffected.\n- Send the content as multipart/form-data under the form field `file`. A zero-byte file is rejected; use the delete operation to remove an alternate electronic document.\n- The name is supplied as a query parameter rather than a path segment, because the legal character set includes characters that are significant to OData URI parsing.\n- Names are at most 15 characters long, and each character must be an ASCII letter, an ASCII digit, or one of `!@#$%^&()-+={}[]_~`.\n- Names match exactly. A name that differs only in letter case from one the document already has is rejected with 409 rather than written, because such a pair means different things on different repository configurations; reads and deletes stay exact-match.\n- Names reserved for internal use are rejected.\n- The optional `mimeType` form field sets the content's MIME type, at most 127 characters. When omitted it is derived from the uploaded file's content type and file name, falling back to `application/octet-stream`. The repository stores it lower-cased and without any parameters, so `Text/Plain; charset=utf-8` is stored as `text/plain`; the response reports the stored value.\n- Repeating an identical request is safe: the same content replaces itself.\n- Required OAuth scope: repository.Write",
        "operationId": "WriteAlternateEdoc",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "name",
            "in": "query",
            "required": true,
            "description": "The name of the alternate electronic document. 1 to 15 characters, each an ASCII letter, an ASCII digit, or one of `!@#$%^&()-+={}[]_~`. An existing name has its content and MIME type replaced in full; a name differing from an existing one only in letter case is rejected with 409 and leaves that stream unchanged. Names reserved for internal use are rejected.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "file"
                ],
                "properties": {
                  "file": {
                    "type": "string",
                    "description": "The content to store. Any file type is accepted. A zero-byte file is rejected with 400; use the delete operation to remove an alternate electronic document.",
                    "format": "binary"
                  },
                  "mimeType": {
                    "type": "string",
                    "description": "Optional. The MIME type to set for the content, at most 127 characters. When omitted it is derived from the uploaded file's content type and file name, falling back to application/octet-stream. Stored lower-cased and without parameters, so Text/Plain; charset=utf-8 is stored as text/plain. Worth setting explicitly for audio and video, where the multipart content type is frequently generic or wrong."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully wrote the alternate electronic document. Returned its metadata as stored.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlternateEdocInfoResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "The document already has an alternate electronic document whose name differs only in letter case.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Request is too large.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Entries"
        ],
        "summary": "Deletes an alternate electronic document.",
        "description": "- Deletes a named binary stream stored alongside the document's primary electronic document. The primary electronic document, the pages, and the metadata are unaffected.\n- The name is supplied as a query parameter rather than a path segment, because the legal character set includes characters that are significant to OData URI parsing.\n- Names match exactly. A name that differs only in letter case identifies a different stream on some repository configurations, so no case folding is applied.\n- A name the document has no stream for is reported as not found.\n- Names reserved for internal use are rejected.\n- Required OAuth scope: repository.Write",
        "operationId": "DeleteAlternateEdoc",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "name",
            "in": "query",
            "required": true,
            "description": "The name of the alternate electronic document. Matched exactly, so a name differing only in letter case is not found. Names reserved for internal use are rejected.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted the alternate electronic document."
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document/AlternateEdoc/WriteUploadedParts": {
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Writes an alternate electronic document from previously uploaded parts.",
        "description": "- Writes a named binary stream stored alongside the document's primary electronic document from a file uploaded in chunks, for content too large to send in a single request. The stream is created when the document does not have one under that name, and its content fully replaced when it does. The primary electronic document, the pages, and the metadata are unaffected.\n- Upload the content first: call CreateMultipartUploadUrls, write each chunk to the URLs it returns, then pass the same `uploadId` and the ETags here. There is no size limit at this tier beyond the one the upload itself enforces.\n- This operation runs in the background. It returns **202 Accepted** with a task ID; poll `/Tasks?taskIds={taskId}` for progress and the result. Use the PUT operation instead for content small enough to send at once, which completes synchronously.\n- The name is supplied as a query parameter rather than a path segment, because the legal character set includes characters that are significant to OData URI parsing.\n- Names are at most 15 characters long, and each character must be an ASCII letter, an ASCII digit, or one of `!@#$%^&()-+={}[]_~`.\n- Names match exactly. A name that differs only in letter case from one the document already has is rejected with 409 rather than written, because such a pair means different things on different repository configurations.\n- Names reserved for internal use are rejected.\n- The name, the MIME type and the case rule are all checked before the operation is accepted, so those errors come back on this request rather than on the task.\n- The optional `mimeType` sets the content's MIME type, at most 127 characters. When omitted it is taken from the MIME type supplied to CreateMultipartUploadUrls. The repository stores it lower-cased and without any parameters, so `Text/Plain; charset=utf-8` is stored as `text/plain`.\n- Required OAuth scope: repository.Write",
        "operationId": "WriteAltEdocUploadedParts",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "name",
            "in": "query",
            "required": true,
            "description": "The name of the alternate electronic document. 1 to 15 characters, each an ASCII letter, an ASCII digit, or one of `!@#$%^&()-+={}[]_~`. An existing name has its content and MIME type replaced in full; a name differing from an existing one only in letter case is rejected with 409 and leaves that stream unchanged. Names reserved for internal use are rejected. The name is validated before the operation is accepted, so a name error is returned on this request rather than on the task.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The upload to assemble, and the MIME type to record.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteAltEdocUploadedPartsRequest"
              }
            }
          },
          "required": true,
          "x-position": 4
        },
        "responses": {
          "202": {
            "description": "Successfully started the write alternate electronic document from uploaded parts operation. Returns a task ID for polling progress.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StartTaskResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "The document already has an alternate electronic document whose name differs only in letter case.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document/Pages/{pageNumber}/Image": {
      "get": {
        "tags": [
          "Entries"
        ],
        "summary": "Returns the image content of a specific page in a document.",
        "description": "- Returns the raw image data for the specified page as a binary stream.\n- pageNumber is 1-based.\n- Required OAuth scope: repository.Read",
        "operationId": "GetPageImage",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "pageNumber",
            "in": "path",
            "required": true,
            "description": "The 1-based page number of the page to retrieve the image for.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 3
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved the image content for the specified page.",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document/Pages/{pageNumber}/Text": {
      "get": {
        "tags": [
          "Entries"
        ],
        "summary": "Returns the text content of a specific page in a document.",
        "description": "- Returns the text content for the specified page.\n- pageNumber is 1-based.\n- Required OAuth scope: repository.Read",
        "operationId": "GetPageText",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "pageNumber",
            "in": "path",
            "required": true,
            "description": "The 1-based page number of the page to retrieve the text for.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 3
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved the text content for the specified page.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PageTextResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document/Pages/{pageNumber}/Text/Offsets": {
      "get": {
        "tags": [
          "Entries"
        ],
        "summary": "Returns the page text covered by a rectangle drawn on a page image.",
        "description": "- Returns the offsets, in the text of the page, of the words the rectangle covers, together with that text.\n- All four rectangle parameters are required. Omitting one is a 400 rather than a coordinate of 0, because a rectangle silently moved to the edge of the page answers with a span the caller never asked about.\n- Coordinates are in raw page image pixels, with the origin at the top left of the unrotated image: X is measured in imageXResolution columns and Y in imageYResolution rows, which can differ from one another, and the image is the one described by imageWidth, imageHeight, imageXResolution, imageYResolution and imageRotationAngle on ListPageInfos. The page's own rotation is not applied, so a viewer that displays the page rotated or scaled must convert its own coordinates back to this space before calling.\n- A word counts as covered when the rectangle contains it, is contained by it, or overlaps it by at least 2 pixels and half of both its width and its height. A rectangle that lies entirely within the word on one axis - a thin stripe drawn through it - only has to clear the half threshold on the other axis. This is the same rule the Laserfiche viewers apply to a hand-drawn selection.\n- textStart is the offset of the first character of the span and textEnd is the offset one past its last character, so textEnd - textStart is the length of the span. This is the convention Web Access stores in text-linked highlight and redaction annotations, so the values can be written straight back to CreateAnnotation. Offsets are UTF-16 code unit indices into the text returned by GetPageText, including its line breaks.\n- The span runs from the first covered word to the last, so text can include characters that lie between covered words. text always equals the page text from textStart to textEnd.\n- When the rectangle covers no words, hasTextSpan is false, textStart and textEnd are both -1, text is empty and wordCount is 0. -1 is also the value the annotation surface uses for a span that is not linked to text.\n- Returns 404 when the page has no text or no word locations. A page has word locations when hasWordLocations is true on ListPageInfos; text is generated by GenerateText.\n- Returns 400 when the page carries more word locations than the server supports, which is 20,000 by default.\n- Required OAuth scope: repository.Read",
        "operationId": "GetPageTextOffsets",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "pageNumber",
            "in": "path",
            "required": true,
            "description": "The 1-based page number of the page to search.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 3
          },
          {
            "name": "x",
            "in": "query",
            "required": true,
            "description": "The X coordinate of the left edge of the rectangle, in page image pixels. Required, and may not be negative.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "nullable": true
            },
            "x-position": 4
          },
          {
            "name": "y",
            "in": "query",
            "required": true,
            "description": "The Y coordinate of the top edge of the rectangle, in page image pixels. Required, and may not be negative.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "nullable": true
            },
            "x-position": 5
          },
          {
            "name": "width",
            "in": "query",
            "required": true,
            "description": "The width of the rectangle, in page image pixels. Required, and must be at least 1.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "nullable": true
            },
            "x-position": 6
          },
          {
            "name": "height",
            "in": "query",
            "required": true,
            "description": "The height of the rectangle, in page image pixels. Required, and must be at least 1.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "nullable": true
            },
            "x-position": 7
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 8
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved the page text span covered by the specified rectangle.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PageTextOffsetsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document/Pages/{pageNumber}/WordLocations": {
      "get": {
        "tags": [
          "Entries"
        ],
        "summary": "Returns the words of a page, each with its position in the page text and its location on the page image.",
        "description": "- Returns every word of the page, in reading order, with its text offsets and its rectangle on the page image. This is the data the hasWordLocations and locationsDataSize properties on ListPageInfos advertise.\n- The whole page is returned in one response; there is no paging, because the order of the words is itself part of the data. A page carrying more word locations than the server supports, which is 20,000 by default, is refused with a 400 rather than truncated.\n- Coordinates are in raw page image pixels, with the origin at the top left of the unrotated image: X is measured in imageXResolution columns and Y in imageYResolution rows, which can differ from one another. The envelope repeats the page image geometry so the coordinates can be interpreted without a second call, and imageRotationAngle is reported but not applied - overlay code must apply its own rotation and scaling.\n- textStart is the offset of the first character of the word and textEnd is the offset one past its last character, so textEnd - textStart is the length of the word. Offsets are UTF-16 code unit indices into the text returned by GetPageText, including its line breaks, and use the same convention as the text-linked highlight and redaction annotations.\n- To find the rectangles that render a text span [spanStart, spanEnd), such as the span stored on an existing highlight or redaction annotation, take every entry where word.textStart < spanEnd and word.textEnd > spanStart, and use those entries' rectangles. Entries that overlap vertically are on the same line of text, so horizontally adjacent boxes within such a group can be merged into one box per line.\n- width and height can both be 0 for a location OCR produced for a word it could not place. Such entries are still returned, because the order of the words is what pairs them with the page text.\n- Returns 404 when the page has no text or no word locations. Word locations are produced by GenerateText along with the page text.\n- Required OAuth scope: repository.Read",
        "operationId": "ListPageWordLocations",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "pageNumber",
            "in": "path",
            "required": true,
            "description": "The 1-based page number of the page to retrieve the word locations for.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 3
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved the word locations for the specified page.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PageWordLocationsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document/GenerateText": {
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Requests text generation for a document.",
        "description": "- Queues a request for the repository's text provider to extract text from the document's electronic document part (e.g., a PDF or Office file).\n- By default this does not OCR image pages. A document whose pages are images and that has no electronic document part is unchanged by a call with ocrImagePages left at false; text for those pages is otherwise produced by the repository's automatic OCR when a page image is written, not by this endpoint.\n- Set ocrImagePages to true to also queue an OCR job for the document's image pages. Only pages that have an image and no text are included: a page that already has text is left alone, because OCR replaces a page's text and would discard text that was written through the API or edited by a user. To re-OCR such a page, clear its text first with WritePage, then call this endpoint with ocrImagePages set to true.\n- When ocrImagePages is true, returns 423 if another user holds a lock on the document and 400 if another user has it checked out; OCR writes its results back under an exclusive lock, so a document that is held cannot be processed. Neither status occurs when ocrImagePages is false.\n- When ocrImagePages is true, at most 511 pages can be queued in one request. A document with more than 511 image pages that have no text returns 400; that is the number of pages the OCR pipeline accepts in a single job.\n- When ocrImagePages is true, the optional ocrLanguageOverride names the language for that OCR job, taking precedence over the document's own language and the repository's configured default; omit it and those apply in that order, falling back to en. It is not stored on the document, so it changes this request only. Supplying it with ocrImagePages false returns 400, and so does a language that is not a usable code -- including one inherited from the document or the repository, because a job queued with an unusable language is accepted and then produces no text with nothing reported back.\n- The repository's automatic OCR setting does not apply to this endpoint. That setting governs only the OCR the repository performs on its own when a page image is written; a request made here is explicit, and its OCR is queued whether that setting is on or off.\n- A success response means the request was queued for processing, not that text now exists. Extraction and OCR run asynchronously, and the returned entry reflects the document as of the response. Poll hasText on ListPageInfos to observe OCR results; a large document may stay queued for some time.\n- Required OAuth scope: repository.Write",
        "operationId": "GenerateText",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "ocrImagePages",
            "in": "query",
            "description": "Set to true to also queue OCR for the document's image pages that have no text. Defaults to false.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 3
          },
          {
            "name": "ocrLanguageOverride",
            "in": "query",
            "description": "Optional. The language the OCR engine should use for this request, as an RFC 4646 code such as en. If omitted, the language is the document's own, then the repository's configured default, then en. Supplying it takes precedence over all three, for this request only: the document's stored language is unchanged, so the repository's automatic OCR keeps using it. A value that is not a usable language code is rejected with 400 rather than queued, whether supplied here or inherited. Only valid when ocrImagePages is true.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully queued the text generation request for the document. Returned the entry. Text is produced asynchronously, so it may not be present in this response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "The document is locked by another user. OCR writes its results back under an exclusive lock, so a locked document cannot be processed.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Fields/GetDynamicFieldLogicValue": {
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Returns the dynamic field logic values assigned to an entry.",
        "description": "- Returns dynamic field logic values with the current values of the fields in the template.\n- Provide an entry ID and field values in the JSON body to get dynamic field logic values.\n- Independent and non-dynamic fields in the request body will be ignored, and only related dynamic field logic values for the assigned template will be returned.\n- Required OAuth scope: repository.Read",
        "operationId": "ListDynamicFieldValues",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested entry ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The request body.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ListDynamicFieldValuesRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully returned dynamic field values for specified entry, template, and field values.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Request is too large.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Template": {
      "delete": {
        "tags": [
          "Entries"
        ],
        "summary": "Removes the currently assigned template from an entry.",
        "description": "- Remove the currently assigned template from the specified entry.\n- Provide an entry ID to clear template value on.\n- If the entry does not have a template assigned, no change will be made.\n- Required OAuth scope: repository.Write",
        "operationId": "RemoveTemplate",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The ID of the entry that will have its template removed.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully removed the currently assigned template from requested entry. Returned updated entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Entries"
        ],
        "summary": "Assigns a template to an entry.",
        "description": "- Assign a template to an entry.\n- Provide an entry ID, template name, and a list of template fields to assign to that entry.\n- Only template values will be modified. Any existing independent fields on the entry will not be modified, nor will they be added if included in the request. The only modification to fields will only occur on templated fields. If the previously assigned template includes common template fields as the newly assigned template, the common field values will not be modified.\n- Required OAuth scope: repository.Write",
        "operationId": "SetTemplate",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The ID of entry that will have its template updated.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used. The value should be a standard language tag. This may be used when setting field values with tokens.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 4
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The template and template fields that will be assigned to the entry.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetTemplateRequest"
              },
              "examples": {
                "1": {
                  "summary": "Assign a template for an entry and not assign any field values for it",
                  "description": "We can set the template to an entry using the above request with fields having empty/default values.",
                  "value": {
                    "templateName": "sample template 1"
                  }
                },
                "2": {
                  "summary": "Assign a template with field values for an entry",
                  "description": "If the template contains fields Today and Address, we can set the template to an entry using the above request with specified fields values.",
                  "value": {
                    "templateName": "sample template 2",
                    "fields": [
                      {
                        "name": "Today",
                        "values": [
                          "2020-02-18T00:00:00"
                        ]
                      },
                      {
                        "name": "Address",
                        "values": [
                          "3545 Long Beach Blvd. Long Beach CA, 90807 U.S.A.",
                          "306, 1 Valleybrook Drive North York, Toronto, Ontario M3B2S7 CANADA",
                          "2307, Westlands Centre 20 Westlands Road Quarry Bay, Hong Kong"
                        ]
                      }
                    ]
                  }
                }
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully assigned specified template to requested entry. Returned updated entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Request is too large.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document/Lock": {
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Creates a persistent lock on a document.",
        "description": "- Creates a persistent lock on the specified document. Persistent locks survive session disconnect and server restart.\n- Optionally specify a comment and lock extent (Page, Edoc, Metadata, or All). Defaults to All.\n- Returns lock info including the lock token, owner, and extent.\n- Required OAuth scope: repository.Write",
        "operationId": "LockDocument",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The request body containing optional lock comment and extent.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LockDocumentRequest"
              }
            }
          },
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully created a persistent lock on the document.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LockInfo"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Operation failed due to an internal server error. See error for details.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Entries"
        ],
        "summary": "Gets the persistent lock state of a document.",
        "description": "- Returns the current persistent lock state of the document, including who holds the lock, the lock token, comment, extent, and creation timestamp.\n- If the document is not locked, returns lock info with isActive set to false.\n- Required OAuth scope: repository.Read",
        "operationId": "GetDocumentLockInfo",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the lock state of the document.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LockInfo"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Operation failed due to an internal server error. See error for details.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Entries"
        ],
        "summary": "Removes a persistent lock from a document.",
        "description": "- Without a lockToken query parameter, removes the current user's persistent lock on the document.\n- With a lockToken query parameter, removes the specified lock regardless of owner (administrative unlock).\n- Required OAuth scope: repository.Write",
        "operationId": "UnlockDocument",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "lockToken",
            "in": "query",
            "description": "Optional lock token to unlock a specific lock held by another user (administrative unlock).",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully removed the persistent lock from the document."
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Operation failed due to an internal server error. See error for details.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document/VersionControl": {
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Puts a document under version control.",
        "description": "- Puts the specified document under version control. No-op if already under version control.\n- Documents must be under version control before they can be checked out.\n- Required OAuth scope: repository.Write",
        "operationId": "PutUnderVersionControl",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully put the document under version control.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "Conflict. The request could not be completed due to the current state of the resource.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Operation failed due to an internal server error. See error for details.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document/CheckOut": {
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Checks out a document.",
        "description": "- Checks out the specified document for editing. The document must be under version control.\n- By default, a persistent lock is automatically acquired (lock=true). Set lock=false to check out without locking.\n- Optionally specify a comment for the check-out.\n- Returns an error if the document is not under version control.\n- Required OAuth scope: repository.Write",
        "operationId": "CheckOutDocument",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The request body containing optional lock and comment parameters.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CheckOutDocumentRequest"
              }
            }
          },
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully checked out the document.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "Conflict. The request could not be completed due to the current state of the resource.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Operation failed due to an internal server error. See error for details.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document/CheckIn": {
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Checks in a document, creating a new version.",
        "description": "- Checks in the specified document, creating a new version in the version history.\n- By default, releases the persistent lock if one is held. Set unlock to false to keep the lock.\n- Returns an error if the document is not currently checked out.\n- Required OAuth scope: repository.Write",
        "operationId": "CheckInDocument",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "Optional request body. If omitted, the persistent lock is released (default behavior).",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CheckInDocumentRequest"
              }
            }
          },
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully checked in the document. If a persistent lock was held and unlock was not set to false, the lock has been released.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "Conflict. The request could not be completed due to the current state of the resource.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "423": {
            "description": "Entry is locked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Operation failed due to an internal server error. See error for details.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Document/UndoCheckOut": {
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Undoes a document check-out without creating a new version.",
        "description": "- Releases the check-out state without creating a new version in the version history.\n- Always releases the persistent lock if one is held.\n- Returns an error if the document is not under version control.\n- Required OAuth scope: repository.Write",
        "operationId": "UndoCheckOut",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The requested document ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully undid the document check-out. Any persistent lock held on the document has been released.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "Conflict. The request could not be completed due to the current state of the resource.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Operation failed due to an internal server error. See error for details.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/AccessControl": {
      "get": {
        "tags": [
          "AccessControl"
        ],
        "summary": "Returns the access control list (ACL) for an entry.",
        "description": "- Returns the access control entries (ACEs) configured on the entry — by default both explicitly-set and inherited (inherited ACEs carry isInherited = true), or only the explicit ones when includeInherited=false — plus whether the entry inherits rights from its parent(s).\n- Each ACE names a trustee, whether its rights are allowed or denied, the rights themselves, and the propagation scope.\n- The repository session enforces the underlying permission: reading an ACL requires the ReadPermissions right on the entry, and a 403 is returned when it is lacking. The repository.Read OAuth scope is necessary but not sufficient.\n- Required OAuth scope: repository.Read",
        "operationId": "GetEntryAccessControl",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The entry whose access control list is returned.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "includeInherited",
            "in": "query",
            "description": "Optional. When true (the default), the response includes both the entry's explicit access control entries and the inherited ones (inherited ACEs carry isInherited = true). When false, only the explicit ACEs are returned — the exact set that the access-control PUT accepts — making it convenient to read, edit, and write back the ACL without filtering inherited entries client-side. The inheritParents flag is unaffected by this option.",
            "schema": {
              "type": "boolean",
              "default": true
            },
            "x-position": 3
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the entry's access control list.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccessControlList"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "AccessControl"
        ],
        "summary": "Replaces the explicit access control list (ACL) for an entry.",
        "description": "- Full replace of the entry's explicit ACEs: the supplied entries become the entry's complete set of explicit ACEs, and any explicit ACE not included is removed. An empty entries array clears all explicit ACEs.\n- Inherited ACEs cannot be supplied (entries flagged isInherited = true are rejected with 400); inheritance is controlled via inheritParents. When inheritParents is omitted, the entry's current inheritance setting is preserved.\n- Each ACE identifies its trustee by trustee.sid or trustee.accountName (an account name is resolved to a SID server-side; the SID takes precedence when both are supplied). A trustee that needs both allowed and denied rights is expressed as two ACEs.\n- The repository session enforces the underlying permission: changing an ACL requires the ChangePermissions right on the entry, and a 403 is returned when it is lacking. The repository.Write OAuth scope is necessary but not sufficient.\n- Returns the entry's full ACL after the change.\n- The entries property is required. A request body that does not include it is rejected with a 400; send an empty array to clear the list.\n- Required OAuth scope: repository.Write",
        "operationId": "SetEntryAccessControl",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The entry whose access control list is replaced.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The explicit access control entries to apply and, optionally, the parent-inheritance setting.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetAccessControlRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully replaced the entry's access control list. Returned the updated access control list.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccessControlList"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/Rights": {
      "get": {
        "tags": [
          "AccessControl"
        ],
        "summary": "Returns the rights to an entry for the current session or a specified trustee.",
        "description": "- Returns the rights a trustee has on the entry. By default these are the effective rights — the same calculation the Laserfiche applications use, after allow/deny resolution, group membership, and the repository's privilege and records-management overlays. Set aclOnly=true to return only the rights granted by the entry's access control list (including its stored inherited ACEs) without the privilege/records-management overlays.\n- Identify the trustee by trusteeId (a SID) or trusteeName (an account name); omit both for the calling session.\n- isReadOnly reports whether the session is read-only, in which case no write operations are possible regardless of the granted rights.\n- Required OAuth scope: repository.Read",
        "operationId": "GetEntryRights",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "The entry whose rights are computed.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "trusteeId",
            "in": "query",
            "description": "Optional. The SID of the trustee to compute rights for. When omitted (along with trusteeName), the rights of the current session are returned.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "trusteeName",
            "in": "query",
            "description": "Optional. The account name of the trustee to compute rights for, as an alternative to trusteeId. When both are supplied, trusteeId takes precedence.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          },
          {
            "name": "aclOnly",
            "in": "query",
            "description": "Optional. Selects which rights are returned. Default (false): the trustee's effective rights — the net result after allow/deny resolution, group membership, and the repository's privilege and records-management overlays. When true: only the rights granted by this item's access control list — including inherited access control entries, which are stored on the item itself — without the privilege and records-management overlays (for example, a privilege that grants full control regardless of the ACL is reflected only when aclOnly=false). Group membership is always resolved. The aclOnly=true value is what the ACL editor displays as the net effect of the list.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 5
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 6
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the rights for the entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntryRights"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/RecordsManagement/Properties": {
      "get": {
        "tags": [
          "RecordsManagement"
        ],
        "operationId": "GetEntryRecordsManagementProperties",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the entry's records management properties.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecordsManagementProperties"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The entry was not found, or it is not a record or record folder and therefore has no records management properties.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "RecordsManagement"
        ],
        "operationId": "UpdateEntryRecordsManagementProperties",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateRecordsManagementPropertiesRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully updated the entry's records management properties. Returned the updated properties.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecordsManagementProperties"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The entry was not found, or it is not a record or record folder and therefore has no records management properties.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/RecordsManagement/EligibleRecords": {
      "get": {
        "tags": [
          "RecordsManagement"
        ],
        "operationId": "GetEligibleRecords",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "eligibleFor",
            "in": "query",
            "schema": {
              "oneOf": [
                {
                  "nullable": true,
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/EligibleRecordsAction"
                    }
                  ]
                }
              ]
            },
            "x-position": 3
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the ids of the records eligible for the requested action.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecordEntryIdCollection"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The entry was not found, or it is not a record folder.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/RecordsManagement/IndependentRecords": {
      "get": {
        "tags": [
          "RecordsManagement"
        ],
        "operationId": "GetIndependentRecords",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the ids of the independent records under the record folder.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecordEntryIdCollection"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The entry was not found, or it is not a record folder.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/RecordsManagement/AltRetentionEvents": {
      "get": {
        "tags": [
          "RecordsManagement"
        ],
        "operationId": "GetAltRetentionEvents",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the record folder's alternate-retention trigger events.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AltRetentionEventCollection"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The entry was not found, or it is not a record folder.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/RecordSeries/Properties": {
      "get": {
        "tags": [
          "RecordsManagement"
        ],
        "operationId": "GetRecordSeriesProperties",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the record series properties.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecordSeriesProperties"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The entry was not found, or it is not a record series.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "RecordsManagement"
        ],
        "operationId": "UpdateRecordSeriesProperties",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateRecordSeriesPropertiesRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully updated the record series properties. Returned the updated properties.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecordSeriesProperties"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The entry was not found, or it is not a record series.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/RecordsManagement/SetEvent": {
      "post": {
        "tags": [
          "RecordsManagement"
        ],
        "operationId": "SetRecordEvent",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetRecordEventRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully set the record event date. Returned the updated records management properties.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecordsManagementProperties"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The entry was not found, or it is not a record or record folder and therefore has no records management properties.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{entryId}/RecordsManagement/RemoveEvent": {
      "post": {
        "tags": [
          "RecordsManagement"
        ],
        "operationId": "RemoveRecordEvent",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RemoveRecordEventRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully removed the record event date. Returned the updated records management properties.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecordsManagementProperties"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The entry was not found, or it is not a record or record folder and therefore has no records management properties.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Entries/{parentEntryId}/RecordSeries": {
      "post": {
        "tags": [
          "RecordsManagement"
        ],
        "summary": "Creates a record series under a parent in the repository's record file plan.",
        "description": "- A record series provides cascading retention defaults for the file plan beneath it.\n- The parent must be the file-plan root or another record series; creating one under a normal folder is rejected.\n- Deleting a record series uses the existing Delete Entry endpoint (a record series is an entry).\n- Required OAuth scope: repository.Write",
        "operationId": "CreateRecordSeries",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "parentEntryId",
            "in": "path",
            "required": true,
            "description": "The parent the record series is created under. A record series belongs to the record file plan, so the parent must be the repository's file-plan root or an existing record series — it cannot be a normal folder (the server returns an error if it is).",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The new record series' name and code.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateRecordSeriesRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "201": {
            "description": "Successfully created the record series. Returned the created entry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Entry"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Entry with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "Entry name conflicts.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories": {
      "get": {
        "tags": [
          "Repositories"
        ],
        "summary": "Returns the list of repositories accessible to the user.",
        "description": "- Returns the repository resource list that current user has access to.\n- Required OAuth scope: repository.Read",
        "operationId": "ListRepositories",
        "responses": {
          "200": {
            "description": "Successfully returned list of available repositories.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RepositoryCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/SessionRights": {
      "get": {
        "tags": [
          "AccessControl"
        ],
        "summary": "Returns the current session's rights in the repository.",
        "description": "- Returns the privileges and feature rights held by the current session, plus whether the session is read-only. Each is reported as named booleans (a map of right name to whether it is granted), for UI enablement and pre-flight checks.\n- Reflects the current session only. Per-trustee privilege administration is not part of this surface.\n- Required OAuth scope: repository.Read",
        "operationId": "GetSessionRights",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the current session's rights.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionRights"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Searches/SearchAsync": {
      "post": {
        "tags": [
          "Searches"
        ],
        "summary": "Starts an asynchronous search task.",
        "description": "- Runs a search operation on the repository.\n- The status for search operations must be checked via the Tasks route.\n- For datetime search criteria that relate to time zone like CreateDate and ModifiedDate, the value should be in UTC time.\n- Optional body parameters: FuzzyType: (default none), which can be used to determine what is considered a match by number of letters or percentage. FuzzyFactor: integer value that determines the degree to which a search will be considered a match (integer value for NumberOfLetters, or int value representing a percentage).\n- Required OAuth scope: repository.Read",
        "operationId": "StartSearchEntry",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The Laserfiche search command to run, optionally include fuzzy search settings.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StartSearchEntryRequest"
              },
              "examples": {
                "1": {
                  "summary": "Run an advanced search with fuzzy type",
                  "description": "Run an advanced search with fuzzy type based on number of letters",
                  "value": {
                    "searchCommand": "({LF:Basic ~= \"search text\", option=\"DFANLT\"})",
                    "fuzzyType": "NumberOfLetters",
                    "fuzzyFactor": 2
                  }
                },
                "2": {
                  "summary": "Run an advanced search with percentage fuzzy type",
                  "description": "Run an advanced search with fuzzy type based on percentage",
                  "value": {
                    "searchCommand": "({LF:Basic ~= \"search text\", option=\"DFANLT\"})",
                    "fuzzyType": "Percentage",
                    "fuzzyFactor": 80
                  }
                }
              }
            }
          },
          "required": true,
          "x-position": 2
        },
        "responses": {
          "202": {
            "description": "Operation was started successfully. Returned a long operation task ID.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StartTaskResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Requested repository was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Request is too large.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Operation limit or request limit has been reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Searches/{taskId}/Results": {
      "get": {
        "tags": [
          "Searches"
        ],
        "summary": "Returns the results listing associated with a search task.",
        "description": "- Returns a search result listing if the search is completed.\n- Search results expire after 5 minutes, but can be refreshed by retrieving the results again.\n- Optional query parameter: groupByOrderType (default false). This query parameter decides whether or not results are returned in groups based on their entry type.\n- Optional query parameter: refresh (default false). If the search listing should be refreshed to show updated values.\n- Optionally returns field values for the entries in the folder. Each field name needs to be specified in the request. Maximum limit of 10 field names. If field values are requested, only the first value is returned if it is a multi value field. The remaining field values can be retrieved via the GET fields route. Null or Empty field values should not be used to determine if a field is assigned to the entry.\n- Default page size: 150. Allowed OData query options: Select | Count | OrderBy | Skip | Top | SkipToken | Prefer. OData $OrderBy syntax should follow: \"PropertyName direction,PropertyName2 direction\". sort order can be either \"asc\" or \"desc\".\n- When OData Select query option is used, 'entryType' is always included in the result.\n- Required OAuth scope: repository.Read",
        "operationId": "ListSearchResults",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "taskId",
            "in": "path",
            "required": true,
            "description": "The requested task ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 2
          },
          {
            "name": "groupByEntryType",
            "in": "query",
            "description": "Indicates if the result should be grouped by entry type or not. The default value is false.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 3
          },
          {
            "name": "refresh",
            "in": "query",
            "description": "Indicates if the search listing should be refreshed to show updated values. The default value is false.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 4
          },
          {
            "name": "fields",
            "in": "query",
            "style": "form",
            "explode": true,
            "description": "Optional array of field names. Field values corresponding to the given field names will be returned for each search result. ",
            "schema": {
              "type": "array",
              "nullable": true,
              "items": {
                "type": "string"
              }
            },
            "x-position": 5
          },
          {
            "name": "formatFieldValues",
            "in": "query",
            "description": "Indicates if field values should be formatted. Only applicable if Fields are specified. The default value is false.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 6
          },
          {
            "name": "Prefer",
            "x-originalName": "prefer",
            "in": "header",
            "description": "An optional odata header. Can be used to set the maximum page size using odata.maxpagesize.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 7
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used for formatting. The value should be a standard language tag. The formatFieldValues query parameter must be set to true, otherwise culture will not be used for formatting.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 8
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 9
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Specifies the order in which items are returned. The maximum number of expressions is 5.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 11
          },
          {
            "name": "$top",
            "in": "query",
            "description": "Limits the number of items returned from a collection. The maximum value is 150.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 12
          },
          {
            "name": "$skip",
            "in": "query",
            "description": "Excludes the specified number of items of the queried collection from the result.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 13
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 14
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned search results.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntryCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Task with requested taskId was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Searches/{taskId}/Results/{rowNumber}/ContextHits": {
      "get": {
        "tags": [
          "Searches"
        ],
        "summary": "Returns the context hits associated with a search result entry.",
        "description": "- Returns the context hits associated with a search result entry.\n- Given a taskId, and rowNumber associated with a search entry in the listing, return the context hits for that entry.\n- Default page size: 100. Allowed OData query options: Select | Count | OrderBy | Skip | Top | SkipToken | Prefer.\n- Required OAuth scope: repository.Read",
        "operationId": "ListSearchContextHits",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "taskId",
            "in": "path",
            "required": true,
            "description": "The requested task ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 2
          },
          {
            "name": "rowNumber",
            "in": "path",
            "required": true,
            "description": "The search result listing row number to get context hits for.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 3
          },
          {
            "name": "Prefer",
            "x-originalName": "prefer",
            "in": "header",
            "description": "An optional OData header. Can be used to set the maximum page size using odata.maxpagesize.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 5
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Specifies the order in which items are returned. The maximum number of expressions is 5.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 6
          },
          {
            "name": "$top",
            "in": "query",
            "description": "Limits the number of items returned from a collection. The maximum value is 150.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 7
          },
          {
            "name": "$skip",
            "in": "query",
            "description": "Excludes the specified number of items of the queried collection from the result.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 8
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 9
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned context hits for specified search.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchContextHitCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Task with requested taskId was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/SimpleSearches": {
      "post": {
        "tags": [
          "SimpleSearches"
        ],
        "summary": "Runs a \"simple\" search operation.",
        "description": "- Runs a \"simple\" search operation on the repository.\n- Returns a truncated search result listing.\n- Search result listing may be truncated, depending on number of results. Additionally, searches may time out if they take too long. Use the other search route to run full searches.\n- For datetime search criteria that relate to time zone like CreateDate and ModifiedDate, the value should be in UTC time.\n- Optionally returns field values for the entries in the folder. Each field name needs to be specified in the request. Maximum limit of 10 field names. If field values are requested, only the first value is returned if it is a multi value field. The remaining field values can be retrieved via the GET fields route. Null or Empty field values should not be used to determine if a field is assigned to the entry.\n- When OData Select query option is used, 'entryType' is always included in the result.\n- Required OAuth scope: repository.Read",
        "operationId": "SearchEntry",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "fields",
            "in": "query",
            "style": "form",
            "explode": true,
            "description": "Optional array of field names. Field values corresponding to the given field names will be returned for each search result. ",
            "schema": {
              "type": "array",
              "nullable": true,
              "items": {
                "type": "string"
              }
            },
            "x-position": 2
          },
          {
            "name": "formatFieldValues",
            "in": "query",
            "description": "Indicates if field values should be formatted. Only applicable if Fields are specified. The default value is false.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 3
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used for formatting. The value should be a standard language tag. The formatFieldValues query parameter must be set to true, otherwise culture will not be used for formatting.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 5
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Specifies the order in which items are returned. The maximum number of expressions is 5.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The Laserfiche search command to run.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SearchEntryRequest"
              },
              "examples": {
                "1": {
                  "summary": "Run a search",
                  "description": "Run a simple search with LF search command. The \" in search command needs to be escaped.",
                  "value": {
                    "searchCommand": "({LF:Basic ~= \"search text\", option=\"DFANLT\"})"
                  }
                }
              }
            }
          },
          "required": true,
          "x-position": 4
        },
        "responses": {
          "200": {
            "description": "Successfully returned search results.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntryCollectionResponse"
                }
              }
            }
          },
          "206": {
            "description": "Simple search ran successfully. Returned truncated list of search results. Use task-based search route to run larger searches.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntryCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Request is too large.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Operation limit or request limit has been reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Stamps": {
      "get": {
        "tags": [
          "Stamps"
        ],
        "summary": "Lists stamps in the repository stamp catalog.",
        "description": "- Use `scope` to select public, personal, or all stamps. The image bytes are not included; fetch them from the stamp's Image sub-resource.\n- Required OAuth scope: repository.Read",
        "operationId": "ListStamps",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "scope",
            "in": "query",
            "schema": {
              "default": 0,
              "oneOf": [
                {
                  "$ref": "#/components/schemas/StampScope"
                }
              ]
            },
            "x-position": 2
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Specifies the order in which items are returned. The maximum number of expressions is 5.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 5
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 6
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the repository's stamps.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Stamp"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Stamps"
        ],
        "summary": "Creates a stamp from an uploaded image.",
        "description": "- Send the image as multipart/form-data under the form field \"file\", with \"name\" and \"isPublic\" form fields. The service converts the image to the repository's internal format.\n- Creating a public stamp requires the stamp-management privilege; personal stamps require no special privilege.\n- Required OAuth scope: repository.Write",
        "operationId": "CreateStamp",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "name",
            "in": "query",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 2
          },
          {
            "name": "isPublic",
            "in": "query",
            "schema": {
              "type": "boolean"
            },
            "x-position": 3
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "file"
                ],
                "properties": {
                  "file": {
                    "type": "string",
                    "description": "The image file to upload. See https://doc.laserfiche.com/ for supported image file formats.",
                    "format": "binary"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully created the stamp. Returned the created stamp.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Stamp"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Stamps/{stampId}": {
      "get": {
        "tags": [
          "Stamps"
        ],
        "summary": "Gets a stamp's metadata by ID.",
        "description": "- Required OAuth scope: repository.Read",
        "operationId": "GetStamp",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "stampId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the stamp's metadata.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Stamp"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested stamp was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Stamps"
        ],
        "summary": "Updates a stamp's metadata (name, custom data). The stamp image cannot be changed after creation.",
        "description": "- Managing a public stamp requires the stamp-management privilege.\n- Required OAuth scope: repository.Write",
        "operationId": "UpdateStamp",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "stampId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateStampRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully updated the stamp. Returned the updated stamp.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Stamp"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested stamp was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Stamps"
        ],
        "summary": "Deletes a stamp.",
        "description": "- Deleting a public stamp requires the stamp-management privilege.\n- Required OAuth scope: repository.Write",
        "operationId": "DeleteStamp",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "stampId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted the stamp."
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested stamp was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Stamps/{stampId}/Image": {
      "get": {
        "tags": [
          "Stamps"
        ],
        "summary": "Gets a public stamp's image as a PNG.",
        "description": "- Only public (common) stamps are returned. Personal stamps are not served by this endpoint and return 404.\n- An optional `color` (#RRGGBB) recolors the image: black pixels become the color, white becomes transparent.\n- Required OAuth scope: repository.Read",
        "operationId": "GetStampImage",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "stampId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "color",
            "in": "query",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the stamp image as a PNG.",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested stamp was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/TagDefinitions": {
      "get": {
        "tags": [
          "TagDefinitions"
        ],
        "summary": "Returns the tag definitions associated with a repository.",
        "description": "- Returns all tag definitions in the repository.\n- Provide a repository ID and get a paged listing of tag definitions available in the repository. Useful when trying to display all tag definitions available, not only tags assigned to a specific entry.\n- Default page size: 100. Allowed OData query options: Select | Count | OrderBy | Skip | Top | SkipToken | Prefer.\n- Required OAuth scope: repository.Read",
        "operationId": "ListTagDefinitions",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "Prefer",
            "x-originalName": "prefer",
            "in": "header",
            "description": "An optional OData header. Can be used to set the maximum page size using odata.maxpagesize.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 2
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used for formatting. The value should be a standard language tag.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Specifies the order in which items are returned. The maximum number of expressions is 5.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 5
          },
          {
            "name": "$top",
            "in": "query",
            "description": "Limits the number of items returned from a collection. The maximum value is 150.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 6
          },
          {
            "name": "$skip",
            "in": "query",
            "description": "Excludes the specified number of items of the queried collection from the result.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 7
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 8
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned list of tag definitions.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDefinitionCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/TagDefinitions/{tagId}": {
      "get": {
        "tags": [
          "TagDefinitions"
        ],
        "summary": "Returns a single tag definition object.",
        "description": "- Returns a single tag definition.\n- Provide a tag definition ID, and get the single tag definition associated with that ID. Useful when another route provides a minimal amount of details, and more information about the specific tag is needed.\n- Allowed OData query options: Select\n- Required OAuth scope: repository.Read",
        "operationId": "GetTagDefinition",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "tagId",
            "in": "path",
            "required": true,
            "description": "The requested tag definition ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used for formatting. The value should be a standard language tag.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned requested tag definition.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDefinition"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Tag definition with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Tasks": {
      "get": {
        "tags": [
          "Tasks"
        ],
        "summary": "Returns the status of a set of one or more tasks.",
        "description": "- Returns the status of a set of one or more tasks.\n- Provide a comma-separated list of task IDs to get the task status, progress, and any errors that may have occurred.\n- Leave the taskIds query parameter empty, to get the list of all the task IDs associated with the current access token.\n- TaskStatus can be one of the following values: NotStarted, InProgress, Completed, Cancelled, or Failed.\n- This API employs long polling technique and could return the result immediately (e.g. if the export operation is failed or completed successfully) or after at most 60 seconds.\n- Required OAuth scope: None",
        "operationId": "ListTasks",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "taskIds",
            "in": "query",
            "style": "form",
            "explode": true,
            "description": "An array of task IDs. Leave this parameter empty to get the list of all the tasks associated with the current access token.",
            "schema": {
              "type": "array",
              "nullable": true,
              "items": {
                "type": "string"
              }
            },
            "x-position": 2
          }
        ],
        "responses": {
          "200": {
            "description": "Returned a list of tasks.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskCollectionResponse"
                }
              }
            }
          },
          "404": {
            "description": "Requested repository was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Tasks"
        ],
        "summary": "Starts the cancellation for a set of one or more tasks.",
        "description": "- Starts the cancellation for a set of one or more tasks.\n- Provide comma-separated list of task IDs to cancel. Should be used if an operation was created in error, or is no longer necessary.\n- Check the status of the task to determine if the task has been cancelled successfully.\n- Leave the taskIds query parameter empty, to cancel the list of all the task IDs associated with the current access token.\n- Rollbacks must be done manually. For example, if a copy operation is started and is halfway complete when canceled, the client application is responsible for cleaning up the files that were successfully copied before the operation was canceled.\n- Required OAuth scope: None",
        "operationId": "CancelTasks",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "taskIds",
            "in": "query",
            "style": "form",
            "explode": true,
            "description": "An array of task IDs. Leave this parameter empty to cancel the list of all the tasks associated with the current access token.",
            "schema": {
              "type": "array",
              "nullable": true,
              "items": {
                "type": "string"
              }
            },
            "x-position": 2
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully canceled requested tasks. Returned successfully canceled tasks.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CancelTasksResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Requested repository was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Tasks/StartTestTaskAsync": {
      "post": {
        "tags": [
          "Tasks"
        ],
        "summary": "Starts a test operation that behaves according to specified parameters.",
        "operationId": "StartTestTask",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository id.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "operationTime",
            "in": "query",
            "description": "The time the operation will take to complete.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "hasRedirectUri",
            "in": "query",
            "description": "If operation adds redirect uri.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 3
          },
          {
            "name": "hasError",
            "in": "query",
            "description": "If mock operation should return \"failed\" status.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 4
          }
        ],
        "responses": {
          "200": {
            "description": "Test task was started successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StartTaskResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Task with requested taskId was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/TemplateDefinitions": {
      "get": {
        "tags": [
          "TemplateDefinitions"
        ],
        "summary": "Returns the template definitions associated with a repository.",
        "description": "- Returns all template definitions (including field definitions) in the repository. If a template name query parameter is given, then a single template definition is returned.\n- Provide a repository ID, and get a paged listing of template definitions available in the repository. Useful when trying to find a list of all template definitions available, rather than a specific one.\n- Default page size: 100. Allowed OData query options: Select | Count | OrderBy | Skip | Top | SkipToken | Prefer.\n- Required OAuth scope: repository.Read",
        "operationId": "ListTemplateDefinitions",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "templateName",
            "in": "query",
            "description": "An optional query parameter. Can be used to get a single template definition using the template name.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 2
          },
          {
            "name": "Prefer",
            "x-originalName": "prefer",
            "in": "header",
            "description": "An optional OData header. Can be used to set the maximum page size using odata.maxpagesize.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used for formatting. The value should be a standard language tag.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 4
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 5
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Specifies the order in which items are returned. The maximum number of expressions is 5.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 6
          },
          {
            "name": "$top",
            "in": "query",
            "description": "Limits the number of items returned from a collection. The maximum value is 150.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 7
          },
          {
            "name": "$skip",
            "in": "query",
            "description": "Excludes the specified number of items of the queried collection from the result.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 8
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 9
          }
        ],
        "responses": {
          "200": {
            "description": "Returned list of template definitions.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateDefinitionCollectionResponse"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Template with requested name was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "TemplateDefinitions"
        ],
        "summary": "Creates a new template definition in the repository.",
        "description": "- Creates a new metadata template with the supplied scalar properties and (optionally) an initial set of field assignments.\n- Names must be unique within the repository; duplicate-name failures surface as 409 Conflict from the underlying repository server.\n- Initial fields are appended in array order; each may carry per-template isRequired and localDescription. The repository-level field-definition properties are unaffected.\n- If the scalar template is successfully created but a subsequent AddField mid-loop fails, the template is left in place with the partial field set — there is no implicit rollback. Callers should treat the failure as transactional only at the scalar level and clean up via DeleteTemplate if needed.\n- The template extended-properties bag (REQ-ADMIN-006B) cannot be set during create — follow up with PATCH /Properties.\n- Required OAuth scope: repository.Write",
        "operationId": "CreateTemplate",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The template definition to create. Name is required.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTemplateRequest"
              }
            }
          },
          "required": true,
          "x-position": 2
        },
        "responses": {
          "200": {
            "description": "Successfully created the template definition.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateDefinition"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "Conflict. The request could not be completed due to the current state of the resource.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/TemplateDefinitions/{templateId}": {
      "get": {
        "tags": [
          "TemplateDefinitions"
        ],
        "summary": "Returns a single template definition object.",
        "description": "- Returns a single template definition (including field definitions, if relevant).\n- Provide a template definition ID, and get the single template definition associated with that ID. Useful when a route provides a minimal amount of details, and more information about the specific template is needed.\n- Allowed OData query options: Select\n- Required OAuth scope: repository.Read",
        "operationId": "GetTemplateDefinition",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "description": "The requested template definition ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used for formatting. The value should be a standard language tag.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully found and returned specified template.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateDefinition"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Template with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "TemplateDefinitions"
        ],
        "summary": "Updates properties of an existing template definition (partial update).",
        "description": "- Partial-update merge semantics. null = leave unchanged; \"\" = clear a string property.\n- To clear an existing color, set clearColor to true and leave color null. Supplying both is rejected with 400.\n- Field membership is managed via the AddTemplateField / RemoveTemplateField / MoveTemplateField endpoints.\n- Required OAuth scope: repository.Write",
        "operationId": "UpdateTemplate",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "description": "The ID of the template to update.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The properties to change. Only non-null properties are applied; null leaves the property unchanged.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTemplateRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully updated the template definition.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateDefinition"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Template with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "Conflict. The request could not be completed due to the current state of the resource.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "TemplateDefinitions"
        ],
        "summary": "Deletes a template definition from the repository.",
        "description": "- Deletes the specified template definition. If the template is currently assigned to entries, the underlying repository server rejects the request and the response surfaces as 409 Conflict.\n- Required OAuth scope: repository.Write",
        "operationId": "DeleteTemplate",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "description": "The ID of the template to delete.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted the template definition."
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Template with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "Conflict. The request could not be completed due to the current state of the resource.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/TemplateDefinitions/{templateId}/FieldDefinitions": {
      "get": {
        "tags": [
          "TemplateDefinitions"
        ],
        "summary": "Returns the field definitions assigned to a template definition (by template definition ID).",
        "description": "- Returns the field definitions assigned to a template definition.\n- Provide a template definition ID, and get a paged listing of the field definitions assigned to that template. \n- Default page size: 100. Allowed OData query options: Select | Count | OrderBy | Skip | Top | SkipToken | Prefer.\n- Required OAuth scope: repository.Read",
        "operationId": "ListTemplateFieldDefinitionsByTemplateId",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "description": "The requested template definition ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "Prefer",
            "x-originalName": "prefer",
            "in": "header",
            "description": "An optional OData header. Can be used to set the maximum page size using odata.maxpagesize.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used for formatting. The value should be a standard language tag.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 4
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 5
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Specifies the order in which items are returned. The maximum number of expressions is 5.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 6
          },
          {
            "name": "$top",
            "in": "query",
            "description": "Limits the number of items returned from a collection. The maximum value is 150.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 7
          },
          {
            "name": "$skip",
            "in": "query",
            "description": "Excludes the specified number of items of the queried collection from the result.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 8
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 9
          }
        ],
        "responses": {
          "200": {
            "description": "Returned list of field definitions for specified template.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateFieldDefinitionCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Template with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/TemplateDefinitions/FieldDefinitions": {
      "get": {
        "tags": [
          "TemplateDefinitions"
        ],
        "summary": "Returns the field definitions assigned to a template definition (by template definition name).",
        "description": "- Returns the field definitions assigned to a template definition.\n- Provide a template definition name, and get a paged listing of the field definitions assigned to that template. \n- Default page size: 100. Allowed OData query options: Select | Count | OrderBy | Skip | Top | SkipToken | Prefer.\n- Required OAuth scope: repository.Read",
        "operationId": "ListTemplateFieldDefinitionsByTemplateName",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "templateName",
            "in": "query",
            "required": true,
            "description": "A required query parameter for the requested template name.",
            "schema": {
              "type": "string"
            },
            "x-position": 2
          },
          {
            "name": "Prefer",
            "x-originalName": "prefer",
            "in": "header",
            "description": "An optional OData header. Can be used to set the maximum page size using odata.maxpagesize.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "culture",
            "in": "query",
            "description": "An optional query parameter used to indicate the locale that should be used for formatting. The value should be a standard language tag.",
            "schema": {
              "type": "string",
              "default": "",
              "nullable": true
            },
            "x-position": 4
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 5
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Specifies the order in which items are returned. The maximum number of expressions is 5.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 6
          },
          {
            "name": "$top",
            "in": "query",
            "description": "Limits the number of items returned from a collection. The maximum value is 150.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 7
          },
          {
            "name": "$skip",
            "in": "query",
            "description": "Excludes the specified number of items of the queried collection from the result.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 8
          },
          {
            "name": "$count",
            "in": "query",
            "description": "Indicates whether the total count of items within a collection are returned in the result.",
            "schema": {
              "type": "boolean"
            },
            "x-position": 9
          }
        ],
        "responses": {
          "200": {
            "description": "Returned list of field definitions for specified template.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateFieldDefinitionCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Template with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/TemplateDefinitions/{templateId}/AssignedEntryCount": {
      "get": {
        "tags": [
          "TemplateDefinitions"
        ],
        "summary": "Returns the count of entries currently assigned to the specified template definition.",
        "description": "- Useful for impact analysis before performing destructive operations on the template.\n- Required OAuth scope: repository.Read",
        "operationId": "GetTemplateAssignedEntryCount",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "description": "The ID of the template.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the assigned entry count for the template.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssignedEntryCountResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Template with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/TemplateDefinitions/{templateId}/Properties": {
      "get": {
        "tags": [
          "TemplateDefinitions"
        ],
        "summary": "Gets the custom-properties bag for a template definition.",
        "description": "- Returns the custom-properties bag persisted on the template definition. The bag is an opaque application-defined string → string map scoped to the definition itself (not to a user), useful for attaching integration metadata or application-specific configuration that belongs with the template — for example to record an external system's identifier for the template, or to encode display preferences such as field ordering hints.\n- Keys are application-defined; recommend a namespace prefix (e.g. com.acme.workflow.stage, myapp.template.category) to avoid collisions across applications.\n- The response may include entries written by other applications or by system-managed tooling. Callers should leave unrecognized keys untouched on subsequent UpdateTemplateProperties calls — round-tripping them in set preserves them, including them in remove deletes them.\n- Required OAuth scope: repository.Read",
        "operationId": "GetTemplateProperties",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "description": "The ID of the template.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the template extended-properties bag.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplatePropertiesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Template with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "TemplateDefinitions"
        ],
        "summary": "Partially updates the custom-properties bag for a template definition.",
        "description": "- Entries in set are written (creating or overwriting). Entries in remove are deleted. Properties not mentioned in either are left unchanged.\n- Empty set and empty remove is a no-op and returns the current bag.\n- Returns the full custom-properties bag after the change.\n- The bag is application-defined; the API does not validate key semantics. Recommend namespaced keys (e.g. com.acme.workflow.stage, myapp.template.category) to avoid collisions.\n- Required OAuth scope: repository.Write",
        "operationId": "UpdateTemplateProperties",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "description": "The ID of the template.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "Set and/or remove entries on the property bag. Keys not mentioned are left unchanged.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTemplatePropertiesRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully updated the template extended-properties bag.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplatePropertiesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Template with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/TemplateDefinitions/{templateId}/Fields": {
      "post": {
        "tags": [
          "TemplateDefinitions"
        ],
        "summary": "Adds a field to a template.",
        "description": "- The field definition must already exist in the repository.\n- Per-template properties do not affect the repository-level field-definition properties.\n- Required OAuth scope: repository.Write",
        "operationId": "AddTemplateField",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "description": "The ID of the template.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The field to add. fieldName is required. Optional position (1-based) inserts at that position; omit to append. Optional per-template isRequired and localDescription apply only to this template.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddTemplateFieldRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "204": {
            "description": "Successfully added the field to the template."
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Template with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/TemplateDefinitions/{templateId}/Fields/{fieldName}": {
      "patch": {
        "tags": [
          "TemplateDefinitions"
        ],
        "summary": "Updates per-template properties for a field assignment on a template.",
        "description": "- Affects only the field's behavior on this specific template.\n- The repository-level field-definition properties are unchanged; use the FieldDefinitions admin endpoints for those.\n- Required OAuth scope: repository.Write",
        "operationId": "UpdateTemplateFieldProperties",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "description": "The ID of the template.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "fieldName",
            "in": "path",
            "required": true,
            "description": "The name of the field whose per-template properties to update. URL-decoded server-side.",
            "schema": {
              "type": "string"
            },
            "x-position": 3
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The per-template properties to change. Null = leave unchanged; empty string clears localDescription.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTemplateFieldPropertiesRequest"
              }
            }
          },
          "required": true,
          "x-position": 4
        },
        "responses": {
          "204": {
            "description": "Successfully updated the per-template properties for the field assignment."
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Template with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "TemplateDefinitions"
        ],
        "summary": "Removes a field from a template.",
        "description": "- Field values already assigned to entries using this template are not affected — RA removes only the binding of the field to the template definition.\n- The field definition itself is not deleted; only the template assignment is removed.\n- Required OAuth scope: repository.Write",
        "operationId": "RemoveTemplateField",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "description": "The ID of the template.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "fieldName",
            "in": "path",
            "required": true,
            "description": "The name of the field to remove. URL-decoded server-side.",
            "schema": {
              "type": "string"
            },
            "x-position": 3
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully removed the field from the template."
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Template with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/TemplateDefinitions/{templateId}/Fields/Move": {
      "post": {
        "tags": [
          "TemplateDefinitions"
        ],
        "summary": "Moves a field to a new position within a template.",
        "description": "- The field must already be part of the template.\n- newPosition must be between 1 and the current field count, inclusive.\n- Required OAuth scope: repository.Write",
        "operationId": "MoveTemplateField",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "description": "The ID of the template.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The field to move and the new 1-based position.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MoveTemplateFieldRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "204": {
            "description": "Successfully moved the field to the new position in the template."
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Template with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/TemplateDefinitions/{templateId}/AccessControl": {
      "get": {
        "tags": [
          "AccessControl"
        ],
        "summary": "Returns the access control list (ACL) of a template definition.",
        "description": "- Returns the template's access control entries (ACEs): the trustee, whether rights are allowed or denied, and the rights themselves. Template ACEs have no scope and are never inherited.\n- The OAuth scope is coarse; the repository session enforces the real permission and returns 403 when the caller lacks the template's ReadPermissions right.\n- Required OAuth scope: repository.Read",
        "operationId": "GetTemplateAccessControl",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "description": "The requested template definition ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the template definition's access control list.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateAccessControlList"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Template with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "AccessControl"
        ],
        "summary": "Replaces the access control list (ACL) of a template definition.",
        "description": "- Full replace: the supplied entries replace the template's entire explicit ACL. Inherited entries are not accepted (template ACEs are never inherited). Address a trustee by trustee.sid or trustee.accountName (the SID wins when both are given; an account name is resolved to a SID server-side).\n- The OAuth scope is coarse; the repository session enforces the real permission and returns 403 when the caller lacks the template's ChangePermissions right.\n- The entries property is required. A request body that does not include it is rejected with a 400; send an empty array to clear the list.\n- Required OAuth scope: repository.Write",
        "operationId": "SetTemplateAccessControl",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "description": "The template definition ID whose ACL to replace.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The access control entries to set.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetTemplateAccessControlRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully replaced the template definition's access control list. Returned the updated access control list.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateAccessControlList"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Template with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/TemplateDefinitions/{templateId}/Rights": {
      "get": {
        "tags": [
          "AccessControl"
        ],
        "summary": "Returns the rights to a template definition for the current session or a specified trustee.",
        "description": "- Returns the rights a trustee has on the template definition, plus whether the session is read-only. By default these are the effective rights (after group membership, allow/deny resolution, and the privilege overlay); set aclOnly=true for the rights granted by the template's own ACL without that overlay. Omit both trusteeId and trusteeName for the current session.\n- Required OAuth scope: repository.Read",
        "operationId": "GetTemplateRights",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "description": "The requested template definition ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "trusteeId",
            "in": "query",
            "description": "An optional trustee SID. When supplied, returns that trustee's rights; otherwise the current session's.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "trusteeName",
            "in": "query",
            "description": "An optional trustee account name, as an alternative to trusteeId. The SID wins when both are supplied.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 4
          },
          {
            "name": "aclOnly",
            "in": "query",
            "description": "Optional. Selects which rights are returned. Default (false): the trustee's effective rights — the net result after allow/deny resolution, group membership, and the repository's privilege overlay (for example, the metadata-management privilege that grants full control over every template regardless of its ACL). When true: only the rights granted by this template definition's own access control list, without that privilege overlay. Group membership is always resolved. Template definitions are not hierarchical, so there is no parent inheritance involved either way.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-position": 5
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the rights for the template definition.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateRights"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Template with requested ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/TemplateDefinitions/DefaultAccessControl": {
      "get": {
        "tags": [
          "AccessControl"
        ],
        "summary": "Returns the default access control list assigned to newly created template definitions.",
        "description": "- Returns the repository's default template ACL — the access control entries a new template definition inherits at creation time.\n- Required OAuth scope: repository.Read",
        "operationId": "GetDefaultTemplateAccessControl",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the default template access control list.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateAccessControlList"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "AccessControl"
        ],
        "summary": "Replaces the default access control list assigned to newly created template definitions.",
        "description": "- Full replace: the supplied entries replace the entire default template ACL. Inherited entries are not accepted. Address a trustee by trustee.sid or trustee.accountName (the SID wins when both are given).\n- The entries property is required. A request body that does not include it is rejected with a 400; send an empty array to clear the list.\n- Required OAuth scope: repository.Write",
        "operationId": "SetDefaultTemplateAccessControl",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The access control entries to set as the default template ACL.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetTemplateAccessControlRequest"
              }
            }
          },
          "required": true,
          "x-position": 2
        },
        "responses": {
          "200": {
            "description": "Successfully replaced the default template access control list. Returned the updated default access control list.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateAccessControlList"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Trustees": {
      "get": {
        "tags": [
          "AccessControl"
        ],
        "summary": "Searches the repository's trustees (users and groups) by name.",
        "description": "- Resolves trustee names to the SIDs used when building access control entries or reading effective rights for a trustee.\n- Each result includes the trustee's SID, account name, display name, type, whether it is a user or group, and whether the account is disabled.\n- Required OAuth scope: repository.Read",
        "operationId": "LookupTrustees",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "search",
            "in": "query",
            "description": "The name (or name prefix) to search for.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 2
          },
          {
            "name": "type",
            "in": "query",
            "description": "Optional. Restrict the search to user or group trustees. When omitted, both users and groups are returned.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          },
          {
            "name": "count",
            "in": "query",
            "description": "Optional. The maximum number of trustees to return. Defaults to 100.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 100
            },
            "x-position": 4
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the matching trustees.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TrusteeIdentity"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/Trustees/{trusteeId}/Security": {
      "get": {
        "tags": [
          "AccessControl"
        ],
        "summary": "Returns the account security configured for the specified trustee in the repository.",
        "description": "- Returns the trustee's privileges and feature rights (as named booleans), the security tags assigned to it, the audit classes configured for it (split into success and failure masks), and whether the trustee is read-only.\n- The effective view (includeInherited=true) is a best-effort computation that can, in rare cases, differ from the trustee's real rights. The authoritative way to determine a trustee's security is to sign in as that trustee and read the resulting session's rights.\n- Required OAuth scope: repository.Read",
        "operationId": "GetTrusteeSecurity",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "trusteeId",
            "in": "path",
            "required": true,
            "description": "The SID of the trustee whose security is read. Use the trustee lookup to resolve a name to a SID.",
            "schema": {
              "type": "string"
            },
            "x-position": 2
          },
          {
            "name": "includeInherited",
            "in": "query",
            "description": "When true (default), returns the trustee's effective security — what applies once group memberships are resolved. When false, returns the direct security assigned on the trustee record itself, without group-membership inheritance.",
            "schema": {
              "type": "boolean",
              "default": true
            },
            "x-position": 3
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the trustee's account security (effective by default, or direct when includeInherited=false).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TrusteeSecurity"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/RecentDocuments": {
      "get": {
        "tags": [
          "UserAreas"
        ],
        "summary": "Returns the authenticated user's recently accessed documents.",
        "description": "- Returns the documents in the authenticated user's Recent Documents list, most-recently-accessed first.\n- The list is per-user and maintained by the Laserfiche apps; this endpoint is read-only and reflects the persisted recent-documents area, so it may briefly lag an app's in-memory recent view.\n- If the user has no recent documents, an empty collection is returned.\n- Required OAuth scope: repository.Read",
        "operationId": "GetRecentDocuments",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "documentLimit",
            "in": "query",
            "description": "An optional maximum number of recent documents to return. When omitted, all entries in the user's recent-documents list are returned. A value of 0 returns an empty list; negative values are rejected.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "nullable": true
            },
            "x-position": 2
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the user's recently accessed documents.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserAreaEntry"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/RecentFolders": {
      "get": {
        "tags": [
          "UserAreas"
        ],
        "summary": "Returns the authenticated user's recently accessed folders.",
        "description": "- Returns the folders in the authenticated user's Recent Folders list, most-recently-accessed first.\n- The list is per-user and maintained by the Laserfiche apps; this endpoint is read-only.\n- If the user has no recent folders, an empty collection is returned.\n- Required OAuth scope: repository.Read",
        "operationId": "GetRecentFolders",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the user's recently accessed folders.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserAreaEntry"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/StarredEntries": {
      "get": {
        "tags": [
          "UserAreas"
        ],
        "summary": "Returns the authenticated user's starred entries.",
        "description": "- Returns the entries in the authenticated user's Starred list.\n- The list is per-user; if the user has starred nothing, an empty collection is returned.\n- Required OAuth scope: repository.Read",
        "operationId": "GetStarredEntries",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the user's starred entries.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserAreaEntry"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "UserAreas"
        ],
        "summary": "Stars one or more entries for the authenticated user.",
        "description": "- Adds the supplied entries to the authenticated user's Starred list and returns the updated list.\n- Creates the user's Starred area on first use.\n- Required OAuth scope: repository.Write",
        "operationId": "StarEntries",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The entry IDs to star. Already-starred entries are left unchanged (idempotent).",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StarEntriesRequest"
              }
            }
          },
          "required": true,
          "x-position": 2
        },
        "responses": {
          "200": {
            "description": "Successfully starred the requested entries. Returns the updated list of starred entries.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserAreaEntry"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "UserAreas"
        ],
        "summary": "Unstars one or more entries for the authenticated user.",
        "description": "- Removes the supplied entries from the authenticated user's Starred list and returns the updated list.\n- Required OAuth scope: repository.Write",
        "operationId": "UnstarEntries",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The entry IDs to unstar. Entries that are not starred are ignored (idempotent).",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StarEntriesRequest"
              }
            }
          },
          "required": true,
          "x-position": 2
        },
        "responses": {
          "200": {
            "description": "Successfully unstarred the requested entries. Returns the updated list of starred entries.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserAreaEntry"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/PersonalCollections": {
      "get": {
        "tags": [
          "UserAreas"
        ],
        "summary": "Returns the authenticated user's personal collections.",
        "description": "- Returns the authenticated user's personal collections, each with its display name and member entry IDs.\n- Required OAuth scope: repository.Read",
        "operationId": "GetPersonalCollections",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the user's personal collections.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PersonalCollection"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "UserAreas"
        ],
        "summary": "Creates a personal collection for the authenticated user.",
        "description": "- Creates a personal collection with the supplied display name. Names must be unique (case-insensitive),\n  fewer than 256 characters, and must not use a reserved name. A user may have at most 50 collections.\n- Required OAuth scope: repository.Write",
        "operationId": "CreatePersonalCollection",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The new collection's display name.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePersonalCollectionRequest"
              }
            }
          },
          "required": true,
          "x-position": 2
        },
        "responses": {
          "200": {
            "description": "Successfully created the personal collection.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonalCollection"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "A personal collection with the requested name already exists, or the name is reserved.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/PersonalCollections/{collectionId}": {
      "get": {
        "tags": [
          "UserAreas"
        ],
        "summary": "Returns a single personal collection by its ID.",
        "description": "- Returns the requested personal collection with its display name and member entry IDs.\n- Required OAuth scope: repository.Read",
        "operationId": "GetPersonalCollection",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "collectionId",
            "in": "path",
            "required": true,
            "description": "The ID of the personal collection.",
            "schema": {
              "type": "string"
            },
            "x-position": 2
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the requested personal collection.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonalCollection"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested personal collection was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "UserAreas"
        ],
        "summary": "Renames a personal collection.",
        "description": "- Changes the collection's display name (the collection ID is unchanged). Same name constraints as creation.\n- Required OAuth scope: repository.Write",
        "operationId": "RenamePersonalCollection",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "collectionId",
            "in": "path",
            "required": true,
            "description": "The ID of the personal collection to rename.",
            "schema": {
              "type": "string"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The new display name.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RenamePersonalCollectionRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully renamed the personal collection.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonalCollection"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested personal collection was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "A personal collection with the requested name already exists, or the name is reserved.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "UserAreas"
        ],
        "summary": "Deletes a personal collection.",
        "description": "- Deletes the collection. Idempotent — deleting a non-existent collection succeeds.\n- Required OAuth scope: repository.Write",
        "operationId": "DeletePersonalCollection",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "collectionId",
            "in": "path",
            "required": true,
            "description": "The ID of the personal collection to delete.",
            "schema": {
              "type": "string"
            },
            "x-position": 2
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted the personal collection."
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/PersonalCollections/{collectionId}/Entries": {
      "post": {
        "tags": [
          "UserAreas"
        ],
        "summary": "Adds one or more entries to a personal collection.",
        "description": "- Adds the supplied entries to the collection and returns the updated collection. Idempotent for entries already present.\n- Required OAuth scope: repository.Write",
        "operationId": "AddCollectionEntries",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "collectionId",
            "in": "path",
            "required": true,
            "description": "The ID of the personal collection.",
            "schema": {
              "type": "string"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The entry IDs to add.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EntryIdsRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully added the entries to the personal collection. Returns the updated collection.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonalCollection"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested personal collection was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "UserAreas"
        ],
        "summary": "Removes one or more entries from a personal collection.",
        "description": "- Removes the supplied entries from the collection and returns the updated collection. Idempotent for entries not present.\n- Required OAuth scope: repository.Write",
        "operationId": "RemoveCollectionEntries",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "collectionId",
            "in": "path",
            "required": true,
            "description": "The ID of the personal collection.",
            "schema": {
              "type": "string"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The entry IDs to remove.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EntryIdsRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully removed the entries from the personal collection. Returns the updated collection.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonalCollection"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested personal collection was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/UserAreas": {
      "get": {
        "tags": [
          "UserAreas"
        ],
        "summary": "Returns the authenticated user's generic user areas.",
        "description": "- Returns the caller's generic user areas. Application-managed areas (Personal Collections, Starred,\n  Recent) are excluded from this surface.\n- Required OAuth scope: repository.Read",
        "operationId": "GetUserAreas",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the user's user areas.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserArea"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "UserAreas"
        ],
        "summary": "Creates a generic user area.",
        "description": "- Creates a user area owned by the caller. Names reserved for application-managed areas are rejected.\n- Required OAuth scope: repository.Write",
        "operationId": "CreateUserArea",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The new user area's name and optional comment/data.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateUserAreaRequest"
              }
            }
          },
          "required": true,
          "x-position": 2
        },
        "responses": {
          "200": {
            "description": "Successfully created the user area.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserArea"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "A user area with the requested name already exists.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/UserAreas/{areaId}": {
      "get": {
        "tags": [
          "UserAreas"
        ],
        "summary": "Returns a single user area by ID.",
        "description": "- Returns the requested user area. Application-managed areas are not accessible through this surface (404).\n- Required OAuth scope: repository.Read",
        "operationId": "GetUserArea",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "areaId",
            "in": "path",
            "required": true,
            "description": "The ID of the user area.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          },
          {
            "name": "$select",
            "in": "query",
            "description": "Limits the properties returned in the result.",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the requested user area.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserArea"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested user area was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "UserAreas"
        ],
        "summary": "Updates a generic user area (partial update).",
        "description": "- Updates the name, comment, and/or data of the user area. A renamed area cannot take a reserved name.\n- Required OAuth scope: repository.Write",
        "operationId": "UpdateUserArea",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "areaId",
            "in": "path",
            "required": true,
            "description": "The ID of the user area to update.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The properties to change. Null properties are left unchanged.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateUserAreaRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully updated the user area.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserArea"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested user area was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "A user area with the requested name already exists.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "UserAreas"
        ],
        "summary": "Deletes a generic user area.",
        "description": "- Deletes the user area. Application-managed areas cannot be deleted through this surface (404).\n- Required OAuth scope: repository.Write",
        "operationId": "DeleteUserArea",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "areaId",
            "in": "path",
            "required": true,
            "description": "The ID of the user area to delete.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted the user area."
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested user area was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v2/Repositories/{repositoryId}/UserAreas/{areaId}/Entries": {
      "get": {
        "tags": [
          "UserAreas"
        ],
        "summary": "Returns the entries in a user area.",
        "description": "- Returns the entries contained in the user area.\n- Required OAuth scope: repository.Read",
        "operationId": "GetUserAreaEntries",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "areaId",
            "in": "path",
            "required": true,
            "description": "The ID of the user area.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully returned the user area's entries.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserAreaEntry"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested user area was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "UserAreas"
        ],
        "summary": "Adds one or more entries to a user area.",
        "description": "- Adds the supplied entries to the user area and returns the updated entries. Idempotent for entries already present.\n- Required OAuth scope: repository.Write",
        "operationId": "AddUserAreaEntries",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "areaId",
            "in": "path",
            "required": true,
            "description": "The ID of the user area.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The entry IDs to add.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EntryIdsRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully added the entries to the user area. Returns the updated entries.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserAreaEntry"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested user area was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "UserAreas"
        ],
        "summary": "Removes one or more entries from a user area.",
        "description": "- Removes the supplied entries from the user area and returns the updated entries. Idempotent for entries not present.\n- Required OAuth scope: repository.Write",
        "operationId": "RemoveUserAreaEntries",
        "parameters": [
          {
            "name": "repositoryId",
            "in": "path",
            "required": true,
            "description": "The requested repository ID.",
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "areaId",
            "in": "path",
            "required": true,
            "description": "The ID of the user area.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "x-position": 2
          }
        ],
        "requestBody": {
          "x-name": "request",
          "description": "The entry IDs to remove.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EntryIdsRequest"
              }
            }
          },
          "required": true,
          "x-position": 3
        },
        "responses": {
          "200": {
            "description": "Successfully removed the entries from the user area. Returns the updated entries.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserAreaEntry"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid or bad request.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Access token is invalid or expired.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Access denied for the operation.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "The requested user area was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit is reached.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected server-side error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Annotation": {
        "type": "object",
        "description": "A document annotation. This is a polymorphic response: the concrete shape is determined\nby AnnotationType, and the type-specific properties live on the matching\nsubtype (for example NoteAnnotation, StampAnnotation).",
        "x-abstract": true,
        "additionalProperties": false,
        "properties": {
          "itemId": {
            "type": "integer",
            "description": "The identifier of the annotation, unique within its page.",
            "format": "int32"
          },
          "entryId": {
            "type": "integer",
            "description": "The ID of the document entry the annotation belongs to.",
            "format": "int32"
          },
          "pageNumber": {
            "type": "integer",
            "description": "The 1-based page number the annotation is on.",
            "format": "int32"
          },
          "annotationType": {
            "description": "The type of the annotation.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/AnnotationType"
              }
            ]
          },
          "creator": {
            "type": "string",
            "description": "The security identifier (SID) of the user that created the annotation.",
            "nullable": true
          },
          "createdTime": {
            "type": "string",
            "description": "The UTC time the annotation was created.",
            "format": "date-time"
          },
          "lastModifiedTime": {
            "type": "string",
            "description": "The UTC time the annotation was last modified.",
            "format": "date-time"
          },
          "isReadOnly": {
            "type": "boolean",
            "description": "A boolean indicating whether the annotation is read-only (for example, on an archived version)."
          },
          "isProtected": {
            "type": "boolean",
            "description": "A boolean indicating whether the annotation is protected so that only its creator can modify it."
          },
          "visibility": {
            "description": "Controls who can see the annotation.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/AnnotationVisibility"
              }
            ]
          },
          "comment": {
            "type": "string",
            "description": "An optional comment on the annotation.",
            "nullable": true
          },
          "customData": {
            "type": "string",
            "description": "Optional application-defined custom data stored with the annotation.",
            "nullable": true
          },
          "zOrder": {
            "type": "integer",
            "description": "The z-order of the annotation; higher values draw on top.",
            "format": "int32"
          },
          "reasonId": {
            "type": "integer",
            "description": "The ID of the redaction reason associated with the annotation, if any.",
            "format": "int32",
            "nullable": true
          },
          "accessType": {
            "description": "How the annotation participates in access control.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/AnnotationAccessControlType"
              }
            ]
          }
        }
      },
      "AnnotationType": {
        "type": "string",
        "description": "The kind of a document annotation. Used as the discriminator for the polymorphic\nAnnotation response.",
        "x-enum-names": [
          "Highlight",
          "Redaction",
          "Strikeout",
          "Underline",
          "Note",
          "Attachment",
          "TextBox",
          "Bitmap",
          "Line",
          "Rectangle",
          "Polyline",
          "Callout",
          "Stamp",
          "FreeHand"
        ],
        "x-enum-varnames": [
          "Highlight",
          "Redaction",
          "Strikeout",
          "Underline",
          "Note",
          "Attachment",
          "TextBox",
          "Bitmap",
          "Line",
          "Rectangle",
          "Polyline",
          "Callout",
          "Stamp",
          "FreeHand"
        ],
        "x-enumNames": [
          "Highlight",
          "Redaction",
          "Strikeout",
          "Underline",
          "Note",
          "Attachment",
          "TextBox",
          "Bitmap",
          "Line",
          "Rectangle",
          "Polyline",
          "Callout",
          "Stamp",
          "FreeHand"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "enum": [
          "Highlight",
          "Redaction",
          "Strikeout",
          "Underline",
          "Note",
          "Attachment",
          "TextBox",
          "Bitmap",
          "Line",
          "Rectangle",
          "Polyline",
          "Callout",
          "Stamp",
          "FreeHand"
        ]
      },
      "AnnotationVisibility": {
        "type": "string",
        "description": "Controls who can see an annotation.",
        "x-enum-names": [
          "CreatorAndOwner",
          "Standard",
          "AllUsers"
        ],
        "x-enum-varnames": [
          "CreatorAndOwner",
          "Standard",
          "AllUsers"
        ],
        "x-enumNames": [
          "CreatorAndOwner",
          "Standard",
          "AllUsers"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null
        ],
        "enum": [
          "CreatorAndOwner",
          "Standard",
          "AllUsers"
        ]
      },
      "AnnotationAccessControlType": {
        "type": "string",
        "description": "How an annotation participates in access control.",
        "x-enum-names": [
          "None",
          "Allow",
          "Deny"
        ],
        "x-enum-varnames": [
          "None",
          "Allow",
          "Deny"
        ],
        "x-enumNames": [
          "None",
          "Allow",
          "Deny"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null
        ],
        "enum": [
          "None",
          "Allow",
          "Deny"
        ]
      },
      "HighlightAnnotation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Annotation"
          },
          {
            "type": "object",
            "description": "Highlights one or more regions of a page.",
            "additionalProperties": false,
            "properties": {
              "color": {
                "type": "string",
                "description": "The highlight color as an RGB hex string (for example, \"#FFFF00\"); null if transparent.",
                "nullable": true
              },
              "textStart": {
                "type": "integer",
                "description": "The start offset of the linked text span, or -1 when not linked to text.",
                "format": "int32"
              },
              "textEnd": {
                "type": "integer",
                "description": "The end offset of the linked text span, or -1 when not linked to text.",
                "format": "int32"
              },
              "rectangles": {
                "type": "array",
                "description": "The rectangular regions covered by the highlight.",
                "nullable": true,
                "items": {
                  "$ref": "#/components/schemas/AnnotationRectangle"
                }
              }
            }
          }
        ]
      },
      "AnnotationRectangle": {
        "type": "object",
        "description": "A rectangular region on a page, in image pixels from the top-left corner.",
        "additionalProperties": false,
        "properties": {
          "x": {
            "type": "integer",
            "description": "The horizontal offset in pixels of the left edge of the rectangle.",
            "format": "int32"
          },
          "y": {
            "type": "integer",
            "description": "The vertical offset in pixels of the top edge of the rectangle.",
            "format": "int32"
          },
          "width": {
            "type": "integer",
            "description": "The width of the rectangle in pixels.",
            "format": "int32"
          },
          "height": {
            "type": "integer",
            "description": "The height of the rectangle in pixels.",
            "format": "int32"
          }
        }
      },
      "RedactionAnnotation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Annotation"
          },
          {
            "type": "object",
            "description": "Obscures one or more regions of a page. Redactions are overlays; the underlying content\nis preserved and is only hidden from users without the right to see through redactions.",
            "additionalProperties": false,
            "properties": {
              "isWhiteout": {
                "type": "boolean",
                "description": "A boolean indicating whether the region is whited out (true) rather than blacked out (false)."
              },
              "textStart": {
                "type": "integer",
                "description": "The start offset of the linked text span, or -1 when not linked to text.",
                "format": "int32"
              },
              "textEnd": {
                "type": "integer",
                "description": "The end offset of the linked text span, or -1 when not linked to text.",
                "format": "int32"
              },
              "rectangles": {
                "type": "array",
                "description": "The rectangular regions covered by the redaction.",
                "nullable": true,
                "items": {
                  "$ref": "#/components/schemas/AnnotationRectangle"
                }
              }
            }
          }
        ]
      },
      "StrikeoutAnnotation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Annotation"
          },
          {
            "type": "object",
            "description": "Strikes through one or more regions of a page.",
            "additionalProperties": false,
            "properties": {
              "color": {
                "type": "string",
                "description": "The strikeout color as an RGB hex string (for example, \"#FF0000\"); null if transparent.",
                "nullable": true
              },
              "direction": {
                "description": "The reading direction of the struck-through text.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/TextDirection"
                  }
                ]
              },
              "textStart": {
                "type": "integer",
                "description": "The start offset of the linked text span, or -1 when not linked to text.",
                "format": "int32"
              },
              "textEnd": {
                "type": "integer",
                "description": "The end offset of the linked text span, or -1 when not linked to text.",
                "format": "int32"
              },
              "rectangles": {
                "type": "array",
                "description": "The rectangular regions covered by the strikeout.",
                "nullable": true,
                "items": {
                  "$ref": "#/components/schemas/AnnotationRectangle"
                }
              }
            }
          }
        ]
      },
      "TextDirection": {
        "type": "string",
        "description": "The reading direction of annotation text.",
        "x-enum-names": [
          "LeftToRight",
          "TopToBottom",
          "RightToLeft",
          "BottomToTop"
        ],
        "x-enum-varnames": [
          "LeftToRight",
          "TopToBottom",
          "RightToLeft",
          "BottomToTop"
        ],
        "x-enumNames": [
          "LeftToRight",
          "TopToBottom",
          "RightToLeft",
          "BottomToTop"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null,
          null
        ],
        "enum": [
          "LeftToRight",
          "TopToBottom",
          "RightToLeft",
          "BottomToTop"
        ]
      },
      "UnderlineAnnotation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Annotation"
          },
          {
            "type": "object",
            "description": "Underlines one or more regions of a page.",
            "additionalProperties": false,
            "properties": {
              "color": {
                "type": "string",
                "description": "The underline color as an RGB hex string (for example, \"#FF0000\"); null if transparent.",
                "nullable": true
              },
              "direction": {
                "description": "The reading direction of the underlined text.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/TextDirection"
                  }
                ]
              },
              "textStart": {
                "type": "integer",
                "description": "The start offset of the linked text span, or -1 when not linked to text.",
                "format": "int32"
              },
              "textEnd": {
                "type": "integer",
                "description": "The end offset of the linked text span, or -1 when not linked to text.",
                "format": "int32"
              },
              "rectangles": {
                "type": "array",
                "description": "The rectangular regions covered by the underline.",
                "nullable": true,
                "items": {
                  "$ref": "#/components/schemas/AnnotationRectangle"
                }
              }
            }
          }
        ]
      },
      "NoteAnnotation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Annotation"
          },
          {
            "type": "object",
            "description": "A sticky note placed on a page.",
            "additionalProperties": false,
            "properties": {
              "position": {
                "description": "The top-left position of the note on the page.",
                "nullable": true,
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/AnnotationPoint"
                  }
                ]
              },
              "color": {
                "type": "string",
                "description": "The background color of the note as an RGB hex string (for example, \"#FFFF00\"); null if transparent.",
                "nullable": true
              },
              "text": {
                "type": "string",
                "description": "The text content of the note.",
                "nullable": true
              },
              "keepHistory": {
                "type": "boolean",
                "description": "A boolean indicating whether the note keeps a revision history."
              }
            }
          }
        ]
      },
      "AnnotationPoint": {
        "type": "object",
        "description": "A point on a page, in image pixels from the top-left corner.",
        "additionalProperties": false,
        "properties": {
          "x": {
            "type": "integer",
            "description": "The horizontal offset in pixels from the left edge of the page.",
            "format": "int32"
          },
          "y": {
            "type": "integer",
            "description": "The vertical offset in pixels from the top edge of the page.",
            "format": "int32"
          }
        }
      },
      "AttachmentAnnotation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Annotation"
          },
          {
            "type": "object",
            "description": "A file attached to a page. The attached file's bytes are retrieved through the\nattachment-content endpoint, not in the annotation response.",
            "additionalProperties": false,
            "properties": {
              "position": {
                "description": "The top-left position of the attachment icon on the page.",
                "nullable": true,
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/AnnotationPoint"
                  }
                ]
              },
              "fileName": {
                "type": "string",
                "description": "The original file name of the attachment.",
                "nullable": true
              },
              "mimeType": {
                "type": "string",
                "description": "The MIME type of the attached file.",
                "nullable": true
              },
              "attachmentLength": {
                "type": "integer",
                "description": "The size of the attached file in bytes.",
                "format": "int64"
              }
            }
          }
        ]
      },
      "TextBoxAnnotation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Annotation"
          },
          {
            "type": "object",
            "description": "A bordered text box drawn on a page.",
            "additionalProperties": false,
            "properties": {
              "coordinates": {
                "description": "The bounding rectangle of the text box.",
                "nullable": true,
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/AnnotationRectangle"
                  }
                ]
              },
              "fillColor": {
                "type": "string",
                "description": "The fill color as an RGB hex string; null if not filled.",
                "nullable": true
              },
              "borderColor": {
                "type": "string",
                "description": "The border color as an RGB hex string; null if transparent.",
                "nullable": true
              },
              "borderStyle": {
                "description": "The border stroke style.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/LineStyle"
                  }
                ]
              },
              "borderThickness": {
                "type": "integer",
                "description": "The border thickness in pixels.",
                "format": "int32"
              },
              "opacity": {
                "type": "integer",
                "description": "The opacity of the text box as a percentage (0-100).",
                "format": "int32"
              },
              "text": {
                "type": "string",
                "description": "The text displayed in the box.",
                "nullable": true
              },
              "textSize": {
                "type": "integer",
                "description": "The font size of the text in points.",
                "format": "int32"
              },
              "direction": {
                "description": "The reading direction of the text.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/TextDirection"
                  }
                ]
              }
            }
          }
        ]
      },
      "LineStyle": {
        "type": "string",
        "description": "The stroke style of a line or border.",
        "x-enum-names": [
          "Solid",
          "Dashed1",
          "Dashed2",
          "Dashed3",
          "Dashed4",
          "Dashed5",
          "Dashed6",
          "Cloud1",
          "Cloud2"
        ],
        "x-enum-varnames": [
          "Solid",
          "Dashed1",
          "Dashed2",
          "Dashed3",
          "Dashed4",
          "Dashed5",
          "Dashed6",
          "Cloud1",
          "Cloud2"
        ],
        "x-enumNames": [
          "Solid",
          "Dashed1",
          "Dashed2",
          "Dashed3",
          "Dashed4",
          "Dashed5",
          "Dashed6",
          "Cloud1",
          "Cloud2"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "enum": [
          "Solid",
          "Dashed1",
          "Dashed2",
          "Dashed3",
          "Dashed4",
          "Dashed5",
          "Dashed6",
          "Cloud1",
          "Cloud2"
        ]
      },
      "BitmapAnnotation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Annotation"
          },
          {
            "type": "object",
            "description": "An image placed on a page. The image bytes are not included in the annotation response;\nthey are uploaded and managed separately.",
            "additionalProperties": false,
            "properties": {
              "position": {
                "description": "The top-left position of the image on the page.",
                "nullable": true,
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/AnnotationPoint"
                  }
                ]
              },
              "size": {
                "description": "The rendered size of the image in pixels.",
                "nullable": true,
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/AnnotationSize"
                  }
                ]
              },
              "rotation": {
                "type": "integer",
                "description": "The clockwise rotation of the image in degrees (0-359).",
                "format": "int32"
              },
              "opacity": {
                "type": "integer",
                "description": "The opacity of the image as a percentage (0-100).",
                "format": "int32"
              }
            }
          }
        ]
      },
      "AnnotationSize": {
        "type": "object",
        "description": "A size in image pixels.",
        "additionalProperties": false,
        "properties": {
          "width": {
            "type": "integer",
            "description": "The width in pixels.",
            "format": "int32"
          },
          "height": {
            "type": "integer",
            "description": "The height in pixels.",
            "format": "int32"
          }
        }
      },
      "LineAnnotation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Annotation"
          },
          {
            "type": "object",
            "description": "A straight line or arrow drawn on a page.",
            "additionalProperties": false,
            "properties": {
              "beginPosition": {
                "description": "The start point of the line.",
                "nullable": true,
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/AnnotationPoint"
                  }
                ]
              },
              "endPosition": {
                "description": "The end point of the line.",
                "nullable": true,
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/AnnotationPoint"
                  }
                ]
              },
              "beginStyle": {
                "description": "The cap style at the start of the line.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/LineEndingStyle"
                  }
                ]
              },
              "endStyle": {
                "description": "The cap style at the end of the line.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/LineEndingStyle"
                  }
                ]
              },
              "lineStyle": {
                "description": "The line stroke style.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/LineStyle"
                  }
                ]
              },
              "color": {
                "type": "string",
                "description": "The line color as an RGB hex string; null if transparent.",
                "nullable": true
              },
              "endColor": {
                "type": "string",
                "description": "The end-cap color as an RGB hex string; null if transparent.",
                "nullable": true
              },
              "thickness": {
                "type": "integer",
                "description": "The line thickness in pixels.",
                "format": "int32"
              },
              "opacity": {
                "type": "integer",
                "description": "The opacity of the line as a percentage (0-100).",
                "format": "int32"
              }
            }
          }
        ]
      },
      "LineEndingStyle": {
        "type": "string",
        "description": "The cap style at the end of a line.",
        "x-enum-names": [
          "None",
          "Open",
          "Closed",
          "OpenReversed",
          "ClosedReversed",
          "Butt",
          "Diamond",
          "Round",
          "Square",
          "Slash"
        ],
        "x-enum-varnames": [
          "None",
          "Open",
          "Closed",
          "OpenReversed",
          "ClosedReversed",
          "Butt",
          "Diamond",
          "Round",
          "Square",
          "Slash"
        ],
        "x-enumNames": [
          "None",
          "Open",
          "Closed",
          "OpenReversed",
          "ClosedReversed",
          "Butt",
          "Diamond",
          "Round",
          "Square",
          "Slash"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "enum": [
          "None",
          "Open",
          "Closed",
          "OpenReversed",
          "ClosedReversed",
          "Butt",
          "Diamond",
          "Round",
          "Square",
          "Slash"
        ]
      },
      "RectangleAnnotation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Annotation"
          },
          {
            "type": "object",
            "description": "A rectangle, rounded rectangle, or ellipse drawn on a page.",
            "additionalProperties": false,
            "properties": {
              "coordinates": {
                "description": "The bounding rectangle of the shape.",
                "nullable": true,
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/AnnotationRectangle"
                  }
                ]
              },
              "fillColor": {
                "type": "string",
                "description": "The fill color as an RGB hex string (for example, \"#FF0000\"); null if not filled.",
                "nullable": true
              },
              "boxStyle": {
                "description": "The shape drawn within the bounding rectangle.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/BoxStyle"
                  }
                ]
              },
              "borderStyle": {
                "description": "The border stroke style.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/LineStyle"
                  }
                ]
              },
              "borderColor": {
                "type": "string",
                "description": "The border color as an RGB hex string; null if transparent.",
                "nullable": true
              },
              "borderThickness": {
                "type": "integer",
                "description": "The border thickness in pixels.",
                "format": "int32"
              },
              "opacity": {
                "type": "integer",
                "description": "The opacity of the shape as a percentage (0-100).",
                "format": "int32"
              }
            }
          }
        ]
      },
      "BoxStyle": {
        "type": "string",
        "description": "The shape of a rectangle annotation.",
        "x-enum-names": [
          "Rectangle",
          "Ellipse",
          "RoundedRectangle"
        ],
        "x-enum-varnames": [
          "Rectangle",
          "Ellipse",
          "RoundedRectangle"
        ],
        "x-enumNames": [
          "Rectangle",
          "Ellipse",
          "RoundedRectangle"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null
        ],
        "enum": [
          "Rectangle",
          "Ellipse",
          "RoundedRectangle"
        ]
      },
      "PolylineAnnotation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Annotation"
          },
          {
            "type": "object",
            "description": "A closed multi-point polygon drawn on a page.",
            "additionalProperties": false,
            "properties": {
              "points": {
                "type": "array",
                "description": "The ordered vertices of the polygon.",
                "nullable": true,
                "items": {
                  "$ref": "#/components/schemas/AnnotationPoint"
                }
              },
              "lineStyle": {
                "description": "The border stroke style.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/LineStyle"
                  }
                ]
              },
              "fillColor": {
                "type": "string",
                "description": "The fill color as an RGB hex string; null if not filled.",
                "nullable": true
              },
              "fillStyle": {
                "description": "Whether the polygon is filled.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/FillStyle"
                  }
                ]
              },
              "color": {
                "type": "string",
                "description": "The border color as an RGB hex string; null if transparent.",
                "nullable": true
              },
              "thickness": {
                "type": "integer",
                "description": "The border thickness in pixels.",
                "format": "int32"
              },
              "opacity": {
                "type": "integer",
                "description": "The opacity of the polygon as a percentage (0-100).",
                "format": "int32"
              }
            }
          }
        ]
      },
      "FillStyle": {
        "type": "string",
        "description": "Whether a closed shape is filled.",
        "x-enum-names": [
          "None",
          "Solid"
        ],
        "x-enum-varnames": [
          "None",
          "Solid"
        ],
        "x-enumNames": [
          "None",
          "Solid"
        ],
        "x-enum-descriptions": [
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null
        ],
        "enum": [
          "None",
          "Solid"
        ]
      },
      "CalloutAnnotation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Annotation"
          },
          {
            "type": "object",
            "description": "A text box with a pointer leading to a focus point on the page.",
            "additionalProperties": false,
            "properties": {
              "boxCoordinates": {
                "description": "The bounding rectangle of the callout's text box.",
                "nullable": true,
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/AnnotationRectangle"
                  }
                ]
              },
              "focusPosition": {
                "description": "The point the callout pointer leads to.",
                "nullable": true,
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/AnnotationPoint"
                  }
                ]
              },
              "fillColor": {
                "type": "string",
                "description": "The fill color as an RGB hex string; null if not filled.",
                "nullable": true
              },
              "borderColor": {
                "type": "string",
                "description": "The border and pointer color as an RGB hex string; null if transparent.",
                "nullable": true
              },
              "borderStyle": {
                "description": "The border stroke style.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/LineStyle"
                  }
                ]
              },
              "borderThickness": {
                "type": "integer",
                "description": "The border thickness in pixels.",
                "format": "int32"
              },
              "focusStyle": {
                "description": "The cap style at the focus end of the pointer.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/LineEndingStyle"
                  }
                ]
              },
              "opacity": {
                "type": "integer",
                "description": "The opacity of the callout as a percentage (0-100).",
                "format": "int32"
              },
              "textSize": {
                "type": "integer",
                "description": "The font size of the text in points.",
                "format": "int32"
              },
              "text": {
                "type": "string",
                "description": "The text displayed in the callout.",
                "nullable": true
              },
              "direction": {
                "description": "The reading direction of the text.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/TextDirection"
                  }
                ]
              }
            }
          }
        ]
      },
      "StampAnnotation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Annotation"
          },
          {
            "type": "object",
            "description": "A placement of a catalog stamp on a page. The stamp image itself is defined by the\ncatalog entry referenced by StampId.",
            "additionalProperties": false,
            "properties": {
              "stampId": {
                "type": "integer",
                "description": "The ID of the catalog stamp placed; 0 when the stamp carries its own inline bitmap.",
                "format": "int32"
              },
              "coordinates": {
                "description": "The rectangle the stamp is drawn into.",
                "nullable": true,
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/AnnotationRectangle"
                  }
                ]
              },
              "position": {
                "description": "The top-left position of the stamp on the page.",
                "nullable": true,
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/AnnotationPoint"
                  }
                ]
              },
              "color": {
                "type": "string",
                "description": "The render color of the stamp as an RGB hex string (for example, \"#000000\"); null if transparent.",
                "nullable": true
              },
              "rotation": {
                "type": "integer",
                "description": "The clockwise rotation of the stamp in degrees (0-359).",
                "format": "int32"
              },
              "opacity": {
                "type": "integer",
                "description": "The opacity of the stamp as a percentage (0-100).",
                "format": "int32"
              }
            }
          }
        ]
      },
      "FreeHandAnnotation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Annotation"
          },
          {
            "type": "object",
            "description": "A freehand-drawn multi-point line on a page.",
            "additionalProperties": false,
            "properties": {
              "points": {
                "type": "array",
                "description": "The ordered points of the freehand stroke.",
                "nullable": true,
                "items": {
                  "$ref": "#/components/schemas/AnnotationPoint"
                }
              },
              "lineStyle": {
                "description": "The stroke style.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/LineStyle"
                  }
                ]
              },
              "color": {
                "type": "string",
                "description": "The stroke color as an RGB hex string; null if transparent.",
                "nullable": true
              },
              "thickness": {
                "type": "integer",
                "description": "The stroke thickness in pixels.",
                "format": "int32"
              },
              "opacity": {
                "type": "integer",
                "description": "The opacity of the stroke as a percentage (0-100).",
                "format": "int32"
              }
            }
          }
        ]
      },
      "ProblemDetails": {
        "type": "object",
        "description": "A machine-readable format for specifying errors in HTTP API responses, per RFC 9457 (https://www.rfc-editor.org/rfc/rfc9457). Supersedes RFC 7807.",
        "additionalProperties": {
          "nullable": true
        },
        "required": [
          "status"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "The problem type.",
            "nullable": true
          },
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem type.",
            "nullable": true
          },
          "status": {
            "type": "integer",
            "description": "The HTTP status code.",
            "format": "int32"
          },
          "detail": {
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem.",
            "nullable": true
          },
          "instance": {
            "type": "string",
            "description": "A URI reference that identifies the specific occurrence of the problem.",
            "nullable": true
          },
          "operationId": {
            "type": "string",
            "description": "The operation id.",
            "nullable": true
          },
          "errorSource": {
            "type": "string",
            "description": "The error source.",
            "nullable": true
          },
          "errorCode": {
            "type": "integer",
            "description": "The error code.",
            "format": "int32",
            "nullable": true
          },
          "traceId": {
            "type": "string",
            "description": "The trace id.",
            "nullable": true
          },
          "instanceDetail": {
            "type": "string",
            "description": "The instance detail.",
            "nullable": true
          }
        }
      },
      "AnnotationReason": {
        "type": "object",
        "description": "A repository-defined reason that can be associated with a redaction annotation.",
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "integer",
            "description": "The ID of the annotation reason.",
            "format": "int32"
          },
          "text": {
            "type": "string",
            "description": "The display text of the annotation reason.",
            "nullable": true
          }
        }
      },
      "AnnotationReasonRequest": {
        "type": "object",
        "description": "Request body for creating or updating an annotation (redaction) reason.",
        "additionalProperties": false,
        "properties": {
          "text": {
            "type": "string",
            "description": "The display text of the annotation reason.",
            "nullable": true
          }
        }
      },
      "AttributeCollectionResponse": {
        "type": "object",
        "description": "Response containing a collection of Attribute.",
        "additionalProperties": false,
        "properties": {
          "@odata.nextLink": {
            "type": "string",
            "description": "A URL to retrieve the next page of the requested collection.",
            "nullable": true
          },
          "@odata.count": {
            "type": "integer",
            "description": "The total count of items within a collection.",
            "format": "int32",
            "nullable": true
          },
          "value": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/Attribute"
            }
          }
        }
      },
      "Attribute": {
        "type": "object",
        "description": "Represents a trustee attribute.",
        "additionalProperties": false,
        "properties": {
          "key": {
            "type": "string",
            "description": "The attribute key.",
            "nullable": true
          },
          "value": {
            "type": "string",
            "description": "The attribute value.",
            "nullable": true
          }
        }
      },
      "AuditReasonCollectionResponse": {
        "type": "object",
        "description": "Response containing a collection of AuditReason.",
        "additionalProperties": false,
        "properties": {
          "@odata.nextLink": {
            "type": "string",
            "description": "A URL to retrieve the next page of the requested collection.",
            "nullable": true
          },
          "@odata.count": {
            "type": "integer",
            "description": "The total count of items within a collection.",
            "format": "int32",
            "nullable": true
          },
          "value": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/AuditReason"
            }
          }
        }
      },
      "AuditReason": {
        "type": "object",
        "description": "Represents a user-defined audit reason for an audit event.",
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "integer",
            "description": "The audit reason id.",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "The audit reason text.",
            "nullable": true
          },
          "auditEventType": {
            "description": "The audit event type for this audit reason.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/AuditEventType"
              }
            ]
          }
        }
      },
      "AuditEventType": {
        "type": "string",
        "description": "Enumeration of Laserfiche audit event types.",
        "x-enum-names": [
          "DeleteEntry",
          "ExportDocument"
        ],
        "x-enum-varnames": [
          "DeleteEntry",
          "ExportDocument"
        ],
        "x-enumNames": [
          "DeleteEntry",
          "ExportDocument"
        ],
        "x-enum-descriptions": [
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null
        ],
        "enum": [
          "DeleteEntry",
          "ExportDocument"
        ]
      },
      "FieldDefinition": {
        "type": "object",
        "description": "Represents a field definition.",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the field.",
            "nullable": true
          },
          "displayName": {
            "type": "string",
            "description": "The localized name of the field.",
            "nullable": true
          },
          "id": {
            "type": "integer",
            "description": "The ID of the field.",
            "format": "int32"
          },
          "description": {
            "type": "string",
            "description": "The description of the field.",
            "nullable": true
          },
          "fieldType": {
            "description": "The type of the field.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/FieldType"
              }
            ]
          },
          "length": {
            "type": "integer",
            "description": "The length of the field for variable length data types.",
            "format": "int32"
          },
          "defaultValue": {
            "type": "string",
            "description": "The default value of the field for new entries that are assigned to a template the represented field is a member of.",
            "nullable": true
          },
          "isMultiValue": {
            "type": "boolean",
            "description": "A boolean indicating if the represented template field supports multiple values."
          },
          "isRequired": {
            "type": "boolean",
            "description": "A boolean indicating if the represented field must have a value set on entries assigned to a template that the field is a member of."
          },
          "constraint": {
            "type": "string",
            "description": "The constraint for values stored in the represented field.",
            "nullable": true
          },
          "constraintError": {
            "type": "string",
            "description": "The error string that will be returned when the field constraint is violated when setting a value for this field.",
            "nullable": true
          },
          "listValues": {
            "type": "array",
            "description": "The list of items assigned to the represented field.",
            "nullable": true,
            "items": {
              "type": "string"
            }
          },
          "format": {
            "description": "The display format of the represented field.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/FieldFormat"
              }
            ]
          },
          "currency": {
            "type": "string",
            "description": "The name of the currency that will be using when formatting the represented field when the Format property is set to the Currency member of the WFieldFormat enumeration.",
            "nullable": true
          },
          "formatPattern": {
            "type": "string",
            "description": "The custom format pattern for fields that are configured to use a custom format.",
            "nullable": true
          },
          "isIndexed": {
            "type": "boolean",
            "description": "A boolean indicating whether the field is indexed for searching."
          },
          "isIndexedForReporting": {
            "type": "boolean",
            "description": "A boolean indicating whether the field is indexed for reporting."
          },
          "warnIfBlank": {
            "type": "boolean",
            "description": "A boolean indicating whether the user should be warned when leaving the field blank."
          },
          "hideListValues": {
            "type": "boolean",
            "description": "A boolean indicating whether the field's list values should be hidden in the UI.\nApplies only to list-backed fields."
          },
          "autoExtract": {
            "type": "boolean",
            "description": "A boolean indicating whether values for this field can be automatically extracted by AI/OCR services."
          }
        }
      },
      "FieldType": {
        "type": "string",
        "description": "Enumeration of Laserfiche template field types.",
        "x-enum-names": [
          "DateTime",
          "Blob",
          "Date",
          "ShortInteger",
          "LongInteger",
          "List",
          "Number",
          "String",
          "Time"
        ],
        "x-enum-varnames": [
          "DateTime",
          "Blob",
          "Date",
          "ShortInteger",
          "LongInteger",
          "List",
          "Number",
          "String",
          "Time"
        ],
        "x-enumNames": [
          "DateTime",
          "Blob",
          "Date",
          "ShortInteger",
          "LongInteger",
          "List",
          "Number",
          "String",
          "Time"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "enum": [
          "DateTime",
          "Blob",
          "Date",
          "ShortInteger",
          "LongInteger",
          "List",
          "Number",
          "String",
          "Time"
        ]
      },
      "FieldFormat": {
        "type": "string",
        "description": "Enumeration of Laserfiche template field formats.",
        "x-enum-names": [
          "None",
          "ShortDate",
          "LongDate",
          "ShortDateTime",
          "LongDateTime",
          "ShortTime",
          "LongTime",
          "GeneralNumber",
          "Currency",
          "Percent",
          "Scientific",
          "Custom"
        ],
        "x-enum-varnames": [
          "None",
          "ShortDate",
          "LongDate",
          "ShortDateTime",
          "LongDateTime",
          "ShortTime",
          "LongTime",
          "GeneralNumber",
          "Currency",
          "Percent",
          "Scientific",
          "Custom"
        ],
        "x-enumNames": [
          "None",
          "ShortDate",
          "LongDate",
          "ShortDateTime",
          "LongDateTime",
          "ShortTime",
          "LongTime",
          "GeneralNumber",
          "Currency",
          "Percent",
          "Scientific",
          "Custom"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "enum": [
          "None",
          "ShortDate",
          "LongDate",
          "ShortDateTime",
          "LongDateTime",
          "ShortTime",
          "LongTime",
          "GeneralNumber",
          "Currency",
          "Percent",
          "Scientific",
          "Custom"
        ]
      },
      "FieldDefinitionCollectionResponse": {
        "type": "object",
        "description": "Response containing a collection of FieldDefinition.",
        "additionalProperties": false,
        "properties": {
          "@odata.nextLink": {
            "type": "string",
            "description": "A URL to retrieve the next page of the requested collection.",
            "nullable": true
          },
          "@odata.count": {
            "type": "integer",
            "description": "The total count of items within a collection.",
            "format": "int32",
            "nullable": true
          },
          "value": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/FieldDefinition"
            }
          }
        }
      },
      "CreateFieldDefinitionRequest": {
        "type": "object",
        "description": "Request body for creating a new field definition. Name and FieldType are required;\nall other properties are optional and fall back to repository defaults when omitted.",
        "additionalProperties": false,
        "required": [
          "name",
          "fieldType"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the field. Required. Must be unique within the repository."
          },
          "fieldType": {
            "description": "The type of the field. Required. Cannot be changed via UpdateFieldDefinition;\nuse the ChangeFieldType endpoint to convert between types.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/FieldType"
              }
            ]
          },
          "description": {
            "type": "string",
            "description": "The description of the field.",
            "nullable": true
          },
          "length": {
            "type": "integer",
            "description": "The maximum length of the field for variable-length data types.",
            "format": "int32",
            "nullable": true
          },
          "defaultValue": {
            "type": "string",
            "description": "The default value applied to entries assigned to a template containing this field.",
            "nullable": true
          },
          "format": {
            "description": "The display format for the field. Defaults to None when omitted.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/FieldFormat"
              }
            ]
          },
          "formatPattern": {
            "type": "string",
            "description": "The custom format pattern. Only meaningful when Format is set to a value that supports custom patterns.",
            "nullable": true
          },
          "currency": {
            "type": "string",
            "description": "The currency for numeric fields when Format is Currency.",
            "nullable": true
          },
          "constraint": {
            "type": "string",
            "description": "A validation constraint expression for values stored in this field.",
            "nullable": true
          },
          "constraintError": {
            "type": "string",
            "description": "The error message returned when the constraint is violated.",
            "nullable": true
          },
          "isMultiValue": {
            "type": "boolean",
            "description": "Whether the field supports multiple values.",
            "nullable": true
          },
          "isRequired": {
            "type": "boolean",
            "description": "Whether the field is required on entries assigned to a template containing it.",
            "nullable": true
          },
          "isIndexed": {
            "type": "boolean",
            "description": "Whether the field is indexed for searching.",
            "nullable": true
          },
          "isIndexedForReporting": {
            "type": "boolean",
            "description": "Whether the field is indexed for reporting.",
            "nullable": true
          },
          "warnIfBlank": {
            "type": "boolean",
            "description": "Whether the user should be warned when leaving the field blank.",
            "nullable": true
          },
          "hideListValues": {
            "type": "boolean",
            "description": "Whether list values should be hidden in the UI. Applies only to list-backed fields.",
            "nullable": true
          },
          "autoExtract": {
            "type": "boolean",
            "description": "Whether values for this field can be automatically extracted by AI/OCR services.",
            "nullable": true
          },
          "listValues": {
            "type": "array",
            "description": "Initial list values to populate. Applies only when FieldType is List.\nOrder is preserved. Use the dedicated ListValues endpoints to manage list values after creation.",
            "nullable": true,
            "items": {
              "type": "string"
            }
          },
          "properties": {
            "type": "object",
            "description": "Initial custom properties to persist atomically with the field. The bag is an opaque\napplication-defined string → string map scoped to the field definition; use it\nto attach integration metadata or application-specific configuration that should be\ncreated together with the field — for example to encode list-field display preferences\nsuch as sort order, or to record an external system's identifier for the field.\nKeys are application-defined; recommend namespaced keys (e.g. myapp.kind,\ncom.acme.field.source) to avoid collisions. Manage after creation via the\ndedicated /FieldDefinitions/{id}/Properties endpoints. Constraints: empty keys,\nnull values, and control characters are rejected with 400. Maximum 500 entries,\n256 chars per key, 1000 chars per value.",
            "nullable": true,
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "UpdateFieldDefinitionRequest": {
        "type": "object",
        "description": "Request body for partial-update of an existing field definition. Every property is optional.\nnull = leave the property unchanged.\nEmpty string (\"\") on a string property = clear the value.\nFieldType cannot be changed via this endpoint — use the ChangeFieldType endpoint.\nListValues cannot be changed via this endpoint — use the dedicated ListValues endpoints.",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "description": "The new name of the field. Must be unique within the repository.",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "The description of the field.",
            "nullable": true
          },
          "length": {
            "type": "integer",
            "description": "The maximum length of the field for variable-length data types.",
            "format": "int32",
            "nullable": true
          },
          "defaultValue": {
            "type": "string",
            "description": "The default value applied to entries assigned to a template containing this field.",
            "nullable": true
          },
          "format": {
            "description": "The display format for the field.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/FieldFormat"
              }
            ]
          },
          "formatPattern": {
            "type": "string",
            "description": "The custom format pattern.",
            "nullable": true
          },
          "currency": {
            "type": "string",
            "description": "The currency for numeric fields when Format is Currency.",
            "nullable": true
          },
          "constraint": {
            "type": "string",
            "description": "A validation constraint expression for values stored in this field.",
            "nullable": true
          },
          "constraintError": {
            "type": "string",
            "description": "The error message returned when the constraint is violated.",
            "nullable": true
          },
          "isMultiValue": {
            "type": "boolean",
            "description": "Whether the field supports multiple values.",
            "nullable": true
          },
          "isRequired": {
            "type": "boolean",
            "description": "Whether the field is required on entries assigned to a template containing it.",
            "nullable": true
          },
          "isIndexed": {
            "type": "boolean",
            "description": "Whether the field is indexed for searching.",
            "nullable": true
          },
          "isIndexedForReporting": {
            "type": "boolean",
            "description": "Whether the field is indexed for reporting.",
            "nullable": true
          },
          "warnIfBlank": {
            "type": "boolean",
            "description": "Whether the user should be warned when leaving the field blank.",
            "nullable": true
          },
          "hideListValues": {
            "type": "boolean",
            "description": "Whether list values should be hidden in the UI. Applies only to list-backed fields.",
            "nullable": true
          },
          "autoExtract": {
            "type": "boolean",
            "description": "Whether values for this field can be automatically extracted by AI/OCR services.",
            "nullable": true
          }
        }
      },
      "ListValuesResponse": {
        "type": "object",
        "description": "Response containing the list values of a field definition, in the order configured on the server.",
        "additionalProperties": false,
        "properties": {
          "values": {
            "type": "array",
            "description": "The ordered list of list-item values.",
            "nullable": true,
            "items": {
              "type": "string"
            }
          }
        }
      },
      "ReplaceListValuesRequest": {
        "type": "object",
        "description": "Request body for replacing the list values of a list-backed field definition.\nThe provided values replace the field's full list-item set wholesale, preserving the supplied order.\nAn empty array clears the list.",
        "additionalProperties": false,
        "required": [
          "values"
        ],
        "properties": {
          "values": {
            "type": "array",
            "description": "The ordered list of list-item values to apply. Duplicates and empty strings are rejected with 400.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "TemplateDefinition": {
        "type": "object",
        "description": "Represents a template definition.",
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "integer",
            "description": "The ID of the template definition.",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "The name of the template definition.",
            "nullable": true
          },
          "displayName": {
            "type": "string",
            "description": "The localized name of the template definition.",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "The description of the template definition.",
            "nullable": true
          },
          "color": {
            "description": "The color assigned to the template definition.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/LFColor"
              }
            ]
          },
          "fieldCount": {
            "type": "integer",
            "description": "The number of field definitions assigned to the template definition.",
            "format": "int32"
          },
          "isAutoAssignable": {
            "type": "boolean",
            "description": "Whether the template is eligible for automatic assignment by Cloud auto-classification."
          }
        }
      },
      "LFColor": {
        "type": "object",
        "description": "Represents an RGB color value with alpha channel.",
        "additionalProperties": false,
        "properties": {
          "a": {
            "type": "integer",
            "description": "The alpha channel component, from 0-255.",
            "format": "byte"
          },
          "r": {
            "type": "integer",
            "description": "The red channel component, from 0-255.",
            "format": "byte"
          },
          "g": {
            "type": "integer",
            "description": "The green channel component, from 0-255.",
            "format": "byte"
          },
          "b": {
            "type": "integer",
            "description": "The blue channel component from 0-255.",
            "format": "byte"
          }
        }
      },
      "AssignedEntryCountResponse": {
        "type": "object",
        "description": "The number of entries that have a value assigned for a given field definition,\nor that are currently assigned to a given template definition.",
        "additionalProperties": false,
        "properties": {
          "count": {
            "type": "integer",
            "description": "The count of entries currently using this field or template.",
            "format": "int32"
          }
        }
      },
      "FieldPropertiesResponse": {
        "type": "object",
        "description": "Response body for the custom-properties bag on a field definition. The bag is an opaque\napplication-defined string → string map persisted on the field definition itself\n(scoped to the definition, not to a user). Use it to attach integration metadata or\napplication-specific configuration that belongs with the field — for example to encode\nlist-field display preferences such as sort order, or to record an external system's\nidentifier for the field. Keys are application-defined; the API does not validate\nsemantic meaning. Recommend namespaced keys to avoid collisions, e.g.\ncom.acme.invoice.region or myapp.ingest.batch_id. The response may include\nentries written by other applications or by system-managed tooling; callers should\nleave unrecognized keys untouched on subsequent updates.",
        "additionalProperties": false,
        "properties": {
          "properties": {
            "type": "object",
            "description": "The full set of custom properties currently set on the field.",
            "nullable": true,
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "UpdateFieldPropertiesRequest": {
        "type": "object",
        "description": "Request body for partially updating the custom-properties bag on a field definition.\nEntries in Set are written (creating or overwriting). Entries in Remove\nare deleted. Properties not mentioned in either are left unchanged. The bag is\napplication-defined; the API does not validate key semantics. Recommend namespaced keys\n(e.g. com.acme.invoice.region, myapp.kind) to avoid collisions.",
        "additionalProperties": false,
        "properties": {
          "set": {
            "type": "object",
            "description": "Properties to set. Keys absent here are not modified.",
            "nullable": true,
            "additionalProperties": {
              "type": "string"
            }
          },
          "remove": {
            "type": "array",
            "description": "Property keys to remove. Keys not currently set are ignored.",
            "nullable": true,
            "items": {
              "type": "string"
            }
          }
        }
      },
      "MergeFieldsRequest": {
        "type": "object",
        "description": "Request body for merging two or more field definitions into a new field definition.",
        "additionalProperties": false,
        "required": [
          "sourceFieldIds",
          "newFieldName"
        ],
        "properties": {
          "sourceFieldIds": {
            "type": "array",
            "description": "The IDs of the field definitions to merge. At least two are required. Their values are\ncombined into a new field; see onConflict for how per-entry value conflicts are resolved.\nThe source field definitions are preserved by this operation — only their per-entry values\nare migrated to the new merged field. Use DeleteFieldDefinition on each source after\nthe merge if the originals are no longer needed.",
            "items": {
              "type": "integer",
              "format": "int32"
            }
          },
          "newFieldName": {
            "type": "string",
            "description": "The name of the new merged field definition. Required. Must be unique within the repository\nunless autoRename is set."
          },
          "onConflict": {
            "description": "How to resolve per-entry value conflicts across the source fields. Defaults to Fail\n(abort on conflict — nothing is discarded). UseFirstField discards conflicting values\nand therefore requires allowDataLoss = true.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/FieldMergeConflictStrategy"
              }
            ]
          },
          "removeFromTemplates": {
            "type": "boolean",
            "description": "When true, removes the source fields from every template that contains them as part of the\nmerge. Defaults to false. This is a destructive side effect on template definitions; opt in explicitly."
          },
          "autoRename": {
            "type": "boolean",
            "description": "When true, requests that the repository auto-select a non-conflicting name if\nnewFieldName collides with an existing field. Defaults to false. Whether the\nrepository actually rewrites the name on collision is repository-version-dependent;\ncallers should not rely on it. The safe pattern is to ensure newFieldName is unique\nbefore calling, and to treat an \"already exists\" error response as a genuine collision."
          },
          "allowDataLoss": {
            "type": "boolean",
            "description": "Acknowledges that the requested merge will lose data and authorizes it to proceed. Required\n(must be true) only when the merge is lossy — i.e. onConflict = UseFirstField, which\ndiscards conflicting values. When the merge is lossless (Fail or MakeMultivalue)\nthis flag is ignored. A lossy merge without this flag returns 400 (data_loss_expected)."
          }
        }
      },
      "FieldMergeConflictStrategy": {
        "type": "string",
        "description": "Strategy for resolving per-entry value conflicts when merging multiple field definitions\ninto one. Applies when entries carry differing values across the source fields.",
        "x-enum-names": [
          "Fail",
          "MakeMultivalue",
          "UseFirstField"
        ],
        "x-enum-varnames": [
          "Fail",
          "MakeMultivalue",
          "UseFirstField"
        ],
        "x-enumNames": [
          "Fail",
          "MakeMultivalue",
          "UseFirstField"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null
        ],
        "enum": [
          "Fail",
          "MakeMultivalue",
          "UseFirstField"
        ]
      },
      "ChangeFieldTypeRequest": {
        "type": "object",
        "description": "Request body for changing the data type of an existing field definition.",
        "additionalProperties": false,
        "required": [
          "newFieldType"
        ],
        "properties": {
          "newFieldType": {
            "description": "The target field type. Required. Changing type can reset type-specific configuration\n(length, constraint, format), clear list items when leaving the List type, and clear a\ndefault value that cannot be reinterpreted in the new type.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/FieldType"
              }
            ]
          },
          "allowDataLoss": {
            "type": "boolean",
            "description": "Acknowledges that the requested conversion will lose data and authorizes it to proceed.\nRequired (must be true) when any of the following hold: leaving the List type\n(clears list items); the field has a non-empty constraint, a defaultValue,\nor any assigned entries, AND the conversion is not one of the explicit safe widenings\n(Date → DateTime, ShortInteger → LongInteger, ShortInteger → Number,\nLongInteger → Number). A lossy conversion without this flag returns 400\n(data_loss_expected). Lossless conversions ignore this flag."
          }
        }
      },
      "FieldAccessControlList": {
        "type": "object",
        "description": "The access control list (ACL) of a template field definition: its access control entries.\nField ACLs have no parent inheritance, so there is no inherit-parents flag.",
        "additionalProperties": false,
        "properties": {
          "entries": {
            "type": "array",
            "description": "The access control entries that make up the ACL.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/FieldAccessControlEntry"
            }
          }
        }
      },
      "FieldAccessControlEntry": {
        "type": "object",
        "description": "A single access control entry (ACE) on a template field definition: one trustee, whether\nits rights are allowed or denied, and the rights themselves. A trustee that has both allowed\nand denied rights is represented as two ACEs. Unlike entry ACEs, field ACEs have no scope and\nare never inherited.",
        "additionalProperties": false,
        "properties": {
          "trustee": {
            "description": "The trustee this ACE applies to. On input, identify the trustee by either\ntrustee.sid or trustee.accountName (the SID takes precedence when both are given).",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/TrusteeIdentity"
              }
            ]
          },
          "accessControlType": {
            "description": "Whether the ACE grants (Allow) or denies (Deny) the listed rights. Required on\ninput — a missing value is rejected (it must not silently default to Allow).",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/AccessControlType"
              }
            ]
          },
          "rights": {
            "type": "array",
            "description": "The rights granted or denied by this ACE.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/FieldRight"
            }
          },
          "isInherited": {
            "type": "boolean",
            "description": "True when this ACE is inherited. Always false for field ACEs (field definitions have no\nACL inheritance); returned for contract symmetry and ignored on input."
          },
          "inheritedFrom": {
            "type": "string",
            "description": "When inherited, a description of where the ACE was inherited from. Output only; null for\nfield ACEs.",
            "nullable": true
          }
        }
      },
      "TrusteeIdentity": {
        "type": "object",
        "description": "Identifies a security trustee (a user or a group) referenced by an access control\nentry, an effective-rights query, or a trustee-lookup result.",
        "additionalProperties": false,
        "properties": {
          "sid": {
            "type": "string",
            "description": "The trustee's security identifier (an SDDL string such as S-1-5-21-...). This is\nthe canonical, stable id for a trustee. On input it is preferred and takes precedence over\nAccountName; always populated on output.",
            "nullable": true
          },
          "accountName": {
            "type": "string",
            "description": "The trustee's account name. On input it may be supplied instead of Sid to\naddress the trustee by name (resolved to a SID server-side); the SID wins when both are\ngiven. Always populated on output.",
            "nullable": true
          },
          "trusteeType": {
            "type": "string",
            "description": "The trustee type: one of LaserficheUser, LaserficheGroup,\nWindowsAccount, LdapAccount, LfdsAccount.",
            "nullable": true
          },
          "isUser": {
            "type": "boolean",
            "description": "True when the trustee is an individual user; false when it is a group."
          },
          "displayName": {
            "type": "string",
            "description": "A human-readable display name. Populated by trustee-lookup results; omitted in\naccess-control-entry contexts.",
            "nullable": true
          },
          "isDisabled": {
            "type": "boolean",
            "description": "True when the trustee account is disabled. Populated by trustee-lookup results."
          }
        }
      },
      "AccessControlType": {
        "type": "string",
        "description": "Whether an access control entry (ACE) grants or denies its rights. Serialized by name.",
        "x-enum-names": [
          "Allow",
          "Deny"
        ],
        "x-enum-varnames": [
          "Allow",
          "Deny"
        ],
        "x-enumNames": [
          "Allow",
          "Deny"
        ],
        "x-enum-descriptions": [
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null
        ],
        "enum": [
          "Allow",
          "Deny"
        ]
      },
      "FieldRight": {
        "type": "string",
        "description": "An individual access right that can be granted to or denied a trustee on a template field\ndefinition. Serialized by name; emitted as a string enum in the OpenAPI schema so clients\ncan reference it directly.",
        "x-enum-names": [
          "ReadValue",
          "SetValue",
          "SetValueOnce",
          "ModifyDefinition",
          "Delete",
          "ReadPermissions",
          "ChangePermissions",
          "TakeOwnership"
        ],
        "x-enum-varnames": [
          "ReadValue",
          "SetValue",
          "SetValueOnce",
          "ModifyDefinition",
          "Delete",
          "ReadPermissions",
          "ChangePermissions",
          "TakeOwnership"
        ],
        "x-enumNames": [
          "ReadValue",
          "SetValue",
          "SetValueOnce",
          "ModifyDefinition",
          "Delete",
          "ReadPermissions",
          "ChangePermissions",
          "TakeOwnership"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "enum": [
          "ReadValue",
          "SetValue",
          "SetValueOnce",
          "ModifyDefinition",
          "Delete",
          "ReadPermissions",
          "ChangePermissions",
          "TakeOwnership"
        ]
      },
      "SetFieldAccessControlRequest": {
        "type": "object",
        "description": "Request body for replacing a template field definition's access control list. The supplied\nentries fully replace the field's existing explicit ACL. Inherited entries are not accepted.",
        "additionalProperties": false,
        "properties": {
          "entries": {
            "type": "array",
            "description": "The access control entries to set. Required. Replaces the field's entire explicit\nACL; an empty array clears it.\nDeliberately left without a default: this is a full replace, so an omitted or null\nmember has to stay distinguishable from an explicitly sent empty array.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/FieldAccessControlEntry"
            }
          }
        }
      },
      "FieldRights": {
        "type": "object",
        "description": "A trustee's rights to a template field definition. Depending on the aclOnly option on the\nrequest, these are either the effective rights (the net result after group membership, allow/deny\nresolution, and the repository's privilege overlay) or the rights granted by the field's access\ncontrol list alone.",
        "additionalProperties": false,
        "properties": {
          "rights": {
            "type": "array",
            "description": "The rights granted to the trustee on the field.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/FieldRight"
            }
          },
          "isReadOnly": {
            "type": "boolean",
            "description": "True when the session is read-only, so no write operations are possible regardless of\nthe granted rights."
          }
        }
      },
      "LinkDefinitionCollectionResponse": {
        "type": "object",
        "description": "Response containing a collection of LinkDefinition.",
        "additionalProperties": false,
        "properties": {
          "@odata.nextLink": {
            "type": "string",
            "description": "A URL to retrieve the next page of the requested collection.",
            "nullable": true
          },
          "@odata.count": {
            "type": "integer",
            "description": "The total count of items within a collection.",
            "format": "int32",
            "nullable": true
          },
          "value": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/LinkDefinition"
            }
          }
        }
      },
      "LinkDefinition": {
        "type": "object",
        "description": "Represents an entry link definition.",
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "integer",
            "description": "The ID of the link definition.",
            "format": "int32"
          },
          "sourceLabel": {
            "type": "string",
            "description": "The label for the source entry in the link definition.",
            "nullable": true
          },
          "targetLabel": {
            "type": "string",
            "description": "The label for the target entry in the link definition.",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "The description of the link definition.",
            "nullable": true
          }
        }
      },
      "CreateMultipartUploadUrlsResponse": {
        "type": "object",
        "description": "Response for CreateMultipartUploadUrls.",
        "additionalProperties": false,
        "properties": {
          "uploadId": {
            "type": "string",
            "description": "A unique identifier for the whole upload process.",
            "nullable": true
          },
          "urls": {
            "type": "array",
            "description": "A list of URLs to which the file chunk should be written.",
            "nullable": true,
            "items": {
              "type": "string"
            }
          }
        }
      },
      "CreateMultipartUploadUrlsRequest": {
        "type": "object",
        "description": "Request body for creating multipart upload urls.",
        "additionalProperties": false,
        "required": [
          "numberOfParts",
          "fileName",
          "mimeType"
        ],
        "properties": {
          "uploadId": {
            "type": "string",
            "description": "A unique identifier for the whole upload process.",
            "default": "",
            "nullable": true
          },
          "startingPartNumber": {
            "type": "integer",
            "description": "Determines the starting position of the requested parts among all the parts associated with this upload. The default value is 1.",
            "format": "int32",
            "default": 1
          },
          "numberOfParts": {
            "type": "integer",
            "description": "The value must be in the range [1, 100], meaning that in each call to the CreateMultipartUploadUrls api, a maximum of 100 Upload URLs can be requested. Further, each file chunk written to an Upload URL should be at least 5 MB. There is no minimum size limit for the last chunk.",
            "format": "int32"
          },
          "fileName": {
            "type": "string",
            "description": "The name of the file to be uploaded. The file extension in the name will be used as the\nextension of the imported entry. Required when startingPartNumber is 1 (first batch);\nignored on subsequent batches.",
            "minLength": 1
          },
          "mimeType": {
            "type": "string",
            "description": "The mime-type of the file to be uploaded. Required when startingPartNumber is 1\n(first batch); ignored on subsequent batches.",
            "minLength": 1
          }
        }
      },
      "StartTaskResponse": {
        "type": "object",
        "description": "Response containing a long operation task id.",
        "additionalProperties": false,
        "properties": {
          "taskId": {
            "type": "string",
            "description": "A task ID that can be used to check on the status of the task.",
            "nullable": true
          }
        }
      },
      "StartImportUploadedPartsRequest": {
        "type": "object",
        "description": "Request body for starting an asynchronous import entry task.",
        "additionalProperties": false,
        "required": [
          "uploadId",
          "partETags",
          "name"
        ],
        "properties": {
          "uploadId": {
            "type": "string",
            "description": "The UploadId received when calling the CreateMultipartUploadUrls API to request upload URLs.",
            "minLength": 1
          },
          "partETags": {
            "type": "array",
            "description": "The array of the ETag values received when writing the file chunks into the upload URLs. The ETag values should be in the order of their associated upload URLs, i.e. {eTag received when writing to the first URL}, {eTag received when writing to the second URL}, ...",
            "items": {
              "type": "string"
            }
          },
          "name": {
            "type": "string",
            "description": "The name for the imported entry.",
            "minLength": 1
          },
          "autoRename": {
            "type": "boolean",
            "description": "Indicates if the entry should be automatically renamed if an entry already exists with the given name in the folder. The default value is false.",
            "default": false
          },
          "pdfOptions": {
            "description": "Server-side processing options applied to the imported file. See ImportEntryRequestPdfOptions for the full contract.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportEntryRequestPdfOptions"
              }
            ]
          },
          "importAsElectronicDocument": {
            "type": "boolean",
            "description": "Whether the file is imported as the electronic document (true) or as image pages (false). Default: false.\nThis flag is only effective when the file extension is one of: txt, tif, tiff, bmp, pcx, jpg, jpeg, gif, png.\nFor any other file type (PDF, Word, Excel, etc.), the file is always imported as the electronic document regardless of this flag.",
            "default": false
          },
          "metadata": {
            "description": "The metadata that will be assigned to the entry.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportEntryRequestMetadata"
              }
            ]
          },
          "volumeName": {
            "type": "string",
            "description": "The name of the volume to use. Will use the default parent entry volume if not specified. This is ignored in Laserfiche Cloud.",
            "nullable": true
          },
          "folderPath": {
            "type": "string",
            "description": "An optional folder path, relative to the entry given in the route, that the document is imported into.\nBoth `/` and `\\` are accepted as separators. When any folder in this path does not exist, set the\n`autoCreateFolderPath` query parameter to true to create the missing folders; otherwise the request\nfails with 404. When omitted, the document is imported directly into the route entry (unchanged behavior).",
            "nullable": true
          }
        }
      },
      "ImportEntryRequestPdfOptions": {
        "type": "object",
        "description": "Server-side processing options for the imported file. Despite the type name, these fields apply to any\nsupported electronic document as well as to files imported as image pages.",
        "additionalProperties": false,
        "properties": {
          "generateText": {
            "type": "boolean",
            "description": "Generate searchable text for the imported file. For electronic documents, text is extracted from\nthe document (or OCR'd when the source is image-based). For files imported as image pages\n(image file type with importAsElectronicDocument=false), the pages are OCR'd. Default: false.\nDoes not affect pages added via `imageFiles` — use `generateImagePagesText` for those.",
            "default": false
          },
          "generatePages": {
            "type": "boolean",
            "description": "Render server-side image pages from the electronic document. Applicable when the file is imported\nas an electronic document. Default: false.",
            "default": false
          },
          "generatePagesImageType": {
            "description": "The image type used when generating image pages. The default value is StandardColor. This option is only applicable when GeneratePages is true.",
            "default": "StandardColor",
            "oneOf": [
              {
                "$ref": "#/components/schemas/GeneratePagesImageType"
              }
            ]
          },
          "keepPdfAfterImport": {
            "type": "boolean",
            "description": "When GeneratePages is true, retain the original file as the electronic document.\nWhen false, only the generated image pages remain. Default: true. Ignored when GeneratePages=false.",
            "default": true
          }
        }
      },
      "GeneratePagesImageType": {
        "type": "string",
        "description": "Enumeration for the image types when generating pages.",
        "x-enum-names": [
          "BlackAndWhite",
          "StandardColor",
          "HighQualityColor"
        ],
        "x-enum-varnames": [
          "BlackAndWhite",
          "StandardColor",
          "HighQualityColor"
        ],
        "x-enumNames": [
          "BlackAndWhite",
          "StandardColor",
          "HighQualityColor"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null
        ],
        "enum": [
          "BlackAndWhite",
          "StandardColor",
          "HighQualityColor"
        ]
      },
      "ImportEntryRequestMetadata": {
        "type": "object",
        "description": "Represents the metadata that will be assigned to the imported entry.",
        "additionalProperties": false,
        "properties": {
          "templateName": {
            "type": "string",
            "description": "The name of the template assigned to the entry.",
            "nullable": true
          },
          "fields": {
            "type": "array",
            "description": "The fields that will be assigned to the entry.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/FieldToUpdate"
            }
          },
          "tags": {
            "type": "array",
            "description": "The tags that will be assigned to the entry.",
            "nullable": true,
            "items": {
              "type": "string"
            }
          },
          "links": {
            "type": "array",
            "description": "The links that will be assigned to the entry.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/LinkToUpdate"
            }
          }
        }
      },
      "FieldToUpdate": {
        "type": "object",
        "description": "Represents a field that will be assigned to the entry.",
        "additionalProperties": false,
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the field that will be assigned to the entry.",
            "minLength": 1
          },
          "values": {
            "type": "array",
            "description": "The field values that will be assigned to the field.",
            "nullable": true,
            "items": {
              "type": "string"
            }
          }
        }
      },
      "LinkToUpdate": {
        "type": "object",
        "description": "Represents a link that will be assigned to the entry.",
        "additionalProperties": false,
        "required": [
          "linkDefinitionId",
          "otherEntryId"
        ],
        "properties": {
          "linkDefinitionId": {
            "type": "integer",
            "description": "The id of the link definition to be assigned to the entry.",
            "format": "int32"
          },
          "otherEntryId": {
            "type": "integer",
            "description": "The id of the other entry to be linked to the entry.",
            "format": "int32"
          },
          "isSource": {
            "type": "boolean",
            "description": "Whether the entry is the source for the link. The default value is true.",
            "default": true
          },
          "customProperties": {
            "type": "object",
            "description": "Custom properties (key, value pairs) to be added to the link.",
            "nullable": true,
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "StartExportEntryRequest": {
        "type": "object",
        "description": "Request body for starting an asynchronous export entry task.",
        "additionalProperties": false,
        "required": [
          "part"
        ],
        "properties": {
          "auditReasonId": {
            "type": "integer",
            "description": "The reason id for this audit event.",
            "format": "int32"
          },
          "auditReasonComment": {
            "type": "string",
            "description": "The comment for this audit event.",
            "default": "",
            "nullable": true
          },
          "part": {
            "description": "Specifies the part of the document to export. Options include: Image, Text, Edoc,\nAlternateEdoc. AlternateEdoc also requires alternateEdocName.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportEntryRequestPart"
              }
            ]
          },
          "alternateEdocName": {
            "type": "string",
            "description": "The name of the alternate electronic document to export. Required when part=AlternateEdoc,\nand rejected for every other part. 1 to 15 characters, each an ASCII letter, an ASCII\ndigit, or one of `!@#$%^&()-+={}[]_~`. Matched exactly, so a name differing only in\nletter case is not found. Names reserved for internal use are also reported as not found.",
            "nullable": true
          },
          "imageOptions": {
            "description": "The options applied when exporting as Image.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportEntryRequestImageOptions"
              }
            ]
          },
          "textOptions": {
            "description": "The options applied when exporting as Text.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportEntryRequestTextOptions"
              }
            ]
          }
        }
      },
      "ExportEntryRequestPart": {
        "type": "string",
        "description": "Enumeration of the entry parts to export.",
        "x-enum-names": [
          "Image",
          "Text",
          "Edoc",
          "AlternateEdoc"
        ],
        "x-enum-varnames": [
          "Image",
          "Text",
          "Edoc",
          "AlternateEdoc"
        ],
        "x-enumNames": [
          "Image",
          "Text",
          "Edoc",
          "AlternateEdoc"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null,
          null
        ],
        "enum": [
          "Image",
          "Text",
          "Edoc",
          "AlternateEdoc"
        ]
      },
      "ExportEntryRequestImageOptions": {
        "type": "object",
        "description": "Represents the options when exporting the image part of an entry.",
        "additionalProperties": false,
        "properties": {
          "format": {
            "description": "The image format to export as. Options include: MultiPageTIFF, SinglePageTIFF, PNG, PDF and JPEG. The default value is MultiPageTIFF. MultiPageTIFF format is a single multi-page TIFF file. SinglePageTIFF format is multiple single-page TIFF files (in a single zip file).",
            "default": "MultiPageTIFF",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportEntryRequestImageFormat"
              }
            ]
          },
          "jPEGCompressionLevel": {
            "type": "integer",
            "description": "The quality level for JPEG compression when exporting images. The value must be between 0 and 100 (inclusive). The default value is 70.",
            "format": "int32",
            "default": 70
          },
          "includeAnnotations": {
            "type": "boolean",
            "description": "Indicates if the annotations need to be included. The default value is true.",
            "default": true
          },
          "convertPdfAnnotations": {
            "type": "boolean",
            "description": "Indicates if the annotations on the image need to be converted to PDF annotations when exporting to PDF format. The default value is true. This option is only applicable when exporting to PDF format and IncludeAnnotations is true.",
            "default": true
          },
          "pagePrefix": {
            "type": "string",
            "description": "The page prefix of the individual files, when exporting to multi-file format (e.g.zip). The value must have a length of at most 10 characters and only valid characters that can be included in file names are allowed. The default value is \", Page \".",
            "default": ", Page ",
            "nullable": true
          },
          "includeRedactions": {
            "type": "boolean",
            "description": "Indicates if redactions are included. The default value is true.",
            "default": true
          },
          "watermark": {
            "description": "The watermark element added to each image. No watermark will be added by default.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportEntryRequestWatermark"
              }
            ]
          }
        }
      },
      "ExportEntryRequestImageFormat": {
        "type": "string",
        "description": "Enumeration of formats when exporting the image part of an entry.",
        "x-enum-names": [
          "MultiPageTIFF",
          "SinglePageTIFF",
          "PNG",
          "PDF",
          "JPEG"
        ],
        "x-enum-varnames": [
          "MultiPageTIFF",
          "SinglePageTIFF",
          "PNG",
          "PDF",
          "JPEG"
        ],
        "x-enumNames": [
          "MultiPageTIFF",
          "SinglePageTIFF",
          "PNG",
          "PDF",
          "JPEG"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null,
          null,
          null
        ],
        "enum": [
          "MultiPageTIFF",
          "SinglePageTIFF",
          "PNG",
          "PDF",
          "JPEG"
        ]
      },
      "ExportEntryRequestWatermark": {
        "type": "object",
        "description": "Represents the watermark added to the images when exporting an entry.",
        "additionalProperties": false,
        "properties": {
          "text": {
            "type": "string",
            "description": "The text of the watermark. The value must be a string with a length of at most 100 characters and must not be all whitespace characters.",
            "default": "",
            "nullable": true
          },
          "position": {
            "description": "The position of the watermark. The default value is DeadCenter.",
            "default": "DeadCenter",
            "oneOf": [
              {
                "$ref": "#/components/schemas/WatermarkPosition"
              }
            ]
          },
          "rotationAngle": {
            "type": "integer",
            "description": "The rotation angle of the watermark. The value must be between 0 and 360 (inclusive). The default value is 0.",
            "format": "int32",
            "default": 0
          },
          "pageSpanPercentage": {
            "type": "integer",
            "description": "The percentage of the page that the watermark spans on. The value must be between 1 and 100 (inclusive). The default value is 50.",
            "format": "int32",
            "default": 50
          }
        }
      },
      "WatermarkPosition": {
        "type": "string",
        "description": "An enumeration of possible positions on a page for watermarks.",
        "x-enum-names": [
          "TopLeft",
          "TopCenter",
          "TopRight",
          "MiddleLeft",
          "DeadCenter",
          "MiddleRight",
          "BottomLeft",
          "BottomCenter",
          "BottomRight"
        ],
        "x-enum-varnames": [
          "TopLeft",
          "TopCenter",
          "TopRight",
          "MiddleLeft",
          "DeadCenter",
          "MiddleRight",
          "BottomLeft",
          "BottomCenter",
          "BottomRight"
        ],
        "x-enumNames": [
          "TopLeft",
          "TopCenter",
          "TopRight",
          "MiddleLeft",
          "DeadCenter",
          "MiddleRight",
          "BottomLeft",
          "BottomCenter",
          "BottomRight"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "enum": [
          "TopLeft",
          "TopCenter",
          "TopRight",
          "MiddleLeft",
          "DeadCenter",
          "MiddleRight",
          "BottomLeft",
          "BottomCenter",
          "BottomRight"
        ]
      },
      "ExportEntryRequestTextOptions": {
        "type": "object",
        "description": "Represents the options when exporting the text part of an entry.",
        "additionalProperties": false,
        "properties": {
          "includeRedactions": {
            "type": "boolean",
            "description": "Indicates if redactions are included. The default value is true.",
            "default": true
          },
          "redactionCharacter": {
            "type": "string",
            "description": "The character that replaces the original character in a redacted text. The value must be a string of length 1 and must not be a whitespace character. The default value is 'X'.",
            "default": "X",
            "nullable": true
          }
        }
      },
      "StartCopyEntryRequest": {
        "type": "object",
        "description": "Request body for starting an asynchronous copy entry task.",
        "additionalProperties": false,
        "required": [
          "name",
          "sourceId"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the entry.",
            "minLength": 1
          },
          "autoRename": {
            "type": "boolean",
            "description": "Indicates if the entry should be automatically renamed if an entry already exists with the given name in the folder. The default value is false.",
            "default": false
          },
          "sourceId": {
            "type": "integer",
            "description": "The source entry Id to copy.",
            "format": "int32"
          },
          "volumeName": {
            "type": "string",
            "description": "The name of the volume to use. Will use the default parent entry volume if not specified. This is ignored in Laserfiche Cloud.",
            "nullable": true
          }
        }
      },
      "StartDeleteEntryRequest": {
        "type": "object",
        "description": "Request body for starting an asynchronous delete entry task.",
        "additionalProperties": false,
        "properties": {
          "auditReasonId": {
            "type": "integer",
            "description": "The reason id for this audit event.",
            "format": "int32",
            "nullable": true
          },
          "auditReasonComment": {
            "type": "string",
            "description": "The comment for this audit event.",
            "nullable": true
          }
        }
      },
      "Entry": {
        "type": "object",
        "description": "Base type for all types which represent entry objects in a Laserfiche repository.",
        "x-abstract": true,
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "integer",
            "description": "The ID of the entry.",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "The name of the entry.",
            "nullable": true
          },
          "parentId": {
            "type": "integer",
            "description": "The ID of the parent entry.",
            "format": "int32",
            "nullable": true
          },
          "fullPath": {
            "type": "string",
            "description": "The full path in the Laserfiche repository to the entry.",
            "nullable": true
          },
          "folderPath": {
            "type": "string",
            "description": "The path in the Laserfiche repository to the parent folder.",
            "nullable": true
          },
          "creator": {
            "type": "string",
            "description": "The name of the user that created this entry.",
            "nullable": true
          },
          "creationTime": {
            "type": "string",
            "description": "The creation time of the entry.",
            "format": "date-time"
          },
          "lastModifiedTime": {
            "type": "string",
            "description": "The last modification time of the entry.",
            "format": "date-time"
          },
          "entryType": {
            "description": "The type of the entry.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/EntryType"
              }
            ]
          },
          "isContainer": {
            "type": "boolean",
            "description": "A boolean indicating if this entry is a container object; it can have other entries as children."
          },
          "isLeaf": {
            "type": "boolean",
            "description": "A boolean indicating if this entry is a leaf object; it cannot have other entries as children."
          },
          "templateName": {
            "type": "string",
            "description": "The name of the template assigned to this entry.",
            "nullable": true
          },
          "templateId": {
            "type": "integer",
            "description": "The id of the template assigned to this entry.",
            "format": "int32"
          },
          "templateFieldNames": {
            "type": "array",
            "description": "The names of the fields assigned to the template assigned to this entry.",
            "nullable": true,
            "items": {
              "type": "string"
            }
          },
          "volumeName": {
            "type": "string",
            "description": "The name of the volume that this entry is associated with.",
            "nullable": true
          },
          "rowNumber": {
            "type": "integer",
            "description": "Row number assigned to this entry in the listing.",
            "format": "int32",
            "nullable": true
          },
          "fields": {
            "type": "array",
            "description": "The fields assigned to this entry.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/Field"
            }
          }
        }
      },
      "EntryType": {
        "type": "string",
        "description": "Enumeration of entry types.",
        "x-enum-names": [
          "Folder",
          "RecordSeries",
          "Document",
          "Shortcut"
        ],
        "x-enum-varnames": [
          "Folder",
          "RecordSeries",
          "Document",
          "Shortcut"
        ],
        "x-enumNames": [
          "Folder",
          "RecordSeries",
          "Document",
          "Shortcut"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null,
          null
        ],
        "enum": [
          "Folder",
          "RecordSeries",
          "Document",
          "Shortcut"
        ]
      },
      "Field": {
        "type": "object",
        "description": "Represents a field set on an entry.",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the field.",
            "nullable": true
          },
          "fieldType": {
            "description": "The type of the field. The possible field types are listed below.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/FieldType"
              }
            ]
          },
          "id": {
            "type": "integer",
            "description": "The ID of the field.",
            "format": "int32"
          },
          "isMultiValue": {
            "type": "boolean",
            "description": "A boolean indicating if the represented field supports multiple values."
          },
          "isRequired": {
            "type": "boolean",
            "description": "A boolean indicating if the represented field must have a value set on entries assigned to a template that the field is a member of."
          },
          "hasMoreValues": {
            "type": "boolean",
            "description": "A boolean indicating if there are more field values."
          },
          "groupId": {
            "type": "integer",
            "description": "The group id of the multi value field group. If the field is not a part of a multi value field group, then there is no group id.",
            "format": "int32",
            "nullable": true
          },
          "values": {
            "type": "array",
            "description": "The values assigned to the field.",
            "nullable": true,
            "items": {
              "type": "string"
            }
          }
        }
      },
      "RecordSeries": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Entry"
          },
          {
            "type": "object",
            "description": "Represents a Laserfiche record series.",
            "additionalProperties": false
          }
        ]
      },
      "Document": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Entry"
          },
          {
            "type": "object",
            "description": "Represents a document in a Laserfiche repository.",
            "additionalProperties": false,
            "properties": {
              "electronicDocumentSize": {
                "type": "integer",
                "description": "The size of the electronic document attached to the represented document, if there is one, in bytes.",
                "format": "int64"
              },
              "totalDocumentSize": {
                "type": "integer",
                "description": "The total size in bytes of the document's stored components — electronic document plus\nimage/text/locations/thumbnail page data and attachments — as opposed to\nElectronicDocumentSize, which is just the source file. Present only when\nrequested via the includeTotalSize query parameter; otherwise null. Opt-in because\nit aggregates across all of the document's pages.",
                "format": "int64",
                "nullable": true
              },
              "extension": {
                "type": "string",
                "description": "The extension for the document.",
                "nullable": true
              },
              "isElectronicDocument": {
                "type": "boolean",
                "description": "A boolean indicating if there is an electronic document attached to the represented document."
              },
              "hasAlternateEdocs": {
                "type": "boolean",
                "description": "Whether the document has any alternate electronic documents — named binary streams\nstored alongside the primary electronic document, such as an audio recording, a source\nscan, or sidecar data. Use GET .../Document/AlternateEdocs to enumerate them.",
                "nullable": true
              },
              "isRecord": {
                "type": "boolean",
                "description": "A boolean indicating if the represented document is a record."
              },
              "mimeType": {
                "type": "string",
                "description": "The MIME type of the electronic document.",
                "nullable": true
              },
              "pageCount": {
                "type": "integer",
                "description": "The page count of the represented document.",
                "format": "int32"
              },
              "isCheckedOut": {
                "type": "boolean",
                "description": "A boolean indicating if the represented document is checked out."
              },
              "isUnderVersionControl": {
                "type": "boolean",
                "description": "A boolean indicating if the represented document is under version control."
              },
              "isLocked": {
                "type": "boolean",
                "description": "A boolean indicating if the represented document has a persistent lock."
              },
              "lockedBy": {
                "type": "string",
                "description": "Display name (account name, e.g. \"DOMAIN\\user\") of the persistent lock holder. Null if the document is not locked.\nAccount renames change this value over time — do not use for stable identity comparisons.\nTo test whether the current authenticated user holds the lock, use IsLockedByAnotherUser; it compares stable principal identifiers internally.",
                "nullable": true
              },
              "isLockedByAnotherUser": {
                "type": "boolean",
                "description": "A boolean indicating if the document is locked by a user other than the authenticated user.\nFalse if the document is not locked or is locked by the authenticated user.\nComputed from a stable principal identifier comparison, not from LockedBy.\nOnly populated on single-entry GET, not in listing results."
              },
              "currentVersion": {
                "type": "integer",
                "description": "The version number of the document. 0 if the document is not under version control.",
                "format": "int32"
              },
              "checkedOutBy": {
                "type": "string",
                "description": "Display name (account name, e.g. \"DOMAIN\\user\") of the user who checked out the document. Null if the document is not checked out.\nAccount renames change this value over time — do not use for stable identity comparisons.\nTo test whether the current authenticated user holds the checkout, use IsCheckedOutByAnotherUser; it compares stable principal identifiers internally.",
                "nullable": true
              },
              "isCheckedOutByAnotherUser": {
                "type": "boolean",
                "description": "A boolean indicating if the document is checked out by a user other than the authenticated user.\nFalse if the document is not checked out or is checked out by the authenticated user.\nComputed from a stable principal identifier comparison, not from CheckedOutBy.\nOnly populated on single-entry GET, not in listing results."
              }
            }
          }
        ]
      },
      "Shortcut": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Entry"
          },
          {
            "type": "object",
            "description": "Represents an entry shortcut in a Laserfiche repository.",
            "additionalProperties": false,
            "properties": {
              "targetId": {
                "type": "integer",
                "description": "The entry ID of the shortcut target.",
                "format": "int32"
              },
              "extension": {
                "type": "string",
                "description": "The extension of the shortcut target.",
                "nullable": true
              },
              "targetType": {
                "description": "The entry type of the shortcut target.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/EntryType"
                  }
                ]
              }
            }
          }
        ]
      },
      "Folder": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Entry"
          },
          {
            "type": "object",
            "description": "Represents a folder (standard or record folder) in a Laserfiche repository.",
            "additionalProperties": false,
            "properties": {
              "isRecordFolder": {
                "type": "boolean",
                "description": "A boolean indicating if the folder that this instance represents is known to be a record folder."
              },
              "isUnderRecordSeries": {
                "type": "boolean",
                "description": "A boolean indicating if the folder that this instance represents is known to directly or indirectly under a record series in the repository."
              },
              "childInfo": {
                "description": "Opt-in introspection about the folder's immediate children (total + per-type counts).\nPresent only when includeChildInfo=true is supplied; otherwise null.",
                "nullable": true,
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/ChildInfo"
                  }
                ]
              }
            }
          }
        ]
      },
      "ChildInfo": {
        "type": "object",
        "description": "Opt-in introspection about a folder's immediate children — a total count plus a per-type\nbreakdown. Returned only when explicitly requested via includeChildInfo=true, because\nthe underlying repository calculation is comparatively expensive. Counts are for immediate\nchildren only (never recursive/whole-subtree). For folder tree UIs, prefer optimistic lazy\nexpansion (load children on demand) over requesting this for every node.",
        "additionalProperties": false,
        "properties": {
          "hasChildren": {
            "type": "boolean",
            "description": "Whether the folder has at least one immediate child of any type."
          },
          "childCount": {
            "type": "integer",
            "description": "Total number of immediate children across all entry types.",
            "format": "int64"
          },
          "folderCount": {
            "type": "integer",
            "description": "Number of immediate child folders.",
            "format": "int32"
          },
          "documentCount": {
            "type": "integer",
            "description": "Number of immediate child documents.",
            "format": "int32"
          },
          "shortcutCount": {
            "type": "integer",
            "description": "Number of immediate child shortcuts.",
            "format": "int32"
          }
        }
      },
      "ImportEntryRequest": {
        "type": "object",
        "description": "Request body for importing an entry.",
        "additionalProperties": false,
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The name for the imported entry."
          },
          "autoRename": {
            "type": "boolean",
            "description": "Indicates if the entry should be automatically renamed if an entry already exists with the given name in the folder. The default value is false.",
            "default": false
          },
          "pdfOptions": {
            "description": "The options applied when importing a PDF.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportEntryRequestPdfOptions"
              }
            ]
          },
          "importAsElectronicDocument": {
            "type": "boolean",
            "description": "Whether the file is imported as the electronic document (true) or as image pages (false). Default: false.\nThis flag is only effective when the file extension is one of: txt, tif, tiff, bmp, pcx, jpg, jpeg, gif, png.\nFor any other file type (PDF, Word, Excel, etc.), the file is always imported as the electronic document regardless of this flag.",
            "default": false
          },
          "metadata": {
            "description": "The metadata that will be assigned to the entry.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportEntryRequestMetadata"
              }
            ]
          },
          "volumeName": {
            "type": "string",
            "description": "The name of the volume to use. Will use the default parent entry volume if not specified. This is ignored in Laserfiche Cloud.",
            "nullable": true
          },
          "generateImagePagesText": {
            "type": "boolean",
            "description": "Whether to request text extraction from the document's electronic document part after the image pages in\n`imageFiles` are added. This does not OCR those image pages — image pages are OCR'd by the repository's\nautomatic OCR when the page image is written, regardless of this setting. Default: true.\nDoes not affect pages generated from `file` — use `pdfOptions.generateText` for those.",
            "default": true
          },
          "folderPath": {
            "type": "string",
            "description": "An optional folder path, relative to the entry given in the route, that the document is imported into.\nBoth `/` and `\\` are accepted as separators. When any folder in this path does not exist, set the\n`autoCreateFolderPath` query parameter to true to create the missing folders; otherwise the request\nfails with 404. When omitted, the document is imported directly into the route entry (unchanged behavior).",
            "nullable": true
          }
        }
      },
      "ExportEntryResponse": {
        "type": "object",
        "description": "Response containing a link to download the exported entry.",
        "additionalProperties": false,
        "properties": {
          "value": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "ExportEntryRequest": {
        "type": "object",
        "description": "Request body for exporting an entry.",
        "additionalProperties": false,
        "required": [
          "part"
        ],
        "properties": {
          "auditReasonId": {
            "type": "integer",
            "description": "The reason id for this audit event.",
            "format": "int32"
          },
          "auditReasonComment": {
            "type": "string",
            "description": "The comment for this audit event.",
            "default": "",
            "nullable": true
          },
          "part": {
            "description": "The part of the document to export. Options include: Image, Text, Edoc,\nAlternateEdoc. AlternateEdoc also requires alternateEdocName.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportEntryRequestPart"
              }
            ]
          },
          "alternateEdocName": {
            "type": "string",
            "description": "The name of the alternate electronic document to export. Required when part=AlternateEdoc,\nand rejected for every other part. 1 to 15 characters, each an ASCII letter, an ASCII\ndigit, or one of `!@#$%^&()-+={}[]_~`. Matched exactly, so a name differing only in\nletter case is not found. Names reserved for internal use are also reported as not found.",
            "nullable": true
          },
          "imageOptions": {
            "description": "The options applied when exporting as Image.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportEntryRequestImageOptions"
              }
            ]
          },
          "textOptions": {
            "description": "The options applied when exporting as Text.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportEntryRequestTextOptions"
              }
            ]
          }
        }
      },
      "GetEntryByPathResponse": {
        "type": "object",
        "description": "Response containing an entry or ancestor entry found by entry path.",
        "additionalProperties": false,
        "properties": {
          "entry": {
            "description": "The entry found by path. This property is set if entry is found.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/Entry"
              }
            ]
          },
          "ancestorEntry": {
            "description": "The closest entry ancestor. This property is set if entry is not found and fallbackToClosestAncestor is set to true.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/Entry"
              }
            ]
          }
        }
      },
      "UpdateEntryRequest": {
        "type": "object",
        "description": "Request body for updating an entry.",
        "additionalProperties": false,
        "properties": {
          "parentId": {
            "type": "integer",
            "description": "The ID of the parent entry that the entry will be moved to.",
            "format": "int32",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "The name that will be assigned to the entry.",
            "nullable": true
          },
          "autoRename": {
            "type": "boolean",
            "description": "Indicates if the entry should be automatically renamed if an entry already exists with the given name in the folder. The default value is false.",
            "default": false
          }
        }
      },
      "EntryCollectionResponse": {
        "type": "object",
        "description": "Response containing a collection of Entry.",
        "additionalProperties": false,
        "properties": {
          "@odata.nextLink": {
            "type": "string",
            "description": "A URL to retrieve the next page of the requested collection.",
            "nullable": true
          },
          "@odata.count": {
            "type": "integer",
            "description": "The total count of items within a collection.",
            "format": "int32",
            "nullable": true
          },
          "value": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/Entry"
            }
          }
        }
      },
      "FieldCollectionResponse": {
        "type": "object",
        "description": "Response containing a collection of Field.",
        "additionalProperties": false,
        "properties": {
          "@odata.nextLink": {
            "type": "string",
            "description": "A URL to retrieve the next page of the requested collection.",
            "nullable": true
          },
          "@odata.count": {
            "type": "integer",
            "description": "The total count of items within a collection.",
            "format": "int32",
            "nullable": true
          },
          "value": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/Field"
            }
          }
        }
      },
      "SetFieldsRequest": {
        "type": "object",
        "description": "Request body for assigning fields to an entry.",
        "additionalProperties": false,
        "properties": {
          "fields": {
            "type": "array",
            "description": "The fields that will be assigned to the entry. Required.\nDeliberately left without a default: this is an overwrite action, so an omitted\nor null member has to stay distinguishable from an explicitly sent empty list,\nwhich clears every field value.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/FieldToUpdate"
            }
          }
        }
      },
      "TagCollectionResponse": {
        "type": "object",
        "description": "Response containing a collection of Tag.",
        "additionalProperties": false,
        "properties": {
          "@odata.nextLink": {
            "type": "string",
            "description": "A URL to retrieve the next page of the requested collection.",
            "nullable": true
          },
          "@odata.count": {
            "type": "integer",
            "description": "The total count of items within a collection.",
            "format": "int32",
            "nullable": true
          },
          "value": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/Tag"
            }
          }
        }
      },
      "Tag": {
        "type": "object",
        "description": "Represents a tag set on an entry.",
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "integer",
            "description": "The ID of the tag definition.",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "The name of the tag definition.",
            "nullable": true
          },
          "displayName": {
            "type": "string",
            "description": "The localized name of the tag definition.",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "The description of the tag definition.",
            "nullable": true
          },
          "isSecure": {
            "type": "boolean",
            "description": "A boolean indicating whether or not the tag definition is classified as a security tag (true) or an informational tag (false)."
          },
          "watermark": {
            "description": "The watermark properties associated with the tag definition.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/TagDefinitionWatermark"
              }
            ]
          }
        }
      },
      "TagDefinitionWatermark": {
        "type": "object",
        "description": "Represents a watermark associated with a tag defintion.",
        "additionalProperties": false,
        "properties": {
          "text": {
            "type": "string",
            "description": "The watermark text associated with the tag defintion.",
            "nullable": true
          },
          "pageSpanPercentage": {
            "type": "integer",
            "description": "The percentage of the page that the watermark associated with the tag definition spans on.",
            "format": "int32"
          },
          "position": {
            "description": "The position of the watermark on the page.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/WatermarkPosition"
              }
            ]
          },
          "rotationAngle": {
            "type": "integer",
            "description": "The rotation angle, in degrees, of the watermark associated with the tag definition.",
            "format": "int32"
          },
          "isMandatory": {
            "type": "boolean",
            "description": "A boolean indicating whether or not the watermark associated with the tag is mandatory."
          },
          "opacity": {
            "type": "integer",
            "description": "The opacity of the watermark associated with the tag definition. Valid value ranges from 0 to 100, with -1 as the default values.",
            "format": "int32"
          }
        }
      },
      "SetTagsRequest": {
        "type": "object",
        "description": "Request body for assigning tags to an entry.",
        "additionalProperties": false,
        "properties": {
          "tags": {
            "type": "array",
            "description": "The tag names to assign to the entry. Required.\nDeliberately left without a default: this is an overwrite action, so an omitted\nor null member has to stay distinguishable from an explicitly sent empty list,\nwhich unassigns every tag.",
            "nullable": true,
            "items": {
              "type": "string"
            }
          }
        }
      },
      "LinkCollectionResponse": {
        "type": "object",
        "description": "Response containing a collection of Link.",
        "additionalProperties": false,
        "properties": {
          "@odata.nextLink": {
            "type": "string",
            "description": "A URL to retrieve the next page of the requested collection.",
            "nullable": true
          },
          "@odata.count": {
            "type": "integer",
            "description": "The total count of items within a collection.",
            "format": "int32",
            "nullable": true
          },
          "value": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/Link"
            }
          }
        }
      },
      "Link": {
        "type": "object",
        "description": "Represents a link between a source entry and a target entry.",
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "integer",
            "description": "The ID of the represented link.",
            "format": "int32"
          },
          "description": {
            "type": "string",
            "description": "The description for the represented link.",
            "nullable": true
          },
          "sourceId": {
            "type": "integer",
            "description": "The ID of the source entry of the represented link.",
            "format": "int32"
          },
          "sourceFullPath": {
            "type": "string",
            "description": "The full path to the source entry of the represented link.",
            "nullable": true
          },
          "sourceLabel": {
            "type": "string",
            "description": "The label for the source entry in the link definition.",
            "nullable": true
          },
          "sourceLink": {
            "type": "string",
            "description": "The navigation link to the source entry.",
            "nullable": true
          },
          "targetId": {
            "type": "integer",
            "description": "The ID of the target entry of the represented link.",
            "format": "int32"
          },
          "targetFullPath": {
            "type": "string",
            "description": "The full path to the target entry of the represented link.",
            "nullable": true
          },
          "targetLabel": {
            "type": "string",
            "description": "The label for the target entry in the link definition.",
            "nullable": true
          },
          "targetLink": {
            "type": "string",
            "description": "The navigation link to the target entry.",
            "nullable": true
          },
          "linkDefinitionId": {
            "type": "integer",
            "description": "The ID of the link definition.",
            "format": "int32"
          },
          "linkDefinitionDescription": {
            "type": "string",
            "description": "The description of the link definition.",
            "nullable": true
          },
          "customProperties": {
            "type": "object",
            "description": "The custom properties for the represented link.",
            "nullable": true,
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "SetLinksRequest": {
        "type": "object",
        "description": "Request body for assigning links to an entry.",
        "additionalProperties": false,
        "properties": {
          "links": {
            "type": "array",
            "description": "The links that will be assigned to the entry. Required.\nDeliberately left without a default: this is an overwrite action, so an omitted\nor null member has to stay distinguishable from an explicitly sent empty list,\nwhich removes every link.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/LinkToUpdate"
            }
          }
        }
      },
      "CopyEntryRequest": {
        "type": "object",
        "description": "Request body for copying an entry.",
        "additionalProperties": false,
        "required": [
          "name",
          "sourceId"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the entry.",
            "minLength": 1
          },
          "autoRename": {
            "type": "boolean",
            "description": "Indicates if the entry should be automatically renamed if an entry already exists with the given name in the folder. The default value is false.",
            "default": false
          },
          "sourceId": {
            "type": "integer",
            "description": "The source entry Id to copy.",
            "format": "int32"
          },
          "volumeName": {
            "type": "string",
            "description": "The name of the volume to use. Will use the default parent entry volume if not specified. This is ignored in Laserfiche Cloud.",
            "nullable": true
          }
        }
      },
      "CreateEntryRequest": {
        "type": "object",
        "description": "Request body for creating an entry.",
        "additionalProperties": false,
        "required": [
          "name",
          "entryType"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the entry.",
            "minLength": 1
          },
          "autoRename": {
            "type": "boolean",
            "description": "Indicates if the entry should be automatically renamed if an entry already exists with the given name in the folder. The default value is false.",
            "default": false
          },
          "entryType": {
            "description": "The type of the entry.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/CreateEntryRequestEntryType"
              }
            ]
          },
          "targetId": {
            "type": "integer",
            "description": "The TargetId is only needed for creating a shortcut. This will be the entry ID of the shortcut target.",
            "format": "int32"
          },
          "volumeName": {
            "type": "string",
            "description": "The name of the volume to use. Will use the default parent entry volume if not specified. This is ignored in Laserfiche Cloud.",
            "nullable": true
          },
          "folderPath": {
            "type": "string",
            "description": "An optional folder path, relative to the entry given in the route, that the new entry is created under.\nBoth `/` and `\\` are accepted as separators. When any folder in this path does not exist, set the\n`autoCreateFolderPath` query parameter to true to create the missing folders; otherwise the request\nfails with 404. When omitted, the entry is created directly under the route entry (unchanged behavior).",
            "nullable": true
          }
        }
      },
      "CreateEntryRequestEntryType": {
        "type": "string",
        "description": "Enumeration of entry types for CreateEntry.",
        "x-enum-names": [
          "Folder",
          "Shortcut"
        ],
        "x-enum-varnames": [
          "Folder",
          "Shortcut"
        ],
        "x-enumNames": [
          "Folder",
          "Shortcut"
        ],
        "x-enum-descriptions": [
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null
        ],
        "enum": [
          "Folder",
          "Shortcut"
        ]
      },
      "UpdateDocumentRequest": {
        "type": "object",
        "description": "Request body for updating a document's electronic document and/or metadata.",
        "additionalProperties": false,
        "properties": {
          "importAsElectronicDocument": {
            "type": "boolean",
            "description": "Whether a provided file is imported as the electronic document (true) or as image pages (false). Default: false.\nThis flag is only effective when `file` is provided and its extension is one of: txt, tif, tiff, bmp, pcx, jpg, jpeg, gif, png.\nFor any other file type (PDF, Word, Excel, etc.), the file is always imported as the electronic document regardless of this flag.",
            "default": false
          },
          "metadata": {
            "description": "The metadata that will be assigned to the entry. Metadata updates are additive — only the specified fields, tags, and links are touched. Existing values not mentioned in the request are preserved.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportEntryRequestMetadata"
              }
            ]
          },
          "pdfOptions": {
            "description": "The options applied when importing a PDF.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportEntryRequestPdfOptions"
              }
            ]
          },
          "generateImagePagesText": {
            "type": "boolean",
            "description": "Whether to request text extraction from the document's electronic document part after the image pages in\n`imageFiles` are added. This does not OCR those image pages — image pages are OCR'd by the repository's\nautomatic OCR when the page image is written, regardless of this setting. Default: true.\nDoes not affect pages generated from `file` — use `pdfOptions.generateText` for those.",
            "default": true
          }
        }
      },
      "UpdateDocumentUploadedPartsRequest": {
        "type": "object",
        "description": "Request body for updating a document's electronic document and/or metadata from previously uploaded parts.",
        "additionalProperties": false,
        "required": [
          "uploadId",
          "partETags"
        ],
        "properties": {
          "uploadId": {
            "type": "string",
            "description": "The UploadId received when calling the CreateMultipartUploadUrls API to request upload URLs.",
            "minLength": 1
          },
          "partETags": {
            "type": "array",
            "description": "The array of the ETag values received when writing the file chunks into the upload URLs. The ETag values should be in the order of their associated upload URLs.",
            "items": {
              "type": "string"
            }
          },
          "importAsElectronicDocument": {
            "type": "boolean",
            "description": "Whether the assembled file is imported as the electronic document (true) or as image pages (false). Default: false.\nThis flag is only effective when the file extension is one of: txt, tif, tiff, bmp, pcx, jpg, jpeg, gif, png.\nFor any other file type (PDF, Word, Excel, etc.), the file is always imported as the electronic document regardless of this flag.",
            "default": false
          },
          "metadata": {
            "description": "The metadata that will be assigned to the entry. Metadata updates are additive — only the specified fields, tags, and links are touched. Existing values not mentioned in the request are preserved.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportEntryRequestMetadata"
              }
            ]
          },
          "pdfOptions": {
            "description": "Server-side processing options applied to the assembled file. See ImportEntryRequestPdfOptions for the full contract.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportEntryRequestPdfOptions"
              }
            ]
          }
        }
      },
      "PagesContentRequest": {
        "type": "object",
        "description": "Request body for POST /Document/Pages (CreatePages) and PUT /Document/Pages (ReplacePages).\nCarries the textual page content alongside any uploaded image files.",
        "additionalProperties": false,
        "properties": {
          "textPages": {
            "type": "array",
            "description": "Optional text content for new pages. Paired by index with imageFiles —\npage[i] gets textPages[i] and imageFiles[i]. If one array is shorter,\nthe corresponding pages are created without that part.",
            "nullable": true,
            "items": {
              "type": "string"
            }
          }
        }
      },
      "WritePageTextRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "text"
        ],
        "properties": {
          "text": {
            "type": "string",
            "description": "The text content for the page."
          }
        }
      },
      "MovePagesRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "pageRange",
          "destinationPageNumber"
        ],
        "properties": {
          "pageRange": {
            "type": "string",
            "description": "The page range to move (e.g., \"1-3\" or \"2,4,6\"). 1-based page numbers."
          },
          "destinationPageNumber": {
            "type": "integer",
            "description": "The 1-based destination page number. Pages will be moved before this position.",
            "format": "int32"
          }
        }
      },
      "CopyPagesRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "pageRange",
          "destinationEntryId",
          "destinationPageNumber"
        ],
        "properties": {
          "pageRange": {
            "type": "string",
            "description": "The page range to copy (e.g., \"1-3\" or \"2,4,6\"). 1-based page numbers.\nThe total number of distinct pages in the range cannot exceed 500."
          },
          "destinationEntryId": {
            "type": "integer",
            "description": "The entry ID of the destination document.",
            "format": "int32"
          },
          "destinationPageNumber": {
            "type": "integer",
            "description": "The 1-based page number in the destination document. Pages will be inserted before this position.",
            "format": "int32"
          }
        }
      },
      "RotateImagePageRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "rotationAngle"
        ],
        "properties": {
          "rotationAngle": {
            "type": "integer",
            "description": "The rotation angle in degrees. Accepted values: 0, 90, 180, 270.",
            "format": "int32"
          }
        }
      },
      "PageInfoCollectionResponse": {
        "type": "object",
        "description": "Response containing a collection of PageInfoResponse.",
        "additionalProperties": false,
        "properties": {
          "@odata.nextLink": {
            "type": "string",
            "description": "A URL to retrieve the next page of the requested collection.",
            "nullable": true
          },
          "@odata.count": {
            "type": "integer",
            "description": "The total count of items within a collection.",
            "format": "int32",
            "nullable": true
          },
          "value": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/PageInfoResponse"
            }
          }
        }
      },
      "PageInfoResponse": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "entryId": {
            "type": "integer",
            "format": "int32"
          },
          "pageId": {
            "type": "integer",
            "format": "int64"
          },
          "pageNumber": {
            "type": "integer",
            "format": "int32"
          },
          "hasImage": {
            "type": "boolean"
          },
          "hasText": {
            "type": "boolean"
          },
          "hasThumbnail": {
            "type": "boolean"
          },
          "hasWordLocations": {
            "type": "boolean"
          },
          "imageRotationAngle": {
            "type": "integer",
            "format": "int32"
          },
          "imageDataSize": {
            "type": "integer",
            "format": "int64"
          },
          "textDataSize": {
            "type": "integer",
            "format": "int64"
          },
          "locationsDataSize": {
            "type": "integer",
            "format": "int64"
          },
          "thumbnailDataSize": {
            "type": "integer",
            "format": "int64"
          },
          "imageDepth": {
            "type": "integer",
            "format": "int32"
          },
          "imageHeight": {
            "type": "integer",
            "format": "int32"
          },
          "imageWidth": {
            "type": "integer",
            "format": "int32"
          },
          "imageXResolution": {
            "type": "integer",
            "format": "int32"
          },
          "imageYResolution": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "AlternateEdocInfoCollectionResponse": {
        "type": "object",
        "description": "Response containing a collection of AlternateEdocInfoResponse.",
        "additionalProperties": false,
        "properties": {
          "@odata.nextLink": {
            "type": "string",
            "description": "A URL to retrieve the next page of the requested collection.",
            "nullable": true
          },
          "@odata.count": {
            "type": "integer",
            "description": "The total count of items within a collection.",
            "format": "int32",
            "nullable": true
          },
          "value": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/AlternateEdocInfoResponse"
            }
          }
        }
      },
      "AlternateEdocInfoResponse": {
        "type": "object",
        "description": "Describes one alternate electronic document stream attached to a document.",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the alternate electronic document stream, unique within the document.",
            "nullable": true
          },
          "mimeType": {
            "type": "string",
            "description": "The MIME type recorded for the stream's content, or an empty string when the\nrepository holds none.",
            "nullable": true
          },
          "size": {
            "type": "integer",
            "description": "The size of the stream's content in bytes.",
            "format": "int64"
          }
        }
      },
      "WriteAltEdocUploadedPartsRequest": {
        "type": "object",
        "description": "Request body for writing an alternate electronic document from previously uploaded parts.",
        "additionalProperties": false,
        "required": [
          "uploadId",
          "partETags"
        ],
        "properties": {
          "uploadId": {
            "type": "string",
            "description": "The UploadId received when calling the CreateMultipartUploadUrls API to request upload URLs.",
            "minLength": 1
          },
          "partETags": {
            "type": "array",
            "description": "The array of the ETag values received when writing the file chunks into the upload URLs. The ETag values should be in the order of their associated upload URLs.",
            "items": {
              "type": "string"
            }
          },
          "mimeType": {
            "type": "string",
            "description": "The MIME type to record for the content, at most 127 characters. When omitted, the MIME type supplied to CreateMultipartUploadUrls is recorded instead. The repository stores the value lower-cased and without any parameters, so \"Text/Plain; charset=utf-8\" is stored as \"text/plain\".",
            "nullable": true
          }
        }
      },
      "PageTextResponse": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "text": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "PageTextOffsetsResponse": {
        "type": "object",
        "description": "The page text span covered by a rectangle drawn on a page image.",
        "additionalProperties": false,
        "properties": {
          "hasTextSpan": {
            "type": "boolean",
            "description": "True when at least one word on the page intersects the requested rectangle.\nFalse when the rectangle covers no words, in which case textStart and textEnd are both -1."
          },
          "textStart": {
            "type": "integer",
            "description": "The offset of the first character of the covered span, or -1 when no word is covered.",
            "format": "int32"
          },
          "textEnd": {
            "type": "integer",
            "description": "The offset one past the last character of the covered span (textEnd - textStart is the\nspan length), or -1 when no word is covered.",
            "format": "int32"
          },
          "text": {
            "type": "string",
            "description": "The page text between textStart and textEnd, or an empty string when no word is covered.",
            "nullable": true
          },
          "wordCount": {
            "type": "integer",
            "description": "The number of words the rectangle covers.",
            "format": "int32"
          }
        }
      },
      "PageWordLocationsResponse": {
        "type": "object",
        "description": "The word locations of a page, together with the page image geometry the coordinates\nare expressed in.",
        "additionalProperties": false,
        "properties": {
          "pageNumber": {
            "type": "integer",
            "description": "The 1-based page number.",
            "format": "int32"
          },
          "imageWidth": {
            "type": "integer",
            "description": "The width of the page image, in pixels.",
            "format": "int32"
          },
          "imageHeight": {
            "type": "integer",
            "description": "The height of the page image, in pixels.",
            "format": "int32"
          },
          "imageXResolution": {
            "type": "integer",
            "description": "The horizontal resolution of the page image, in pixels per inch.",
            "format": "int32"
          },
          "imageYResolution": {
            "type": "integer",
            "description": "The vertical resolution of the page image, in pixels per inch. This can differ from\nimageXResolution, in which case the coordinate space is anisotropic.",
            "format": "int32"
          },
          "imageRotationAngle": {
            "type": "integer",
            "description": "The rotation the viewer applies to the page image, in degrees. Word location\ncoordinates are relative to the unrotated image and do not include this rotation.",
            "format": "int32"
          },
          "wordLocations": {
            "type": "array",
            "description": "The words of the page, in reading order, each with its text offsets and its location\non the page image.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/PageWordLocation"
            }
          }
        }
      },
      "PageWordLocation": {
        "type": "object",
        "description": "One word of a page, with its position in the page text and its rectangle on the page image.",
        "additionalProperties": false,
        "properties": {
          "word": {
            "type": "string",
            "description": "The text of the word.",
            "nullable": true
          },
          "textStart": {
            "type": "integer",
            "description": "The offset of the first character of the word in the page text.",
            "format": "int32"
          },
          "textEnd": {
            "type": "integer",
            "description": "The offset one past the last character of the word in the page text\n(textEnd - textStart is the word length).",
            "format": "int32"
          },
          "x": {
            "type": "integer",
            "description": "The X coordinate of the left edge of the word, in page image pixels.",
            "format": "int32"
          },
          "y": {
            "type": "integer",
            "description": "The Y coordinate of the top edge of the word, in page image pixels.",
            "format": "int32"
          },
          "width": {
            "type": "integer",
            "description": "The width of the word, in page image pixels. This can be 0 for a degenerate location\nproduced by OCR.",
            "format": "int32"
          },
          "height": {
            "type": "integer",
            "description": "The height of the word, in page image pixels. This can be 0 for a degenerate location\nproduced by OCR.",
            "format": "int32"
          }
        }
      },
      "ListDynamicFieldValuesRequest": {
        "type": "object",
        "description": "Request body for listing dynamic field values for an entry.",
        "additionalProperties": false,
        "required": [
          "templateId"
        ],
        "properties": {
          "templateId": {
            "type": "integer",
            "description": "The template id.",
            "format": "int32"
          },
          "fieldValues": {
            "type": "object",
            "description": "The dynamic fields.",
            "nullable": true,
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "SetTemplateRequest": {
        "type": "object",
        "description": "Request body for assigning a template and template fields to an entry.",
        "additionalProperties": false,
        "required": [
          "templateName"
        ],
        "properties": {
          "templateName": {
            "type": "string",
            "description": "The template that will be assigned to the entry.",
            "minLength": 1
          },
          "fields": {
            "type": "array",
            "description": "The template fields that will be assigned to the entry.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/FieldToUpdate"
            }
          }
        }
      },
      "LockInfo": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "lockToken": {
            "type": "string",
            "description": "The unique lock token.",
            "nullable": true
          },
          "owner": {
            "type": "string",
            "description": "Display name (account name, e.g. \"DOMAIN\\user\") of the lock owner.\nSame value reported as lockedBy on Document for the same lock.\nAccount renames change this value over time — do not use for stable identity comparisons.",
            "nullable": true
          },
          "comment": {
            "type": "string",
            "description": "The user-defined comment for the lock.",
            "nullable": true
          },
          "extent": {
            "type": "string",
            "description": "The lock extent (e.g., \"Page\", \"Edoc\", \"Metadata\", \"All\").",
            "nullable": true
          },
          "creationTimestampUtc": {
            "type": "string",
            "description": "The UTC timestamp when the lock was created.",
            "format": "date-time",
            "nullable": true
          },
          "entryId": {
            "type": "integer",
            "description": "The entry ID of the locked document.",
            "format": "int32"
          },
          "isActive": {
            "type": "boolean",
            "description": "Whether the lock is currently active."
          }
        }
      },
      "LockDocumentRequest": {
        "type": "object",
        "description": "Request body for creating a persistent lock on a document.",
        "additionalProperties": false,
        "properties": {
          "comment": {
            "type": "string",
            "description": "An optional comment for the persistent lock.",
            "nullable": true
          },
          "extent": {
            "type": "string",
            "description": "The lock extent. One of: Page, Edoc, Metadata, All. Defaults to All when omitted.",
            "nullable": true
          }
        }
      },
      "CheckOutDocumentRequest": {
        "type": "object",
        "description": "Request body for checking out a document.",
        "additionalProperties": false,
        "properties": {
          "lock": {
            "type": "boolean",
            "description": "Whether to automatically acquire a persistent lock as part of the check-out. Defaults to true.",
            "default": true
          },
          "comment": {
            "type": "string",
            "description": "An optional comment for the check-out.",
            "nullable": true
          }
        }
      },
      "CheckInDocumentRequest": {
        "type": "object",
        "description": "Request body for checking in a document.",
        "additionalProperties": false,
        "properties": {
          "unlock": {
            "type": "boolean",
            "description": "Whether to automatically release the persistent lock as part of the check-in. Defaults to true.",
            "default": true
          }
        }
      },
      "AccessControlList": {
        "type": "object",
        "description": "An entry's access control list: the explicit and inherited access control entries plus\nwhether the entry inherits rights from its parent(s).",
        "additionalProperties": false,
        "properties": {
          "entries": {
            "type": "array",
            "description": "The access control entries. Includes both explicitly-set and inherited ACEs;\ninherited ACEs carry isInherited = true.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/AccessControlEntry"
            }
          },
          "inheritParents": {
            "type": "boolean",
            "description": "Whether the entry inherits access rights from its parent(s). When false, the entry's\nACL is protected from parent inheritance."
          }
        }
      },
      "AccessControlEntry": {
        "type": "object",
        "description": "A single access control entry (ACE): one trustee, whether its rights are allowed or\ndenied, and the rights themselves. A trustee that has both allowed and denied rights is\nrepresented as two ACEs.",
        "additionalProperties": false,
        "properties": {
          "trustee": {
            "description": "The trustee this ACE applies to. On input, identify the trustee by either\ntrustee.sid or trustee.accountName (the SID takes precedence when both are given).",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/TrusteeIdentity"
              }
            ]
          },
          "accessControlType": {
            "description": "Whether the ACE grants (Allow) or denies (Deny) the listed rights.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/AccessControlType"
              }
            ]
          },
          "rights": {
            "type": "array",
            "description": "The rights granted or denied by this ACE.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/EntryRight"
            }
          },
          "scope": {
            "description": "How the ACE propagates to descendant entries. Defaults to All when omitted on input.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/EntryAccessScope"
              }
            ]
          },
          "isInherited": {
            "type": "boolean",
            "description": "True when this ACE is inherited from an ancestor. Read-only — inherited ACEs are\nreturned by GET but are ignored on input (the set operation manages explicit ACEs only)."
          },
          "inheritedFrom": {
            "type": "string",
            "description": "When inherited, a description of where the ACE was inherited from. Output only.",
            "nullable": true
          }
        }
      },
      "EntryRight": {
        "type": "string",
        "description": "An individual access right that can be granted to or denied a trustee on an entry.\nSerialized by name; emitted as a string enum in the OpenAPI schema so clients can\nreference it directly.",
        "x-enum-names": [
          "Browse",
          "Read",
          "WriteContent",
          "AddPage",
          "Rename",
          "RemovePage",
          "Freeze",
          "Annotate",
          "SeeThroughRedactions",
          "SeeAnnotations",
          "SetReviewDate",
          "WriteMetadata",
          "CreateFolder",
          "CreateDocument",
          "SetEventDate",
          "Close",
          "Delete",
          "ReadPermissions",
          "ChangePermissions",
          "TakeOwnership"
        ],
        "x-enum-varnames": [
          "Browse",
          "Read",
          "WriteContent",
          "AddPage",
          "Rename",
          "RemovePage",
          "Freeze",
          "Annotate",
          "SeeThroughRedactions",
          "SeeAnnotations",
          "SetReviewDate",
          "WriteMetadata",
          "CreateFolder",
          "CreateDocument",
          "SetEventDate",
          "Close",
          "Delete",
          "ReadPermissions",
          "ChangePermissions",
          "TakeOwnership"
        ],
        "x-enumNames": [
          "Browse",
          "Read",
          "WriteContent",
          "AddPage",
          "Rename",
          "RemovePage",
          "Freeze",
          "Annotate",
          "SeeThroughRedactions",
          "SeeAnnotations",
          "SetReviewDate",
          "WriteMetadata",
          "CreateFolder",
          "CreateDocument",
          "SetEventDate",
          "Close",
          "Delete",
          "ReadPermissions",
          "ChangePermissions",
          "TakeOwnership"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "enum": [
          "Browse",
          "Read",
          "WriteContent",
          "AddPage",
          "Rename",
          "RemovePage",
          "Freeze",
          "Annotate",
          "SeeThroughRedactions",
          "SeeAnnotations",
          "SetReviewDate",
          "WriteMetadata",
          "CreateFolder",
          "CreateDocument",
          "SetEventDate",
          "Close",
          "Delete",
          "ReadPermissions",
          "ChangePermissions",
          "TakeOwnership"
        ]
      },
      "EntryAccessScope": {
        "type": "string",
        "description": "Controls how an entry access control entry (ACE) propagates to descendant entries.\nApplies to entry ACEs only (field/template ACEs have no scope). Serialized by name.",
        "x-enum-names": [
          "ThisEntry",
          "Folders",
          "All",
          "NotThisEntry",
          "FoldersOnly",
          "DocumentsOnly",
          "Immediate",
          "ImmediateChildren",
          "ImmediateDocuments"
        ],
        "x-enum-varnames": [
          "ThisEntry",
          "Folders",
          "All",
          "NotThisEntry",
          "FoldersOnly",
          "DocumentsOnly",
          "Immediate",
          "ImmediateChildren",
          "ImmediateDocuments"
        ],
        "x-enumNames": [
          "ThisEntry",
          "Folders",
          "All",
          "NotThisEntry",
          "FoldersOnly",
          "DocumentsOnly",
          "Immediate",
          "ImmediateChildren",
          "ImmediateDocuments"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "enum": [
          "ThisEntry",
          "Folders",
          "All",
          "NotThisEntry",
          "FoldersOnly",
          "DocumentsOnly",
          "Immediate",
          "ImmediateChildren",
          "ImmediateDocuments"
        ]
      },
      "SetAccessControlRequest": {
        "type": "object",
        "description": "Request body to replace an entry's explicit access control list. This is a full replace:\nthe supplied entries become the entry's complete set of explicit ACEs (any explicit ACE\nnot included is removed). Inherited ACEs cannot be supplied and are managed via\ninheritParents.",
        "additionalProperties": false,
        "properties": {
          "entries": {
            "type": "array",
            "description": "The explicit access control entries to apply. Required. An empty array clears all\nexplicit ACEs. Entries flagged isInherited = true are rejected.\nDeliberately left without a default: this is a full replace, so an omitted or null\nmember has to stay distinguishable from an explicitly sent empty array.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/AccessControlEntry"
            }
          },
          "inheritParents": {
            "type": "boolean",
            "description": "Whether the entry should inherit access rights from its parent(s). When omitted, the\nentry's current inheritance setting is preserved. When false, the ACL is protected\nfrom parent inheritance; when true, parent rights are inherited.",
            "nullable": true
          }
        }
      },
      "EntryRights": {
        "type": "object",
        "description": "A trustee's rights to an entry. Depending on the aclOnly option on the request, these\nare either the effective rights (the net result after allow/deny resolution, group membership,\nand the repository's privilege and records-management overlays) or the rights granted by the\nentry's access control list alone.",
        "additionalProperties": false,
        "properties": {
          "rights": {
            "type": "array",
            "description": "The rights granted to the trustee on the entry.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/EntryRight"
            }
          },
          "isReadOnly": {
            "type": "boolean",
            "description": "True when the session is read-only, so no write operations are possible regardless of\nthe granted rights."
          }
        }
      },
      "RecordsManagementProperties": {
        "type": "object",
        "description": "The records management properties of a record or record folder. This is the abstract base; the concrete shape is\nRecordProperties for a document record (RecordType = Record)\nor RecordFolderProperties for a record folder (RecordFolder). Members\ncommon to both record and record folder live here; type-specific members live on the subtypes.\nMany members are computed by the repository and are read-only — they are noted as such and are\nignored on update.",
        "x-abstract": true,
        "additionalProperties": false,
        "properties": {
          "recordType": {
            "description": "Whether these properties describe a document record or a record folder. Determines the\nconcrete subtype (RecordProperties or RecordFolderProperties)\nand which type-specific members are present.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/RecordEntryType"
              }
            ]
          },
          "dispositionState": {
            "description": "The current lifecycle state. Computed (read-only).",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/DispositionState"
              }
            ]
          },
          "isCutoff": {
            "type": "boolean",
            "description": "True when the entry has been cut off. Computed (read-only)."
          },
          "isEligibleForCutoff": {
            "type": "boolean",
            "description": "True when the entry is currently eligible for cutoff. Computed (read-only)."
          },
          "isEligibleForFinalDisposition": {
            "type": "boolean",
            "description": "True when the entry is currently eligible for final disposition. Computed (read-only)."
          },
          "cutoffDate": {
            "type": "string",
            "description": "The date the entry was cut off, or null if not cut off. Computed (read-only).",
            "format": "date-time",
            "nullable": true
          },
          "cutoffEligibility": {
            "type": "string",
            "description": "The date the entry becomes eligible for cutoff, or null. Computed (read-only).",
            "format": "date-time",
            "nullable": true
          },
          "finalDispositionEligibility": {
            "type": "string",
            "description": "The date the entry becomes eligible for final disposition, or null. Computed (read-only).",
            "format": "date-time",
            "nullable": true
          },
          "dispositionConfirmationDate": {
            "type": "string",
            "description": "The date final disposition was confirmed, or null. Computed (read-only).",
            "format": "date-time",
            "nullable": true
          },
          "transferDates": {
            "type": "array",
            "description": "Projected and completed interim transfers. Computed (read-only).",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/RecordsManagementTransferDate"
            }
          },
          "locationId": {
            "type": "integer",
            "description": "The records management location the entry currently resides at, or null. Computed (read-only).",
            "format": "int32",
            "nullable": true
          },
          "activeDispositionScheduleId": {
            "type": "integer",
            "description": "The disposition schedule currently governing the entry (own or inherited), or null. Computed (read-only).",
            "format": "int32",
            "nullable": true
          },
          "cutoffCriterionId": {
            "type": "integer",
            "description": "The cutoff criterion assigned to the entry, or null when none.",
            "format": "int32",
            "nullable": true
          },
          "dispositionScheduleId": {
            "type": "integer",
            "description": "The disposition schedule assigned to the entry, or null when none.",
            "format": "int32",
            "nullable": true
          },
          "filingDate": {
            "type": "string",
            "description": "The filing date, or null when unset.",
            "format": "date-time",
            "nullable": true
          },
          "triggerDate": {
            "type": "string",
            "description": "The alternate-retention trigger date, or null when unset.",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "RecordEntryType": {
        "type": "string",
        "description": "Discriminates which kind of records management entry a set of records management properties\ndescribes. Serialized by name.",
        "x-enum-names": [
          "Record",
          "RecordFolder"
        ],
        "x-enum-varnames": [
          "Record",
          "RecordFolder"
        ],
        "x-enumNames": [
          "Record",
          "RecordFolder"
        ],
        "x-enum-descriptions": [
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null
        ],
        "enum": [
          "Record",
          "RecordFolder"
        ]
      },
      "DispositionState": {
        "type": "string",
        "description": "The current lifecycle state of a record or record folder. Serialized by name.",
        "x-enum-names": [
          "Open",
          "Closed",
          "InRetention",
          "Transferred",
          "Eligible",
          "Partial",
          "Final"
        ],
        "x-enum-varnames": [
          "Open",
          "Closed",
          "InRetention",
          "Transferred",
          "Eligible",
          "Partial",
          "Final"
        ],
        "x-enumNames": [
          "Open",
          "Closed",
          "InRetention",
          "Transferred",
          "Eligible",
          "Partial",
          "Final"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "enum": [
          "Open",
          "Closed",
          "InRetention",
          "Transferred",
          "Eligible",
          "Partial",
          "Final"
        ]
      },
      "RecordsManagementTransferDate": {
        "type": "object",
        "description": "A single interim-transfer step's dates for a record or record folder. A step is either a\ncompleted transfer or a projected one (see Transferred). Output only.",
        "additionalProperties": false,
        "properties": {
          "transferId": {
            "type": "integer",
            "description": "The id of the disposition schedule transfer step this date corresponds to.",
            "format": "int32"
          },
          "transferNumber": {
            "type": "integer",
            "description": "The ordinal transfer number within the disposition schedule.",
            "format": "int32"
          },
          "date": {
            "type": "string",
            "description": "The date the transfer occurred, or null when it has not yet taken place.",
            "format": "date-time",
            "nullable": true
          },
          "eligibleDate": {
            "type": "string",
            "description": "The date the entry becomes (or became) eligible for this transfer.",
            "format": "date-time",
            "nullable": true
          },
          "transferred": {
            "type": "boolean",
            "description": "True when the transfer has taken place; false when this is a projected date."
          }
        }
      },
      "RecordProperties": {
        "allOf": [
          {
            "$ref": "#/components/schemas/RecordsManagementProperties"
          },
          {
            "type": "object",
            "description": "The records management properties of a document record\n(RecordType = Record). Adds the\ndocument-record-only members to the common RecordsManagementProperties shape.",
            "additionalProperties": false,
            "properties": {
              "recordFolderId": {
                "type": "integer",
                "description": "The record folder this record is filed under, or null when independent. Computed (read-only).",
                "format": "int32",
                "nullable": true
              },
              "underRecordFolder": {
                "type": "boolean",
                "description": "True when the record is filed under a record folder. Computed (read-only).",
                "nullable": true
              },
              "isIndividuallyCutoff": {
                "type": "boolean",
                "description": "True when the record was cut off individually rather than with its folder. Computed (read-only).",
                "nullable": true
              },
              "isCutoffCriterionInherited": {
                "type": "boolean",
                "description": "True when the cutoff criterion is inherited from the record folder.",
                "nullable": true
              },
              "isDispositionScheduleInherited": {
                "type": "boolean",
                "description": "True when the disposition schedule is inherited from the record folder.",
                "nullable": true
              },
              "reviewer": {
                "type": "string",
                "description": "The reviewer recorded for the last vital-record review, or null. Computed (read-only).",
                "nullable": true
              },
              "lastReviewDate": {
                "type": "string",
                "description": "The last vital-record review date, or null when unset.",
                "format": "date-time",
                "nullable": true
              },
              "nextReviewDate": {
                "type": "string",
                "description": "The next scheduled vital-record review date, or null. Computed (read-only).",
                "format": "date-time",
                "nullable": true
              }
            }
          }
        ]
      },
      "RecordFolderProperties": {
        "allOf": [
          {
            "$ref": "#/components/schemas/RecordsManagementProperties"
          },
          {
            "type": "object",
            "description": "The records management properties of a record folder\n(RecordType = RecordFolder). Adds the\nrecord-folder-only members to the common RecordsManagementProperties shape.",
            "additionalProperties": false,
            "properties": {
              "isClosed": {
                "type": "boolean",
                "description": "True when the record folder is closed to new filings.",
                "nullable": true
              },
              "isPermanent": {
                "type": "boolean",
                "description": "True when the record folder is permanent (never destroyed).",
                "nullable": true
              },
              "dispositionAuthority": {
                "type": "string",
                "description": "The disposition authority name, or null.",
                "nullable": true
              },
              "reviewCycleId": {
                "type": "integer",
                "description": "The vital-record review cycle (calendar cycle) id, or null.",
                "format": "int32",
                "nullable": true
              },
              "reviewInterval": {
                "type": "integer",
                "description": "The vital-record review interval, or null.",
                "format": "int32",
                "nullable": true
              },
              "reviewIntervalUnit": {
                "description": "The review interval unit.",
                "nullable": true,
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/ReviewIntervalUnit"
                  }
                ]
              }
            }
          }
        ]
      },
      "ReviewIntervalUnit": {
        "type": "string",
        "description": "The unit of a vital-record review interval. Serialized by name.",
        "x-enum-names": [
          "NotApplicable",
          "Day",
          "Month"
        ],
        "x-enum-varnames": [
          "NotApplicable",
          "Day",
          "Month"
        ],
        "x-enumNames": [
          "NotApplicable",
          "Day",
          "Month"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null
        ],
        "enum": [
          "NotApplicable",
          "Day",
          "Month"
        ]
      },
      "RecordEntryIdCollection": {
        "type": "object",
        "description": "A list of entry ids returned by a records management folder query (for example, the records\neligible for disposition or transfer, or the independent records under a record folder).\nCallers join these ids against the entry endpoints to retrieve the entries themselves.",
        "additionalProperties": false,
        "properties": {
          "entryIds": {
            "type": "array",
            "description": "The matching entry ids.",
            "nullable": true,
            "items": {
              "type": "integer",
              "format": "int32"
            }
          }
        }
      },
      "EligibleRecordsAction": {
        "type": "string",
        "description": "The records management action to query a record folder's eligible records for. Used as the\nfor selector on GetEligibleRecords. Serialized by name.",
        "x-enum-names": [
          "Disposition",
          "Transfer"
        ],
        "x-enum-varnames": [
          "Disposition",
          "Transfer"
        ],
        "x-enumNames": [
          "Disposition",
          "Transfer"
        ],
        "x-enum-descriptions": [
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null
        ],
        "enum": [
          "Disposition",
          "Transfer"
        ]
      },
      "AltRetentionEventCollection": {
        "type": "object",
        "description": "The alternate-retention trigger events resolved for a record folder.",
        "additionalProperties": false,
        "properties": {
          "events": {
            "type": "array",
            "description": "The alternate-retention trigger events.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/AltRetentionEvent"
            }
          }
        }
      },
      "AltRetentionEvent": {
        "type": "object",
        "description": "An alternate-retention trigger event resolved for a record folder — the event whose\noccurrence drives the folder's alternate disposition schedule. Output only.",
        "additionalProperties": false,
        "properties": {
          "entryId": {
            "type": "integer",
            "description": "The entry the alternate-retention trigger applies to.",
            "format": "int32"
          },
          "eventId": {
            "type": "integer",
            "description": "The records management event definition id that triggers the alternate retention.",
            "format": "int32"
          },
          "triggerDate": {
            "type": "string",
            "description": "The date the trigger event is set to occur, or null when unset.",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "RecordSeriesProperties": {
        "type": "object",
        "description": "A record series' retention defaults. A record series provides cascading defaults (cutoff\ncriterion, disposition schedule, review cycle, permanence, disposition authority) that the\nrecord folders and records beneath it resolve against.",
        "additionalProperties": false,
        "properties": {
          "code": {
            "type": "string",
            "description": "The record series code.",
            "nullable": true
          },
          "cutoffCriterionId": {
            "type": "integer",
            "description": "The default cutoff criterion id, or null when none.",
            "format": "int32",
            "nullable": true
          },
          "dispositionScheduleId": {
            "type": "integer",
            "description": "The default disposition schedule id, or null when none.",
            "format": "int32",
            "nullable": true
          },
          "dispositionAuthority": {
            "type": "string",
            "description": "The disposition authority name, or null.",
            "nullable": true
          },
          "isPermanent": {
            "type": "boolean",
            "description": "True when records under the series are permanent (never destroyed)."
          },
          "reviewCycleId": {
            "type": "integer",
            "description": "The default vital-record review cycle (calendar cycle) id, or null when none.",
            "format": "int32",
            "nullable": true
          },
          "reviewInterval": {
            "type": "integer",
            "description": "The default vital-record review interval, or null when none.",
            "format": "int32",
            "nullable": true
          },
          "reviewIntervalUnit": {
            "description": "The default review interval unit.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ReviewIntervalUnit"
              }
            ]
          }
        }
      },
      "UpdateRecordsManagementPropertiesRequest": {
        "type": "object",
        "description": "Request body for partial-update of an entry's records management properties. Every member is\noptional: null = leave unchanged. Id members accept 0 to clear the assignment.\nDates are set by supplying a value; the two clearable dates (record folder triggerDate\nand record lastReviewDate) are cleared via their explicit clear* flags.\nApplying this update to a plain document promotes it to a record, and to a plain folder\npromotes it to a record folder, before the properties are applied. Members that do not apply\nto the entry's resulting type (for example record-folder members on a document record) are\nrejected with 400.",
        "additionalProperties": false,
        "properties": {
          "cutoffCriterionId": {
            "type": "integer",
            "description": "The cutoff criterion id to assign, or 0 to clear.",
            "format": "int32",
            "nullable": true
          },
          "dispositionScheduleId": {
            "type": "integer",
            "description": "The disposition schedule id to assign, or 0 to clear.",
            "format": "int32",
            "nullable": true
          },
          "filingDate": {
            "type": "string",
            "description": "The filing date to set.",
            "format": "date-time",
            "nullable": true
          },
          "triggerDate": {
            "type": "string",
            "description": "The alternate-retention trigger date to set.",
            "format": "date-time",
            "nullable": true
          },
          "isCutoffCriterionInherited": {
            "type": "boolean",
            "description": "Whether the cutoff criterion is inherited from the record folder. (record)",
            "nullable": true
          },
          "isDispositionScheduleInherited": {
            "type": "boolean",
            "description": "Whether the disposition schedule is inherited from the record folder. (record)",
            "nullable": true
          },
          "lastReviewDate": {
            "type": "string",
            "description": "The last vital-record review date to set. (record)",
            "format": "date-time",
            "nullable": true
          },
          "clearLastReviewDate": {
            "type": "boolean",
            "description": "When true, clear the last vital-record review date. (record)"
          },
          "clearTriggerDate": {
            "type": "boolean",
            "description": "When true, clear the alternate-retention trigger date. (recordFolder)"
          },
          "isClosed": {
            "type": "boolean",
            "description": "Whether the record folder is closed to new filings. (recordFolder)",
            "nullable": true
          },
          "isPermanent": {
            "type": "boolean",
            "description": "Whether the record folder is permanent (never destroyed). (recordFolder)",
            "nullable": true
          },
          "dispositionAuthority": {
            "type": "string",
            "description": "The disposition authority name; empty string to clear. (recordFolder)",
            "nullable": true
          },
          "reviewCycleId": {
            "type": "integer",
            "description": "The vital-record review cycle (calendar cycle) id to assign, or 0 to clear. (recordFolder)",
            "format": "int32",
            "nullable": true
          },
          "reviewInterval": {
            "type": "integer",
            "description": "The vital-record review interval to set. (recordFolder)",
            "format": "int32",
            "nullable": true
          },
          "reviewIntervalUnit": {
            "description": "The review interval unit. (recordFolder)",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ReviewIntervalUnit"
              }
            ]
          }
        }
      },
      "SetRecordEventRequest": {
        "type": "object",
        "description": "Request body for setting a records management event date on a record or record folder.",
        "additionalProperties": false,
        "properties": {
          "eventId": {
            "type": "integer",
            "description": "The records management event definition id whose date is being set.",
            "format": "int32"
          },
          "date": {
            "type": "string",
            "description": "The date to record for the event.",
            "format": "date-time"
          }
        }
      },
      "RemoveRecordEventRequest": {
        "type": "object",
        "description": "Request body for removing a records management event date from a record or record folder.",
        "additionalProperties": false,
        "properties": {
          "eventId": {
            "type": "integer",
            "description": "The records management event definition id whose date is being removed.",
            "format": "int32"
          }
        }
      },
      "UpdateRecordSeriesPropertiesRequest": {
        "type": "object",
        "description": "Request body for partial-update of a record series' retention defaults. Every member is\noptional: null = leave unchanged. Id members accept 0 to clear the assignment.",
        "additionalProperties": false,
        "properties": {
          "cutoffCriterionId": {
            "type": "integer",
            "description": "The default cutoff criterion id to assign, or 0 to clear.",
            "format": "int32",
            "nullable": true
          },
          "dispositionScheduleId": {
            "type": "integer",
            "description": "The default disposition schedule id to assign, or 0 to clear.",
            "format": "int32",
            "nullable": true
          },
          "dispositionAuthority": {
            "type": "string",
            "description": "The disposition authority name; empty string to clear.",
            "nullable": true
          },
          "isPermanent": {
            "type": "boolean",
            "description": "Whether records under the series are permanent (never destroyed).",
            "nullable": true
          },
          "reviewCycleId": {
            "type": "integer",
            "description": "The default vital-record review cycle (calendar cycle) id to assign, or 0 to clear.",
            "format": "int32",
            "nullable": true
          },
          "reviewInterval": {
            "type": "integer",
            "description": "The default vital-record review interval to set.",
            "format": "int32",
            "nullable": true
          },
          "reviewIntervalUnit": {
            "description": "The default review interval unit.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ReviewIntervalUnit"
              }
            ]
          },
          "cascade": {
            "type": "boolean",
            "description": "When true, cascade the changed defaults to the record folders and records beneath the\nseries. When false (default), only the series' own defaults change."
          }
        }
      },
      "CreateRecordSeriesRequest": {
        "type": "object",
        "description": "Request body for creating a record series under a parent folder.",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the new record series.",
            "nullable": true
          },
          "code": {
            "type": "string",
            "description": "The record series code.",
            "nullable": true
          },
          "autoRename": {
            "type": "boolean",
            "description": "When true, the server appends a suffix to the name on a naming conflict instead of failing."
          }
        }
      },
      "RepositoryCollectionResponse": {
        "type": "object",
        "description": "Response containing a collection of Repository.",
        "additionalProperties": false,
        "properties": {
          "value": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/Repository"
            }
          }
        }
      },
      "Repository": {
        "type": "object",
        "description": "Represents a Laserfiche repository.",
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "The repository id.",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "The repository name.",
            "nullable": true
          },
          "webClientUrl": {
            "type": "string",
            "description": "The corresponding repository Web Client url.",
            "nullable": true
          }
        }
      },
      "SessionRights": {
        "type": "object",
        "description": "The current session's rights in a repository: the privileges and feature rights held by the\nsession, plus whether the session is read-only. Reported as named booleans (each map is keyed\nby the right's name with a granted true/false) rather than a raw bitmask, for UI enablement\nand pre-flight checks. Reflects the current session only — per-trustee privilege administration\nis not part of this surface.",
        "additionalProperties": false,
        "properties": {
          "privileges": {
            "type": "object",
            "description": "The session's privileges, keyed by privilege name (e.g. EntryAccess,\nRecordManager), with the value indicating whether the session holds that privilege.",
            "nullable": true,
            "additionalProperties": {
              "type": "boolean"
            }
          },
          "featureRights": {
            "type": "object",
            "description": "The session's feature rights, keyed by feature-right name (e.g. Search,\nImport), with the value indicating whether the session holds that feature right.",
            "nullable": true,
            "additionalProperties": {
              "type": "boolean"
            }
          },
          "isReadOnly": {
            "type": "boolean",
            "description": "True when the current session is read-only, so no write operations are possible regardless\nof the granted privileges or feature rights."
          }
        }
      },
      "StartSearchEntryRequest": {
        "type": "object",
        "description": "Request body for starting an asynchronous search entry task.",
        "additionalProperties": false,
        "required": [
          "searchCommand"
        ],
        "properties": {
          "searchCommand": {
            "type": "string",
            "description": "The search command to run. The search command should follow the Laserfiche search syntax. https://doc.laserfiche.com/laserfiche.documentation/en-us/Default.htm#Search_Syntax.htm",
            "minLength": 1
          },
          "fuzzyType": {
            "description": "Fuzzy type (None, Percentage, or NumberOfLetters).",
            "oneOf": [
              {
                "$ref": "#/components/schemas/FuzzyType"
              }
            ]
          },
          "fuzzyFactor": {
            "type": "integer",
            "description": "Fuzzy factor (percentage as int or int value).",
            "format": "int32"
          }
        }
      },
      "FuzzyType": {
        "type": "string",
        "description": "",
        "x-enum-names": [
          "None",
          "Percentage",
          "NumberOfLetters"
        ],
        "x-enum-varnames": [
          "None",
          "Percentage",
          "NumberOfLetters"
        ],
        "x-enumNames": [
          "None",
          "Percentage",
          "NumberOfLetters"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null
        ],
        "enum": [
          "None",
          "Percentage",
          "NumberOfLetters"
        ]
      },
      "SearchContextHitCollectionResponse": {
        "type": "object",
        "description": "Response containing a collection of SearchContextHit.",
        "additionalProperties": false,
        "properties": {
          "@odata.nextLink": {
            "type": "string",
            "description": "A URL to retrieve the next page of the requested collection.",
            "nullable": true
          },
          "@odata.count": {
            "type": "integer",
            "description": "The total count of items within a collection.",
            "format": "int32",
            "nullable": true
          },
          "value": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/SearchContextHit"
            }
          }
        }
      },
      "SearchContextHit": {
        "type": "object",
        "description": "Represents a context hit for a search result.",
        "additionalProperties": false,
        "properties": {
          "hitType": {
            "description": "The type of context hit this instance represents.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/HitType"
              }
            ]
          },
          "isAnnotationHit": {
            "type": "boolean",
            "description": "A boolean indicating if this context hit occurs on an annotation."
          },
          "annotationId": {
            "type": "integer",
            "description": "The ID of the annotation that the context hit is in.",
            "format": "int32"
          },
          "pageNumber": {
            "type": "integer",
            "description": "The page number in the document of the search hit's context.",
            "format": "int32"
          },
          "pageOffset": {
            "type": "integer",
            "description": "The offset from the beginning of the page of the starting character of the search hit's context line.",
            "format": "int32"
          },
          "context": {
            "type": "string",
            "description": "The line of context for the search hit.",
            "nullable": true
          },
          "highlight1Offset": {
            "type": "integer",
            "description": "The character offset from the beginning of the context line of the start of the first highlight.",
            "format": "int32"
          },
          "highlight1Length": {
            "type": "integer",
            "description": "The length of the first highlight in characters.",
            "format": "int32"
          },
          "highlight2Offset": {
            "type": "integer",
            "description": "The character offset from the beginning of the context line of the start of the second highlight.",
            "format": "int32"
          },
          "highlight2Length": {
            "type": "integer",
            "description": "The length of the second highlight in characters.",
            "format": "int32"
          },
          "hitWidth": {
            "type": "integer",
            "description": "The number of words in the context hit.",
            "format": "int32"
          },
          "edocHitCount": {
            "type": "integer",
            "description": "The number of hits in the electronic document.",
            "format": "int32"
          },
          "fieldHitCount": {
            "type": "integer",
            "description": "The number of hits in the template.",
            "format": "int32"
          },
          "fieldName": {
            "type": "string",
            "description": "The name of a template field containing the hit.",
            "nullable": true
          },
          "hitNumber": {
            "type": "integer",
            "description": "The hit number.",
            "format": "int32"
          }
        }
      },
      "HitType": {
        "type": "string",
        "description": "The type of context hit.",
        "x-enum-names": [
          "PageContent",
          "Note",
          "Callout",
          "TextBox",
          "Edoc",
          "Prop",
          "Name",
          "Extension",
          "VersionGroupNote",
          "VersionComment",
          "Field",
          "SignatureComment",
          "CertificateSubject",
          "TagComment",
          "AnnotationComment",
          "Attachment"
        ],
        "x-enum-varnames": [
          "PageContent",
          "Note",
          "Callout",
          "TextBox",
          "Edoc",
          "Prop",
          "Name",
          "Extension",
          "VersionGroupNote",
          "VersionComment",
          "Field",
          "SignatureComment",
          "CertificateSubject",
          "TagComment",
          "AnnotationComment",
          "Attachment"
        ],
        "x-enumNames": [
          "PageContent",
          "Note",
          "Callout",
          "TextBox",
          "Edoc",
          "Prop",
          "Name",
          "Extension",
          "VersionGroupNote",
          "VersionComment",
          "Field",
          "SignatureComment",
          "CertificateSubject",
          "TagComment",
          "AnnotationComment",
          "Attachment"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "enum": [
          "PageContent",
          "Note",
          "Callout",
          "TextBox",
          "Edoc",
          "Prop",
          "Name",
          "Extension",
          "VersionGroupNote",
          "VersionComment",
          "Field",
          "SignatureComment",
          "CertificateSubject",
          "TagComment",
          "AnnotationComment",
          "Attachment"
        ]
      },
      "SearchEntryRequest": {
        "type": "object",
        "description": "Request body for searching entries.",
        "additionalProperties": false,
        "required": [
          "searchCommand"
        ],
        "properties": {
          "searchCommand": {
            "type": "string",
            "description": "The search command to run. The search command should follow the Laserfiche search syntax. https://doc.laserfiche.com/laserfiche.documentation/en-us/Default.htm#Search_Syntax.htm",
            "minLength": 1
          }
        }
      },
      "Stamp": {
        "type": "object",
        "description": "A stamp in the repository stamp catalog. The stamp image is retrieved separately as a PNG.",
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "integer",
            "description": "The ID of the stamp.",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "The display name of the stamp.",
            "nullable": true
          },
          "isPublic": {
            "type": "boolean",
            "description": "A boolean indicating whether the stamp is public (shared) rather than personal."
          },
          "owner": {
            "type": "string",
            "description": "The security identifier (SID) of the stamp's owner.",
            "nullable": true
          },
          "customData": {
            "type": "string",
            "description": "Optional application-defined custom data stored with the stamp.",
            "nullable": true
          },
          "imageWidth": {
            "type": "integer",
            "description": "The width of the stamp image in pixels.",
            "format": "int32"
          },
          "imageHeight": {
            "type": "integer",
            "description": "The height of the stamp image in pixels.",
            "format": "int32"
          }
        }
      },
      "StampScope": {
        "type": "integer",
        "description": "Which stamps to list.",
        "x-enum-names": [
          "Public",
          "Personal",
          "All"
        ],
        "x-enum-varnames": [
          "Public",
          "Personal",
          "All"
        ],
        "x-enumNames": [
          "Public",
          "Personal",
          "All"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null
        ],
        "enum": [
          0,
          1,
          2
        ]
      },
      "UpdateStampRequest": {
        "type": "object",
        "description": "Request body for updating a stamp's metadata. The stamp image cannot be changed after creation.",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "description": "The new display name of the stamp. Omit to leave unchanged.",
            "nullable": true
          },
          "customData": {
            "type": "string",
            "description": "New custom data for the stamp. Omit to leave unchanged.",
            "nullable": true
          }
        }
      },
      "TagDefinitionCollectionResponse": {
        "type": "object",
        "description": "Response containing a collection of TagDefinition.",
        "additionalProperties": false,
        "properties": {
          "@odata.nextLink": {
            "type": "string",
            "description": "A URL to retrieve the next page of the requested collection.",
            "nullable": true
          },
          "@odata.count": {
            "type": "integer",
            "description": "The total count of items within a collection.",
            "format": "int32",
            "nullable": true
          },
          "value": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/TagDefinition"
            }
          }
        }
      },
      "TagDefinition": {
        "type": "object",
        "description": "Represents an entry tag definition.",
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "integer",
            "description": "The ID of the tag definition.",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "The name of the tag definition.",
            "nullable": true
          },
          "displayName": {
            "type": "string",
            "description": "The localized name of the tag definition.",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "The description of the tag definition.",
            "nullable": true
          },
          "isSecure": {
            "type": "boolean",
            "description": "A boolean indicating whether or not the tag definition is classified as a security tag (true) or an informational tag (false)."
          },
          "watermark": {
            "description": "The watermark properties associated with the tag definition.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/TagDefinitionWatermark"
              }
            ]
          }
        }
      },
      "TaskCollectionResponse": {
        "type": "object",
        "description": "Response containing a collection of TaskProgress.",
        "additionalProperties": false,
        "properties": {
          "value": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/TaskProgress"
            }
          }
        }
      },
      "TaskProgress": {
        "type": "object",
        "description": "Represents the progress of a long operation task.",
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "The task ID of the task associated with this TaskProgress.",
            "nullable": true
          },
          "taskType": {
            "description": "The type of the task associated with this TaskProgress.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/TaskType"
              }
            ]
          },
          "percentComplete": {
            "type": "integer",
            "description": "Determines what percentage of the execution of the associated task is completed.",
            "format": "int32"
          },
          "status": {
            "description": "The status of the task associated with this TaskProgress.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/TaskStatus"
              }
            ]
          },
          "errors": {
            "type": "array",
            "description": "The list of errors occurred during the execution of the associated task.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/ProblemDetails"
            }
          },
          "result": {
            "description": "The result of the execution of the associated task.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/TaskResult"
              }
            ]
          },
          "startTime": {
            "type": "string",
            "description": "The time representing when the associated task's execution started.",
            "format": "date-time"
          },
          "lastUpdateTime": {
            "type": "string",
            "description": "The time representing when the associated task's status last changed.",
            "format": "date-time"
          }
        }
      },
      "TaskType": {
        "type": "string",
        "description": "An enumeration of possible types for a long operation task.",
        "x-enum-names": [
          "CopyEntry",
          "DeleteEntry",
          "ExportEntry",
          "ImportUploadedParts",
          "SearchEntry",
          "WriteAltEdocUploadedParts"
        ],
        "x-enum-varnames": [
          "CopyEntry",
          "DeleteEntry",
          "ExportEntry",
          "ImportUploadedParts",
          "SearchEntry",
          "WriteAltEdocUploadedParts"
        ],
        "x-enumNames": [
          "CopyEntry",
          "DeleteEntry",
          "ExportEntry",
          "ImportUploadedParts",
          "SearchEntry",
          "WriteAltEdocUploadedParts"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "enum": [
          "CopyEntry",
          "DeleteEntry",
          "ExportEntry",
          "ImportUploadedParts",
          "SearchEntry",
          "WriteAltEdocUploadedParts"
        ]
      },
      "TaskStatus": {
        "type": "string",
        "description": "An enumeration of possible statuses for a long operation task.",
        "x-enum-names": [
          "NotStarted",
          "InProgress",
          "Completed",
          "Failed",
          "Cancelled"
        ],
        "x-enum-varnames": [
          "NotStarted",
          "InProgress",
          "Completed",
          "Failed",
          "Cancelled"
        ],
        "x-enumNames": [
          "NotStarted",
          "InProgress",
          "Completed",
          "Failed",
          "Cancelled"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null,
          null,
          null
        ],
        "enum": [
          "NotStarted",
          "InProgress",
          "Completed",
          "Failed",
          "Cancelled"
        ]
      },
      "TaskResult": {
        "type": "object",
        "description": "Represents the result of a long operation task.",
        "additionalProperties": false,
        "properties": {
          "entryId": {
            "type": "integer",
            "description": "The ID of the entry which is affected (e.g. created or modified) by the execution of the associated task.",
            "format": "int32"
          },
          "uri": {
            "type": "string",
            "description": "The URI which can be used (via api call) to access the result(s) of the associated task.\nFor an export task this is a download link for the exported file and it is single-use: the\nfirst GET returns the file and any later GET of the same link answers 404. For every other\ntask type it is an ordinary API route and may be called as often as needed.",
            "nullable": true
          }
        }
      },
      "CancelTasksResponse": {
        "type": "object",
        "description": "Response containing a collection of CancelTaskResult.",
        "additionalProperties": false,
        "properties": {
          "value": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/CancelTaskResult"
            }
          }
        }
      },
      "CancelTaskResult": {
        "type": "object",
        "description": "Represents the result of cancelling a long operation task.",
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "The ID of the task which has been subject to cancellation.",
            "nullable": true
          },
          "taskType": {
            "description": "The type of the task which has been subject to cancellation.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/TaskType"
              }
            ]
          },
          "result": {
            "type": "boolean",
            "description": "Indicates if the request to cancel the task has been received."
          }
        }
      },
      "TemplateDefinitionCollectionResponse": {
        "type": "object",
        "description": "Response containing a collection of TemplateDefinition.",
        "additionalProperties": false,
        "properties": {
          "@odata.nextLink": {
            "type": "string",
            "description": "A URL to retrieve the next page of the requested collection.",
            "nullable": true
          },
          "@odata.count": {
            "type": "integer",
            "description": "The total count of items within a collection.",
            "format": "int32",
            "nullable": true
          },
          "value": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/TemplateDefinition"
            }
          }
        }
      },
      "TemplateFieldDefinitionCollectionResponse": {
        "type": "object",
        "description": "Response containing a collection of TemplateFieldDefinition.",
        "additionalProperties": false,
        "properties": {
          "@odata.nextLink": {
            "type": "string",
            "description": "A URL to retrieve the next page of the requested collection.",
            "nullable": true
          },
          "@odata.count": {
            "type": "integer",
            "description": "The total count of items within a collection.",
            "format": "int32",
            "nullable": true
          },
          "value": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/TemplateFieldDefinition"
            }
          }
        }
      },
      "TemplateFieldDefinition": {
        "allOf": [
          {
            "$ref": "#/components/schemas/FieldDefinition"
          },
          {
            "type": "object",
            "description": "Represents a template field definition.",
            "additionalProperties": false,
            "properties": {
              "rule": {
                "description": "A form logic rule associated with a Laserfiche template and field definition.",
                "nullable": true,
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/Rule"
                  }
                ]
              },
              "groupId": {
                "type": "integer",
                "description": "The group id of the field in the template.",
                "format": "int32"
              },
              "groupName": {
                "type": "string",
                "description": "The name of field group.",
                "nullable": true
              },
              "localDescription": {
                "type": "string",
                "description": "The per-template description for this field assignment. Distinct from the field\ndefinition's repository-level description; set via AddTemplateField /\nUpdateTemplateFieldProperties.",
                "nullable": true
              }
            }
          }
        ]
      },
      "Rule": {
        "type": "object",
        "description": "Represents a form logic rule associated with a Laserfiche template and field definition.",
        "additionalProperties": false,
        "properties": {
          "ancestors": {
            "type": "array",
            "description": "The IDs of the parent fields in the template according to the form logic rule.",
            "nullable": true,
            "items": {
              "type": "integer",
              "format": "int32"
            }
          }
        }
      },
      "CreateTemplateRequest": {
        "type": "object",
        "description": "Request body for creating a new template definition. Name is required; all other\nproperties are optional and fall back to repository defaults when omitted.",
        "additionalProperties": false,
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the template. Required. Must be unique within the repository."
          },
          "description": {
            "type": "string",
            "description": "The description of the template.",
            "nullable": true
          },
          "color": {
            "description": "The color assigned to the template. Omit (or set null) for no color.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/LFColor"
              }
            ]
          },
          "isAutoAssignable": {
            "type": "boolean",
            "description": "Whether the template is eligible for automatic assignment by Cloud auto-classification.\nDefaults to false when omitted.",
            "nullable": true
          },
          "fields": {
            "type": "array",
            "description": "Optional initial field assignments. Order is preserved (each entry is appended\nin array order; the resulting position is 1-based). Each entry may carry the\nper-template isRequired and localDescription properties.\nNote: extended properties (the WebDAV-keyed bag) cannot be set during create\nbecause RepositoryAccess does not expose an atomic create-with-properties path\nfor templates. To set initial properties, follow Create with a PATCH /Properties\ncall against the returned template ID.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/TemplateFieldAssignment"
            }
          }
        }
      },
      "TemplateFieldAssignment": {
        "type": "object",
        "description": "A single field assignment used in Fields.",
        "additionalProperties": false,
        "required": [
          "fieldName"
        ],
        "properties": {
          "fieldName": {
            "type": "string",
            "description": "The name of an existing field definition to assign to the template. Required."
          },
          "isRequired": {
            "type": "boolean",
            "description": "Whether the field is required for entries assigned to this template specifically.\nDistinct from the repository-level IsRequired on the field definition.",
            "nullable": true
          },
          "localDescription": {
            "type": "string",
            "description": "The per-template description for this field assignment.",
            "nullable": true
          }
        }
      },
      "UpdateTemplateRequest": {
        "type": "object",
        "description": "Request body for partial-update of an existing template definition. Every property\nis optional.\nnull = leave the property unchanged.\nEmpty string (\"\") on a string property = clear the value.\nTo clear an existing color, set ClearColor to true and leave Color null. Supplying both Color and ClearColor=true is rejected with 400.",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "description": "The new name of the template. Must be unique within the repository.",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "The description of the template.",
            "nullable": true
          },
          "color": {
            "description": "The new color for the template. Omit to leave unchanged.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/LFColor"
              }
            ]
          },
          "clearColor": {
            "type": "boolean",
            "description": "Set to true to clear the template's existing color. Mutually exclusive with Color.",
            "nullable": true
          },
          "isAutoAssignable": {
            "type": "boolean",
            "description": "Whether the template is eligible for automatic assignment by Cloud auto-classification.",
            "nullable": true
          }
        }
      },
      "TemplatePropertiesResponse": {
        "type": "object",
        "description": "Response body for the custom-properties bag on a template definition. The bag is an\nopaque application-defined string → string map persisted on the template\ndefinition itself (scoped to the definition, not to a user). Use it to attach\nintegration metadata or application-specific configuration that belongs with the\ntemplate — for example to record an external system's identifier for the template,\nor to encode display preferences such as field ordering hints. Keys are\napplication-defined; the API does not validate semantic meaning. Recommend\nnamespaced keys to avoid collisions, e.g. com.acme.workflow.stage or\nmyapp.template.category. The response may include entries written by other\napplications or by system-managed tooling; callers should leave unrecognized keys\nuntouched on subsequent updates.",
        "additionalProperties": false,
        "properties": {
          "properties": {
            "type": "object",
            "description": "The full set of custom properties currently set on the template.",
            "nullable": true,
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "UpdateTemplatePropertiesRequest": {
        "type": "object",
        "description": "Request body for partially updating the custom-properties bag on a template definition.\nEntries in Set are written (creating or overwriting). Entries in\nRemove are deleted. Properties not mentioned in either are left unchanged.\nThe bag is application-defined; the API does not validate key semantics. Recommend\nnamespaced keys (e.g. com.acme.workflow.stage, myapp.template.category)\nto avoid collisions.",
        "additionalProperties": false,
        "properties": {
          "set": {
            "type": "object",
            "description": "Properties to set. Keys absent here are not modified.",
            "nullable": true,
            "additionalProperties": {
              "type": "string"
            }
          },
          "remove": {
            "type": "array",
            "description": "Property keys to remove. Keys not currently set are ignored.",
            "nullable": true,
            "items": {
              "type": "string"
            }
          }
        }
      },
      "AddTemplateFieldRequest": {
        "type": "object",
        "description": "Request body for adding an existing field definition to a template.",
        "additionalProperties": false,
        "required": [
          "fieldName"
        ],
        "properties": {
          "fieldName": {
            "type": "string",
            "description": "The name of an existing field definition to assign to the template. Required."
          },
          "position": {
            "type": "integer",
            "description": "The 1-based position at which to insert the field. Omit (or set null) to append\nto the end of the template. Values less than 1 or greater than the current\nfield count + 1 are rejected with 400.",
            "format": "int32",
            "nullable": true
          },
          "isRequired": {
            "type": "boolean",
            "description": "Whether the field is required for entries assigned to this template specifically.\nDistinct from the repository-level IsRequired on the field definition.",
            "nullable": true
          },
          "localDescription": {
            "type": "string",
            "description": "The per-template description for this field assignment. Distinct from the\nfield definition's repository-level description.",
            "nullable": true
          }
        }
      },
      "UpdateTemplateFieldPropertiesRequest": {
        "type": "object",
        "description": "Request body for updating per-template properties on a field assignment that is\nalready part of a template. Repository-level field-definition properties are\nunaffected by this endpoint — those go through the FieldDefinitions admin endpoints.\nnull = leave the property unchanged.\nEmpty string (\"\") on LocalDescription clears the value.",
        "additionalProperties": false,
        "properties": {
          "isRequired": {
            "type": "boolean",
            "description": "Whether the field is required for entries assigned to this template specifically.",
            "nullable": true
          },
          "localDescription": {
            "type": "string",
            "description": "The per-template description for this field assignment.",
            "nullable": true
          }
        }
      },
      "MoveTemplateFieldRequest": {
        "type": "object",
        "description": "Request body for moving an existing field within a template to a new position.",
        "additionalProperties": false,
        "required": [
          "fieldName",
          "newPosition"
        ],
        "properties": {
          "fieldName": {
            "type": "string",
            "description": "The name of the field to move. Required. Must already be part of the template."
          },
          "newPosition": {
            "type": "integer",
            "description": "The 1-based target position. Required. Values less than 1 or greater than the\ncurrent field count are rejected with 400.",
            "format": "int32"
          }
        }
      },
      "TemplateAccessControlList": {
        "type": "object",
        "description": "The access control list (ACL) of a template definition: its access control entries.\nTemplate ACLs have no parent inheritance, so there is no inherit-parents flag.",
        "additionalProperties": false,
        "properties": {
          "entries": {
            "type": "array",
            "description": "The access control entries that make up the ACL.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/TemplateAccessControlEntry"
            }
          }
        }
      },
      "TemplateAccessControlEntry": {
        "type": "object",
        "description": "A single access control entry (ACE) on a template definition: one trustee, whether its\nrights are allowed or denied, and the rights themselves. A trustee that has both allowed\nand denied rights is represented as two ACEs. Unlike entry ACEs, template ACEs have no scope\nand are never inherited.",
        "additionalProperties": false,
        "properties": {
          "trustee": {
            "description": "The trustee this ACE applies to. On input, identify the trustee by either\ntrustee.sid or trustee.accountName (the SID takes precedence when both are given).",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/TrusteeIdentity"
              }
            ]
          },
          "accessControlType": {
            "description": "Whether the ACE grants (Allow) or denies (Deny) the listed rights. Required on\ninput — a missing value is rejected (it must not silently default to Allow).",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/AccessControlType"
              }
            ]
          },
          "rights": {
            "type": "array",
            "description": "The rights granted or denied by this ACE.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/TemplateRight"
            }
          },
          "isInherited": {
            "type": "boolean",
            "description": "True when this ACE is inherited. Always false for template ACEs (template definitions have\nno ACL inheritance); returned for contract symmetry and ignored on input."
          },
          "inheritedFrom": {
            "type": "string",
            "description": "When inherited, a description of where the ACE was inherited from. Output only; null for\ntemplate ACEs.",
            "nullable": true
          }
        }
      },
      "TemplateRight": {
        "type": "string",
        "description": "An individual access right that can be granted to or denied a trustee on a template\ndefinition. Serialized by name; emitted as a string enum in the OpenAPI schema so clients\ncan reference it directly.",
        "x-enum-names": [
          "ReadDefinition",
          "Modify",
          "Delete",
          "ReadPermissions",
          "ChangePermissions",
          "TakeOwnership"
        ],
        "x-enum-varnames": [
          "ReadDefinition",
          "Modify",
          "Delete",
          "ReadPermissions",
          "ChangePermissions",
          "TakeOwnership"
        ],
        "x-enumNames": [
          "ReadDefinition",
          "Modify",
          "Delete",
          "ReadPermissions",
          "ChangePermissions",
          "TakeOwnership"
        ],
        "x-enum-descriptions": [
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "x-enumDescriptions": [
          null,
          null,
          null,
          null,
          null,
          null
        ],
        "enum": [
          "ReadDefinition",
          "Modify",
          "Delete",
          "ReadPermissions",
          "ChangePermissions",
          "TakeOwnership"
        ]
      },
      "SetTemplateAccessControlRequest": {
        "type": "object",
        "description": "Request body for replacing a template definition's access control list. The supplied\nentries fully replace the template's existing explicit ACL. Inherited entries are not accepted.",
        "additionalProperties": false,
        "properties": {
          "entries": {
            "type": "array",
            "description": "The access control entries to set. Required. Replaces the template's entire explicit\nACL; an empty array clears it.\nDeliberately left without a default: this is a full replace, so an omitted or null\nmember has to stay distinguishable from an explicitly sent empty array.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/TemplateAccessControlEntry"
            }
          }
        }
      },
      "TemplateRights": {
        "type": "object",
        "description": "A trustee's rights to a template definition. Depending on the aclOnly option on the\nrequest, these are either the effective rights (the net result after group membership, allow/deny\nresolution, and the repository's privilege overlay) or the rights granted by the template's access\ncontrol list alone.",
        "additionalProperties": false,
        "properties": {
          "rights": {
            "type": "array",
            "description": "The rights granted to the trustee on the template.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/TemplateRight"
            }
          },
          "isReadOnly": {
            "type": "boolean",
            "description": "True when the session is read-only, so no write operations are possible regardless of\nthe granted rights."
          }
        }
      },
      "TrusteeSecurity": {
        "type": "object",
        "description": "A trustee's account security: the privileges and feature rights the trustee holds, the security\ntags assigned to it, the audit classes configured for it, and whether the trustee is read-only.\nPrivileges, feature rights, and audit masks are reported as named booleans (each map keyed by\nthe right's name with a granted true/false) rather than raw bitmasks.\nThe values are either effective (the default — what applies once the trustee's group\nmemberships are resolved) or direct (only what is assigned on the trustee record\nitself), selected by the request's includeInherited flag. The effective view is a\ndocumented best-effort computation: in rare cases it can differ from the trustee's real rights.\nThe authoritative way to determine a trustee's security is to sign in as that trustee and read\nthe resulting session's rights.",
        "additionalProperties": false,
        "properties": {
          "privileges": {
            "type": "object",
            "description": "The trustee's privileges, keyed by privilege name (e.g. EntryAccess,\nRecordManager), with the value indicating whether the trustee holds that privilege.",
            "nullable": true,
            "additionalProperties": {
              "type": "boolean"
            }
          },
          "featureRights": {
            "type": "object",
            "description": "The trustee's feature rights, keyed by feature-right name (e.g. Search,\nImport), with the value indicating whether the trustee holds that feature right.",
            "nullable": true,
            "additionalProperties": {
              "type": "boolean"
            }
          },
          "isReadOnly": {
            "type": "boolean",
            "description": "True when the trustee is read-only, so no write operations are possible regardless of the\ngranted privileges or feature rights."
          },
          "tags": {
            "type": "array",
            "description": "The security tags assigned to the trustee.",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/TrusteeTag"
            }
          },
          "auditMasks": {
            "description": "The audit classes configured for the trustee, split into successful- and failed-operation\nmasks. Each map is keyed by audit-class name with the value indicating whether that class is\naudited.",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/TrusteeAuditMasks"
              }
            ]
          }
        }
      },
      "TrusteeTag": {
        "type": "object",
        "description": "A security tag assigned to a trustee.",
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "integer",
            "description": "The tag's ID.",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "The tag's name.",
            "nullable": true
          },
          "isSecure": {
            "type": "boolean",
            "description": "True when the tag is a security tag."
          }
        }
      },
      "TrusteeAuditMasks": {
        "type": "object",
        "description": "The audit classes configured for a trustee, split by operation outcome.",
        "additionalProperties": false,
        "properties": {
          "success": {
            "type": "object",
            "description": "Audit classes audited on successful operations, keyed by audit-class name.",
            "nullable": true,
            "additionalProperties": {
              "type": "boolean"
            }
          },
          "failure": {
            "type": "object",
            "description": "Audit classes audited on failed operations, keyed by audit-class name.",
            "nullable": true,
            "additionalProperties": {
              "type": "boolean"
            }
          }
        }
      },
      "UserAreaEntry": {
        "type": "object",
        "description": "Represents an entry referenced by a user's Recent Documents or Recent Folders list.",
        "additionalProperties": false,
        "properties": {
          "entryId": {
            "type": "integer",
            "description": "The ID of the recently accessed entry.",
            "format": "int32"
          },
          "fullPath": {
            "type": "string",
            "description": "The full repository path of the recently accessed entry.",
            "nullable": true
          }
        }
      },
      "StarEntriesRequest": {
        "type": "object",
        "description": "Request body for starring or unstarring one or more entries.",
        "additionalProperties": false,
        "properties": {
          "entryIds": {
            "type": "array",
            "description": "The IDs of the entries to star or unstar. Must contain at least one entry ID.",
            "nullable": true,
            "items": {
              "type": "integer",
              "format": "int32"
            }
          }
        }
      },
      "PersonalCollection": {
        "type": "object",
        "description": "Represents a user's Personal Collection — a named, per-user set of entries.",
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "The stable identifier of the collection (the underlying user-area name).",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "The display name of the collection.",
            "nullable": true
          },
          "entryIds": {
            "type": "array",
            "description": "The IDs of the entries contained in the collection.",
            "nullable": true,
            "items": {
              "type": "integer",
              "format": "int32"
            }
          }
        }
      },
      "CreatePersonalCollectionRequest": {
        "type": "object",
        "description": "Request body for creating a Personal Collection.",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "description": "The display name for the new collection. Required, must be 256 characters or fewer, and must not\nduplicate an existing collection name or a reserved name.",
            "nullable": true
          }
        }
      },
      "RenamePersonalCollectionRequest": {
        "type": "object",
        "description": "Request body for renaming a Personal Collection.",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "description": "The new display name for the collection. Same constraints as creation.",
            "nullable": true
          }
        }
      },
      "EntryIdsRequest": {
        "type": "object",
        "description": "Request body carrying a set of entry IDs (used to add or remove entries from a collection).",
        "additionalProperties": false,
        "properties": {
          "entryIds": {
            "type": "array",
            "description": "The IDs of the entries to add or remove. Must contain at least one entry ID.",
            "nullable": true,
            "items": {
              "type": "integer",
              "format": "int32"
            }
          }
        }
      },
      "UserArea": {
        "type": "object",
        "description": "Represents a generic, owner-scoped user area (the raw primitive). Application-managed areas\n(Personal Collections, Starred, Recent) are excluded from this surface.",
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "integer",
            "description": "The ID of the user area.",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "The name of the user area.",
            "nullable": true
          },
          "comment": {
            "type": "string",
            "description": "An optional comment associated with the user area.",
            "nullable": true
          },
          "data": {
            "type": "string",
            "description": "An optional opaque application-defined data string associated with the user area.",
            "nullable": true
          }
        }
      },
      "CreateUserAreaRequest": {
        "type": "object",
        "description": "Request body for creating a generic user area.",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "description": "The name for the new user area. Required. Names reserved for application-managed areas\n(the pc_ prefix and the well-known Starred/Recent area names) are rejected.",
            "nullable": true
          },
          "comment": {
            "type": "string",
            "description": "An optional comment for the user area.",
            "nullable": true
          },
          "data": {
            "type": "string",
            "description": "An optional opaque application-defined data string for the user area.",
            "nullable": true
          }
        }
      },
      "UpdateUserAreaRequest": {
        "type": "object",
        "description": "Request body for updating a generic user area. Only non-null properties are applied.",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "description": "The new name for the user area. null leaves it unchanged. Reserved names are rejected.",
            "nullable": true
          },
          "comment": {
            "type": "string",
            "description": "The new comment. null leaves it unchanged.",
            "nullable": true
          },
          "data": {
            "type": "string",
            "description": "The new data string. null leaves it unchanged.",
            "nullable": true
          }
        }
      }
    },
    "securitySchemes": {
      "Authorization": {
        "type": "http",
        "description": "Type your token into the textbox.",
        "scheme": "bearer"
      },
      "OAuth2 Authorization Code Flow": {
        "type": "oauth2",
        "description": "<p>Note: Please enter below the clientId/clientSecret of a registered web application, or the clientId of a SPA. For SPA, the clientSecret field must be left empty. The app, either a web application or SPA, must have the following uri defined as its redirect uri.</p><p>https://api.laserfiche.com/repository/swagger/oauth2-redirect.html</p><p>For more information, see <a href=\"https://developer.laserfiche.com/guides/guide_authenticating-to-the-swagger-playground.html\" target=\"_blank\">this page</a></p>",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://signin.laserfiche.com/oauth/Authorize",
            "tokenUrl": "https://signin.laserfiche.com/oauth/Token",
            "scopes": {
              "repository.Read": "Allows the app to read the content of Laserfiche repositories on behalf of the signed-in user.",
              "repository.Write": "Allows the app to modify the content of Laserfiche repositories on behalf of the signed-in user."
            }
          }
        }
      }
    }
  },
  "security": [
    {
      "Authorization": []
    },
    {
      "OAuth2 Authorization Code Flow": [
        "repository.Read",
        "repository.Write"
      ]
    }
  ]
}