diff --git a/program/serializers.py b/program/serializers.py
index 726a22d4894302e633ec3497cba18de052aa2ce8..bf71dee7646b6df5d1a5e38ec14fd2c874d101fd 100644
--- a/program/serializers.py
+++ b/program/serializers.py
@@ -1508,3 +1508,22 @@ class PlaylistSerializer(serializers.ModelSerializer):
             "playout_mode",
             "show_id",
         ) + read_only_fields
+
+    def create(self, validated_data):
+        """Create a new Playlist instance, given the validated data."""
+
+        user = self.context["request"].user
+        user_is_owner = user in validated_data.get("show").owners.all()
+
+        # having the create_playlist permission overrules the ownership
+        if not (user.has_perm("program.create_playlist") or user_is_owner):
+            raise exceptions.PermissionDenied(detail="You are not allowed to create a playlist.")
+
+        entries = validated_data.pop("entries", [])
+
+        playlist = Playlist.objects.create(created_by=user.username, **validated_data)
+
+        for entry_data in entries:
+            PlaylistEntry.objects.create(playlist=playlist, **entry_data)
+
+        return playlist