diff --git a/program/filters.py b/program/filters.py
index dc2c841a7caa055563f9665b630d4c3dc45bcaf6..54e3cc8e25b2ad3386ed4b66906898506c5b15c6 100644
--- a/program/filters.py
+++ b/program/filters.py
@@ -280,3 +280,28 @@ class ActiveFilterSet(StaticFilterHelpTextMixin, filters.FilterSet):
         fields = [
             "is_active",
         ]
+
+
+class PlayoutFilterSet(filters.FilterSet):
+    start = filters.DateFilter(
+        field_name="start",
+        lookup_expr="gte",
+        help_text="Returns timeslots that start at or after the specified datetime (default: today).",
+    )
+    end = filters.DateFilter(
+        field_name="end",
+        lookup_expr="lte",
+        help_text="Returns timeslots that end at or before the specified datetime (default: one week after start date).",
+    )
+    include_virtual = filters.BooleanFilter(
+        field_name="include_virtual",
+        help_text="Include virtual timeslots (default: false)."
+    )
+
+    class Meta:
+        model = models.TimeSlot
+        fields = [
+            "start",
+            "end",
+            "include_virtual"
+        ]
diff --git a/program/views.py b/program/views.py
index dfd25ac3f3040fade3a0d3d0fde099d2df390c49..4e97a5391e34b4612ebafb7c8b83583d2fca1f51 100644
--- a/program/views.py
+++ b/program/views.py
@@ -193,11 +193,7 @@ class APIDayScheduleViewSet(
     list=extend_schema(
         summary="List scheduled playout.",
         description=(
-            "Returns a list of the scheduled playout."
-            "Expects parameters `start` (date), `end` (date), and `includeVirtual` (boolean)."
-            "- `start` is today by default."
-            "- `end` is one week after the start date by default."
-            "- `includeVirtual` is false by default."
+            "Returns a list of the scheduled playout. "
             "The schedule will include virtual timeslots to fill unscheduled gaps if requested."
         ),
     ),
@@ -207,6 +203,9 @@ class APIPlayoutViewSet(
     viewsets.GenericViewSet,
 ):
     queryset = TimeSlot.objects.all()
+    serializer_class = TimeSlotSerializer
+    filter_backends = [DjangoFilterBackend]
+    filterset_class = filters.PlayoutFilterSet
 
     def list(self, request, *args, **kwargs):
         """