diff --git a/src/routes/channels/message_query.rs b/src/routes/channels/message_query.rs
index 903d811e36cf8e065d5fc109154d64fa1f053b81..3206f23ff9c8e4aa4a00d96667144069dac306e8 100644
--- a/src/routes/channels/message_query.rs
+++ b/src/routes/channels/message_query.rs
@@ -1,3 +1,5 @@
+use std::collections::HashSet;
+
 use crate::database::*;
 use crate::util::result::{Error, Result};
 
@@ -26,6 +28,7 @@ pub struct Options {
     #[validate(length(min = 26, max = 26))]
     after: Option<String>,
     sort: Option<Sort>,
+    include_users: Option<bool>
 }
 
 #[get("/<target>/messages?<options..>")]
@@ -87,5 +90,19 @@ pub async fn req(user: User, target: Ref, options: Form<Options>) -> Result<Json
         }
     }
 
-    Ok(json!(messages))
+    if options.include_users.unwrap_or_else(|| false) {
+        let mut ids = HashSet::new();
+        for message in &messages {
+            ids.insert(message.author.clone());
+        }
+
+        let user_ids = ids.into_iter().collect();
+
+        Ok(json!({
+            "messages": messages,
+            "users": user.fetch_multiple_users(user_ids).await?
+        }))
+    } else {
+        Ok(json!(messages))
+    }
 }