diff --git a/apps/api/urls.py b/apps/api/urls.py
index c1b6bf48baa5970e7b16022552f38f5be15ee5c9..bb1fdce2255a66a53897e874b4b1b7daf0814412 100644
--- a/apps/api/urls.py
+++ b/apps/api/urls.py
@@ -7,6 +7,7 @@ from rest_framework import routers, serializers, viewsets
 from activity.api.urls import register_activity_urls
 from member.api.urls import register_members_urls
 from note.api.urls import register_note_urls
+from logs.api.urls import register_logs_urls
 
 
 class UserSerializer(serializers.ModelSerializer):
@@ -41,6 +42,7 @@ router.register('user', UserViewSet)
 register_members_urls(router, 'members')
 register_activity_urls(router, 'activity')
 register_note_urls(router, 'note')
+register_logs_urls(router, 'logs')
 
 app_name = 'api'
 
diff --git a/apps/logs/api/__init__.py b/apps/logs/api/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/apps/logs/api/serializers.py b/apps/logs/api/serializers.py
new file mode 100644
index 0000000000000000000000000000000000000000..7de7bc1a7c6e518d32c6286b1e1b18ebbc89306e
--- /dev/null
+++ b/apps/logs/api/serializers.py
@@ -0,0 +1,17 @@
+# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+from rest_framework import serializers
+
+from ..models import Changelog
+
+
+class ChangelogSerializer(serializers.ModelSerializer):
+    """
+    REST API Serializer for Changelog types.
+    The djangorestframework plugin will analyse the model `Changelog` and parse all fields in the API.
+    """
+
+    class Meta:
+        model = Changelog
+        fields = '__all__'
diff --git a/apps/logs/api/urls.py b/apps/logs/api/urls.py
new file mode 100644
index 0000000000000000000000000000000000000000..9a0ceaa8cec01b81f5bf5646bec374ab16199a42
--- /dev/null
+++ b/apps/logs/api/urls.py
@@ -0,0 +1,11 @@
+# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+from .views import ChangelogViewSet
+
+
+def register_logs_urls(router, path):
+    """
+    Configure router for Activity REST API.
+    """
+    router.register(path, ChangelogViewSet)
diff --git a/apps/logs/api/views.py b/apps/logs/api/views.py
new file mode 100644
index 0000000000000000000000000000000000000000..60da612be41793319d240a617b6eff43f523740a
--- /dev/null
+++ b/apps/logs/api/views.py
@@ -0,0 +1,17 @@
+# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+from rest_framework import viewsets
+
+from .serializers import ChangelogSerializer
+from ..models import Changelog
+
+
+class ChangelogViewSet(viewsets.ModelViewSet):
+    """
+    REST API View set.
+    The djangorestframework plugin will get all `Changelog` objects, serialize it to JSON with the given serializer,
+    then render it on /api/logs/
+    """
+    queryset = Changelog.objects.all()
+    serializer_class = ChangelogSerializer
diff --git a/apps/logs/models.py b/apps/logs/models.py
index 9ab3cf6a3a347081c66ea441cd8f56704e43de9c..10e2651f2f8475c4241c05a37f9c56b37c8d5bb5 100644
--- a/apps/logs/models.py
+++ b/apps/logs/models.py
@@ -56,6 +56,12 @@ class Changelog(models.Model):
         max_length=16,
         null=False,
         blank=False,
+        choices=[
+            ('create', _('create')),
+            ('edit', _('edit')),
+            ('delete', _('delete')),
+        ],
+        default='edit',
         verbose_name=_('action'),
     )
 
diff --git a/apps/logs/signals.py b/apps/logs/signals.py
index 1cd74067a73faa9679e8ea42bb9763589705b4b3..41f87cdab58c45cd996fea2094329d2a75ded26e 100644
--- a/apps/logs/signals.py
+++ b/apps/logs/signals.py
@@ -69,6 +69,7 @@ def save_object(sender, instance, **kwargs):
         else:
             user = note.get().user
 
+    # noinspection PyProtectedMember
     if user is not None and instance._meta.label_lower == "auth.user" and previous:
         # On n'enregistre pas les connexions
         if instance.last_login != previous.last_login:
@@ -80,8 +81,8 @@ def save_object(sender, instance, **kwargs):
             model = instance.__class__
             fields = '__all__'
 
-    previous_json = JSONRenderer().render(CustomSerializer(previous).data)
-    instance_json = JSONRenderer().render(CustomSerializer(instance).data)
+    previous_json = JSONRenderer().render(CustomSerializer(previous).data).decode("UTF-8")
+    instance_json = JSONRenderer().render(CustomSerializer(instance).data).decode("UTF-8")
 
     if previous_json == instance_json:
         # Pas de log s'il n'y a pas de modification
@@ -115,7 +116,7 @@ def delete_object(sender, instance, **kwargs):
             model = instance.__class__
             fields = '__all__'
 
-    instance_json = JSONRenderer().render(CustomSerializer(instance).data)
+    instance_json = JSONRenderer().render(CustomSerializer(instance).data).decode("UTF-8")
 
     Changelog.objects.create(user=user,
                              ip=ip,
diff --git a/note_kfet/settings/base.py b/note_kfet/settings/base.py
index 737350e29aa9d75631f4e109a94f23e1f82a6fce..84f07b6cbb828df762a2b9a5474b6392432d5bd4 100644
--- a/note_kfet/settings/base.py
+++ b/note_kfet/settings/base.py
@@ -140,6 +140,7 @@ REST_FRAMEWORK = {
         'rest_framework.permissions.DjangoModelPermissions'
     ],
     'DEFAULT_AUTHENTICATION_CLASSES': [
+        'rest_framework.authentication.SessionAuthentication',
         'rest_framework.authentication.TokenAuthentication',
     ]
 }