diff --git a/src/test/cord-api/Framework/restApi.py b/src/test/cord-api/Framework/restApi.py
index edaa61f..dd8b7ad 100644
--- a/src/test/cord-api/Framework/restApi.py
+++ b/src/test/cord-api/Framework/restApi.py
@@ -88,12 +88,13 @@
     def ApiPost(self, key, jsonData):
         url = self.getURL(key)
         data = json.dumps(jsonData)
+        print "url, data..", url, data
         resp = requests.post(url, data=data, headers=self.jsonHeader, auth=(self.user, self.password))
         passed = self.checkResult(resp, requests.codes.created)
         return passed
 
     def ApiGet(self, key, urlSuffix=""):
-        url = self.getURL(key) + urlSuffix
+        url = self.getURL(key) + str(urlSuffix)
         resp = requests.get(url, auth=(self.user, self.password))
         passed = self.checkResult(resp, requests.codes.ok)
         if not passed:
@@ -102,14 +103,15 @@
             return resp.json()
 
     def ApiPut(self, key, jsonData, urlSuffix=""):
-        url = self.getURL(key) + urlSuffix + "/"
+        print "urlSuffix....",type(urlSuffix)
+        url = self.getURL(key) + str(urlSuffix) + "/"
         data = json.dumps(jsonData)
         resp = requests.put(url, data=data, headers=self.jsonHeader, auth=(self.user, self.password))
         passed = self.checkResult(resp, requests.codes.ok)
         return passed
 
     def ApiDelete(self, key, urlSuffix=""):
-        url = self.getURL(key) + urlSuffix
+        url = self.getURL(key) + str(urlSuffix)
         resp = requests.delete(url, auth=(self.user, self.password))
         passed = self.checkResult(resp, requests.codes.no_content)
         return passed
@@ -132,8 +134,11 @@
 '''
 '''
 test = restApi()
-key = "TENANT_SUBSCRIBER"
-#jsonGetData = test.ApiGet(key,"71")
-jsonResponse = test.ApiPut(key,{"identity":{"name":"My House 22"}},"71")
+key = "UTILS_SYNCHRONIZER"
+#key = "TENANT_SUBSCRIBER"
+jsonGetData = test.ApiGet(key)
+#jsonResponse = test.ApiPut(key,{"identity":{"name":"My House 22"}},"71")
+#jsonResponse = test.ApiPost(key,{"name":"test-2"})
+jsonResponse = test.ApiPut(key,{"name":"test1-changed"},"9")
 print "========="
 '''
