diff --git a/.env.example b/.env.example
index 0628e8d25ee86389cb64f59f6f2a4de2281c7908..ad73005083406925c6a507ef3c059ae3f0cfc441 100644
--- a/.env.example
+++ b/.env.example
@@ -7,6 +7,9 @@ POSTGRES_USER=postgres
 POSTGRES_PASSWORD=root
 
 API_KEY=secret
-SOAP_HOST=http://webtune-soap:8080/webtune-soap
-REST_HOST=http://webtune-rest:8888
-REST_KEY=secret_turu
\ No newline at end of file
+
+REST_API="http://webtune-rest:8888"
+REST_KEY=secret_turu
+
+SOAP_API=http://webtune-soap:8080/webtune-soap
+SOAP_KEY=secret_blebekblebek
diff --git a/Controller/ExampleController.php b/Controller/ExampleController.php
deleted file mode 100644
index 38158599798aeb6e126412408e50e4fedede4093..0000000000000000000000000000000000000000
--- a/Controller/ExampleController.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-
-namespace Controller;
-
-use Lib\Interfaces\Routing\IRequest;
-use Lib\Interfaces\Routing\IResponse;
-
-class ExampleController {
-  static function HalamanX(IRequest $req, IResponse $res) {
-    return $res->view("Pages/HalamanX", [
-      "kucing" => 12,
-    ]);
-  }
-}
diff --git a/Controller/SubsciberController.php b/Controller/SubsciberController.php
index 9336f6ddc8643cfc5a64830b5c93b0f0522476d0..99a72f892f42f557ccf1a436ec3b22e86ac4d775 100644
--- a/Controller/SubsciberController.php
+++ b/Controller/SubsciberController.php
@@ -147,9 +147,8 @@ class SubsciberController
     }
   }
 
-  static function fetchSubscriptions(int $page, int $limit, int $user_id, $db)
-  {
-    $fetcher = new FetchAPI(getenv("REST_HOST"));
+  static function fetchSubscriptions(int $page,int $limit, int $user_id,$db){
+    $fetcher = new FetchAPI(getenv("REST_API"));
     $param = [
       "page" => $page,
       "limit" => $limit,
@@ -220,7 +219,7 @@ class SubsciberController
 
     //   $data = json_decode($output,true)["data"];
     //fetch max page
-    $fetcher = new FetchAPI(getenv("REST_HOST"));
+    $fetcher = new FetchAPI(getenv("REST_API"));
     $param = [
       "page-size" => $limit,
     ];
diff --git a/Controller/TestController.php b/Controller/TestController.php
new file mode 100644
index 0000000000000000000000000000000000000000..544075ca4029e3714b81e421998cfb4dda877d27
--- /dev/null
+++ b/Controller/TestController.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace Controller;
+
+use Lib\Interfaces\Routing\IRequest;
+use Lib\Interfaces\Routing\IResponse;
+use Service\Soap\TestSoap;
+
+class TestController {
+  static function soapPing(IRequest $req, IResponse $res) {
+    $test = new TestSoap();
+
+    return $res->json([
+      "result" => $test->ping(),
+    ]);
+  }
+}
diff --git a/Lib/Service/Api/FetchAPI.php b/Lib/Service/Api/FetchAPI.php
index fedf7ed5c69a6040a503877cf0bf828b38cc2717..33cd4e1d521e54f6018ea8cd734df325515452cf 100644
--- a/Lib/Service/Api/FetchAPI.php
+++ b/Lib/Service/Api/FetchAPI.php
@@ -1,64 +1,63 @@
 <?php
-    namespace Lib\Service\Api;
 
-use PDO;
+namespace Lib\Service\Api;
 
-    class FetchAPI{
-        private string $host;
+class FetchAPI{
+    private string $host;
 
-        public function __construct(string $host)
-        {
-            $this->host = $host;
-        }
-
-        public function get(string $endpoint,array $param, array $headers){
-            $url = $this->host . $endpoint;
-            //add param
-            if(count($param)>0){
-                $url .= "?";
-            }
-            foreach($param as $key=>$value){
-                $url = $url . $key . "=" . $value . "&";
-            }
-            $ch = curl_init($url);
-            //set curl header
-            curl_setopt($ch, CURLOPT_RETURNTRANSFER,  1);
-            curl_setopt( $ch , CURLOPT_RETURNTRANSFER, true);
-            curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER, false);
-            curl_setopt( $ch , CURLOPT_SSL_VERIFYHOST, false);
-            curl_setopt( $ch , CURLOPT_TIMEOUT, 10000);
-            //set http header
-            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
-        
-            $output = curl_exec($ch);
-            curl_close($ch);
+    public function __construct(string $host)
+    {
+        $this->host = $host;
+    }
 
-            return $output;
+    public function get(string $endpoint,array $param, array $headers){
+        $url = $this->host . $endpoint;
+        //add param
+        if(count($param)>0){
+            $url .= "?";
         }
+        foreach($param as $key=>$value){
+            $url = $url . $key . "=" . $value . "&";
+        }
+        $ch = curl_init($url);
+        //set curl header
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER,  1);
+        curl_setopt( $ch , CURLOPT_RETURNTRANSFER, true);
+        curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER, false);
+        curl_setopt( $ch , CURLOPT_SSL_VERIFYHOST, false);
+        curl_setopt( $ch , CURLOPT_TIMEOUT, 10000);
+        //set http header
+        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
+    
+        $output = curl_exec($ch);
+        curl_close($ch);
 
-        public function post(string $endpoint,array $param, array $headers){
-            $url = $this->host . $endpoint;
-            //add param
-            $ch = curl_init($url);
-            //set curl header
-            curl_setopt($ch, CURLOPT_RETURNTRANSFER,  1);
-            curl_setopt( $ch , CURLOPT_RETURNTRANSFER, true);
-            curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER, false);
-            curl_setopt( $ch , CURLOPT_SSL_VERIFYHOST, false);
-            curl_setopt( $ch , CURLOPT_TIMEOUT, 10000);
-            //set post payload
-            curl_setopt($ch, CURLOPT_POST, 1);
-            $post_payload = "";
-            foreach($param as $key=>$value){
-                $post_payload = $post_payload . $key . "=" . $value . "&";
-            }
-            curl_setopt($ch, CURLOPT_POSTFIELDS, $post_payload);
-            //set http header
-            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
-        
-            $output = curl_exec($ch);
-            curl_close($ch);
+        return $output;
+    }
 
-            return $output;
+    public function post(string $endpoint,array $param, array $headers){
+        $url = $this->host . $endpoint;
+        //add param
+        $ch = curl_init($url);
+        //set curl header
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER,  1);
+        curl_setopt( $ch , CURLOPT_RETURNTRANSFER, true);
+        curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER, false);
+        curl_setopt( $ch , CURLOPT_SSL_VERIFYHOST, false);
+        curl_setopt( $ch , CURLOPT_TIMEOUT, 10000);
+        //set post payload
+        curl_setopt($ch, CURLOPT_POST, 1);
+        $post_payload = "";
+        foreach($param as $key=>$value){
+            $post_payload = $post_payload . $key . "=" . $value . "&";
         }
-    }
\ No newline at end of file
+        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_payload);
+        //set http header
+        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
+    
+        $output = curl_exec($ch);
+        curl_close($ch);
+
+        return $output;
+    }
+}
\ No newline at end of file
diff --git a/Router/AppRoutes.php b/Router/AppRoutes.php
index 7e5bdbb4b887751fa56c2adb01329fd7112b5f5a..8bbea5242983a4346aabbcbf151aa77f84439470 100644
--- a/Router/AppRoutes.php
+++ b/Router/AppRoutes.php
@@ -7,6 +7,7 @@ use Controller\AlbumController;
 use Controller\HomeController;
 use Controller\LaguController;
 use Controller\SubsciberController;
