diff --git a/mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/route/BaseRoute.kt b/mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/route/BaseRoute.kt
index 174ccd880..e74d4f570 100644
--- a/mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/route/BaseRoute.kt
+++ b/mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/route/BaseRoute.kt
@@ -27,6 +27,7 @@ fun Application.mirai() {
 
     authModule()
     messageModule()
+    infoModule()
 }
 
 /**
diff --git a/mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/route/InfoRouteModule.kt b/mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/route/InfoRouteModule.kt
new file mode 100644
index 000000000..847f88d79
--- /dev/null
+++ b/mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/route/InfoRouteModule.kt
@@ -0,0 +1,30 @@
+package net.mamoe.mirai.api.http.route
+
+import io.ktor.application.Application
+import io.ktor.application.call
+import io.ktor.routing.routing
+import net.mamoe.mirai.api.http.dto.GroupDTO
+import net.mamoe.mirai.api.http.dto.MemberDTO
+import net.mamoe.mirai.api.http.dto.QQDTO
+import net.mamoe.mirai.api.http.dto.toJson
+import net.mamoe.mirai.contact.toMutableList
+
+fun Application.infoModule() {
+    routing {
+
+        miraiGet("/friendList") {
+            val ls = it.bot.qqs.toMutableList().map { qq -> QQDTO(qq) }
+            call.respondJson(ls.toJson())
+        }
+
+        miraiGet("/groupList") {
+            val ls = it.bot.groups.toMutableList().map { group -> GroupDTO(group) }
+            call.respondJson(ls.toJson())
+        }
+
+        miraiGet("/memberList") {
+            val ls = it.bot.getGroup(paramOrNull("target")).members.toMutableList().map { member -> MemberDTO(member) }
+            call.respondJson(ls.toJson())
+        }
+    }
+}
\ No newline at end of file