diff --git a/docs/api.yml b/docs/api.yml
index 5ce5201b64435ebad3524a6c8463092d9a221eb9..1213e690eb4ffc100a340dd4d2b7c38a2d5b56a0 100644
--- a/docs/api.yml
+++ b/docs/api.yml
@@ -6,11 +6,6 @@ info:
   description: The StorageLeaf API
   version: "2.7.0"
   title: StorageLeaf API
-tags:
-  - name: admins
-    description: Secured Admin-only calls
-  - name: public
-    description: Operations available to the public
 
 paths:
   /version:
@@ -26,752 +21,39 @@ paths:
             application/json:
               schema:
                 $ref: '#/components/schemas/Version'
-  /login:
-    post:
-      tags:
-        - public
-      summary: Gets a bearer JSON Web Token
-      operationId: login
-      requestBody:
-        description: Credentials
-        required: true
-        content:
-          application/json:
-            schema:
-              $ref: '#/components/schemas/Credentials'
-      responses:
-        '200':
-          description: success response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/TokenResponse'
-        '401':
-          description: unauthorized response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/UnauthorizedResponse'
-        default:
-          description: error response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/ErrorResponse'
-
-  /roadmaps:
-    get:
-      tags:
-        - public
-      summary: Gets all roadmaps
-      operationId: roadmaps
-      responses:
-        '200':
-          description: All available roadmaps
-          content:
-            application/json:
-              schema:
-                type: array
-                items:
-                  $ref: '#/components/schemas/Roadmap'
-  /roadmap/{roadmapID}:
-    get:
-      tags:
-        - public
-      summary: Gets  a specific roadmap
-      operationId: roadmap
-      parameters:
-        - in: path
-          name: roadmapID
-          description: The roadmap ID
-          required: true
-          schema:
-            type: integer
-      responses:
-        '200':
-          description: The roadmap
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/Roadmap'
-    delete:
-      tags:
-        - admins
-      description: Deletes a roadmap based on the given ID
-      operationId: deleteRoadmap
-      parameters:
-        - in: path
-          name: roadmapID
-          description: The roadmap ID
-          required: true
-          schema:
-            type: integer
-      security:
-        - BearerAuth: []
-      responses:
-        '200':
-          description: success response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/SuccessResponse'
-        '401':
-          description: unauthorized response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/UnauthorizedResponse'
-        default:
-          description: error response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/ErrorResponse'
-  /roadmap:
-    post:
-      tags:
-        - admins
-      summary: Adds a new roadmap
-      operationId: addRoadmap
-      requestBody:
-        description: Roadmap to add
-        required: true
-        content:
-          application/json:
-            schema:
-              $ref: '#/components/schemas/NewRoadmap'
-      security:
-        - BearerAuth: []
-      responses:
-        '200':
-          description: success response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/SuccessResponse'
-        '401':
-          description: unauthorized response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/UnauthorizedResponse'
-        default:
-          description: error response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/ErrorResponse'
-    put:
-      tags:
-        - admins
-      summary: Updates a roadmap
-      operationId: updateRoadmap
-      requestBody:
-        description: Roadmap to update
-        required: true
-        content:
-          application/json:
-            schema:
-              $ref: '#/components/schemas/Roadmap'
-      security:
-        - BearerAuth: []
-      responses:
-        '200':
-          description: success response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/SuccessResponse'
-        '401':
-          description: unauthorized response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/UnauthorizedResponse'
-        default:
-          description: error response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/ErrorResponse'
-  /roadmap/{roadmapID}/full:
-    get:
-      tags:
-        - public
-      summary: Gets  a specific roadmap with all milestones, tasks and sub tasks
-      operationId: roadmapFull
-      parameters:
-        - in: path
-          name: roadmapID
-          description: The roadmap ID
-          required: true
-          schema:
-            type: integer
-      responses:
-        '200':
-          description: The roadmap
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/RoadmapFull'
-
-  /milestones/{roadmapID}:
-    get:
-      tags:
-        - public
-      summary: Gets all milestones for a roadmap
-      operationId: milestones
-      parameters:
-        - in: path
-          name: roadmapID
-          description: The roadmap ID
-          required: true
-          schema:
-            type: integer
-      responses:
-        '200':
-          description: All milestones for the given roadmap ID
-          content:
-            application/json:
-              schema:
-                type: array
-                items:
-                  $ref: '#/components/schemas/Milestone'
-  /milestones/{roadmapID}/open:
-    get:
-      tags:
-        - public
-      summary: Gets all open milestones for a roadmap
-      operationId: openMilestones
-      parameters:
-        - in: path
-          name: roadmapID
-          description: The roadmap ID
-          required: true
-          schema:
-            type: integer
-      responses:
-        '200':
-          description: All open milestones for the given roadmap ID
-          content:
-            application/json:
-              schema:
-                type: array
-                items:
-                  $ref: '#/components/schemas/Milestone'
-  /milestones/{roadmapID}/latest:
-    get:
-      tags:
-        - public
-      summary: Gets the lastest finished milestone for a roadmap
-      operationId: latestMilestone
-      parameters:
-        - in: path
-          name: roadmapID
-          description: The roadmap ID
-          required: true
-          schema:
-            type: integer
-      responses:
-        '200':
-          description: The latest finished milestone for the given roadmap ID
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/Milestone'
-  /milestone/{milestoneID}:
-    get:
-      tags:
-        - public
-      summary: Gets  a specific milestone
-      operationId: milestone
-      parameters:
-        - in: path
-          name: milestoneID
-          description: The milestone ID
-          required: true
-          schema:
-            type: string
-      responses:
-        '200':
-          description: The milestone
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/Milestone'
-    delete:
-      tags:
-        - admins
-      description: Deletes a milestone based on the given ID
-      operationId: deleteMilestone
-      parameters:
-        - in: path
-          name: milestoneID
-          description: The milestone ID
-          required: true
-          schema:
-            type: integer
-      security:
-        - BearerAuth: []
-      responses:
-        '200':
-          description: success response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/SuccessResponse'
-        '401':
-          description: unauthorized response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/UnauthorizedResponse'
-        default:
-          description: error response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/ErrorResponse'
-  /milestone:
-    post:
-      tags:
-        - admins
-      summary: Adds a new milestone
-      operationId: addMilestone
-      requestBody:
-        description: Milestone to add
-        required: true
-        content:
-          application/json:
-            schema:
-              $ref: '#/components/schemas/NewMilestone'
-      security:
-        - BearerAuth: []
-      responses:
-        '200':
-          description: success response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/SuccessResponse'
-        '401':
-          description: unauthorized response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/UnauthorizedResponse'
-        default:
-          description: error response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/ErrorResponse'
-    put:
-      tags:
-        - admins
-      summary: Updates a milestone
-      operationId: updateMilestone
-      requestBody:
-        description: Milestone to update
-        required: true
-        content:
-          application/json:
-            schema:
-              $ref: '#/components/schemas/Milestone'
-      security:
-        - BearerAuth: []
-      responses:
-        '200':
-          description: success response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/SuccessResponse'
-        '401':
-          description: unauthorized response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/UnauthorizedResponse'
-        default:
-          description: error response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/ErrorResponse'
-
-  /milestone/{milestoneID}/close:
-    post:
-      tags:
-        - admins
-      summary: Closes a milestone and all corresponding tasks and sub tasks
-      operationId: closeMilestone
-      parameters:
-        - in: path
-          name: milestoneID
-          description: The milestone ID
-          required: true
-          schema:
-            type: integer
-      security:
-        - BearerAuth: []
-      responses:
-        '200':
-          description: success response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/SuccessResponse'
-        '401':
-          description: unauthorized response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/UnauthorizedResponse'
-        default:
-          description: error response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/ErrorResponse'
-
-  /tasks/{milestoneID}:
-    get:
-      tags:
-        - public
-      summary: Gets all tasks for a milestone
-      operationId: tasks
-      parameters:
-        - in: path
-          name: milestoneID
-          description: The milestone ID
-          required: true
-          schema:
-            type: integer
-      responses:
-        '200':
-          description: All tasks for the given milestone ID
-          content:
-            application/json:
-              schema:
-                type: array
-                items:
-                  $ref: '#/components/schemas/Task'
-  /tasks/{milestoneID}/open:
-    get:
-      tags:
-        - public
-      summary: Gets all open tasks for a milestone
-      operationId: openTasks
-      parameters:
-        - in: path
-          name: milestoneID
-          description: The milestone ID
-          required: true
-          schema:
-            type: integer
-      responses:
-        '200':
-          description: All open tasks for the given milestone ID
-          content:
-            application/json:
-              schema:
-                type: array
-                items:
-                  $ref: '#/components/schemas/Task'
-  /task/{taskID}:
-    get:
-      tags:
-        - public
-      summary: Gets  a specific task
-      operationId: task
-      parameters:
-        - in: path
-          name: taskID
-          description: The task ID
-          required: true
-          schema:
-            type: string
-      responses:
-        '200':
-          description: The task
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/Task'
-    delete:
-      tags:
-        - admins
-      description: Deletes a task based on the given ID
-      operationId: deleteTask
-      parameters:
-        - in: path
-          name: taskID
-          description: The task ID
-          required: true
-          schema:
-            type: integer
-      security:
-        - BearerAuth: []
-      responses:
-        '200':
-          description: success response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/SuccessResponse'
-        '401':
-          description: unauthorized response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/UnauthorizedResponse'
-        default:
-          description: error response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/ErrorResponse'
-  /task:
-    post:
-      tags:
-        - admins
-      summary: Adds a new task
-      operationId: addTask
-      requestBody:
-        description: Task to add
-        required: true
-        content:
-          application/json:
-            schema:
-              $ref: '#/components/schemas/NewTask'
-      security:
-        - BearerAuth: []
-      responses:
-        '200':
-          description: success response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/SuccessResponse'
-        '401':
-          description: unauthorized response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/UnauthorizedResponse'
-        default:
-          description: error response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/ErrorResponse'
-    put:
-      tags:
-        - admins
-      summary: Updates a task
-      operationId: updateTask
-      requestBody:
-        description: Task to update
-        required: true
-        content:
-          application/json:
-            schema:
-              $ref: '#/components/schemas/Task'
-      security:
-        - BearerAuth: []
-      responses:
-        '200':
-          description: success response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/SuccessResponse'
-        '401':
-          description: unauthorized response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/UnauthorizedResponse'
-        default:
-          description: error response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/ErrorResponse'
-
-  /subtasks/{taskID}:
+  /devices:
     get:
