diff --git a/index.js b/index.js
index 16dd229..0ead7cb 100644
--- a/index.js
+++ b/index.js
@@ -10,4 +10,4 @@ process.title = `KOMODO-CENTER@${(config && typeof config.name === 'string') ? c
 
 
 require('./lib/transport');
-require('./lib/handler-callback-server');
\ No newline at end of file
+require('./lib/apiserver');
\ No newline at end of file
diff --git a/lib/apiserver/index.js b/lib/apiserver/index.js
new file mode 100644
index 0000000..432a024
--- /dev/null
+++ b/lib/apiserver/index.js
@@ -0,0 +1,81 @@
+"use strict";
+
+/**
+ * Modul untuk menerima callback dari modem handler jika ada SMS masuk.
+ */
+
+
+const express = require('express');
+const moment = require('moment');
+
+const messagingService = require('komodo-center-messaging-client-lib');
+
+const config = require('komodo-sdk/config');
+const logger = require('komodo-sdk/logger');
+
+const transport = require('../transport');
+const partnerLastSeen = require('../partner-last-seen');
+const history = require('../history');
+
+const app = express();
+messagingService.setTransport(transport);
+
+function apikeyChecker(req, res, next) {
+    res.locals.has_valid_apikey = req.params.apikey === config.handler_callback_server.apikey;
+    if (res.locals.has_valid_apikey) {
+        next();
+    }
+    else {
+        res.end('APISERVER: Invalid apikey');
+    }
+}
+
+function onIncomingSms(req, res) {
+    res.end('OK');
+
+    if (!req.query.number) return;
+    if (req.query.number.indexOf('+') !== 0) return;
+
+    const numberWithSuffix = req.query.number.replace(/^\+/, '') + (config.number_suffix || '');
+
+    partnerLastSeen.set(req.query.number, req.query.modem);
+
+    history.push({
+        ts: req.query.ts || moment().format('YYYY-MM-DD HH:mm:ss'),
+        modem: {
+            name: req.query.modem,
+            imsi: req.query.modem_imsi,
+            msisdn: req.query.modem_msisdn,
+        },
+        direction: 'INCOMING',
+        partner: req.query.number,
+        message: req.query.msg,
+    });
+
+    logger.info('APISERVER: Incoming SMS', { modem: req.query.modem, from: req.query.number, from_with_suffix: numberWithSuffix, msg: req.query.msg });
+    messagingService.onIncomingMessage({
+        me: req.query.modem,
+        partner: numberWithSuffix,
+        msg: req.query.msg
+    })
+}
+
+function pageHistory(req, res) {
+    res.json((history.dump() || []).reverse());
+}
+
+app.use(function(req, res, next) {
+    logger.verbose('APISERVER: Incoming http request', { ip: req.ip, url: req.url });
+    next();
+})
+
+app.use('/apikey/:apikey', apikeyChecker);
+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);
+
+const listenPort = config && config.handler_callback_server ? config.handler_callback_server.listen_port : null;
+listenPort && app.listen(listenPort, () => {
+    logger.info('HTTP Handler Callback server listening on port ' + listenPort);
+})
\ No newline at end of file
diff --git a/lib/handler-callback-server.js b/lib/handler-callback-server.js
deleted file mode 100644
index 0688c58..0000000
--- a/lib/handler-callback-server.js
+++ /dev/null
@@ -1,62 +0,0 @@
-"use strict";
-
-/**
- * Modul untuk menerima callback dari modem handler jika ada SMS masuk.
- */
-
-
-const express = require('express');
-
-const messagingService = require('komodo-center-messaging-client-lib');
-
-const config = require('komodo-sdk/config');
-const logger = require('komodo-sdk/logger');
-
-const transport = require('./transport');
-const partnerLastSeen = require('./partner-last-seen');
-
-const app = express();
-messagingService.setTransport(transport);
-
-function apikeyChecker(req, res, next) {
-    res.locals.has_valid_apikey = req.params.apikey === config.handler_callback_server.apikey;
-    if (res.locals.has_valid_apikey) {
-        next();
-    }
-    else {
-        res.end('HANDLER-CALLBACK-SERVER: Invalid apikey');
-    }
-}
-
-function onIncomingSms(req, res) {
-    res.end('OK');
-
-    if (!req.query.number) return;
-    if (req.query.number.indexOf('+') !== 0) return;
-    
-    const numberWithSuffix = req.query.number + (config.number_suffix || '');
-
-    partnerLastSeen.set(req.query.number, req.query.modem);
-
-    logger.info('HANDLER-CALLBACK-SERVER: Incoming SMS', { modem: req.query.modem, from: req.query.number, from_with_suffix: numberWithSuffix, msg: req.query.msg });
-    messagingService.onIncomingMessage({
-        me: req.query.modem,
-        partner: numberWithSuffix,
-        msg: req.query.msg
-    })
-}
-
-app.use(function(req, res, next) {
-    logger.verbose('HANDLER-CALLBACK-SERVER: Incoming http request', { ip: req.ip, url: req.url });
-    next();
-})
-
-app.use('/apikey/:apikey', apikeyChecker);
-app.get('/apikey/:apikey/on-sms', onIncomingSms);
-app.get('/apikey/:apikey/inbox', onIncomingSms);
-app.get('/apikey/:apikey/on-sms/inbox', onIncomingSms);
-
-const listenPort = config && config.handler_callback_server ? config.handler_callback_server.listen_port : null;
-listenPort && app.listen(listenPort, () => {
-    logger.info('HTTP Handler Callback server listening on port ' + listenPort);
-})
\ No newline at end of file
diff --git a/lib/history.js b/lib/history.js
new file mode 100644
index 0000000..a62bad1
--- /dev/null
+++ b/lib/history.js
@@ -0,0 +1,15 @@
+'use strict';
+
+const CircularBuffer = require("circular-buffer");
+const history = new CircularBuffer(200);
+
+function push(item) {
+    history.push(item);
+}
+
+function dump() {
+    history.toarray();
+}
+
+exports.push = push;
+exports.dump = dump;
\ No newline at end of file
diff --git a/lib/transport.js b/lib/transport.js
index 6c73b02..6f6fc91 100644
--- a/lib/transport.js
+++ b/lib/transport.js
@@ -2,12 +2,14 @@
 
 const request = require('request');
 const uuidv4 = require('uuid/v4');
+const moment = require('moment');
 
 const config = require('komodo-sdk/config');
 const logger = require('komodo-sdk/logger');
 
 const modems = require('./modems');
 const partnerLastSeen = require('./partner-last-seen');
+const history = require('./history');
 
 async function _getApproriateHandlerByLastSeen(partnerNumber) {
     logger.verbose('Looking for last seen on for partner number ' + partnerNumber);
@@ -84,6 +86,17 @@ function _send(destinationNumber, msg, handlerName) {
 
     const reqId = uuidv4();
 
+    history.push({
+        ts: moment().format('YYYY-MM-DD HH:mm:ss'), 
+        modem: {
+            name: handlerName,
+        },
+        direction: 'OUTGOING',
+        partner: destinationNumber,
+        message: msg,
+    });
+
+
     const requestOptions = {
         url: modem.url,
         qs: {
diff --git a/package-lock.json b/package-lock.json
index 28d4023..a7ef354 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -469,9 +469,9 @@
       }
     },
     "circular-buffer": {
-      "version": "0.0.6",
-      "resolved": "https://registry.npmjs.org/circular-buffer/-/circular-buffer-0.0.6.tgz",
-      "integrity": "sha1-6c+iujGdNw3idDtgCMpTnN3r9TY="
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/circular-buffer/-/circular-buffer-1.0.2.tgz",
+      "integrity": "sha1-+g4VLtYp92/iTd+J5y69AHhsWm4="
     },
     "class-utils": {
       "version": "0.3.6",
@@ -4421,6 +4421,13 @@
       "integrity": "sha1-6ZH3W5n/IFVR4O5HK3XSAdvT4ns=",
       "requires": {
         "circular-buffer": "0.0.6"
+      },
+      "dependencies": {
+        "circular-buffer": {
+          "version": "0.0.6",
+          "resolved": "https://registry.npmjs.org/circular-buffer/-/circular-buffer-0.0.6.tgz",
+          "integrity": "sha1-6c+iujGdNw3idDtgCMpTnN3r9TY="
+        }
       }
     },
     "winston-daily-rotate-file": {
diff --git a/package.json b/package.json
index 11b3d9c..ee74892 100644
--- a/package.json
+++ b/package.json
@@ -20,9 +20,11 @@
   "author": "Adhidarma Hadiwinoto <me@adhisimon.org>",
   "license": "ISC",
   "dependencies": {
+    "circular-buffer": "^1.0.2",
     "express": "^4.17.1",
     "komodo-center-messaging-client-lib": "git+http://gitlab.kodesumber.com/komodo/komodo-center-messaging-client-lib.git",
     "komodo-sdk": "git+http://gitlab.kodesumber.com/komodo/komodo-sdk.git",
+    "moment": "^2.24.0",
     "redis": "^2.8.0",
     "request": "^2.88.0",
     "uuid": "^3.3.2"