diff --git a/aleksis/apps/alsijil/schema/__init__.py b/aleksis/apps/alsijil/schema/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..26cd82507b81a0fff831d23c210cc5f71852be97
--- /dev/null
+++ b/aleksis/apps/alsijil/schema/__init__.py
@@ -0,0 +1,31 @@
+import graphene
+from graphene_django import DjangoObjectType
+
+from django.db.models.query_utils import Q
+
+from aleksis.core.schema.base import DjangoFilterMixin, FilterOrderList
+
+from ..models import Documentation, Participation
+from .documentation import (
+    DocumentationType,
+    DocumentationCreateMutation,
+    DocumentationBatchCreateMutation,
+    DocumentationDeleteMutation,
+    DocumentationBatchPatchMutation
+)
+
+
+class Query(graphene.ObjectType):
+    documentations = FilterOrderList(DocumentationType)
+    documentations_by_course_id = FilterOrderList(DocumentationType, course_id=graphene.ID(required=True))
+
+    def resolve_documentations_by_course_id(root, info, course_id, **kwargs):
+        documentations = Documentation.objects.filter(Q(course__pk=course_id) | Q(lesson_event__course__pk=course_id))
+        return documentations
+
+
+class Mutation(graphene.ObjectType):
+    create_documentation = DocumentationCreateMutation.Field()
+    create_documentations = DocumentationBatchCreateMutation.Field()
+    delete_documentation = DocumentationDeleteMutation.Field()
+    update_documentations = DocumentationBatchPatchMutation.Field()
diff --git a/aleksis/apps/alsijil/schema/documentation.py b/aleksis/apps/alsijil/schema/documentation.py
new file mode 100644
index 0000000000000000000000000000000000000000..d4752e09ef1389abb544bf4fb4012327e80829d9
--- /dev/null
+++ b/aleksis/apps/alsijil/schema/documentation.py
@@ -0,0 +1,64 @@
+import graphene
+from calendarweek import CalendarWeek
+from graphene_django import DjangoListField
+from graphene_django.types import DjangoObjectType
+from graphene_django_cud.mutations import (
+    DjangoBatchCreateMutation,
+    DjangoBatchPatchMutation,
+    DjangoCreateMutation,
+)
+from guardian.shortcuts import get_objects_for_user
+
+from aleksis.core.schema.base import (
+    DeleteMutation,
+    DjangoFilterMixin,
+    PermissionBatchPatchMixin,
+    PermissionsTypeMixin,
+)
+
+from ..models import Documentation
+
+
+class DocumentationType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType):
+    class Meta:
+        model = Documentation
+        fields = ("id", "course", "lesson_event", "subject", "topic", "homework", "group_note", "datetime_start", "datetime_end", "date_start", "date_end")
+        filter_fields = {
+            "id": ["exact", "lte", "gte"],
+            "course__name": ["exact"],
+        }
+
+
+class DocumentationCreateMutation(DjangoCreateMutation):
+    class Meta:
+        model = Documentation
+        fields = ("course", "lesson_event", "subject", "topic", "homework", "group_note", "datetime_start", "datetime_end", "date_start", "date_end")
+        optional_fields = ("course", "lesson_event", "subject", "topic", "homework", "group_note", "datetime_start", "datetime_end", "date_start", "date_end")
+        permissions = ("",)  # FIXME
+
+    @classmethod
+    def before_mutate(cls, root, info, input):
+        if "year" in input and "calendarWeek" in input:
+            cw = CalendarWeek(year=input["year"], week=input["week"])
+            input["date_start"] = cw[0]
+            input["date_end"] = cw[6]
+        return input
+
+
+class DocumentationBatchCreateMutation(DjangoBatchCreateMutation):
+    class Meta:
+        model = Documentation
+        fields = ("id", "course", "lesson_event", "subject", "topic", "homework", "group_note", "datetime_start", "datetime_end", "date_start", "date_end")
+        permissions = ("",)  # FIXME
+
+
+class DocumentationDeleteMutation(DeleteMutation):
+    klass = Documentation
+    permission_required = ""  # FIXME
+
+
+class DocumentationBatchPatchMutation(PermissionBatchPatchMixin, DjangoBatchPatchMutation):
+    class Meta:
+        model = Documentation
+        fields = ("id", "course", "lesson_event", "subject", "topic", "homework", "group_note", "datetime_start", "datetime_end", "date_start", "date_end")
+        permissions = ("",)  # FIXME