diff --git a/pom.xml b/pom.xml
index ef6b504ec2357172c2e43681f8c4068db56a2b0e..cdce69a3e3032b91d116ee781dd1d9974ffe5c42 100644
--- a/pom.xml
+++ b/pom.xml
@@ -50,7 +50,12 @@
             <version>1.18.30</version>
             <scope>provided</scope>
         </dependency>
-	</dependencies>
+        <dependency>
+            <groupId>org.springdoc</groupId>
+            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
+            <version>2.3.0</version>
+        </dependency>
+    </dependencies>
 
 	<build>
 		<plugins>
diff --git a/src/main/java/com/cloudcomputing/todo/controller/UserController.java b/src/main/java/com/cloudcomputing/todo/controller/UserController.java
index e9b55f0af0094d870b08558debcb984d903e5aa4..7cf9194bd5db7b3ca43483ddced8f91557590ae7 100644
--- a/src/main/java/com/cloudcomputing/todo/controller/UserController.java
+++ b/src/main/java/com/cloudcomputing/todo/controller/UserController.java
@@ -3,6 +3,7 @@ package com.cloudcomputing.todo.controller;
 import com.cloudcomputing.todo.dto.TodoDTO;
 import com.cloudcomputing.todo.dto.UserDTO;
 import com.cloudcomputing.todo.service.UserService;
+import io.swagger.v3.oas.annotations.Operation;
 import jakarta.servlet.http.HttpServletRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -18,6 +19,7 @@ public class UserController {
     @Autowired
     private UserService userService;
 
+    @Operation(summary = "sign up", description="creates a new user in the system")
     @PostMapping("/signup")
     public ResponseEntity<UserDTO> singUp(@RequestBody UserDTO userDTO) {
         UserDTO newUser = userService.createUser(userDTO);
@@ -29,6 +31,7 @@ public class UserController {
         return new ResponseEntity<>(HttpStatus.CONFLICT);
     }
 
+    @Operation(summary = "sign in", description = "logs in an existing user")
     @PostMapping("/signin")
     public ResponseEntity<UserDTO> login(HttpServletRequest request, @RequestBody UserDTO user) {
         boolean loginSuccessful = userService.login(request, user);
@@ -39,6 +42,7 @@ public class UserController {
         return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED);
     }
 
+    @Operation(summary = "sign out", description = "signs out a logged in user")
     @PostMapping("/signout")
     public ResponseEntity<String> logout(HttpServletRequest request, @RequestBody String userId) {
         boolean logoutSuccessful = userService.logout(request, userId);
@@ -49,6 +53,7 @@ public class UserController {
         return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED);
     }
 
+    @Operation(summary = "add new todo", description = "adds a new todo for the currently logged in user")
     @PostMapping("/addTodo")
     public ResponseEntity<List<TodoDTO>> addTodo(HttpServletRequest request, @RequestBody TodoDTO todoDTO) {
         if(userService.validateSession(request)){
@@ -59,6 +64,7 @@ public class UserController {
         return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED);
     }
 
+    @Operation(summary = "delete existing todo", description = "deletes a specified todo for the currently logged in user")
     @DeleteMapping("/deleteTodo")
     public ResponseEntity<List<TodoDTO>> deleteTodo(HttpServletRequest request, @RequestParam String userId, @RequestParam String todoId) {
         System.out.println("controller here");
@@ -71,6 +77,7 @@ public class UserController {
         return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED);
     }
 
+    @Operation(summary = "get all todos", description = "returns all todos for the currently logged in user")
     @GetMapping("/getAllTodos")
     public ResponseEntity<List<TodoDTO>> getAllTodos(HttpServletRequest request, @RequestParam String userId) {
         if(userService.validateSession(request)){
@@ -81,6 +88,7 @@ public class UserController {
         return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED);
     }
 
+    @Operation(summary = "mark a todo as completed", description = "sets the specified todos status to 'completed'")
     @PatchMapping("/setTodoComplete")
     public ResponseEntity<List<TodoDTO>> setTodoComplete(HttpServletRequest request, @RequestParam String userId, @RequestParam String todoId) {
         if(userService.validateSession(request)){
@@ -91,6 +99,7 @@ public class UserController {
         return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED);
     }
 
+    @Operation(summary = "validate the session", description = "checks if the current session / jsessionid is still valid")
     @GetMapping("/validateSession")
     public ResponseEntity<Boolean> validateSession(HttpServletRequest request) {
         if(userService.validateSession(request)){
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 474efcca7d4fc19fe49c45bf52cb5b505372253b..765f795783cfa613bdf02ec28d168183b7d02586 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,3 +1,6 @@
 spring.application.name=todo
 server.port=9876
 spring.data.mongodb.uri=mongodb://tododbuser:tododbadminpassword@192.168.179.24:27017/todo
+
+#openapi setup
+springdoc.api-docs.path=/v3/api-docs