diff --git a/core/lib/permissions.py b/core/lib/permissions.py
index 78091c84eef10e28d0119a2b0868bf810f53805b..3cd5342c95b0dbf711c7a4ab42e1c14e54bb2cf4 100644
--- a/core/lib/permissions.py
+++ b/core/lib/permissions.py
@@ -145,3 +145,8 @@ class IsAdminOrVacancyOwner(permissions.BasePermission):
             raise PermissionDenied(
                 "Checking owner permission on non-application object"
             )
+
+
+class AsAdminOrSupervisor(permissions.BasePermission):
+    def has_permission(self, request, view):
+        return is_admin_or_supervisor(request.user)
diff --git a/core/serializers/vacancies.py b/core/serializers/vacancies.py
index 1b4f15dd69bc02e42d009f32064312a6ddf2a36b..da3d5b101e4e6433a326c6a1e9bd46aa970e642d 100644
--- a/core/serializers/vacancies.py
+++ b/core/serializers/vacancies.py
@@ -58,3 +58,21 @@ class ApplicationStatusSerializer(serializers.ModelSerializer):
     class Meta:
         model = Application
         fields = ['status']
+
+
+class SupervisorStudentApplicationSerializer(serializers.ModelSerializer):
+    def to_representation(self, instance):
+        status_map = ["new", "read", "bookmarked", "rejected", "accepted" ]
+        return {
+            'name' : instance.student.full_name,
+            'npm' : instance.student.npm,
+            'vacancy_name' : instance.vacancy.name,
+            'company_name' : instance.vacancy.company.name,
+            'status' : status_map[instance.status]
+        }
+
+    class Meta:
+        model = Application
+        fields = ['name', 'npm', 'vacancy_name', 'company_name', 'status']
+        read_only_fields = ['name', 'npm', 'vacancy_name', 'company_name', 'status']
+
diff --git a/core/tests/test_vacancies.py b/core/tests/test_vacancies.py
index 82a1b07bb91a566814d9b7eae5ebefae8b50ae52..14da0a242baf57ab719354b35600778a2580c2ec 100644
--- a/core/tests/test_vacancies.py
+++ b/core/tests/test_vacancies.py
@@ -5,7 +5,7 @@ from django.contrib.auth.models import User
 from rest_framework import status
 from rest_framework.test import APITestCase
 
-from core.models.accounts import Company
+from core.models.accounts import Company, Supervisor
 from core.models.vacancies import Vacancy
 
 
@@ -186,3 +186,23 @@ class CompanyListsTests(APITestCase):
         url = '/api/companies/' + str(new_company.pk) + '/applications'
         response = self.client.post(url, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
+
+
+class SupervisorStudentApplicationTests(APITestCase):
+
+    def test_list_student_application(self):
+        new_user = User.objects.create_user('dummy.supervisor', 'dummy.supervisor@asd.asd', 'lalala123')
+        new_supervisor = Supervisor.objects.create(user=new_user, nip=1212121212)
+        self.client.force_authenticate(user=new_user)
+
+        url = '/api/student-applications/'
+        response = self.client.get(url, format='json')
+        self.assertEqual(response.status_code, status.HTTP_200_OK)
+
+    def test_list_student_application_unauthorized(self):
+        new_user = User.objects.create_user('dummy.supervisor', 'dummy.supervisor@asd.asd', 'lalala123')
+        self.client.force_authenticate(user=new_user)
+
+        url = '/api/student-applications/'
+        response = self.client.get(url, format='json')
+        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
diff --git a/core/views/vacancies.py b/core/views/vacancies.py
index 354f3a84434689b87a0f4f98150c8d871e942698..66c8429323ac5b8734d98f6a017a70d14b121b38 100644
--- a/core/views/vacancies.py
+++ b/core/views/vacancies.py
@@ -8,11 +8,11 @@ from rest_framework.permissions import IsAuthenticated
 from rest_framework.response import Response
 from rest_framework.pagination import PageNumberPagination
 from core.lib.mixins import MultiSerializerViewSetMixin
-from core.lib.permissions import IsAdminOrStudent, IsAdminOrCompany, IsAdminOrVacancyOwner
+from core.lib.permissions import IsAdminOrStudent, IsAdminOrCompany, IsAdminOrVacancyOwner, AsAdminOrSupervisor
 from core.models import Student, Company
 from core.models.vacancies import Vacancy, Application
 from core.serializers.vacancies import VacancySerializer, ApplicationSerializer, ApplicationStatusSerializer, \
-    PostVacancySerializer
+    PostVacancySerializer, SupervisorStudentApplicationSerializer
 
 
 class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet):
@@ -206,3 +206,17 @@ class BookmarkedVacancyByStudentViewSet(viewsets.GenericViewSet):
         student = get_object_or_404(Student.objects.all(), pk=student_id)
         student.bookmarked_vacancies.remove(vacancy)
         return Response(self.serializer_class(student.bookmarked_vacancies, many=True, context={'request': request}).data)
+
+
+class SupervisorStudentApplicationViewSet(viewsets.GenericViewSet):
+    queryset = Student.objects.all()
+    serializer_class = SupervisorStudentApplicationSerializer
+    pagination_class = PageNumberPagination
+    permission_classes = [AsAdminOrSupervisor]
+
+    def list(self, request):
+        applications = Application.objects.order_by('student')
+        page = self.paginate_queryset(applications)
+        if page is not None:
+            return self.get_paginated_response(self.serializer_class(applications, many=True, context={'request': request}).data)
+        return Response(self.serializer_class(applications, many=True, context={'request': request}).data)
diff --git a/kape/urls.py b/kape/urls.py
index da59e3aa14b08d2ed1e43f55f6f1a985d66cd6e4..0a398fecd42e05caa1eb96333c05f1a862875929 100755
--- a/kape/urls.py
+++ b/kape/urls.py
@@ -25,7 +25,8 @@ from core import apps
 from core.views.accounts import StudentViewSet, CompanyViewSet, SupervisorViewSet, UserViewSet, LoginViewSet, \
     CompanyRegisterViewSet, StudentProfileViewSet
 from core.views.vacancies import VacancyViewSet, BookmarkedVacancyByStudentViewSet, ApplicationViewSet, \
-    CompanyApplicationViewSet, CompanyVacanciesViewSet, CompanyApplicationStatusViewSet
+    CompanyApplicationViewSet, CompanyVacanciesViewSet, CompanyApplicationStatusViewSet, \
+    SupervisorStudentApplicationViewSet
 
 schema_view = get_swagger_view()
 router = routers.DefaultRouter()
@@ -38,6 +39,7 @@ router.register(r'register', CompanyRegisterViewSet)
 router.register(r'vacancies', VacancyViewSet)
 router.register(r'profiles/students', StudentProfileViewSet)
 router.register(r'applications', CompanyApplicationStatusViewSet)
+router.register(r'student-applications', SupervisorStudentApplicationViewSet)
 router.register(r'students/(?P<student_id>\d+)/bookmarked-vacancies', BookmarkedVacancyByStudentViewSet,
                 base_name='bookmarked-vacancy-list')
 router.register(r'students/(?P<student_id>\d+)/applied-vacancies', ApplicationViewSet,