diff --git a/program/filters.py b/program/filters.py
index 60bbce5de6a0d766cbbc3bf807ac39d35d551041..af8421a919ffd1607b6c29dff3c70cec61654275 100644
--- a/program/filters.py
+++ b/program/filters.py
@@ -57,6 +57,10 @@ class ShowOrderingFilter(filters.OrderingFilter):
 
 
 class ShowFilterSet(StaticFilterHelpTextMixin, filters.FilterSet):
+    ids = IntegerInFilter(
+        field_name="id",
+        help_text="Return only shows matching the specified id(s).",
+    )
     order = ShowOrderingFilter(
         fields=["name", "slug", "id", "is_active", "is_owner", "updated_at", "updated_by"],
         help_text="Order shows by the given field(s).",
@@ -131,6 +135,7 @@ class ShowFilterSet(StaticFilterHelpTextMixin, filters.FilterSet):
     class Meta:
         model = models.Show
         fields = [
+            "ids",
             "order",
             "category_ids",
             "category_slug",
@@ -150,6 +155,10 @@ class ShowFilterSet(StaticFilterHelpTextMixin, filters.FilterSet):
 
 
 class ScheduleFilterSet(filters.FilterSet):
+    ids = IntegerInFilter(
+        field_name="id",
+        help_text="Return only schedules matching the specified id(s).",
+    )
     show_ids = IntegerInFilter(
         field_name="show",
         help_text="Return only schedules that belong to the specified show(s).",
@@ -171,6 +180,10 @@ class ScheduleFilterSet(filters.FilterSet):
 
 
 class TimeSlotFilterSet(filters.FilterSet):
+    ids = IntegerInFilter(
+        field_name="id",
+        help_text="Return only timeslots matching the specified id(s).",
+    )
     order = filters.OrderingFilter(
         fields=[field.name for field in models.TimeSlot._meta.get_fields()]
     )
@@ -237,6 +250,7 @@ class TimeSlotFilterSet(filters.FilterSet):
     class Meta:
         model = models.TimeSlot
         fields = [
+            "ids",
             "order",
             "start",
             "end",