diff --git a/Cargo.lock b/Cargo.lock
index d024f974..91c24415 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -492,6 +492,7 @@ dependencies = [
  "log 0.4.8",
  "pretty_env_logger",
  "rocket",
+ "ruma-api",
  "ruma-client-api",
  "ruma-identifiers",
  "sled",
diff --git a/Cargo.toml b/Cargo.toml
index 32c71a25..62322d77 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -15,3 +15,4 @@ log = "0.4.8"
 sled = "0.31.0"
 directories = "2.0.2"
 ruma-identifiers = "0.14.1"
+ruma-api = "0.15.0-dev.1"
diff --git a/src/main.rs b/src/main.rs
index 419a01c1..ba953195 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -2,7 +2,7 @@
 mod data;
 mod ruma_wrapper;
 
-use data::Data;
+pub use data::Data;
 use log::debug;
 use rocket::{get, post, put, routes, State};
 use ruma_client_api::{
diff --git a/src/ruma_wrapper.rs b/src/ruma_wrapper.rs
index 1f294507..ceaec3d7 100644
--- a/src/ruma_wrapper.rs
+++ b/src/ruma_wrapper.rs
@@ -1,32 +1,35 @@
-use rocket::{
-    data::{FromDataSimple, Outcome},
-    http::Status,
-    response::Responder,
-    Data,
-    Outcome::*,
-    Request,
-};
-use ruma_client_api::error::Error;
-use std::{
-    convert::{TryFrom, TryInto},
-    fmt,
-    io::{Cursor, Read},
-    ops::Deref,
+use {
+    rocket::data::{FromDataSimple, Outcome},
+    rocket::http::Status,
+    rocket::response::Responder,
+    rocket::Outcome::*,
+    rocket::Request,
+    rocket::State,
+    ruma_client_api::error::Error,
+    std::ops::Deref,
+    std::{
+        convert::{TryFrom, TryInto},
+        fmt,
+        io::{Cursor, Read},
+    },
 };
 
 const MESSAGE_LIMIT: u64 = 65535;
 
+/// This struct converts rocket requests into ruma structs by converting them into http requests
+/// first.
 pub struct Ruma<T> {
     body: T,
     headers: http::HeaderMap<http::header::HeaderValue>,
 }
+
 impl<T: TryFrom<http::Request<Vec<u8>>>> FromDataSimple for Ruma<T>
 where
     T::Error: fmt::Debug,
 {
     type Error = ();
 
-    fn from_data(request: &Request, data: Data) -> Outcome<Self, Self::Error> {
+    fn from_data(request: &Request, data: rocket::Data) -> Outcome<Self, Self::Error> {
         let mut http_request = http::Request::builder()
             .uri(request.uri().to_string())
             .method(&*request.method().to_string());
@@ -43,7 +46,13 @@ where
 
         log::info!("{:?}", http_request);
         match T::try_from(http_request) {
-            Ok(t) => Success(Ruma { body: t, headers }),
+            Ok(t) => {
+                //if T::METADATA.requires_authentication {
+                //let data = request.guard::<State<crate::Data>>();
+                // TODO: auth
+                //}
+                Success(Ruma { body: t, headers })
+            }
             Err(e) => {
                 log::error!("{:?}", e);
                 Failure((Status::InternalServerError, ()))
@@ -69,6 +78,7 @@ impl<T: fmt::Debug> fmt::Debug for Ruma<T> {
     }
 }
 
+/// This struct converts ruma responses into rocket http responses.
 pub struct MatrixResult<T>(pub std::result::Result<T, Error>);
 impl<T: TryInto<http::Response<Vec<u8>>>> TryInto<http::Response<Vec<u8>>> for MatrixResult<T> {
     type Error = T::Error;