diff --git a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/course/CourseController.java b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/course/CourseController.java
index 06be0f52abf6023422e5ca78524c8531be419128..1e2bbac5e0f6e4d9a4752e9a0afc83a5c4adb5b7 100644
--- a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/course/CourseController.java
+++ b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/course/CourseController.java
@@ -2,6 +2,8 @@ package org.fuseri.modulelanguageschool.course;
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
 import jakarta.validation.Valid;
 import org.fuseri.model.dto.course.CourseCreateDto;
 import org.fuseri.model.dto.course.CourseDto;
@@ -42,6 +44,10 @@ public class CourseController {
      */
     @ApiOperation(value = "Create a new course")
     @PostMapping
+    @ApiResponses({
+            @ApiResponse(code = 201, message = "Course created successfully"),
+            @ApiResponse(code = 400, message = "Invalid request body")
+    })
     public ResponseEntity<CourseDto> create(@Valid @RequestBody CourseCreateDto dto) {
         CourseDto courseDto = courseFacade.create(dto);
         return ResponseEntity.status(HttpStatus.CREATED).body(courseDto);
@@ -55,10 +61,15 @@ public class CourseController {
      */
     @ApiOperation(value = "Retrieve a course by ID")
     @GetMapping("/find/{id}")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "Course found"),
+            @ApiResponse(code = 404, message = "Course not found")
+    })
     public ResponseEntity<CourseDto> find(@PathVariable Long id) {
         CourseDto courseDto = courseFacade.findById(id);
         return ResponseEntity.ok(courseDto);
     }
+
     /**
      * Retrieves a paginated list of courses
      *
@@ -67,6 +78,10 @@ public class CourseController {
      */
     @ApiOperation(value = "Retrieve a paginated list of courses")
     @GetMapping("/findAll")
+    @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Successfully retrieved courses"),
+            @ApiResponse(code = 404, message = "No courses found")
+    })
     public ResponseEntity<Page<CourseDto>> findAll(@RequestParam int page) {
         Page<CourseDto> courseDtoPage = courseFacade.findAll(PageRequest.of(page, 10, Sort.by(Sort.Direction.ASC, "name")));
         return ResponseEntity.ok(courseDtoPage);
@@ -80,6 +95,10 @@ public class CourseController {
      */
     @ApiOperation(value = "Retrieve a paginated list of courses of a given language")
     @GetMapping("/findAllByLang")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "Courses found"),
+            @ApiResponse(code = 400, message = "Invalid request body")
+    })
     public ResponseEntity<List<CourseDto>> findAll(@RequestParam LanguageTypeDto lang) {
         List<CourseDto> courseDtos = courseFacade.findAll(lang);
         return ResponseEntity.ok(courseDtos);
@@ -93,6 +112,10 @@ public class CourseController {
      */
     @ApiOperation(value = "Retrieve a paginated list of courses of a given language and proficiency")
     @GetMapping("/findAllByLangProf")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "Courses found"),
+            @ApiResponse(code = 400, message = "Invalid request body")
+    })
     public ResponseEntity<List<CourseDto>> findAll(@RequestParam LanguageTypeDto lang,
                                    @RequestParam ProficiencyLevelDto prof) {
         List<CourseDto> courses = courseFacade.findAll(lang, prof);
@@ -108,6 +131,11 @@ public class CourseController {
      */
     @ApiOperation(value = "Update an existing course")
     @PutMapping("/update/{id}")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "Course updated successfully"),
+            @ApiResponse(code = 400, message = "Invalid request body"),
+            @ApiResponse(code = 404, message = "Course not found")
+    })
     public ResponseEntity<CourseDto> update(@PathVariable Long id, @Valid @RequestBody CourseCreateDto dto) {
         CourseDto updatedCourse = courseFacade.update(id, dto);
         return ResponseEntity.ok(updatedCourse);
@@ -120,6 +148,10 @@ public class CourseController {
      */
     @ApiOperation(value = "Delete a course by ID")
     @DeleteMapping("/delete/{id}")
+    @ApiResponses({
+            @ApiResponse(code = 204, message = "Course deleted successfully"),
+            @ApiResponse(code = 404, message = "Course not found")
+    })
     public ResponseEntity<Void> delete(@PathVariable Long id) {
         courseFacade.delete(id);
         return ResponseEntity.noContent().build();
@@ -134,6 +166,10 @@ public class CourseController {
      */
     @ApiOperation(value = "Add student to the existing course")
     @PatchMapping("/enrol/{id}")
+    @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Successfully enrolled student in course"),
+            @ApiResponse(code = 404, message = "Course not found")
+    })
     public ResponseEntity<CourseDto> enrol(@PathVariable Long id, @RequestBody UserDto student) {
         CourseDto updatedCourse = courseFacade.enrol(id, student);
         return ResponseEntity.ok(updatedCourse);
@@ -148,6 +184,10 @@ public class CourseController {
      */
     @ApiOperation(value = "Remove student from the existing course")
     @PatchMapping("/expel/{id}")
+    @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Successfully expelled student from course"),
+            @ApiResponse(code = 404, message = "Course not found")
+    })
     public ResponseEntity<CourseDto> expel(@PathVariable Long id, @RequestBody UserDto student) {
         CourseDto updatedCourse = courseFacade.expel(id, student);
         return ResponseEntity.ok(updatedCourse);
diff --git a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/course/CourseService.java b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/course/CourseService.java
index 13079299f90503bc9f66ca889e05cd59ae6473f0..4e54b9f91bba5849884d37e2ac291c8dd9ee000b 100644
--- a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/course/CourseService.java
+++ b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/course/CourseService.java
@@ -1,12 +1,13 @@
 package org.fuseri.modulelanguageschool.course;
 
-import org.fuseri.modulelanguageschool.common.ResourceNotFoundException;
 import org.fuseri.modulelanguageschool.user.User;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
+import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.server.ResponseStatusException;
 
 import java.util.List;
 import java.util.Optional;
@@ -29,7 +30,8 @@ public class CourseService {
     @Transactional(readOnly = true)
     public Course findById(Long id) {
         return courseRepository.findById(id)
-                .orElseThrow(() -> new ResourceNotFoundException("Course with id: " + id + " was not found."));
+                .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND,
+                        "Course with id: " + id + " was not found."));
     }
 
     @Transactional(readOnly = true)
@@ -48,7 +50,8 @@ public class CourseService {
             course.setProficiency(newCourse.getProficiency());
             return courseRepository.save(course);
         } else {
-            throw new ResourceNotFoundException("Course with id: " + id + " was not found.");
+            throw new ResponseStatusException(HttpStatus.NOT_FOUND,
+                    "Course with id: " + id + " was not found.");
         }
     }
 
@@ -72,7 +75,8 @@ public class CourseService {
             course.enrolStudent(student);
             return courseRepository.save(course);
         } else {
-            throw new ResourceNotFoundException("Course with id: " + id + " was not found.");
+            throw new ResponseStatusException(HttpStatus.NOT_FOUND,
+                    "Course with id: " + id + " was not found.");
         }
     }
 
