diff --git a/app/apps/api/serializers.py b/app/apps/api/serializers.py
index 081a3cf0c5b6919bc2282b334289f17d6dbb57df..f99a17131bfbf5a7c439562facb2f3b5e714c8be 100644
--- a/app/apps/api/serializers.py
+++ b/app/apps/api/serializers.py
@@ -19,6 +19,7 @@ from core.models import (Document,
                          LineTranscription,
                          BlockType,
                          LineType,
+                         Script,
                          OcrModel)
 from core.tasks import (segtrain, train, segment, transcribe)
 
@@ -51,6 +52,12 @@ class ImageField(serializers.ImageField):
             return data
 
 
+class ScriptSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Script
+        fields = '__all__'
+
+
 class PartMoveSerializer(serializers.ModelSerializer):
     index = serializers.IntegerField()
 
@@ -99,6 +106,7 @@ class LineTypeSerializer(serializers.ModelSerializer):
 
 
 class DocumentSerializer(serializers.ModelSerializer):
+    main_script = serializers.CharField(source='main_script.name')
     transcriptions = TranscriptionSerializer(many=True, read_only=True)
     valid_block_types = BlockTypeSerializer(many=True, read_only=True)
     valid_line_types = LineTypeSerializer(many=True, read_only=True)
@@ -106,12 +114,24 @@ class DocumentSerializer(serializers.ModelSerializer):
 
     class Meta:
         model = Document
-        fields = ('pk', 'name', 'transcriptions',
+        fields = ('pk', 'name', 'transcriptions', 'main_script', 'read_direction',
                   'valid_block_types', 'valid_line_types', 'parts_count')
 
     def get_parts_count(self, document):
         return document.parts.count()
 
+    def validate_main_script(self, value):
+        try:
+            return Script.objects.get(name=value)
+        except Script.DoesNotExist:
+            raise serializers.ValidationError('This script does not exists in the database.')
+
+    def update(self, instance, validated_data):
+        instance.name = validated_data.get('name', instance.name)
+        instance.main_script = validated_data.get('main_script')['name'] or instance.main_script
+        instance.read_direction = validated_data.get('read_direction', instance.read_direction)
+        return instance
+
 
 class PartSerializer(serializers.ModelSerializer):
     image = ImageField(required=False, thumbnails=['card', 'large'])
diff --git a/app/apps/api/urls.py b/app/apps/api/urls.py
index 5c68c75144c91691322606062c09a3df48437534..928ec985a8265e478e0bdf05e380b396641746cc 100644
--- a/app/apps/api/urls.py
+++ b/app/apps/api/urls.py
@@ -11,9 +11,11 @@ from api.views import (DocumentViewSet,
                        BlockTypeViewSet,
                        LineTypeViewSet,
                        LineTranscriptionViewSet,
+                       ScriptViewSet,
                        OcrModelViewSet)
 
 router = routers.DefaultRouter()
+router.register(r'scripts', ScriptViewSet)
 router.register(r'documents', DocumentViewSet)
 router.register(r'user', UserViewSet)
 router.register(r'types/block', BlockTypeViewSet)
diff --git a/app/apps/api/views.py b/app/apps/api/views.py
index 23722ea8683c7e712fc6e4761100ada5eac108f5..f33ba76d4db9f3d9c3e0acd681d53083e812252e 100644
--- a/app/apps/api/views.py
+++ b/app/apps/api/views.py
@@ -11,7 +11,7 @@ from django.urls import reverse
 from rest_framework.decorators import action
 from rest_framework.response import Response
 from rest_framework import status
-from rest_framework.viewsets import ModelViewSet
+from rest_framework.viewsets import ModelViewSet, ReadOnlyModelViewSet
 from rest_framework.pagination import PageNumberPagination
 from rest_framework.serializers import PrimaryKeyRelatedField
 
@@ -31,6 +31,7 @@ from api.serializers import (UserOnboardingSerializer,
                              SegmentSerializer,
                              TrainSerializer,
                              SegTrainSerializer,
+                             ScriptSerializer,
                              TranscribeSerializer,
                              OcrModelSerializer)
 
@@ -43,6 +44,7 @@ from core.models import (Document,
                          Transcription,
                          LineTranscription,
                          OcrModel,
+                         Script,
                          AlreadyProcessingException)
 
 from core.tasks import recalculate_masks
@@ -67,6 +69,12 @@ class UserViewSet(ModelViewSet):
             return Response(status=status.HTTP_200_OK)
 
 
+class ScriptViewSet(ReadOnlyModelViewSet):
+    queryset = Script.objects.all()
+    paginate_by = 20
+    serializer_class = ScriptSerializer
+
+
 class DocumentViewSet(ModelViewSet):
     queryset = Document.objects.all()
     serializer_class = DocumentSerializer
diff --git a/app/apps/core/models.py b/app/apps/core/models.py
index 680f26f313b5a88b18c3f5133f0737c4cf062fef..9299c1bcd024634896fdecc6d9dfc2630aeef831 100644
--- a/app/apps/core/models.py
+++ b/app/apps/core/models.py
@@ -187,7 +187,8 @@ class Document(models.Model):
     read_direction = models.CharField(
         max_length=3,
         choices=READ_DIRECTION_CHOICES,
-        default=READ_DIRECTION_LTR
+        default=READ_DIRECTION_LTR,
+        help_text=_("The read direction describes the order of the elements in the document, in opposition with the text direction which describes the order of the words in a line and is set by the script.")
     )
     typology = models.ForeignKey(DocumentType, null=True, blank=True, on_delete=models.SET_NULL)