diff --git a/controllers/api_v1_relays.cc b/controllers/api_v1_relays.cc
new file mode 100644
index 0000000..d7f5ef7
--- /dev/null
+++ b/controllers/api_v1_relays.cc
@@ -0,0 +1,25 @@
+#include <netdb.h>
+#include <models/relay_dbo.h>
+#include <helpers.h>
+#include "api_v1_relays.h"
+using namespace api::v1;
+
+void
+relays::get_all(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback)
+{
+    relay_dbo **all_relays = relay_dbo::get_all();
+    Json::Value all_relays_json(Json::arrayValue);
+
+    for(int i = 0; all_relays[i] != nullptr; i++)
+    {
+        all_relays_json.append(all_relays[i]->to_json());
+    }
+
+    Json::StreamWriterBuilder jw;
+
+    auto resp = HttpResponse::newHttpJsonResponse(all_relays_json);
+
+    callback(resp);
+
+    relay_dbo::free_list(all_relays);
+}
diff --git a/controllers/api_v1_relays.h b/controllers/api_v1_relays.h
new file mode 100644
index 0000000..896ff8c
--- /dev/null
+++ b/controllers/api_v1_relays.h
@@ -0,0 +1,18 @@
+#pragma once
+#include <drogon/HttpController.h>
+using namespace drogon;
+namespace api
+{
+    namespace v1
+    {
+        class relays:public drogon::HttpController<relays>
+        {
+        public:
+            METHOD_LIST_BEGIN
+            METHOD_ADD(relays::get_all, "/", Get);
+            METHOD_LIST_END
+
+            static void get_all(const HttpRequestPtr& req, std::function<void (const HttpResponsePtr &)> &&callback);
+        };
+    }
+}