-      tags:
-        - public
-      summary: Gets all sub taks for a task
-      operationId: substasks
-      parameters:
-        - in: path
-          name: taskID
-          description: The task ID
-          required: true
-          schema:
-            type: integer
+      summary: Gets all devices
+      operationId: devices
       responses:
         '200':
-          description: All sub tasks for the given task ID
+          description: All available devices
           content:
             application/json:
               schema:
                 type: array
                 items:
-                  $ref: '#/components/schemas/SubTask'
-  /subtasks/{taskID}/open:
+                  $ref: '#/components/schemas/Device'
+  /device/{deviceName}:
     get:
-      tags:
-        - public
-      summary: Gets all open sub taks for a task
-      operationId: openSubtasks
+      summary: Gets a specific device
+      operationId: device
       parameters:
         - in: path
-          name: taskID
-          description: The task ID
-          required: true
-          schema:
-            type: integer
-      responses:
-        '200':
-          description: All open sub tasks for the given task ID
-          content:
-            application/json:
-              schema:
-                type: array
-                items:
-                  $ref: '#/components/schemas/SubTask'
-  /subtask/{subtaskID}:
-    get:
-      tags:
-        - public
-      summary: Gets  a specific sub task
-      operationId: subtask
-      parameters:
-        - in: path
-          name: subtaskID
-          description: The sub task ID
+          name: deviceName
+          description: The device name
           required: true
           schema:
             type: string
       responses:
         '200':
