diff --git a/src/api/client_server/room.rs b/src/api/client_server/room.rs
index d2af99d01c43c91e5ba7d6881af1adaab30825c6..d2924fa0d764279e574e0132ee318b9f0823616d 100644
--- a/src/api/client_server/room.rs
+++ b/src/api/client_server/room.rs
@@ -147,7 +147,13 @@ pub async fn create_room_route(
                     );
                 }
                 RoomVersionId::V11 => {} // V11 removed the "creator" key
-                _ => panic!("Unexpected room version {}", room_version),
+                _ => {
+                    warn!("Unexpected or unsupported room version {}", room_version);
+                    return Err(Error::BadRequest(
+                        ErrorKind::BadJson,
+                        "Unexpected or unsupported room version found",
+                    ));
+                }
             }
 
             content.insert(
@@ -172,7 +178,13 @@ pub async fn create_room_route(
                 | RoomVersionId::V9
                 | RoomVersionId::V10 => RoomCreateEventContent::new_v1(sender_user.clone()),
                 RoomVersionId::V11 => RoomCreateEventContent::new_v11(),
-                _ => panic!("Unexpected room version {}", room_version),
+                _ => {
+                    warn!("Unexpected or unsupported room version {}", room_version);
+                    return Err(Error::BadRequest(
+                        ErrorKind::BadJson,
+                        "Unexpected or unsupported room version found",
+                    ));
+                }
             };
             let mut content = serde_json::from_str::<CanonicalJsonObject>(
                 to_raw_value(&content)
@@ -673,7 +685,16 @@ pub async fn upgrade_room_route(
             // "creator" key no longer exists in V11 rooms
             create_event_content.remove("creator");
         }
-        _ => panic!("Unexpected room version {}", body.new_version),
+        _ => {
+            warn!(
+                "Unexpected or unsupported room version {}",
+                body.new_version
+            );
+            return Err(Error::BadRequest(
+                ErrorKind::BadJson,
+                "Unexpected or unsupported room version found",
+            ));
+        }
     }
 
     create_event_content.insert(
diff --git a/src/service/admin/mod.rs b/src/service/admin/mod.rs
index eb8c93b5c8ec28a7f2f33c3d234c4f267fb064f4..3385c902db662dddfe2111c20529a4c304636d54 100644
--- a/src/service/admin/mod.rs
+++ b/src/service/admin/mod.rs
@@ -10,6 +10,7 @@
 use clap::{Parser, Subcommand};
 use regex::Regex;
 use ruma::{
+    api::client::error::ErrorKind,
     events::{
         relation::InReplyTo,
         room::{
@@ -30,6 +31,7 @@
 };
 use serde_json::value::to_raw_value;
 use tokio::sync::{mpsc, Mutex};
+use tracing::warn;
 
 use crate::{
     api::client_server::{leave_all_rooms, AUTO_GEN_PASSWORD_LENGTH},
@@ -1420,7 +1422,13 @@ pub(crate) async fn create_admin_room(&self) -> Result<()> {
             | RoomVersionId::V9
             | RoomVersionId::V10 => RoomCreateEventContent::new_v1(conduit_user.clone()),
             RoomVersionId::V11 => RoomCreateEventContent::new_v11(),
-            _ => panic!("Unexpected room version {}", room_version),
+            _ => {
+                warn!("Unexpected or unsupported room version {}", room_version);
+                return Err(Error::BadRequest(
+                    ErrorKind::BadJson,
+                    "Unexpected or unsupported room version found",
+                ));
+            }
         };
 
         content.federate = true;
diff --git a/src/service/rooms/timeline/mod.rs b/src/service/rooms/timeline/mod.rs
index 964f5844102e7a4d3895615b3aa27db02a418c54..a66b8e6fcd41e2225811eee9252d4d0a8a707a01 100644
--- a/src/service/rooms/timeline/mod.rs
+++ b/src/service/rooms/timeline/mod.rs
@@ -439,7 +439,13 @@ struct Redaction {
                             self.redact_pdu(redact_id, pdu)?;
                         }
                     }
-                    _ => panic!("Unexpected room version {}", room_version_id),
+                    _ => {
+                        warn!("Unexpected or unsupported room version {}", room_version_id);
+                        return Err(Error::BadRequest(
+                            ErrorKind::BadJson,
+                            "Unexpected or unsupported room version found",
+                        ));
+                    }
                 };
             }
             TimelineEventType::SpaceChild => {