diff --git a/aleksis/apps/alsijil/schema/__init__.py b/aleksis/apps/alsijil/schema/__init__.py
index 62440a144a86e09ae7abf9a1d189cd79c6925d7f..4ecfef27ee460548e31b017fff80d262d1202410 100644
--- a/aleksis/apps/alsijil/schema/__init__.py
+++ b/aleksis/apps/alsijil/schema/__init__.py
@@ -18,6 +18,11 @@ from .extra_marks import (
     ExtraMarkBatchDeleteMutation,
     ExtraMarkType,
 )
+from .personal_note import (
+    PersonalNoteBatchCreateMutation,
+    PersonalNoteBatchDeleteMutation,
+    PersonalNoteBatchPatchMutation,
+)
 
 from ..models import Documentation
 from .documentation import (
@@ -183,3 +188,7 @@ class Mutation(graphene.ObjectType):
     create_extra_marks = ExtraMarkBatchCreateMutation.Field()
     update_extra_marks = ExtraMarkBatchPatchMutation.Field()
     delete_extra_marks = ExtraMarkBatchDeleteMutation.Field()
+
+    create_personal_note = PersonalNoteBatchCreateMutation.Field()
+    update_personal_note = PersonalNoteBatchPatchMutation.Field()
+    delete_personal_note = PersonalNoteBatchDeleteMutation.Field()
diff --git a/aleksis/apps/alsijil/schema/participation_status.py b/aleksis/apps/alsijil/schema/participation_status.py
index e99586e2ef26e663cdd51da2261af14acb0660d8..2e5a99faf3c60fca55b112d3b5ed2e1a96e1e57f 100644
--- a/aleksis/apps/alsijil/schema/participation_status.py
+++ b/aleksis/apps/alsijil/schema/participation_status.py
@@ -1,6 +1,8 @@
+import graphene
 from graphene_django import DjangoObjectType
 
-from aleksis.apps.alsijil.models import ParticipationStatus
+from aleksis.apps.alsijil.models import ParticipationStatus, NewPersonalNote
+from aleksis.apps.alsijil.schema.personal_note import PersonalNoteType
 from aleksis.core.schema.base import (
     BaseBatchPatchMutation,
     DjangoFilterMixin,
@@ -25,6 +27,24 @@ class ParticipationStatusType(
             "base_absence",
         )
 
+    extra_mark_notes = graphene.List(PersonalNoteType)
+    note_notes = graphene.List(PersonalNoteType)
+
+    @staticmethod
+    def resolve_extra_mark_notes(root: ParticipationStatus, info, **kwargs):
+        return NewPersonalNote.objects.filter(
+            person=root.person,
+            documentation=root.related_documentation,
+            extra_mark__isnull=False,
+        )
+    @staticmethod
+    def resolve_note_notes(root: ParticipationStatus, info, **kwargs):
+        return NewPersonalNote.objects.filter(
+            person=root.person,
+            documentation=root.related_documentation,
+            note__isnull=False,
+        )
+
 
 class ParticipationStatusBatchPatchMutation(BaseBatchPatchMutation):
     class Meta:
diff --git a/aleksis/apps/alsijil/schema/personal_note.py b/aleksis/apps/alsijil/schema/personal_note.py
new file mode 100644
index 0000000000000000000000000000000000000000..33f44b5effd24f37a70733994b2089b3bd785582
--- /dev/null
+++ b/aleksis/apps/alsijil/schema/personal_note.py
@@ -0,0 +1,44 @@
+from graphene_django import DjangoObjectType
+
+from aleksis.apps.alsijil.models import NewPersonalNote
+from aleksis.core.schema.base import (
+    DjangoFilterMixin,
+    BaseBatchCreateMutation,
+    BaseBatchDeleteMutation,
+    BaseBatchPatchMutation,
+    OptimisticResponseTypeMixin,
+    PermissionsTypeMixin,
+)
+
+
+class PersonalNoteType(
+    OptimisticResponseTypeMixin,
+    PermissionsTypeMixin,
+    DjangoFilterMixin,
+    DjangoObjectType,
+):
+    class Meta:
+        model = NewPersonalNote
+        fields = (
+            "id",
+            "note",
+            "extra_mark",
+        )
+
+class PersonalNoteBatchCreateMutation(BaseBatchCreateMutation):
+    class Meta:
+        model = NewPersonalNote
+        fields = ("note", "extra_mark", "documentation", "person")
+        permissions = ("alsijil.create_personal_note",)  # FIXME
+
+
+class PersonalNoteBatchPatchMutation(BaseBatchPatchMutation):
+    class Meta:
+        model = NewPersonalNote
+        fields = ("id", "note", "extra_mark", "documentation", "person")
+        permissions = ("alsijil.change_personal_note",)  # FIXME
+
+class PersonalNoteBatchDeleteMutation(BaseBatchDeleteMutation):
+    class Meta:
+        model = NewPersonalNote
+        permission_required = "alsijil.delete_personal_note"  # FIXME