diff --git a/web/api/src/main/java/org/onosproject/rest/resources/GroupsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/GroupsWebResource.java
index 5d61c0b..77e6287 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/GroupsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/GroupsWebResource.java
@@ -44,6 +44,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.onlab.util.HexString;
 import static org.onlab.util.Tools.nullIsNotFound;
 
 /**
@@ -115,7 +116,12 @@
     public Response getGroupByDeviceIdAndAppCookie(@PathParam("deviceId") String deviceId,
                                                    @PathParam("appCookie") String appCookie) {
         final DeviceId deviceIdInstance = DeviceId.deviceId(deviceId);
-        final GroupKey appCookieInstance = new DefaultGroupKey(appCookie.getBytes());
+
+        if (!appCookie.startsWith("0x")) {
+            throw new IllegalArgumentException("APP_COOKIE must be a hex string starts with 0x");
+        }
+        final GroupKey appCookieInstance = new DefaultGroupKey(HexString.fromHexString(
+                appCookie.split("0x")[1], ""));
 
         Group group = nullIsNotFound(groupService.getGroup(deviceIdInstance, appCookieInstance),
                 GROUP_NOT_FOUND);
@@ -179,7 +185,12 @@
     public Response deleteGroupByDeviceIdAndAppCookie(@PathParam("deviceId") String deviceId,
                                                       @PathParam("appCookie") String appCookie) {
         DeviceId deviceIdInstance = DeviceId.deviceId(deviceId);
-        GroupKey appCookieInstance = new DefaultGroupKey(appCookie.getBytes());
+
+        if (!appCookie.startsWith("0x")) {
+            throw new IllegalArgumentException("APP_COOKIE must be a hex string starts with 0x");
+        }
+        GroupKey appCookieInstance = new DefaultGroupKey(HexString.fromHexString(
+                appCookie.split("0x")[1], ""));
 
         groupService.removeGroup(deviceIdInstance, appCookieInstance, null);
         return Response.noContent().build();
diff --git a/web/api/src/main/resources/definitions/Groups.json b/web/api/src/main/resources/definitions/Groups.json
index 22f36fb..04273e0 100644
--- a/web/api/src/main/resources/definitions/Groups.json
+++ b/web/api/src/main/resources/definitions/Groups.json
@@ -67,6 +67,11 @@
             "description": "types of the group",
             "example": "ALL"
           },
+          "deviceId": {
+            "type": "string",
+            "description": "device identifier",
+            "example": "of:0000000000000003"
+          },
           "appId": {
             "type": "string",
             "description": "application identifier",
@@ -154,4 +159,4 @@
       }
     }
   }
-}
\ No newline at end of file
+}
diff --git a/web/api/src/main/resources/definitions/GroupsPost.json b/web/api/src/main/resources/definitions/GroupsPost.json
index 7ea7b50..203e2e4 100644
--- a/web/api/src/main/resources/definitions/GroupsPost.json
+++ b/web/api/src/main/resources/definitions/GroupsPost.json
@@ -3,7 +3,6 @@
   "title": "group",
   "required": [
     "type",
-    "deviceId",
     "appCookie",
     "groupId",
     "buckets"
@@ -13,10 +12,6 @@
       "type": "string",
       "example": "ALL"
     },
-    "deviceId": {
-      "type": "string",
-      "example": "of:0000000000000001"
-    },
     "appCookie": {
       "type": "string",
       "description": "application cookie. Arbitrary length byte array represented in hex string",
@@ -82,4 +77,4 @@
       }
     }
   }
-}
\ No newline at end of file
+}
diff --git a/web/api/src/test/java/org/onosproject/rest/resources/GroupsResourceTest.java b/web/api/src/test/java/org/onosproject/rest/resources/GroupsResourceTest.java
index 11334d2..63a7daa 100644
--- a/web/api/src/test/java/org/onosproject/rest/resources/GroupsResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/resources/GroupsResourceTest.java
@@ -95,14 +95,14 @@
     final Device device2 = new DefaultDevice(null, deviceId2, Device.Type.OTHER,
             "", "", "", "", null);
 
-    final MockGroup group1 = new MockGroup(deviceId1, 1, "111", 1);
-    final MockGroup group2 = new MockGroup(deviceId1, 2, "222", 2);
+    final MockGroup group1 = new MockGroup(deviceId1, 1, "0x111", 1);
+    final MockGroup group2 = new MockGroup(deviceId1, 2, "0x222", 2);
 
-    final MockGroup group3 = new MockGroup(deviceId2, 3, "333", 3);
-    final MockGroup group4 = new MockGroup(deviceId2, 4, "444", 4);
+    final MockGroup group3 = new MockGroup(deviceId2, 3, "0x333", 3);
+    final MockGroup group4 = new MockGroup(deviceId2, 4, "0x444", 4);
 
-    final MockGroup group5 = new MockGroup(deviceId3, 5, "555", 5);
-    final MockGroup group6 = new MockGroup(deviceId3, 6, "666", 6);
+    final MockGroup group5 = new MockGroup(deviceId3, 5, "0x555", 5);
+    final MockGroup group6 = new MockGroup(deviceId3, 6, "0x666", 6);
 
     /**
      * Mock class for a group.
@@ -462,7 +462,7 @@
                 .andReturn(group5).anyTimes();
         replay(mockGroupService);
         final WebTarget wt = target();
-        final String response = wt.path("groups/" + deviceId3 + "/" + "111")
+        final String response = wt.path("groups/" + deviceId3 + "/" + "0x111")
                 .request().get(String.class);
         final JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
@@ -484,7 +484,7 @@
                 .andReturn(null).anyTimes();
         replay(mockGroupService);
         final WebTarget wt = target();
-        final Response response = wt.path("groups/" + deviceId3 + "/" + "222").request().get();
+        final Response response = wt.path("groups/" + deviceId3 + "/" + "0x222").request().get();
 
         assertEquals(404, response.getStatus());
     }
@@ -522,7 +522,7 @@
 
         WebTarget wt = target();
 
-        String location = "/groups/1/111";
+        String location = "/groups/1/0x111";
 
         Response deleteResponse = wt.path(location)
                 .request(MediaType.APPLICATION_JSON_TYPE)
