diff --git a/src/emuvim/api/rest/monitor.py b/src/emuvim/api/rest/monitor.py
index 379c8d5..74f7acf 100755
--- a/src/emuvim/api/rest/monitor.py
+++ b/src/emuvim/api/rest/monitor.py
@@ -33,7 +33,7 @@
 """
 
 import logging
-from flask_restful import Resource
+from flask_restful import Resource, reqparse
 from flask import request
 import json
 
@@ -55,8 +55,17 @@
     """
     global net
 
-    def put(self, vnf_name, vnf_interface=None, metric='tx_packets', cookie=None):
+    def put(self):
         logging.debug("REST CALL: start monitor VNF interface")
+        # get URL parameters
+        data = request.args
+        if data is None:
+            data = {}
+        vnf_name = data.get("vnf_name")
+        vnf_interface = data.get("vnf_interface", None)
+        metric = data.get("metric", 'tx_packets')
+        cookie = data.get("cookie")
+
         try:
             if cookie:
                 c = net.monitor_agent.setup_flow(vnf_name, vnf_interface, metric, cookie)
@@ -68,8 +77,17 @@
             logging.exception("API error.")
             return ex.message, 500, CORS_HEADER
 
-    def delete(self, vnf_name, vnf_interface=None, metric='tx_packets', cookie=None):
+    def delete(self):
         logging.debug("REST CALL: stop monitor VNF interface")
+        # get URL parameters
+        data = request.args
+        if data is None:
+            data = {}
+        vnf_name = data.get("vnf_name")
+        vnf_interface = data.get("vnf_interface", None)
+        metric = data.get("metric", 'tx_packets')
+        cookie = data.get("cookie")
+
         try:
             if cookie:
                 c = net.monitor_agent.stop_flow(vnf_name, vnf_interface, metric, cookie)
@@ -93,8 +111,17 @@
     """
     global net
 
-    def put(self, vnf_name, vnf_interface=None, metric='tx_packets', cookie=0):
+    def put(self):
         logging.debug("REST CALL: start monitor VNF interface")
+        # get URL parameters
+        data = request.args
+        if data is None:
+            data = {}
+        vnf_name = data.get("vnf_name")
+        vnf_interface = data.get("vnf_interface", None)
+        metric = data.get("metric", 'tx_packets')
+        cookie = data.get("cookie", 0)
+
         try:
             c = net.monitor_agent.setup_flow(vnf_name, vnf_interface, metric, cookie)
             # return monitor message response
@@ -103,8 +130,17 @@
             logging.exception("API error.")
             return ex.message, 500, CORS_HEADER
 
-    def delete(self, vnf_name, vnf_interface=None, metric='tx_packets', cookie=0):
+    def delete(self):
         logging.debug("REST CALL: stop monitor VNF interface")
+        # get URL parameters
+        data = request.args
+        if data is None:
+            data = {}
+        vnf_name = data.get("vnf_name")
+        vnf_interface = data.get("vnf_interface", None)
+        metric = data.get("metric", 'tx_packets')
+        cookie = data.get("cookie", 0)
+
         try:
             c = net.monitor_agent.stop_flow(vnf_name, vnf_interface, metric, cookie)
             # return monitor message response
@@ -138,37 +174,40 @@
     # the global net is set from the topology file, and connected via connectDCNetwork function in rest_api_endpoint.py
     global net
 
-    def put(self, vnf_src_name, vnf_dst_name):
+    def put(self):
         logging.debug("REST CALL: monitor link flow add")
 
         try:
             command = 'add-flow'
-            return self._MonitorLinkAction(vnf_src_name, vnf_dst_name, command=command)
+            return self._MonitorLinkAction(command=command)
         except Exception as ex:
             logging.exception("API error.")
             return ex.message, 500, CORS_HEADER
 
-    def delete(self, vnf_src_name, vnf_dst_name):
+    def delete(self):
         logging.debug("REST CALL: monitor link flow remove")
 
         try:
             command = 'del-flows'
-            return self._MonitorLinkAction(vnf_src_name, vnf_dst_name, command=command)
+            return self._MonitorLinkAction(command=command)
         except Exception as ex:
             logging.exception("API error.")
             return ex.message, 500, CORS_HEADER
 
-    def _MonitorLinkAction(self, vnf_src_name, vnf_dst_name, command=None):
+    def _MonitorLinkAction(self, command=None):
         # call DCNetwork method, not really datacenter specific API for now...
         # no check if vnfs are really connected to this datacenter...
+
         try:
-            # check if json data is a dict
-            data = request.json
+            # get URL parameters
+            data = request.args
+            #then no data
             if data is None:
                 data = {}
-            elif type(data) is not dict:
-                data = json.loads(request.json)
 
+
+            vnf_src_name = data.get("vnf_src_name")
+            vnf_dst_name = data.get("vnf_dst_name")
             vnf_src_interface = data.get("vnf_src_interface")
             vnf_dst_interface = data.get("vnf_dst_interface")
             weight = data.get("weight")
@@ -225,8 +264,14 @@
     """
     global net
 
