diff --git a/lib/apiserver/index.js b/lib/apiserver/index.js
index d35e14a..d0a67af 100644
--- a/lib/apiserver/index.js
+++ b/lib/apiserver/index.js
@@ -18,6 +18,8 @@ const partnerLastSeen = require('../partner-last-seen');
 const history = require('../history');
 const modems = require('../modems2');
 
+const routerModems = require('./router-modems');
+
 const app = express();
 messagingService.setTransport(transport);
 
@@ -87,6 +89,7 @@ app.get('/apikey/:apikey/on-sms', onIncomingSms);
 app.get('/apikey/:apikey/inbox', onIncomingSms);
 app.get('/apikey/:apikey/on-sms/inbox', onIncomingSms);
 app.get('/apikey/:apikey/history', pageHistory);
+app.use('/modems', routerModems);
 
 const listenPort = config && config.handler_callback_server ? config.handler_callback_server.listen_port : null;
 listenPort && app.listen(listenPort, () => {
diff --git a/lib/apiserver/router-modems.js b/lib/apiserver/router-modems.js
new file mode 100644
index 0000000..3421f01
--- /dev/null
+++ b/lib/apiserver/router-modems.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const express = require('express');
+const modems = require('../modems2');
+
+const router = express.Router();
+module.exports = router;
+
+function pageIndex(req, res) {
+    res.json(modems.dump());
+}
+
+function pageSet(req, res) {
+    res.end('OK');
+
+    modems.set({
+        name: req.query.modem,
+        imsi: req.query.modem_imsi,
+        msisdn: req.query.modem_msisdn,
+        device: req.query.modem_device,
+        uptime: req.query.uptime,
+        reportIp: req.query.report_ip || req.ip,
+        reportPort: req.query.report_port,
+        reportApikey: req.query.report_apikey,
+        reportPathSms: req.query.report_path_sms || '/sms',
+    });
+}
+
+router.get('/', pageIndex);
+router.get('/set', pageSet);
\ No newline at end of file
diff --git a/lib/modems2.js b/lib/modems2.js
index 42bab84..172bb50 100644
--- a/lib/modems2.js
+++ b/lib/modems2.js
@@ -91,6 +91,11 @@ function get(selector, keyword) {
     return modemList[`by_${selector}`] ? modemList[`by_${selector}`][keyword] : null;
 }
 
+function dump() {
+    return modemList;
+}
+
 exports.touch = touch;
 exports.set = touch;
-exports.get = get;
\ No newline at end of file
+exports.get = get;
+exports.dump = dump;
\ No newline at end of file