diff --git a/web/api/src/main/java/org/onosproject/rest/resources/CoreWebApplication.java b/web/api/src/main/java/org/onosproject/rest/resources/CoreWebApplication.java
index 85997dc..67b6c96 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/CoreWebApplication.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/CoreWebApplication.java
@@ -55,7 +55,8 @@
                 DpisWebResource.class,
                 DiagnosticsWebResource.class,
                 UiPreferencesWebResource.class,
-                SystemInfoWebResource.class
+                SystemInfoWebResource.class,
+                PacketProcessorsWebResource.class
         );
     }
 }
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/PacketProcessorsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/PacketProcessorsWebResource.java
new file mode 100644
index 0000000..aefd84e
--- /dev/null
+++ b/web/api/src/main/java/org/onosproject/rest/resources/PacketProcessorsWebResource.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2015-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.rest.resources;
+
+import org.onosproject.rest.AbstractWebResource;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.onosproject.net.packet.PacketProcessorEntry;
+import org.onosproject.net.packet.PacketService;
+import org.slf4j.Logger;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import java.util.List;
+import static org.slf4j.LoggerFactory.getLogger;
+import static org.onosproject.net.packet.PacketProcessor.ADVISOR_MAX;
+import static org.onosproject.net.packet.PacketProcessor.DIRECTOR_MAX;
+
+/**
+ * Manage inventory of packet processors.
+ */
+
+@Path("packet/processors")
+public class PacketProcessorsWebResource extends AbstractWebResource {
+
+    private final Logger log = getLogger(getClass());
+    PacketService service = get(PacketService.class);
+    private final ObjectNode root = mapper().createObjectNode();
+    private final ArrayNode pktProcNode = root.putArray("packet-processors");
+
+    /**
+     * Gets packet processors. Returns array of all packet processors.
+
+     * @onos.rsModel PacketProcessorsGet
+     * @return 200 OK with array of all packet processors.
+     */
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public Response getPacketProcessors() {
+      List<PacketProcessorEntry> processors = service.getProcessors();
+      ObjectMapper mapper = new ObjectMapper();
+      for (PacketProcessorEntry p : processors) {
+            pktProcNode.add(mapper.createObjectNode()
+                    .put("priority", priorityFormat(p.priority()))
+                    .put("class", p.processor().getClass().getName())
+                    .put("packets", p.invocations())
+                    .put("avgNanos", p.averageNanos()));
+      }
+
+      return ok(root).build();
+   }
+
+   private String priorityFormat(int priority) {
+        if (priority > DIRECTOR_MAX) {
+            return "observer(" + (priority - DIRECTOR_MAX - 1) + ")";
+        } else if (priority > ADVISOR_MAX) {
+            return "director(" + (priority - ADVISOR_MAX - 1) + ")";
+        }
+        return "advisor(" + (priority - 1) + ")";
+    }
+}
diff --git a/web/api/src/main/resources/definitions/PacketProcessorsGet.json b/web/api/src/main/resources/definitions/PacketProcessorsGet.json
new file mode 100644
index 0000000..cc88dc6
--- /dev/null
+++ b/web/api/src/main/resources/definitions/PacketProcessorsGet.json
@@ -0,0 +1,44 @@
+{
+  "type": "object",
+  "title": "packet-processors",
+  "required": [
+    "packet-processors"
+  ],
+  "properties": {
+    "packet-processors": {
+      "type": "array",
+      "xml": {
+        "name": "packet-processors",
+        "wrapped": true
+      },
+      "items": {
+        "type": "object",
+        "title": "packet-processors",
+        "required": [
+          "priority",
+          "class",
+          "packets",
+          "avgNanos"
+        ],
+        "properties": {
+          "priority": {
+            "type": "string",
+            "example": "advisor(0)"
+          },
+          "class": {
+            "type": "string",
+            "example": "org.onosproject.provider.host.impl.HostLocationProvider$InternalHostProvider"
+          },
+          "packets": {
+            "type": "integer",
+            "example": 568376
+          },
+          "avgNanos": {
+            "type": "integer",
+            "example": 5683
+          }
+        }
+      }
+    }
+  }
+}
