diff --git a/AKModel/models.py b/AKModel/models.py
index b371953669e9e5d594132dbe351d44d4c6f28d7d..a49e87f431c7b9395ee2c78ff3027bf786d1a156 100644
--- a/AKModel/models.py
+++ b/AKModel/models.py
@@ -480,5 +480,21 @@ class ConstraintViolation(models.Model):
 
     get_details.short_description = _('Details')
 
+    @property
+    def details(self):
+        return self.get_details()
+
+    @property
+    def level_display(self):
+        return self.get_level_display()
+
+    @property
+    def type_display(self):
+        return self.get_type_display()
+
+    @property
+    def timestamp_display(self):
+        return self.timestamp.astimezone(self.event.timezone).strftime('%d.%m.%y %H:%M')
+
     def __str__(self):
         return f"{self.get_level_display()}: {self.get_type_display()} [{self.get_details()}]"
diff --git a/AKModel/urls.py b/AKModel/urls.py
index 0323983749ecd68105fab57b17ab30c37e50fc74..184ab59415a249bbc52e607b9a47f1aa5af29856 100644
--- a/AKModel/urls.py
+++ b/AKModel/urls.py
@@ -17,10 +17,12 @@ api_router.register('akslot', views.AKSlotViewSet, basename='AKSlot')
 
 extra_paths = []
 if apps.is_installed("AKScheduling"):
-    from AKScheduling.api import ResourcesViewSet, RoomAvailabilitiesView, EventsView, EventsViewSet
+    from AKScheduling.api import ResourcesViewSet, RoomAvailabilitiesView, EventsView, EventsViewSet, \
+    ConstraintViolationsViewSet
 
     api_router.register('scheduling-resources', ResourcesViewSet, basename='scheduling-resources')
     api_router.register('scheduling-event', EventsViewSet, basename='scheduling-event')
+    api_router.register('scheduling-constraint-violations', ConstraintViolationsViewSet, basename='scheduling-constraint-violations')
 
     extra_paths = [
         path('api/scheduling-events/', EventsView.as_view(), name='scheduling-events'),
diff --git a/AKScheduling/api.py b/AKScheduling/api.py
index 27b4252e94adc1ffa44e4d2481bc94987d7087f1..af73c791053ddab2e6922f8b69610914640d9ff6 100644
--- a/AKScheduling/api.py
+++ b/AKScheduling/api.py
@@ -7,7 +7,7 @@ from django.views.generic import ListView
 from rest_framework import viewsets, mixins, serializers, permissions
 
 from AKModel.availability.models import Availability
-from AKModel.models import Room, AKSlot
+from AKModel.models import Room, AKSlot, ConstraintViolation
 from AKModel.views import EventSlugMixin
 
 
@@ -109,3 +109,20 @@ class EventsViewSet(EventSlugMixin, viewsets.ModelViewSet):
 
     def get_queryset(self):
         return AKSlot.objects.filter(event=self.event)
+
+
+class ConstraintViolationSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = ConstraintViolation
+        fields = ['pk', 'type_display', 'aks', 'ak_slots', 'ak_owner', 'room', 'requirement', 'category', 'comment', 'timestamp_display', 'manually_resolved', 'level_display', 'details']
+
+
+class ConstraintViolationsViewSet(EventSlugMixin, viewsets.ModelViewSet):
+    permission_classes = (permissions.DjangoModelPermissions,)
+    serializer_class = ConstraintViolationSerializer
+
+    def get_object(self):
+        return get_object_or_404(ConstraintViolation, pk=self.kwargs["pk"])
+
+    def get_queryset(self):
+        return ConstraintViolation.objects.filter(event=self.event)