<?php
  header("Content-Type: text/plain");
  include("../inc/inc.Settings.php");
?>
swagger: "2.0"
info:
  description: "This is the rest api of SeedDMS."
  version: "1.0.0"
  title: "Swagger SeedDMS"
  termsOfService: "https://www.seeddms.org/terms/"
  contact:
    email: "info@seeddms.org"
  license:
    name: "Apache 2.0"
    url: "http://www.apache.org/licenses/LICENSE-2.0.html"
host: "<?php echo $_SERVER['HTTP_HOST']; ?>"
basePath: "<?php echo $settings->_httpRoot; ?>restapi/index.php"
tags:
- name: "user"
  description: "Operations about user"
  externalDocs:
    description: "Find out more about our store"
    url: "https://www.seeddms.org"
schemes:
- "https"
paths:
  /login:
    post:
      tags:
      - "account"
      summary: "Log in"
      description: "Log in by providing a username and password"
      operationId: "login"
      produces:
      - "application/json"
      consumes:
        - application/x-www-form-urlencoded
      parameters:
      - name: "user"
        in: "formData"
        type: "string"
        description: "Name of user"
        required: true
      - name: "pass"
        in: "formData"
        type: "string"
        description: "Password of user"
        required: true
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseUser"
        "403":
          description: "Login failed"
          schema:
            $ref: "#/definitions/ApiResponse"
        "400":
          description: "Invalid parameter"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /logout:
    get:
      tags:
      - "account"
      summary: "Log out"
      description: "Log out"
      operationId: "Kills the session and removes the cookie"
      produces:
      - "application/json"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponse"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /account:
    get:
      tags:
      - "account"
      summary: "Get account data"
      description: "Returns account data of logged in user"
      operationId: "getAccount"
      produces:
      - "application/json"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseUser"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /account/fullname:
    put:
      tags:
      - "account"
      summary: "Set full name of account"
      description: "Sets the full name of the currently logged in user"
      operationId: "setAccountFullname"
      produces:
      - "application/json"
      consumes:
        - application/x-www-form-urlencoded
      parameters:
        - in: formData
          name: email
          type: string
          description: "New full name"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseUser"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /account/email:
    put:
      tags:
      - "account"
      summary: "Set email of account"
      description: "Sets the email of the currently logged in user"
      operationId: "setAccountEmail"
      produces:
      - "application/json"
      consumes:
        - multipart/form-data
      parameters:
        - in: formData
          name: email
          type: string
          description: "New email"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseUser"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /account/documents/locked:
    get:
      tags:
      - "account"
      summary: "Get locked documents by myself"
      description: "Returns locked documents of logged in user"
      operationId: "getLockedDocuments"
      produces:
      - "application/json"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseDocuments"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /users:
    get:
      tags:
      - "user"
      summary: "Finds all users"
      description: "Multiple status values can be provided with comma separated strings"
      operationId: "getUsers"
      produces:
      - "application/json"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseUsers"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
    post:
      tags:
      - "user"
      summary: "Create user"
      description: "This can only be done by the logged in user."
      operationId: "createUser"
      produces:
      - "application/json"
      consumes:
        - multipart/form-data
      parameters:
      - in: "formData"
        name: "user"
        description: "Login of user"
        type: "string"
        required: true
      - in: "formData"
        name: "pass"
        description: "Password of user"
        type: "string"
        required: true
      - in: "formData"
        name: "name"
        description: "Full name of user"
        type: "string"
        required: true
      - in: "formData"
        name: "email"
        description: "Email of user"
        type: "string"
        required: false
      - in: "formData"
        name: "language"
        description: "Language of user"
        type: "string"
        required: false
      - in: "formData"
        name: "theme"
        description: "Theme of user"
        type: "string"
        required: false
      - in: "formData"
        name: "comment"
        description: "Comment of user"
        type: "string"
        required: false
      - in: "formData"
        name: "role"
        description: "Role of user (admin, user, guest)"
        type: "string"
        enum:
          - admin
          - user
          - guest
        required: false
      responses:
        "201":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseUser"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "409":
          description: "User already exists"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Error creating user"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /users/{id}:
    get:
      tags:
      - "user"
      summary: "Find user by ID"
      description: "Returns a single user"
      operationId: "getUserById"
      produces:
      - "application/json"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of user to return"
        required: true
        type: "integer"
        format: "int64"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseUser"
        "404":
          description: "User not found"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
    delete:
      tags:
      - "user"
      summary: "Delete user by ID"
      description: "Delete a single user"
      operationId: "deleteUserById"
      produces:
      - "application/json"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of user to delete"
        required: true
        type: "integer"
        format: "int64"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Error deleting user"
          schema:
            $ref: "#/definitions/ApiResponse"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "User not found"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /users/{id}/disable:
    put:
      tags:
      - "user"
      summary: "Disable user by ID"
      description: "Disable a single user"
      operationId: "setDisabledUser"
      produces:
      - "application/json"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of user to disable"
        required: true
        type: "integer"
        format: "int64"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseUser"
        "404":
          description: "User not found"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /users/{id}/password:
    put:
      tags:
      - "user"
      summary: "Change password of user by ID"
      description: "Change the password of a single user"
      operationId: "changeUserPassword"
      produces:
      - "application/json"
      consumes:
        - multipart/form-data
      parameters:
      - name: "id"
        in: "path"
        description: "ID of user"
        required: true
        type: "integer"
        format: "int64"
      - in: "formData"
        name: "password"
        type: "string"
        description: "New password"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponse"
        "400":
          description: "Invalid parameter"
          schema:
            $ref: "#/definitions/ApiResponse"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "User not found"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /groups:
    get:
      tags:
      - "group"
      summary: "Finds all groups"
      description: "Return a list of all groups"
      operationId: "getGroups"
      produces:
      - "application/json"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseGroups"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
    post:
      tags:
      - "group"
      summary: "Create group"
      description: "This can only be done by the logged in user."
      operationId: "createGroup"
      produces:
      - "application/json"
      consumes:
        - multipart/form-data
      parameters:
      - in: "formData"
        name: "name"
        type: "string"
        description: "Name of new group"
        required: true
      - in: "formData"
        name: "comment"
        type: "string"
        description: "Comment of new group"
        required: false
      responses:
        "201":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseGroup"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "409":
          description: "Group already exists"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Error creating user"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /document/{id}:
    get:
      tags:
      - "document"
      summary: "Find document by ID"
      description: "Returns a single document"
      operationId: "getDocument"
      produces:
      - "application/json"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of document to return"
        required: true
        type: "integer"
        format: "int64"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseDocument"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Document not found"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
    delete:
      tags:
      - "document"
      summary: "Delete document by ID"
      description: "Delete a single document"
      operationId: "deleteDocument"
      produces:
      - "application/json"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of document to delete"
        required: true
        type: "integer"
        format: "int64"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Error deleting user"
          schema:
            $ref: "#/definitions/ApiResponse"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "User not found"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /document/{id}/preview/{version}/{width}:
    get:
      tags:
      - "document"
      summary: "Return preview of document"
      description: "Returns the preview image of a given version of a document"
      operationId: "getDocumentPreview"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of document to return"
        required: true
        type: "integer"
        format: "int64"
      - name: "version"
        in: "path"
        description: "Version number of document"
        required: true
        type: "integer"
        format: "int64"
      - name: "width"
        in: "path"
        description: "Width of preview image"
        required: true
        type: "integer"
        format: "int64"
      responses:
        "200":
          description: "preview image file"
          schema:
            type: "file"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Document not found"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /document/{id}/content:
    get:
      tags:
      - "document"
      summary: "Return latest content of document"
      description: "Returns the most current version of a document"
      operationId: "getDocumentContent"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of document to return"
        required: true
        type: "integer"
        format: "int64"
      responses:
        "200":
          description: "content file"
          schema:
            type: "file"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Document not found"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /document/{id}/file/{fileid}:
    get:
      tags:
      - "document"
      summary: "Return certain attached file of document"
      description: "Returns the attached file of a document"
      operationId: "getDocumentFile"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of document"
        required: true
        type: "integer"
        format: "int64"
      - name: "fileid"
        in: "path"
        description: "Id of file to return"
        required: true
        type: "integer"
        format: "int64"
      responses:
        "200":
          description: "attached file"
          schema:
            type: "file"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Document not found"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /document/{id}/version/{version}:
    get:
      tags:
      - "document"
      summary: "Return certain version of document"
      description: "Returns the requested version of a document"
      operationId: "getDocumentVersion"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of document to return"
        required: true
        type: "integer"
        format: "int64"
      - name: "version"
        in: "path"
        description: "Version number of document to return"
        required: true
        type: "integer"
        format: "int64"
      responses:
        "200":
          description: "content file"
          schema:
            type: "file"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Document not found"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /document/{id}/attributes:
    get:
      tags:
      - "document"
      summary: "Return attributes of document by ID"
      description: "Returns the attributes of a given document"
      operationId: "getDocumentAttributes"
      produces:
      - "application/json"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of document whose attributes to be returned."
        type: "integer"
        required: true
        format: "int64"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseAttributes"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Document not found"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /document/{id}/files:
    get:
      tags:
      - "document"
      summary: "Return attached files of document by ID"
      description: "Returns the attached files of a given document"
      operationId: "getDocumentFiles"
      produces:
      - "application/json"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of document whose files to be returned."
        type: "integer"
        required: true
        format: "int64"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseDocumentFiles"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Document not found"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /document/{id}/links:
    get:
      tags:
      - "document"
      summary: "Return links of document by ID"
      description: "Returns the links of a given document"
      operationId: "getDocumentLinks"
      produces:
      - "application/json"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of document whose links to be returned."
        type: "integer"
        required: true
        format: "int64"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseDocumentLinks"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Document not found"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /document/{id}/link/{targetid}:
    post:
      tags:
      - "document"
      summary: "Add link between documents"
      description: "Adds a link from a source document to a target document"
      operationId: "addDocumentLink"
      produces:
      - "application/json"
      consumes:
        - multipart/form-data
      parameters:
      - name: "id"
        in: "path"
        description: "ID of source document."
        type: "integer"
        required: true
        format: "int64"
      - name: "targetid"
        in: "path"
        description: "ID of target document."
        type: "integer"
        required: true
        format: "int64"
      - in: "formData"
        name: "public"
        description: "Set to true if link shall be public"
        type: "boolean"
        required: false
      responses:
        "201":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponse"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Document not found"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /document/{id}/versions:
    get:
      tags:
      - "document"
      summary: "Return all versions of a document by ID"
      description: "Returns the versions of a given document"
      operationId: "getDocumentVersions"
      produces:
      - "application/json"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of document whose versions to be returned."
        type: "integer"
        required: true
        format: "int64"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseDocumentContents"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Document not found"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /document/{id}/categories:
    delete:
      tags:
      - "document"
      summary: "Delete all categories of a document"
      description: "Delete all categories from a given document"
      operationId: "deleteDocumentCategories"
      produces:
      - "application/json"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of document"
        required: true
        type: "integer"
        format: "int64"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Error deleting user"
          schema:
            $ref: "#/definitions/ApiResponse"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "User not found"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /document/{id}/category/{catid}:
    post:
      tags:
      - "document"
      summary: "Add a single category to document"
      description: "Adds a single category to a document"
      operationId: "addDocumentCategory"
      produces:
      - "application/json"
      consumes:
        - multipart/form-data
      parameters:
      - name: "id"
        in: "path"
        description: "ID of document."
        type: "integer"
        required: true
        format: "int64"
      - name: "catid"
        in: "path"
        description: "ID of category."
        type: "integer"
        required: true
        format: "int64"
      responses:
        "201":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponse"
        "400":
          description: "No document or category given"
          schema:
            $ref: "#/definitions/ApiResponse"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Document not found"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /document/{id}/category/{catid}:
    delete:
      tags:
      - "document"
      summary: "Delete a single category of a document"
      description: "Delete just one category with the given id from the given document"
      operationId: "deleteDocumentCategory"
      produces:
      - "application/json"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of document"
        required: true
        type: "integer"
        format: "int64"
      - name: "catid"
        in: "path"
        description: "ID of category to delete"
        required: true
        type: "integer"
        format: "int64"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Error deleting user"
          schema:
            $ref: "#/definitions/ApiResponse"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "User not found"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /document/{id}/owner/{userid}:
    post:
      tags:
      - "document"
      summary: "Set owner of document"
      description: "Set owner of document"
      operationId: "setDocumentOwner"
      produces:
      - "application/json"
      consumes:
        - multipart/form-data
      parameters:
      - name: "id"
        in: "path"
        description: "ID of document."
        type: "integer"
        required: true
        format: "int64"
      - name: "userid"
        in: "path"
        description: "ID of user."
        type: "integer"
        required: true
        format: "int64"
      responses:
        "201":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponse"
        "400":
          description: "No document or user given"
          schema:
            $ref: "#/definitions/ApiResponse"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Document not found"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /folder/{id}:
    get:
      tags:
      - "folder"
      summary: "Find folder by ID"
      description: "Returns a single folder"
      operationId: "getFolder"
      produces:
      - "application/json"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of folder to return. ID=0 returns root folder."
        type: "integer"
        required: true
        format: "int64"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseFolder"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Folder not found"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
    delete:
      tags:
      - "folder"
      summary: "Delete folder by ID"
      description: "Delete the folder with the given id"
      operationId: "deleteFolder"
      produces:
      - "application/json"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of folder to delete."
        type: "integer"
        required: true
        format: "int64"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponse"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Folder not found"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /folder/{id}/parent:
    get:
      tags:
      - "folder"
      summary: "Find parent of folder by ID"
      description: "Returns the parent folder of a given folder"
      operationId: "getFolderParent"
      produces:
      - "application/json"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of folder whose parent to be returned."
        type: "integer"
        required: true
        format: "int64"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseFolder"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Folder not found"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /folder/{id}/children:
    get:
      tags:
      - "folder"
      summary: "Find children of folder by ID"
      description: "Returns the children of a given folder"
      operationId: "getFolderChildren"
      produces:
      - "application/json"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of folder whose children to be returned."
        type: "integer"
        required: true
        format: "int64"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseFolder"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Folder not found"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /folder/{id}/path:
    get:
      tags:
      - "folder"
      summary: "Return path of folder by ID"
      description: "Returns the path of a given folder"
      operationId: "getFolderPath"
      produces:
      - "application/json"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of folder whose path to be returned."
        type: "integer"
        required: true
        format: "int64"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseFolderPath"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Folder not found"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /folder/{id}/attributes:
    get:
      tags:
      - "folder"
      summary: "Return attributes of folder by ID"
      description: "Returns the attributes of a given folder"
      operationId: "getFolderAttributes"
      produces:
      - "application/json"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of folder whose attributes to be returned."
        type: "integer"
        required: true
        format: "int64"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseAttributes"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Folder not found"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /folder/{id}/folder:
    post:
      tags:
      - "folder"
      summary: "Create new subolder"
      description: "Creates a new subfolder in the a given folder"
      operationId: "createFolder"
      produces:
      - "application/json"
      consumes:
        - multipart/form-data
      parameters:
      - name: "id"
        in: "path"
        description: "ID of parent folder."
        type: "integer"
        required: true
        format: "int64"
      - in: "formData"
        name: "name"
        description: "Name of new folder"
        type: "string"
        required: true
      - in: "formData"
        name: "comment"
        description: "Comment of new folder"
        type: "string"
        required: false
      - in: "formData"
        name: "sequence"
        description: "Sequence of new folder"
        type: "string"
        required: false
      responses:
        "201":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseFolder"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Folder not found"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /folder/{id}/document:
    post:
      tags:
      - "folder"
      summary: "Create new document"
      description: "Creates a new document in the a given folder"
      operationId: "createDocument"
      produces:
      - "application/json"
      consumes:
        - multipart/form-data
      parameters:
      - name: "id"
        in: "path"
        description: "ID of parent folder."
        type: "integer"
        required: true
        format: "int64"
      - in: "formData"
        name: "file"
        type: "file"
        description: "Content of new document"
        required: true
      - in: "formData"
        name: "name"
        description: "Name of new document"
        type: "string"
        required: true
      - in: "formData"
        name: "comment"
        description: "Comment of new document"
        type: "string"
        required: false
      - in: "formData"
        name: "sequence"
        description: "Sequence of new document"
        type: "string"
        required: false
      responses:
        "201":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseDocument"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Folder not found"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Internal error"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /categories:
    get:
      tags:
      - "category"
      summary: "Finds all categories"
      operationId: "getCategories"
      produces:
      - "application/json"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseCategories"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
    post:
      tags:
      - "category"
      summary: "Create a new category"
      operationId: "postCategories"
      produces:
      - "application/json"
      consumes:
        - multipart/form-data
      parameters:
      - in: "formData"
        name: "name"
        description: "Name of new category"
        type: "string"
        required: true
      responses:
        "201":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseCategories"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "409":
          description: "Category already exists"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Error creating category"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /categories/{id}:
    get:
      tags:
      - "category"
      summary: "Find category by ID"
      description: "Returns a single category"
      operationId: "getCategory"
      produces:
      - "application/json"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of category to return"
        required: true
        type: "integer"
        format: "int64"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseCategory"
        "404":
          description: "Category not found"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
    delete:
      tags:
      - "category"
      summary: "Delete category by ID"
      description: "Delete a single category"
      operationId: "deleteCategory"
      produces:
      - "application/json"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of category to delete"
        required: true
        type: "integer"
        format: "int64"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponse"
        "500":
          description: "Error deleting user"
          schema:
            $ref: "#/definitions/ApiResponse"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
        "404":
          description: "Category not found"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /categories/{id}/name:
    put:
      tags:
      - "category"
      summary: "Set name of category"
      description: "Sets the name of the category"
      operationId: "changeCategoryName"
      produces:
      - "application/json"
      consumes:
        - multipart/form-data
      parameters:
        - name: "id"
          in: "path"
          description: "ID of category"
          required: true
          type: "integer"
          format: "int64"
        - in: "formData"
          name: "name"
          type: "string"
          description: "New name"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseCategory"
        "400":
          description: "Invalid parameter"
          schema:
            $ref: "#/definitions/ApiResponse"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /attributedefinitions:
    get:
      tags:
      - "attributedefinition"
      summary: "Finds all attribute definitions"
      operationId: "getAttributeDefinitions"
      produces:
      - "application/json"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseAttributeDefinitions"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /attributedefinitions/{id}/name:
    put:
      tags:
      - "attributedefinition"
      summary: "Set name of attribute definition"
      description: "Sets the name of the attribute definition"
      operationId: "changeAttributeDefinitionName"
      produces:
      - "application/json"
      consumes:
        - multipart/form-data
      parameters:
        - name: "id"
          in: "path"
          description: "ID of attribute definition"
          required: true
          type: "integer"
          format: "int64"
        - in: "formData"
          name: "name"
          type: "string"
          description: "New name"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponseAttributeDefinition"
        "400":
          description: "Invalid parameter"
          schema:
            $ref: "#/definitions/ApiResponse"
        "403":
          description: "No access"
          schema:
            $ref: "#/definitions/ApiResponse"
      security:
      - api_key: []
  /echo:
    get:
      tags:
      - "test"
      summary: "Return what was send in the body"
      description: "Just returns the body content"
      operationId: "echoData"
      produces:
      - "application/json"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/ApiResponse"
        "400":
          description: "Invalid status value"
