diff --git a/program/views.py b/program/views.py
index ffb7119a076ad93ba0874adbf511c5a9a74c760e..187cd2ed4259e0abdf286b3444ab3f251e75b64e 100644
--- a/program/views.py
+++ b/program/views.py
@@ -34,6 +34,7 @@ from rest_framework.response import Response
 
 from django.conf import settings
 from django.contrib.auth.models import User
+from django.db import IntegrityError
 from django.http import Http404, HttpResponse, JsonResponse
 from django.shortcuts import get_object_or_404
 from django.utils import timezone
@@ -383,7 +384,15 @@ class APIShowViewSet(DisabledObjectPermissionCheckMixin, viewsets.ModelViewSet):
         )
 
         if serializer.is_valid(raise_exception=True):
-            serializer.save()
+            try:
+                serializer.save()
+            except IntegrityError:
+                data = {
+                    "slug": {"code": "unique", "message": "show with this slug already exists."}
+                }
+
+                return Response(data, status=status.HTTP_400_BAD_REQUEST)
+
             return Response(serializer.data, status=status.HTTP_201_CREATED)
 
     def update(self, request, *args, **kwargs):
@@ -398,8 +407,15 @@ class APIShowViewSet(DisabledObjectPermissionCheckMixin, viewsets.ModelViewSet):
         )
 
         if serializer.is_valid(raise_exception=True):
-            serializer.save()
-            return Response(serializer.data)
+            try:
+                serializer.save()
+                return Response(serializer.data)
+            except IntegrityError:
+                data = {
+                    "slug": {"code": "unique", "message": "show with this slug already exists."}
+                }
+
+                return Response(data, status=status.HTTP_400_BAD_REQUEST)
 
     def partial_update(self, request, *args, **kwargs):
         kwargs["partial"] = True