-    def put(self, vnf_name, resource_name='cpu'):
+    def put(self):
         logging.debug("REST CALL: start monitor skewness")
+        # get URL parameters
+        data = request.args
+        if data is None:
+            data = {}
+        vnf_name = data.get("vnf_name")
+        resource_name = data.get("resource_name", 'cpu')
         try:
             # configure skewmon
             c = net.monitor_agent.update_skewmon(vnf_name, resource_name, action='start')
@@ -237,8 +282,14 @@
             logging.exception("API error.")
             return ex.message, 500
 
-    def delete(self, vnf_name, resource_name='cpu'):
+    def delete(self):
         logging.debug("REST CALL: stop monitor skewness")
+        # get URL parameters
+        data = request.args
+        if data is None:
+            data = {}
+        vnf_name = data.get("vnf_name")
+        resource_name = data.get("resource_name", 'cpu')
         try:
             # configure skewmon
             c = net.monitor_agent.update_skewmon(vnf_name, resource_name, action='stop')
diff --git a/src/emuvim/api/rest/network.py b/src/emuvim/api/rest/network.py
index 10baa8f..e766e62 100755
--- a/src/emuvim/api/rest/network.py
+++ b/src/emuvim/api/rest/network.py
@@ -65,27 +65,33 @@
 
     global net
 
-    def put(self, vnf_src_name, vnf_dst_name):
+    def put(self):
         logging.debug("REST CALL: network chain add")
         command = 'add-flow'
-        return self._NetworkAction(vnf_src_name, vnf_dst_name, command=command)
+        return self._NetworkAction(command=command)
 
-    def delete(self, vnf_src_name, vnf_dst_name):
+    def delete(self):
         logging.debug("REST CALL: network chain remove")
         command = 'del-flows'
-        return self._NetworkAction(vnf_src_name, vnf_dst_name, command=command)
+        return self._NetworkAction(command=command)
 
-    def _NetworkAction(self, vnf_src_name, vnf_dst_name, command=None):
+    def _NetworkAction(self, command=None):
         # call DCNetwork method, not really datacenter specific API for now...
         # no check if vnfs are really connected to this datacenter...
         try:
             # check if json data is a dict
-            data = request.json
+            data = request.args
+            # try json payload
+            if data is None:
+                data = request.json
+            # then no data
             if data is None:
                 data = {}
             elif type(data) is not dict:
                 data = json.loads(request.json)
 
+            vnf_src_name = data.get("vnf_src_name")
+            vnf_dst_name = data.get("vnf_dst_name")
             vnf_src_interface = data.get("vnf_src_interface")
             vnf_dst_interface = data.get("vnf_dst_interface")
             weight = data.get("weight")
diff --git a/src/emuvim/api/rest/rest_api_endpoint.py b/src/emuvim/api/rest/rest_api_endpoint.py
index 7168f37..afa4f5c 100755
--- a/src/emuvim/api/rest/rest_api_endpoint.py
+++ b/src/emuvim/api/rest/rest_api_endpoint.py
@@ -75,23 +75,20 @@
 
         # network related actions (setup chaining between VNFs)
         self.api.add_resource(NetworkAction,
-                              "/restapi/network/<vnf_src_name>/<vnf_dst_name>")
+                              "/restapi/network")
 
 
         # monitoring related actions
         # export a network interface traffic rate counter
         self.api.add_resource(MonitorInterfaceAction,
-                              "/restapi/monitor/interface/<vnf_name>/<metric>",
-                              "/restapi/monitor/interface/<vnf_name>/<vnf_interface>/<metric>",
-                              "/restapi/monitor/interface/<vnf_name>/<vnf_interface>/<metric>/<cookie>")
+                              "/restapi/monitor/interface")
         # export flow traffic counter, of a manually pre-installed flow entry, specified by its cookie
         self.api.add_resource(MonitorFlowAction,
-                              "/restapi/monitor/flow/<vnf_name>/<metric>/<cookie>",
-                              "/restapi/monitor/flow/<vnf_name>/<vnf_interface>/<metric>/<cookie>")
+                              "/restapi/monitor/flow")
         # install monitoring of a specific flow on a pre-existing link in the service.
         # the traffic counters of the newly installed monitor flow are exported
         self.api.add_resource(MonitorLinkAction,
-                              "/restapi/monitor/link/<vnf_src_name>/<vnf_dst_name>")
+                              "/restapi/monitor/link")
         # install skewness monitor of resource usage disribution
         # the skewness metric is exported
         self.api.add_resource(MonitorSkewAction,