-          description: The sub task
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/SubTask'
-    delete:
-      tags:
-        - admins
-      description: Deletes a sub task based on the given ID
-      operationId: deleteSubTask
-      parameters:
-        - in: path
-          name: subtaskID
-          description: The sub task ID
-          required: true
-          schema:
-            type: integer
-      security:
-        - BearerAuth: []
-      responses:
-        '200':
-          description: success response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/SuccessResponse'
-        '401':
-          description: unauthorized response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/UnauthorizedResponse'
-        default:
-          description: error response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/ErrorResponse'
-  /subtask:
-    post:
-      tags:
-        - admins
-      summary: Adds a new sub task
-      operationId: addSubTask
-      requestBody:
-        description: Sub task to add
-        required: true
-        content:
-          application/json:
-            schema:
-              $ref: '#/components/schemas/NewSubTask'
-      security:
-        - BearerAuth: []
-      responses:
-        '200':
-          description: success response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/SuccessResponse'
-        '401':
-          description: unauthorized response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/UnauthorizedResponse'
-        default:
-          description: error response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/ErrorResponse'
-    put:
-      tags:
-        - admins
-      summary: Updates a sub task
-      operationId: updateSubTask
-      requestBody:
-        description: Sub task to update
-        required: true
-        content:
-          application/json:
-            schema:
-              $ref: '#/components/schemas/SubTask'
-      security:
-        - BearerAuth: []
-      responses:
-        '200':
-          description: success response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/SuccessResponse'
-        '401':
-          description: unauthorized response
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/UnauthorizedResponse'
-        default:
-          description: error response
+          description: The device
           content:
             application/json:
               schema:
-                $ref: '#/components/schemas/ErrorResponse'
+                $ref: '#/components/schemas/Device'
 
 components:
-  securitySchemes:
-    BearerAuth:
-      type: http
-      scheme: bearer
-      bearerFormat: JWT
-
   schemas:
     Version:
       type: object
@@ -791,258 +73,19 @@ components:
           format: date
           example: "30.05.19"
 
