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 1cf8408e629093688ce2771448c6fe49c9f6e620..89ac59f9f9074863ab3339ef7bc4a54ac541db2f 100644
--- a/program/views.py
+++ b/program/views.py
@@ -187,11 +187,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."
         ),
     ),
@@ -201,6 +197,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):
         """