diff --git a/config.sample.json b/config.sample.json
index 1048184..bdc27a7 100644
--- a/config.sample.json
+++ b/config.sample.json
@@ -1,5 +1,5 @@
 {
-    "name": "gateway-sds-ss",
+    "name": "gateway-sds",
     "url": "http://localhost",
     "port": 11330,
     "apikey": "fd97cf519b979262d9d9004cba6a165629ca8b69350a6afdcaab6ab2c9a996ae",
diff --git a/lib/actions/buy-to-sds.js b/lib/actions/buy-to-sds.js
new file mode 100644
index 0000000..3e1e582
--- /dev/null
+++ b/lib/actions/buy-to-sds.js
@@ -0,0 +1,68 @@
+const MODULE_NAME = 'ACTIONS.BUY-TO-SDS';
+
+const logger = require('tektrans-logger');
+const axios = require('axios').default;
+
+const config = require('../config');
+
+const client = axios.create({
+    baseURL: config.sds_ss.url,
+    timeout: config.sds_ss.request_timeout_ms,
+});
+
+/**
+ * request buy to sds
+ *
+ * @param {string} xid
+ * @param {string} requestId
+ * @param {string} destination
+ * @param {string} productName
+ * @param {number} quantity
+ * @param {string} reverseUrl
+ */
+module.exports = async (
+    xid,
+    requestId,
+    destination,
+    productName,
+    quantity,
+    reverseUrl,
+) => {
+    logger.verbose(`${MODULE_NAME} 4AD4DF41: buy to sds`, {
+        requestId, destination, productName, xid,
+    });
+
+    const params = {
+        request_id: requestId,
+        username: config.sds_ss.username,
+        password: config.komodo_http_get_x.password,
+        number: destination,
+        product: productName,
+        amount: quantity,
+        reverse_url: reverseUrl,
+    };
+
+    try {
+        const response = await client.get('/request', {
+            params,
+        });
+        if (!response) {
+            throw new Error(`${MODULE_NAME} 6CE3E06E: Empty response sds`);
+        }
+        if (!response.data) {
+            throw new Error(`${MODULE_NAME} F236476F: Empty response sds`);
+        }
+
+        return response.data;
+    } catch (err) {
+        logger.warn(`${MODULE_NAME} 48BAA6B7: Exception`, {
+            xid,
+            requestId,
+            destination,
+            productName,
+            quantity,
+            message: err.message,
+        });
+        throw err;
+    }
+};
diff --git a/lib/actions/buy.js b/lib/actions/buy.js
index 3c6b34d..85f1f64 100644
--- a/lib/actions/buy.js
+++ b/lib/actions/buy.js
@@ -6,7 +6,7 @@ const axios = require('axios').default;
 const config = require('../config');
 const configData = require('../config/data');
 
-const topupToKomodo = require('./topup-to-komodo');
+const buyToSDS = require('./buy-to-sds');
 
 const client = axios.create({
     baseURL: config.core.url,
@@ -40,14 +40,15 @@ module.exports = async (xid, transaction) => {
         }
 
         const callbackUrl = `${iConfig.url}:${iConfig.port}/apikey/${iConfig.apikey}/updates`;
-        const result = await topupToKomodo(
+        const result = await buyToSDS(
             xid,
             transaction.id,
             transaction.destination,
             productName,
+            transaction.quantity,
             callbackUrl,
         );
-        logger.verbose(`${MODULE_NAME} 5BDFAF41: result from komodo`, {
+        logger.verbose(`${MODULE_NAME} 5BDFAF41: result from sds`, {
             xid,
             trxId: transaction.id,
             result,
diff --git a/lib/actions/index.js b/lib/actions/index.js
index 580d9ad..5d42127 100644
--- a/lib/actions/index.js
+++ b/lib/actions/index.js
@@ -1,3 +1,2 @@
 exports.buy = require('./buy');
-exports.inquiry = require('./inquiry');
-exports.pay = require('./pay');
+
diff --git a/lib/actions/inquiry-to-komodo.js b/lib/actions/inquiry-to-komodo.js
deleted file mode 100644
index 19a60c0..0000000
--- a/lib/actions/inquiry-to-komodo.js
+++ /dev/null
@@ -1,64 +0,0 @@
-const MODULE_NAME = 'ACTIONS.INQUIRY-TO-KOMODO';
-
-const logger = require('tektrans-logger');
-const axios = require('axios').default;
-
-const config = require('../config');
-
-const client = axios.create({
-    baseURL: config.komodo_http_get_x.url,
-    timeout: config.komodo_http_get_x.request_timeout_ms,
-});
-
-/**
- * request inquiry transaction to komodo
- *
- * @param {string} xid
- * @param {string} requestId
- * @param {string} destination
- * @param {string} productName
- * @param {string} reverseUrl
- */
-module.exports = async (
-    xid,
-    requestId,
-    destination,
-    productName,
-    reverseUrl,
-) => {
-    logger.verbose(`${MODULE_NAME} 4AD4DF41: request inquiry to komodo`, {
-        requestId, destination, productName, reverseUrl, xid,
-    });
-
-    const params = {
-        request_id: requestId,
-        terminal_name: config.komodo_http_get_x.terminal_name,
-        password: config.komodo_http_get_x.password,
-        destination,
-        product_name: productName,
-        reverse_url: reverseUrl,
-    };
-
-    try {
-        const response = await client.get('/inquiry', {
-            params,
-        });
-        if (!response) {
-            throw new Error(`${MODULE_NAME} 6CE3E06E: Empty response from komodo`);
-        }
-        if (!response.data) {
-            throw new Error(`${MODULE_NAME} F236476F: Empty response data from komodo`);
-        }
-
-        return response.data;
-    } catch (err) {
-        logger.warn(`${MODULE_NAME} 48BAA6B7: Exception`, {
-            xid,
-            requestId,
-            destination,
-            productName,
-            message: err.message,
-        });
-        throw err;
-    }
-};
diff --git a/lib/actions/inquiry.js b/lib/actions/inquiry.js
deleted file mode 100644
index 555e31c..0000000
--- a/lib/actions/inquiry.js
+++ /dev/null
@@ -1,71 +0,0 @@
-const MODULE_NAME = 'ACTIONS.INQUIRY';
-
-const logger = require('tektrans-logger');
-const axios = require('axios').default;
-
-const config = require('../config');
-const configData = require('../config/data');
-
-const inquiryToKomodo = require('./inquiry-to-komodo');
-
-const client = axios.create({
-    baseURL: config.core.url,
-    timeout: config.core.request_timeout_ms,
-    headers: {
-        'x-access-token': config.core.access_token,
-    },
-});
-
-/**
- * Inquiry a product from supplier komodo
- *
- * @param {string} xid
- * @param {object} transaction
- *
- */
-module.exports = async (xid, transaction) => {
-    try {
-        logger.verbose(`${MODULE_NAME} ABE82225: Inquiry product to komodo`, {
-            xid,
-            transaction,
-        });
-        const iConfig = await configData.all();
-
-        let productName = transaction.product_name;
-        if (
-            iConfig.postpaid_products[transaction.product_name]
-            && iConfig.postpaid_products[transaction.product_name].remote
-        ) {
-            productName = iConfig.postpaid_products[transaction.product_name].remote;
-        }
-
-        const callbackUrl = `${iConfig.url}:${iConfig.port}/apikey/${iConfig.apikey}/updates`;
-        const result = await inquiryToKomodo(
-            xid,
-            transaction.id,
-            transaction.destination,
-            productName,
-            callbackUrl,
-        );
-        logger.verbose(`${MODULE_NAME} 076C1206: result from komodo`, {
-            xid,
-            trxId: transaction.id,
-            result,
-        });
-        const params = {
-            id: result.request_id,
-            rc: result.rc,
-            amount: result.amount || null,
-            message: result.message,
-            sn: result.sn || null,
-        };
-
-        await client.post('/transactions/gateway-update', params);
-    } catch (e) {
-        logger.warn(`${MODULE_NAME} D1A1B698: Exception`, {
-            xid,
-            message: e.message,
-            code: e.code,
-        });
-    }
-};
diff --git a/lib/actions/pay.js b/lib/actions/pay.js
deleted file mode 100644
index ac7ed6f..0000000
--- a/lib/actions/pay.js
+++ /dev/null
@@ -1,71 +0,0 @@
-const MODULE_NAME = 'ACTIONS.PAY';
-
-const logger = require('tektrans-logger');
-const axios = require('axios').default;
-
-const config = require('../config');
-const configData = require('../config/data');
-
-const paymentToKomodo = require('./payment-to-komodo');
-
-const client = axios.create({
-    baseURL: config.core.url,
-    timeout: config.core.request_timeout_ms,
-    headers: {
-        'x-access-token': config.core.access_token,
-    },
-});
-
-/**
- * Pay a product from supplier komodo
- *
- * @param {string} xid
- * @param {object} transaction
- *
- */
-module.exports = async (xid, transaction) => {
-    try {
-        logger.verbose(`${MODULE_NAME} CB9506E9: Pay product to komodo`, {
-            xid,
-            transaction,
-        });
-        const iConfig = await configData.all();
-
-        let productName = transaction.product_name;
-        if (
-            iConfig.postpaid_products[transaction.product_name]
-            && iConfig.postpaid_products[transaction.product_name].remote
-        ) {
-            productName = iConfig.postpaid_products[transaction.product_name].remote;
-        }
-
-        const callbackUrl = `${iConfig.url}:${iConfig.port}/apikey/${iConfig.apikey}/updates`;
-        const result = await paymentToKomodo(
-            xid,
-            transaction.id,
-            transaction.destination,
-            productName,
-            callbackUrl,
-        );
-        logger.verbose(`${MODULE_NAME} 4F45F9E3: result from komodo`, {
-            xid,
-            trxId: transaction.id,
-            result,
-        });
-        const params = {
-            id: result.request_id,
-            rc: result.rc,
-            amount: result.amount || null,
-            message: result.message,
-            sn: result.sn || null,
-        };
-
-        await client.post('/transactions/gateway-update', params);
-    } catch (e) {
-        logger.warn(`${MODULE_NAME} EF0EE887: Exception`, {
-            xid,
-            message: e.message,
-            code: e.code,
-        });
-    }
-};
diff --git a/lib/actions/payment-to-komodo.js b/lib/actions/payment-to-komodo.js
deleted file mode 100644
index 3132ef0..0000000
--- a/lib/actions/payment-to-komodo.js
+++ /dev/null
@@ -1,64 +0,0 @@
-const MODULE_NAME = 'ACTIONS.PAY-TO-KOMODO';
-
-const logger = require('tektrans-logger');
-const axios = require('axios').default;
-
-const config = require('../config');
-
-const client = axios.create({
-    baseURL: config.komodo_http_get_x.url,
-    timeout: config.komodo_http_get_x.request_timeout_ms,
-});
-
-/**
- * request pay transaction to komodo
- *
- * @param {string} xid
- * @param {string} requestId
- * @param {string} destination
- * @param {string} productName
- * @param {string} reverseUrl
- */
-module.exports = async (
-    xid,
-    requestId,
-    destination,
-    productName,
-    reverseUrl,
-) => {
-    logger.verbose(`${MODULE_NAME} 740EF164: pay to komodo`, {
-        requestId, destination, productName, xid,
-    });
-
-    const params = {
-        request_id: requestId,
-        terminal_name: config.komodo_http_get_x.terminal_name,
-        password: config.komodo_http_get_x.password,
-        destination,
-        product_name: productName,
-        reverse_url: reverseUrl,
-    };
-
-    try {
-        const response = await client.get('/pay', {
-            params,
-        });
-        if (!response) {
-            throw new Error(`${MODULE_NAME} 29D8D56F: Empty response from komodo`);
-        }
-        if (!response.data) {
-            throw new Error(`${MODULE_NAME} 288CD049: Empty response data from komodo`);
-        }
-
-        return response.data;
-    } catch (err) {
-        logger.warn(`${MODULE_NAME} DCE65215: Exception`, {
-            xid,
-            requestId,
-            destination,
-            productName,
-            message: err.message,
-        });
-        throw err;
-    }
-};
diff --git a/lib/actions/topup-to-komodo.js b/lib/actions/topup-to-komodo.js
deleted file mode 100644
index c712eac..0000000
--- a/lib/actions/topup-to-komodo.js
+++ /dev/null
@@ -1,64 +0,0 @@
-const MODULE_NAME = 'ACTIONS.TOPUP-TO-KOMODO';
-
-const logger = require('tektrans-logger');
-const axios = require('axios').default;
-
-const config = require('../config');
-
-const client = axios.create({
-    baseURL: config.komodo_http_get_x.url,
-    timeout: config.komodo_http_get_x.request_timeout_ms,
-});
-
-/**
- * request topup transaction to komodo
- *
- * @param {string} xid
- * @param {string} requestId
- * @param {string} destination
- * @param {string} productName
- * @param {string} reverseUrl
- */
-module.exports = async (
-    xid,
-    requestId,
-    destination,
-    productName,
-    reverseUrl,
-) => {
-    logger.verbose(`${MODULE_NAME} 4AD4DF41: topup to komodo`, {
-        requestId, destination, productName, xid,
-    });
-
-    const params = {
-        request_id: requestId,
-        terminal_name: config.komodo_http_get_x.terminal_name,
-        password: config.komodo_http_get_x.password,
-        destination,
-        product_name: productName,
-        reverse_url: reverseUrl,
-    };
-
-    try {
-        const response = await client.get('/topup', {
-            params,
-        });
-        if (!response) {
-            throw new Error(`${MODULE_NAME} 6CE3E06E: Empty response from komodo`);
-        }
-        if (!response.data) {
-            throw new Error(`${MODULE_NAME} F236476F: Empty response data from komodo`);
-        }
-
-        return response.data;
-    } catch (err) {
-        logger.warn(`${MODULE_NAME} 48BAA6B7: Exception`, {
-            xid,
-            requestId,
-            destination,
-            productName,
-            message: err.message,
-        });
-        throw err;
-    }
-};
diff --git a/lib/http-server/routers/postpaid-products/index.js b/lib/http-server/routers/postpaid-products/index.js
deleted file mode 100644
index 3901983..0000000
--- a/lib/http-server/routers/postpaid-products/index.js
+++ /dev/null
@@ -1,80 +0,0 @@
-const MODULE_NAME = 'HTTP-SERVER.ROUTER.POSTPAID-PRODUCTS';
-
-const express = require('express');
-const logger = require('tektrans-logger');
-
-const configData = require('../../../config/data');
-const configSaveProduct = require('../../../config/save-postpaid-product');
-const configRemoveProduct = require('../../../config/remove-postpaid-product');
-
-const router = express.Router();
-
-module.exports = router;
-
-const pageIndex = async (req, res) => {
-    const { xid } = res.locals;
-    try {
-        logger.verbose(`${MODULE_NAME} 24D7D9B4: get postpaid product configuration`, { xid });
-        const products = (await configData.all()).postpaid_products || {};
-        res.json({ error: false, message: 'OK', result: products });
-    } catch (e) {
-        logger.warn(`${MODULE_NAME} 1DB45AC5: Exception.`, {
-            xid, eMessage: e.message, eCode: e.code,
-        });
-        res.status(500).json({
-            error: true,
-            error_code: e.code,
-            message: e.message,
-        });
-    }
-};
-
-const pageSave = async (req, res) => {
-    const { xid } = res.locals;
-    const { name, remote = null, active = 0 } = req.body;
-    try {
-        logger.verbose(`${MODULE_NAME} A083E9DC: save postpaid product configuration`, { xid, data: req.body });
-
-        const params = {
-            name,
-            remote,
-            active,
-        };
-        await configSaveProduct(xid, name, params);
-        res.json({ error: false, message: 'OK' });
-    } catch (e) {
-        logger.warn(`${MODULE_NAME} 88B9218F: Exception.`, {
-            xid, eMessage: e.message, eCode: e.code,
-        });
-        res.status(500).json({
-            error: true,
-            error_code: e.code,
-            message: e.message,
-        });
-    }
-};
-
-const pageRemove = async (req, res) => {
-    const { xid } = res.locals;
-    const { name } = req.body;
-    try {
-        logger.verbose(`${MODULE_NAME} 7AD392AE: remove postpaid product configuration`, { xid, name });
-
-        await configRemoveProduct(xid, name);
-        res.json({ error: false, message: 'OK' });
-    } catch (e) {
-        logger.warn(`${MODULE_NAME} F714088B: Exception.`, {
-            xid, eMessage: e.message, eCode: e.code,
-        });
-        res.status(500).json({
-            error: true,
-            error_code: e.code,
-            message: e.message,
-        });
-    }
-};
-
-router.get('/', [express.json()], pageIndex);
-
-router.post('/save', [express.json()], pageSave);
-router.post('/remove', [express.json()], pageRemove);
diff --git a/lib/http-server/routers/updates/index.js b/lib/http-server/routers/updates/index.js
index 1bbf3ac..beb2ef1 100644
--- a/lib/http-server/routers/updates/index.js
+++ b/lib/http-server/routers/updates/index.js
@@ -26,7 +26,7 @@ const pageUpdate = async (req, res) => {
     }
 
     try {
-        logger.verbose(`${MODULE_NAME} 9E5C70C8: update from komodo`, { xid, data });
+        logger.verbose(`${MODULE_NAME} 9E5C70C8: update from sds`, { xid, data });
         const params = {
             id: data.request_id,
             rc: data.rc,
diff --git a/lib/pull/get-inquiry.js b/lib/pull/get-inquiry.js
deleted file mode 100644
index 00aac65..0000000
--- a/lib/pull/get-inquiry.js
+++ /dev/null
@@ -1,70 +0,0 @@
-const MODULE_NAME = 'PULL.GET-INQUIRY';
-
-const logger = require('tektrans-logger');
-const axios = require('axios').default;
-const uniqid = require('uniqid');
-const config = require('../config');
-const configData = require('../config/data');
-const actions = require('../actions');
-
-const client = axios.create({
-    baseURL: config.core.url,
-    timeout: config.core.request_timeout_ms,
-    headers: {
-        'x-access-token': config.core.access_token,
-    },
-});
-
-let onPull = false;
-
-/**
- * pull unprocessed inquiry transaction from core
- */
-module.exports = async () => {
-    logger.verbose(`${MODULE_NAME} 64E2EFDE: Pull inquiry transaction from core`);
-    if (onPull) {
-        logger.verbose(`${MODULE_NAME} EECB3ECC: Pull inquiry already running`);
-        return false;
-    }
-    onPull = true;
-
-    const xid = uniqid();
-
-    try {
-        const products = await configData.getActiveProductPostpaidArray(xid);
-        const response = await client.post('/transactions/inquiry-pull', {
-            gateway: {
-                name: `${config.name}-postpaid`,
-                url: `${config.url}:${config.port}/apikey/${config.apikey}/postpaid`,
-                postpaid: 1,
-            },
-            products,
-        });
-        if (response.data.error) {
-            logger.info(`${MODULE_NAME} E082E007: Error when pulling inquiry transaction`, {
-                xid,
-                message: response.data.message,
-                error: response.data.error,
-            });
-        }
-
-        if (!response.data.result) {
-            logger.info(`${MODULE_NAME} 72C1FAC5: Empty inquiry transaction result`, {
-                xid,
-                result: response.data.result,
-            });
-            return null;
-        }
-
-        await actions.inquiry(xid, response.data.result);
-    } catch (e) {
-        logger.warn(`${MODULE_NAME} 1E5D9D56: Exception`, {
-            xid,
-            message: e.message,
-            code: e.code,
-        });
-    } finally {
-        onPull = false;
-    }
-    return true;
-};
diff --git a/lib/pull/get-payment.js b/lib/pull/get-payment.js
deleted file mode 100644
index a7587be..0000000
--- a/lib/pull/get-payment.js
+++ /dev/null
@@ -1,70 +0,0 @@
-const MODULE_NAME = 'PULL.GET-PAYMENT';
-
-const logger = require('tektrans-logger');
-const axios = require('axios').default;
-const uniqid = require('uniqid');
-const config = require('../config');
-const configData = require('../config/data');
-const actions = require('../actions');
-
-const client = axios.create({
-    baseURL: config.core.url,
-    timeout: config.core.request_timeout_ms,
-    headers: {
-        'x-access-token': config.core.access_token,
-    },
-});
-
-let onPull = false;
-
-/**
- * pull unprocessed payment transaction from core
- */
-module.exports = async () => {
-    logger.verbose(`${MODULE_NAME} 68CB1245: Pull payment transaction from core`);
-    if (onPull) {
-        logger.verbose(`${MODULE_NAME} 576C1D1A: Pull payment already running`);
-        return false;
-    }
-    onPull = true;
-
-    const xid = uniqid();
-
-    try {
-        const products = await configData.getActiveProductPostpaidArray(xid);
-        const response = await client.post('/transactions/payment-pull', {
-            gateway: {
-                name: `${config.name}-postpaid`,
-                url: `${config.url}:${config.port}/apikey/${config.apikey}/postpaid`,
-                postpaid: 1,
-            },
-            products,
-        });
-        if (response.data.error) {
-            logger.info(`${MODULE_NAME} E3093F6D: Error when pulling payment transaction`, {
-                xid,
-                message: response.data.message,
-                error: response.data.error,
-            });
-        }
-
-        if (!response.data.result) {
-            logger.info(`${MODULE_NAME} 230E9E0F: Empty payment transaction result`, {
-                xid,
-                result: response.data.result,
-            });
-            return null;
-        }
-
-        await actions.pay(xid, response.data.result);
-    } catch (e) {
-        logger.warn(`${MODULE_NAME} 7E6D9444: Exception`, {
-            xid,
-            message: e.message,
-            code: e.code,
-        });
-    } finally {
-        onPull = false;
-    }
-    return true;
-};
diff --git a/lib/pull/run.js b/lib/pull/run.js
index 9d818b6..ae953d3 100644
--- a/lib/pull/run.js
+++ b/lib/pull/run.js
@@ -2,9 +2,7 @@ const MODULE_NAME = 'PULL.RUN';
 const logger = require('tektrans-logger');
 
 const config = require('../config');
-const getInquiry = require('./get-inquiry');
 const getPrepaid = require('./get-prepaid');
-const getPayment = require('./get-payment');
 
 /**
  * Run pulling schedule
@@ -16,7 +14,5 @@ module.exports = async () => {
     setInterval(() => {
         logger.verbose(`${MODULE_NAME} 06B8C652: Pull run`);
         getPrepaid();
-        getInquiry();
-        getPayment();
     }, config.pull_interval_ms);
 };