+use Controller\TestController;
 use Lib\Dependency;
 use Lib\Enums\Request\HttpMethod;
 use Lib\Interfaces\Routing\IRoute;
@@ -25,6 +26,7 @@ class AppRoutes
     $route = $this->route;
 
     $route->route(HttpMethod::Get, "/", [HomeController::class, "homepage"]);
+    $route->route(HttpMethod::Get, "/soap/ping", [TestController::class, "soapPing"]);
 
     //halaman lihat lagu
     $route->route(HttpMethod::Get, "/redirect/search", [LaguController::class, "redirectSearchLagu"]);
@@ -39,7 +41,6 @@ class AppRoutes
 
     // Auth
     $route->groupRoute("/auth", AuthRoutes::getRoutes());
-    $route->route(HttpMethod::Get, "/testing", [ExampleController::class, "HalamanX"]);
 
     // Album
     $route->route(HttpMethod::Get, "/album", [AlbumController::class, "getAlbums"]);
diff --git a/Service/Soap/TestSoap.php b/Service/Soap/TestSoap.php
new file mode 100644
index 0000000000000000000000000000000000000000..8af3bc16603e919ec041b582e4a5d0a6e8cfc654
--- /dev/null
+++ b/Service/Soap/TestSoap.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace Service\Soap;
+
+class TestSoap {
+  private SoapClientFactory $factory;
+
+  public function __construct() {
+    $wsdl = getenv("SOAP_API"). "/services/test?wsdl";
+    $this->factory = new SoapClientFactory($wsdl);
+  }
+
+  public function ping(
+    ?string $last_token = null
+  ): string {
+    $soap = $this->factory->generate_client($last_token);
+
+    return $soap->__soapCall(
+      "ping",
+      []
+    );
+  }
+}
\ No newline at end of file
diff --git a/Service/Soap/TokenSoap.php b/Service/Soap/TokenSoap.php
index de5d54d3e592b043b2814fa04b052dcf66b552a9..73c9c03dc4dc26fd4dede7fae542f50b9247df44 100644
--- a/Service/Soap/TokenSoap.php
+++ b/Service/Soap/TokenSoap.php
@@ -7,9 +7,6 @@ use SoapClient;
 class TokenSoap {
   private SoapClient $soap;
 
-  static string | null $token;
-  static int $exp_time;
-
   public function __construct() {
     $soap_key = getenv("SOAP_KEY");
     $wsdl = getenv("SOAP_API")."/services/security?wsdl";