securityDefinitions:
  api_key:
    type: "apiKey"
    name: "Authorization"
    in: "header"
definitions:
  Role:
    type: "object"
    properties:
      id:
        type: "integer"
        format: "int64"
      name:
        type: "string"
    xml:
      name: "Role"
  Group:
    type: "object"
    properties:
      type:
        type: "string"
      id:
        type: "integer"
        format: "int64"
      name:
        type: "string"
      comment:
        type: "string"
    xml:
      name: "Group"
  User:
    type: "object"
    properties:
      type:
        type: "string"
        enum:
          - user
          - group
      id:
        type: "integer"
        format: "int64"
      name:
        type: "string"
      comment:
        type: "string"
      login:
        type: "string"
      email:
        type: "string"
      language:
        type: "string"
      theme:
        type: "string"
      role:
        $ref: "#/definitions/Role"
      hidden:
        type: "boolean"
      disabled:
        type: "boolean"
      isguest:
        type: "boolean"
      isadmin:
        type: "boolean"
    xml:
      name: "User"
  Document:
    type: "object"
    properties:
      type:
        type: "string"
        enum:
          - document
      id:
        type: "integer"
        format: "int64"
      name:
        type: "string"
      date:
        type: "string"
      comment:
        type: "string"
      keywords:
        type: "string"
      ownerid:
        type: "integer"
        format: "int64"
      islocked:
        type: "boolean"
      sequence:
        type: "number"
      expires:
        type: "string"
      mimetype:
        type: "string"
      version:
        type: "integer"
        format: "int64"
      version_comment:
        type: "string"
      version_date:
        type: "string"
      size:
        type: "integer"
        format: "int64"
    xml:
      name: "Document"
  DocumentContent:
    type: "object"
    properties:
      id:
        type: "integer"
        format: "int64"
      version:
        type: "integer"
        format: "int64"
      date:
        type: "string"
      comment:
        type: "string"
      mimetype:
        type: "string"
      filetype:
        type: "string"
      origfilename:
        type: "string"
      size:
        type: "integer"
        format: "int64"
    xml:
      name: "DocumentContent"
  DocumentFile:
    type: "object"
    properties:
      id:
        type: "integer"
        format: "int64"
      version:
        type: "integer"
        format: "int64"
      date:
        type: "string"
      comment:
        type: "string"
      mimetype:
        type: "string"
      filetype:
        type: "string"
      origfilename:
        type: "string"
      public:
        type: "boolean"
      size:
        type: "integer"
        format: "int64"
    xml:
      name: "DocumentFile"
  DocumentLink:
    type: "object"
    properties:
      id:
        type: "integer"
        format: "int64"
      target:
        type: "integer"
        format: "int64"
      public:
        type: "boolean"
    xml:
      name: "DocumentLink"
  Folder:
    type: "object"
    properties:
      type:
        type: "string"
        enum:
          - folder
      id:
        type: "integer"
        format: "int64"
      name:
        type: "string"
      date:
        type: "string"
      comment:
        type: "string"
    xml:
      name: "Folder"
  Category:
    type: "object"
    properties:
      id:
        type: "integer"
        format: "int64"
      name:
        type: "string"
    xml:
      name: "Category"
  Attribute:
    type: "object"
    properties:
      id:
        type: "integer"
        format: "int64"
      name:
        type: "string"
      value:
        type: "string"
    xml:
      name: "Attribute"
  AttributeDefinition:
    type: "object"
    properties:
      id:
        type: "integer"
        format: "int64"
      name:
        type: "string"
      type:
        type: "integer"
        format: "int64"
      objtype:
        type: "integer"
        format: "int64"
      min:
        type: "integer"
        format: "int64"
      max:
        type: "integer"
        format: "int64"
      multiple:
        type: "boolean"
      valueset:
        type: "array"
        items:
          type: "string"
      regex:
        type: "string"
    xml:
      name: "AttributeDefintion"
  ApiResponse:
    type: "object"
    properties:
      success:
        type: "boolean"
      message:
        type: "string"
      data:
        type: "string"
  ApiResponseUser:
    type: "object"
    properties:
      success:
        type: "boolean"
      message:
        type: "string"
      data:
        $ref: "#/definitions/User"
  ApiResponseUsers:
    type: "object"
    properties:
      success:
        type: "boolean"
      message:
        type: "string"
      data:
        type: "array"
        items:
          $ref: "#/definitions/User"
  ApiResponseGroup:
    type: "object"
    properties:
      success:
        type: "boolean"
      message:
        type: "string"
      data:
        $ref: "#/definitions/Group"
  ApiResponseGroups:
    type: "object"
    properties:
      success:
        type: "boolean"
      message:
        type: "string"
      data:
        type: "array"
        items:
          $ref: "#/definitions/Group"
  ApiResponseDocument:
    type: "object"
    properties:
      success:
        type: "boolean"
      message:
        type: "string"
      data:
        $ref: "#/definitions/Document"
  ApiResponseDocuments:
    type: "object"
    properties:
      success:
        type: "boolean"
      message:
        type: "string"
      data:
        type: "array"
        items:
          $ref: "#/definitions/Document"
  ApiResponseDocumentContents:
    type: "object"
    properties:
      success:
        type: "boolean"
      message:
        type: "string"
      data:
        type: "array"
        items:
          $ref: "#/definitions/DocumentContent"
  ApiResponseDocumentFiles:
    type: "object"
    properties:
      success:
        type: "boolean"
      message:
        type: "string"
      data:
        type: "array"
        items:
          $ref: "#/definitions/DocumentFile"
  ApiResponseDocumentLinks:
    type: "object"
    properties:
      success:
        type: "boolean"
      message:
        type: "string"
      data:
        type: "array"
        items:
          $ref: "#/definitions/DocumentLink"
  ApiResponseFolder:
    type: "object"
    properties:
      success:
        type: "boolean"
      message:
        type: "string"
      data:
        $ref: "#/definitions/Folder"
  ApiResponseFolderPath:
    type: "object"
    properties:
      success:
        type: "boolean"
      message:
        type: "string"
      data:
        type: "array"
        items:
          type: "object"
          properties:
            id:
              type: "integer"
            name:
              type: "string"
              format: "int64"
  ApiResponseCategory:
    type: "object"
    properties:
      success:
        type: "boolean"
      message:
        type: "string"
      data:
        $ref: "#/definitions/Category"
  ApiResponseCategories:
    type: "object"
    properties:
      success:
        type: "boolean"
      message:
        type: "string"
      data:
        type: "array"
        items:
          $ref: "#/definitions/Category"
  ApiResponseAttributes:
    type: "object"
    properties:
      success:
        type: "boolean"
      message:
        type: "string"
      data:
        type: "array"
        items:
          $ref: "#/definitions/Attribute"
  ApiResponseAttributeDefinition:
    type: "object"
    properties:
      success:
        type: "boolean"
      message:
        type: "string"
      data:
        $ref: "#/definitions/AttributeDefinition"
  ApiResponseAttributeDefinitions:
    type: "object"
    properties:
      success:
        type: "boolean"
      message:
        type: "string"
      data:
        type: "array"
        items:
          $ref: "#/definitions/AttributeDefinition"
externalDocs:
  description: "Find out more about SeedDMS"
  url: "https://www.seeddms.org"
