diff --git a/lib/routes/me.go b/lib/routes/me.go
new file mode 100644
index 0000000000000000000000000000000000000000..3ce5fe4a63c57b0b22039d1f29d57147f1be05db
--- /dev/null
+++ b/lib/routes/me.go
@@ -0,0 +1,24 @@
+package routes
+
+import (
+	"net/http"
+
+	"owo.codes/whats-this/api/lib/apierrors"
+	"owo.codes/whats-this/api/lib/middleware"
+
+	"github.com/go-chi/render"
+)
+
+// Me handles /users/me requests.
+func Me(w http.ResponseWriter, r *http.Request) {
+	// Only authorized users can use this route
+	user := middleware.GetAuthorizedUser(r)
+	if user.ID == "" || user.IsBlocked {
+		panic(apierrors.Unauthorized)
+	}
+
+	// Return response
+	w.Header().Set("Content-Type", "application/json")
+	w.WriteHeader(http.StatusOK)
+	render.JSON(w, r, user)
+}
diff --git a/main.go b/main.go
index 298798c341fa0c6c8183196c689d397dc812e69d..e10090f26df95c97e64769cbcf71ed5f7170250b 100644
--- a/main.go
+++ b/main.go
@@ -145,6 +145,7 @@ func main() {
 	r.Post("/upload/pomf", routes.UploadPomf(false))
 	r.Post("/upload/pomf/associated", routes.UploadPomf(true))
 	r.Post("/users", routes.CreateUser)
+	r.Get("/users/me", routes.Me)
 
 	// MethodNotAllowed handler
 	r.MethodNotAllowed(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {