diff --git a/core/common/src/main/java/org/onosproject/codec/impl/DeviceKeyCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/DeviceKeyCodec.java
index 7802ebd..1419dda 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/DeviceKeyCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/DeviceKeyCodec.java
@@ -41,21 +41,20 @@
     private static final String USERNAME = "username";
     private static final String PASSWORD = "password";
 
-
     @Override
     public ObjectNode encode(DeviceKey deviceKey, CodecContext context) {
         checkNotNull(deviceKey, "Device key cannot be null");
         DeviceKeyService service = context.getService(DeviceKeyService.class);
         ObjectNode result = context.mapper().createObjectNode()
-                .put(ID, deviceKey.deviceKeyId().id().toString())
+                .put(ID, deviceKey.deviceKeyId().id())
                 .put(TYPE, deviceKey.type().toString())
-                .put(LABEL, deviceKey.label().toString());
+                .put(LABEL, deviceKey.label());
 
         if (deviceKey.type().equals(DeviceKey.Type.COMMUNITY_NAME)) {
             result.put(COMMUNITY_NAME, deviceKey.asCommunityName().name());
         } else if (deviceKey.type().equals(DeviceKey.Type.USERNAME_PASSWORD)) {
-            result.put(USERNAME, deviceKey.asUsernamePassword().username().toString());
-            result.put(PASSWORD, deviceKey.asUsernamePassword().password().toString());
+            result.put(USERNAME, deviceKey.asUsernamePassword().username());
+            result.put(PASSWORD, deviceKey.asUsernamePassword().password());
         }
 
         return annotate(result, deviceKey, context);
@@ -70,18 +69,29 @@
         DeviceKeyId id = DeviceKeyId.deviceKeyId(json.get(ID).asText());
 
         DeviceKey.Type type = DeviceKey.Type.valueOf(json.get(TYPE).asText());
-        String label = json.get(LABEL).asText();
+        String label = extract(json, LABEL);
 
         if (type.equals(DeviceKey.Type.COMMUNITY_NAME)) {
-            String communityName = json.get(COMMUNITY_NAME).asText();
+            String communityName = extract(json, COMMUNITY_NAME);
             return DeviceKey.createDeviceKeyUsingCommunityName(id, label, communityName);
         } else if (type.equals(DeviceKey.Type.USERNAME_PASSWORD)) {
-            String username = json.get(USERNAME).asText();
-            String password = json.get(PASSWORD).asText();
+            String username = extract(json, USERNAME);
+            String password = extract(json, PASSWORD);
             return DeviceKey.createDeviceKeyUsingUsernamePassword(id, label, username, password);
         } else {
             log.error("Unknown device key type: ", type);
             return null;
         }
     }
+
+    /**
+     * Extract the key from the json node.
+     *
+     * @param json json object
+     * @param key key to use extract the value from the json object
+     * @return extracted value from the json object
+     */
+    private String extract(ObjectNode json, String key) {
+        return json.get(key) == null ? null : json.get(key).asText();
+    }
 }
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/DeviceKeyWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/DeviceKeyWebResource.java
index 3e78825..c4020e1 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/DeviceKeyWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/DeviceKeyWebResource.java
@@ -56,9 +56,8 @@
      * Returns array of all device keys.
      *
      * @return 200 OK
+     * @onos.rsModel Devicekeys
      */
-// FIXME DeviceKeysGet.json not found
-//   * @onos.rsModel DeviceKeysGet
     @GET
     public Response getDeviceKeys() {
         Iterable<DeviceKey> deviceKeys = get(DeviceKeyService.class).getDeviceKeys();
@@ -69,11 +68,10 @@
      * Get a single device key by device key unique identifier.
      * Returns the specified device key.
      *
-     * @param id device identifier
-     * @return 200 OK
+     * @param id device key identifier
+     * @return 200 OK, 404 not found
+     * @onos.rsModel Devicekey
      */
-// FIXME DeviceKeyGet.json not found
-//   * @onos.rsModel DeviceKeyGet
     @GET
     @Path("{id}")
     public Response getDeviceKey(@PathParam("id") String id) {
@@ -83,14 +81,13 @@
     }
 
     /**
-     * Adds a new device key from the JSON request.
+     * Adds a new device key from the JSON input stream.
      *
-     * @param stream input JSON
+     * @param stream device key JSON stream
      * @return status of the request - CREATED if the JSON is correct,
      * BAD_REQUEST if the JSON is invalid
+     * @onos.rsModel Devicekey
      */
-// FIXME wrong schema definition?
-//   * @onos.rsModel IntentHost
     @POST
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces(MediaType.APPLICATION_JSON)
@@ -117,8 +114,8 @@
     /**
      * Removes a device key by device key identifier.
      *
-     * @param id device identifier
-     * @return 200 OK
+     * @param id device key identifier
+     * @return 200 OK, 404 not found
      */
     @DELETE
     @Path("{id}")
diff --git a/web/api/src/main/resources/definitions/Devicekey.json b/web/api/src/main/resources/definitions/Devicekey.json
new file mode 100644
index 0000000..a8bee2d
--- /dev/null
+++ b/web/api/src/main/resources/definitions/Devicekey.json
@@ -0,0 +1,35 @@
+{
+  "type": "object",
+  "title": "Devicekey",
+  "required": [
+    "id",
+    "type",
+    "label"
+  ],
+  "properties": {
+    "id": {
+      "type": "String",
+      "example": "Device key unique identifier"
+    },
+    "type": {
+      "type": "String",
+      "example": "COMMUNITY_NAME, OR USERNAME_PASSWORD"
+    },
+    "label": {
+      "type": "String",
+      "example": "Device key user label"
+    },
+    "community_name": {
+      "type": "String",
+      "example": "Device key community name"
+    },
+    "username": {
+      "type": "String",
+      "example": "Device key username"
+    },
+    "password": {
+      "type": "String",
+      "example": "Device key password"
+    }
+  }
+}
diff --git a/web/api/src/main/resources/definitions/Devicekeys.json b/web/api/src/main/resources/definitions/Devicekeys.json
new file mode 100644
index 0000000..57871f5
--- /dev/null
+++ b/web/api/src/main/resources/definitions/Devicekeys.json
@@ -0,0 +1,51 @@
+{
+  "type": "object",
+  "title": "Devicekeys",
+  "required": [
+    "keys"
+  ],
+  "properties": {
+    "keys": {
+      "type": "array",
+      "xml": {
+        "name": "keys",
+        "wrapped": true
+      },
+      "items": {
+        "type": "object",
+        "title": "key",
+        "required": [
+          "id",
+          "type",
+          "label"
+        ],
+        "properties": {
+          "id": {
+            "type": "String",
+            "example": "Device key unique identifier"
+          },
+          "type": {
+            "type": "String",
+            "example": "COMMUNITY_NAME, OR USERNAME_PASSWORD"
+          },
+          "label": {
+            "type": "String",
+            "example": "Device key user label"
+          },
+          "community_name": {
+            "type": "String",
+            "example": "Device key community name"
+          },
+          "username": {
+            "type": "String",
+            "example": "Device key username"
+          },
+          "password": {
+            "type": "String",
+            "example": "Device key password"
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/web/api/src/test/java/org/onosproject/rest/DeviceKeyWebResourceTest.java b/web/api/src/test/java/org/onosproject/rest/DeviceKeyWebResourceTest.java
index 886674c..54f1bea 100644
--- a/web/api/src/test/java/org/onosproject/rest/DeviceKeyWebResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/DeviceKeyWebResourceTest.java
@@ -25,7 +25,6 @@
 import org.hamcrest.Description;
 import org.hamcrest.Matchers;
 import org.hamcrest.TypeSafeMatcher;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.onlab.osgi.ServiceDirectory;
@@ -67,6 +66,7 @@
     private final String deviceKeyId1 = "DeviceKeyId1";
     private final String deviceKeyId2 = "DeviceKeyId2";
     private final String deviceKeyId3 = "DeviceKeyId3";
+    private final String deviceKeyId4 = "DeviceKeyId4";
     private final String deviceKeyLabel = "DeviceKeyLabel";
     private final String deviceKeyCommunityName = "DeviceKeyCommunityName";
     private final String deviceKeyUsername = "DeviceKeyUsername";
@@ -75,7 +75,11 @@
     private final DeviceKey deviceKey1 = DeviceKey.createDeviceKeyUsingCommunityName(
             DeviceKeyId.deviceKeyId(deviceKeyId1), deviceKeyLabel, deviceKeyCommunityName);
     private final DeviceKey deviceKey2 = DeviceKey.createDeviceKeyUsingUsernamePassword(
-            DeviceKeyId.deviceKeyId(deviceKeyId2), deviceKeyLabel, deviceKeyUsername, deviceKeyPassword);
+            DeviceKeyId.deviceKeyId(deviceKeyId2), null, deviceKeyUsername, deviceKeyPassword);
+    private final DeviceKey deviceKey3 = DeviceKey.createDeviceKeyUsingUsernamePassword(
+            DeviceKeyId.deviceKeyId(deviceKeyId3), null, null, null);
+    private final DeviceKey deviceKey4 = DeviceKey.createDeviceKeyUsingCommunityName(
+            DeviceKeyId.deviceKeyId(deviceKeyId4), null, null);
 
     /**
      * Initializes test mocks and environment.
@@ -97,15 +101,6 @@
     }
 
     /**
-     * Verifies test mocks.
-     */
-    @After
-    public void tearDownMocks() {
-        verify(mockDeviceKeyService);
-        verify(mockDeviceKeyAdminService);
-    }
-
-    /**
      * Hamcrest matcher to check that a device key representation in JSON matches
      * the actual device key.
      */
@@ -127,10 +122,12 @@
             }
 
             // Check the device key label
-            final String jsonLabel = jsonHost.get(LABEL).asString();
-            if (!jsonLabel.equals(deviceKey.label().toString())) {
-                reason = LABEL + " " + deviceKey.label().toString();
-                return false;
+            final String jsonLabel = (jsonHost.get(LABEL).isNull()) ? null : jsonHost.get(LABEL).asString();
+            if (deviceKey.label() != null) {
+                if ((jsonLabel == null) || !jsonLabel.equals(deviceKey.label())) {
+                    reason = LABEL + " " + deviceKey.label();
+                    return false;
+                }
             }
 
             // Check the device key type
@@ -142,24 +139,33 @@
 
             if (jsonType.equals(DeviceKey.Type.COMMUNITY_NAME.toString())) {
                 // Check the device key community name
-                final String jsonCommunityName = jsonHost.get(COMMUNITY_NAME).asString();
-                if (!jsonCommunityName.equals(deviceKey.asCommunityName().name().toString())) {
-                    reason = COMMUNITY_NAME + " " + deviceKey.asCommunityName().name().toString();
-                    return false;
+                final String jsonCommunityName = jsonHost.get(COMMUNITY_NAME).isNull() ?
+                        null : jsonHost.get(COMMUNITY_NAME).asString();
+                if (deviceKey.asCommunityName().name() != null) {
+                    if (!jsonCommunityName.equals(deviceKey.asCommunityName().name().toString())) {
+                        reason = COMMUNITY_NAME + " " + deviceKey.asCommunityName().name().toString();
+                        return false;
+                    }
                 }
             } else if (jsonType.equals(DeviceKey.Type.USERNAME_PASSWORD.toString())) {
                 // Check the device key username
-                final String jsonUsername = jsonHost.get(USERNAME).asString();
-                if (!jsonUsername.equals(deviceKey.asUsernamePassword().username().toString())) {
-                    reason = USERNAME + " " + deviceKey.asUsernamePassword().username().toString();
-                    return false;
+                final String jsonUsername = jsonHost.get(USERNAME).isNull() ?
+                        null : jsonHost.get(USERNAME).asString();
+                if (deviceKey.asUsernamePassword().username() != null) {
+                    if (!jsonUsername.equals(deviceKey.asUsernamePassword().username().toString())) {
+                        reason = USERNAME + " " + deviceKey.asUsernamePassword().username().toString();
+                        return false;
+                    }
                 }
 
                 // Check the device key password
-                final String jsonPassword = jsonHost.get(PASSWORD).asString();
-                if (!jsonPassword.equals(deviceKey.asUsernamePassword().password().toString())) {
-                    reason = PASSWORD + " " + deviceKey.asUsernamePassword().password().toString();
-                    return false;
+                final String jsonPassword = jsonHost.get(PASSWORD).isNull() ?
+                        null : jsonHost.get(PASSWORD).asString();
+                if (deviceKey.asUsernamePassword().password() != null) {
+                    if (!jsonPassword.equals(deviceKey.asUsernamePassword().password().toString())) {
+                        reason = PASSWORD + " " + deviceKey.asUsernamePassword().password().toString();
+                        return false;
+                    }
                 }
             } else {
                 reason = "Unknown " + TYPE + " " + deviceKey.type().toString();
@@ -251,11 +257,12 @@
     @Test
     public void testGetDeviceKeysEmptyArray() {
         replay(mockDeviceKeyService);
-        replay(mockDeviceKeyAdminService);
 
         WebResource rs = resource();
         String response = rs.path("keys").get(String.class);
         assertThat(response, is("{\"keys\":[]}"));
+
+        verify(mockDeviceKeyService);
     }
 
     /**
@@ -264,9 +271,10 @@
     @Test
     public void testGetDeviceKeysArray() {
         replay(mockDeviceKeyService);
-        replay(mockDeviceKeyAdminService);
         deviceKeySet.add(deviceKey1);
         deviceKeySet.add(deviceKey2);
+        deviceKeySet.add(deviceKey3);
+        deviceKeySet.add(deviceKey4);
 
         WebResource rs = resource();
         String response = rs.path("keys").get(String.class);
@@ -280,10 +288,14 @@
 
         final JsonArray deviceKeys = result.get("keys").asArray();
         assertThat(deviceKeys, notNullValue());
-        assertEquals("Device keys array is not the correct size.", 2, deviceKeys.size());
+        assertEquals("Device keys array is not the correct size.", 4, deviceKeys.size());
 
         assertThat(deviceKeys, hasDeviceKey(deviceKey1));
         assertThat(deviceKeys, hasDeviceKey(deviceKey2));
+        assertThat(deviceKeys, hasDeviceKey(deviceKey3));
+        assertThat(deviceKeys, hasDeviceKey(deviceKey4));
+
+        verify(mockDeviceKeyService);
     }
 
     /**
@@ -297,7 +309,6 @@
                 .andReturn(deviceKey1)
                 .anyTimes();
         replay(mockDeviceKeyService);
-        replay(mockDeviceKeyAdminService);
 
         WebResource rs = resource();
         String response = rs.path("keys/" + deviceKeyId1).get(String.class);
@@ -305,6 +316,8 @@
         assertThat(result, notNullValue());
 
         assertThat(result, matchesDeviceKey(deviceKey1));
+
+        verify(mockDeviceKeyService);
     }
 
     /**
@@ -317,7 +330,6 @@
                 .andReturn(null)
                 .anyTimes();
         replay(mockDeviceKeyService);
-        replay(mockDeviceKeyAdminService);
 
         WebResource rs = resource();
         try {
@@ -327,6 +339,8 @@
             assertThat(ex.getMessage(),
                        containsString("returned a response status of"));
         }
+
+        verify(mockDeviceKeyService);
     }
 
     /**
@@ -338,7 +352,6 @@
         mockDeviceKeyAdminService.addKey(anyObject());
         expectLastCall();
 
-        replay(mockDeviceKeyService);
         replay(mockDeviceKeyAdminService);
 
         WebResource rs = resource();
@@ -352,6 +365,8 @@
 
         String location = response.getLocation().getPath();
         assertThat(location, Matchers.startsWith("/keys/" + deviceKeyId3));
+
+        verify(mockDeviceKeyAdminService);
     }
 
     /**
@@ -360,7 +375,6 @@
     @Test
     public void testPostNullDeviceKey() {
 
-        replay(mockDeviceKeyService);
         replay(mockDeviceKeyAdminService);
 
         WebResource rs = resource();
@@ -373,6 +387,8 @@
             assertThat(ex.getMessage(),
                        containsString("returned a response status of"));
         }
+
+        verify(mockDeviceKeyAdminService);
     }
 
     /**
@@ -395,6 +411,9 @@
                 .type(MediaType.APPLICATION_JSON_TYPE)
                 .delete(ClientResponse.class);
         assertThat(response.getStatus(), is(HttpURLConnection.HTTP_OK));
+
+        verify(mockDeviceKeyService);
+        verify(mockDeviceKeyAdminService);
     }
 
     /**
@@ -421,5 +440,8 @@
             assertThat(ex.getMessage(),
                        containsString("returned a response status of"));
         }
+
+        verify(mockDeviceKeyService);
+        verify(mockDeviceKeyAdminService);
     }
 }
\ No newline at end of file