@@ -83,7 +87,8 @@ public class CourseService {
             course.expelStudent(student);
             return courseRepository.save(course);
         } else {
-            throw new ResourceNotFoundException("Course with id: " + id + " was not found.");
+            throw new ResponseStatusException(HttpStatus.NOT_FOUND,
+                    "Course with id: " + id + " was not found.");
         }
     }
 }
diff --git a/application/module-language-school/src/test/java/org/fuseri/modulelanguageschool/course/CourseServiceTest.java b/application/module-language-school/src/test/java/org/fuseri/modulelanguageschool/course/CourseServiceTest.java
index de62ebb600738b604d572b84ab23d804b2010ee1..f0ccbe5ba0be6b5204fbd910ef174dfb2decf548 100644
--- a/application/module-language-school/src/test/java/org/fuseri/modulelanguageschool/course/CourseServiceTest.java
+++ b/application/module-language-school/src/test/java/org/fuseri/modulelanguageschool/course/CourseServiceTest.java
@@ -1,6 +1,5 @@
 package org.fuseri.modulelanguageschool.course;
 
-import org.fuseri.modulelanguageschool.common.ResourceNotFoundException;
 import org.fuseri.modulelanguageschool.user.Address;
 import org.fuseri.modulelanguageschool.user.User;
 import org.fuseri.modulelanguageschool.user.UserType;
@@ -13,6 +12,8 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
+import org.springframework.web.server.ResponseStatusException;
+
 import java.util.*;
 
 import static org.mockito.Mockito.*;
@@ -50,7 +51,7 @@ final class CourseServiceTest {
     void notFoundById() {
         when(courseRepository.findById(anyLong())).thenReturn(Optional.empty());
 
-        Assertions.assertThrows(ResourceNotFoundException.class, () -> courseService.findById(anyLong()));
+        Assertions.assertThrows(ResponseStatusException.class, () -> courseService.findById(anyLong()));
     }
 
     @Test
@@ -94,7 +95,7 @@ final class CourseServiceTest {
         Long id = 1L;
         when(courseRepository.findById(anyLong())).thenReturn(Optional.empty());
 
-        Assertions.assertThrows(ResourceNotFoundException.class, () -> courseService.update(id, course));
+        Assertions.assertThrows(ResponseStatusException.class, () -> courseService.update(id, course));
     }
 
     @Test
@@ -147,7 +148,7 @@ final class CourseServiceTest {
         Long id = 1L;
         when(courseRepository.findById(anyLong())).thenReturn(Optional.empty());
 
-        Assertions.assertThrows(ResourceNotFoundException.class, () -> courseService.enrol(id, user));
+        Assertions.assertThrows(ResponseStatusException.class, () -> courseService.enrol(id, user));
     }
 
     @Test
@@ -168,7 +169,7 @@ final class CourseServiceTest {
         Long id = 1L;
         when(courseRepository.findById(anyLong())).thenReturn(Optional.empty());
 
-        Assertions.assertThrows(ResourceNotFoundException.class, () -> courseService.expel(id, user));
+        Assertions.assertThrows(ResponseStatusException.class, () -> courseService.expel(id, user));
     }
 
 }