-    Credentials:
-      type: object
-      required:
-        - username
-        - password
-      properties:
-        username:
-          type: string
-          example: "admin"
-        password:
-          type: string
-          example: "123"
-
-    Roadmap:
+    Device:
       type: object
       required:
         - ID
-        - Projectname
-      properties:
-        ID:
-          type: integer
-          example: 1
-        Projectname:
-          type: string
-          example: "Example Roadmap"
-
-    RoadmapFull:
-      allOf:
-        - $ref: '#/components/schemas/Roadmap'
-        - type: object
-          properties:
-            milestones:
-              type: array
-              items:
-                allOf:
-                  - $ref: '#/components/schemas/Milestone'
-                  - type: object
-                    properties:
-                      tasks:
-                        type: array
-                        items:
-                          allOf:
-                            - $ref: '#/components/schemas/Task'
-                            - type: object
-                              properties:
-                                subtasks:
-                                  type: array
-                                  items:
-                                    $ref: '#/components/schemas/SubTask'
-
-    NewRoadmap:
-      type: object
-      required:
-        - ID
-        - Projectname
+        - name
       properties:
         ID:
           type: integer
           example: 1
         Projectname:
           type: string
-          example: "Example Roadmap"
-
-    Milestone:
-      type: object
-      required:
-        - ID
-        - RoadmapID
-        - VersionCode
-        - VersionName
-        - Title
-        - DueDate
-        - CompletionDate
-        - Status
-      properties:
-        ID:
-          type: integer
-          example: 1
-        RoadmapID:
-          type: integer
-          example: 2
-        VersionCode:
-          type: integer
-          example: 3
-        VersionName:
-          type: string
-          example: "v1.0.0"
-        Title:
-          type: string
-          example: "My awesome milestone"
-        DueDate:
-          type: string
-          format: date
-          example: "2019-05-30"
-        CompletionDate:
-          type: string
-          format: date
-          example: "2019-05-30"
-        Status:
-          type: integer
-          enum:
-            - 0
-            - 1
-
-    NewMilestone:
-      type: object
-      required:
-        - RoadmapID
-        - VersionCode
-        - VersionName
-        - Title
-        - DueDate
-        - CompletionDate
-        - Status
-      properties:
-        RoadmapID:
-          type: integer
-          example: 2
-        VersionCode:
-          type: integer
-          example: 3
-        VersionName:
-          type: string
-          example: "v1.0.0"
-        Title:
-          type: string
-          example: "My awesome milestone"
-        DueDate:
-          type: string
-          format: date
-          example: "2019-05-30"
-        CompletionDate:
-          type: string
-          format: date
-          example: "2019-05-30"
-        Status:
-          type: integer
-          enum:
-            - 0
-            - 1
-
-    Task:
-      type: object
-      required:
-        - ID
-        - MilestoneID
-        - Title
-        - Description
-        - Status
-      properties:
-        ID:
-          type: integer
-          example: 1
-        MilestoneID:
-          type: integer
-          example: 2
-        Title:
-          type: string
-          example: "My awesome task"
-        Description:
-          type: string
-          example: "Lorem Ipsum dolor sit amet"
-        Status:
-          type: integer
-          enum:
-            - 0
-            - 1
+          example: "My Device"
 
-    NewTask:
-      type: object
-      required:
-        - MilestoneID
-        - Title
-        - Description
-        - Status
-      properties:
-        MilestoneID:
-          type: integer
-          example: 2
-        Title:
-          type: string
-          example: "My awesome task"
-        Description:
-          type: string
-          example: "Lorem Ipsum dolor sit amet"
-        Status:
-          type: integer
-          enum:
-            - 0
-            - 1
-
-    SubTask:
-      type: object
-      required:
-        - ID
-        - TaskID
-        - Title
-        - Description
-        - Status
-      properties:
-        ID:
-          type: integer
-          example: 1
-        TaskID:
-          type: integer
-          example: 2
-        Title:
-          type: string
-          example: "My awesome sub task"
-        Description:
-          type: string
-          example: "Lorem Ipsum dolor sit amet"
-        Status:
-          type: integer
-          enum:
-            - 0
-            - 1
-
-    NewSubTask:
-      type: object
-      required:
-        - TaskID
-        - Title
-        - Description
-        - Status
-      properties:
-        TaskID:
-          type: integer
-          example: 2
-        Title:
-          type: string
-          example: "My awesome sub task"
-        Description:
-          type: string
-          example: "Lorem Ipsum dolor sit amet"
-        Status:
-          type: integer
-          enum:
-            - 0
-            - 1
-
-    UnauthorizedResponse:
-      description: Access token is missing or invalid
-      properties:
-        msg:
-          type: string
-          example: "Missing Authorization Header"
-    TokenResponse:
-      description: JSON web token
-      properties:
-        access_token:
-          type: string
     SuccessResponse:
       required:
         - success