diff --git a/apps/packet-stats/web/BUCK b/apps/packet-stats/web/BUCK
new file mode 100644
index 0000000..ed375d5
--- /dev/null
+++ b/apps/packet-stats/web/BUCK
@@ -0,0 +1,16 @@
+COMPILE_DEPS = [
+    '//lib:CORE_DEPS',
+    '//lib:JACKSON',
+    '//utils/rest:onlab-rest',
+    '//lib:javax.ws.rs-api',
+    '//lib:METRICS',
+]
+
+osgi_jar (
+   deps = COMPILE_DEPS,
+   web_context = '/onos/v1/packet-stats',
+   api_title = 'Packet Stats API',
+   api_version = '1.0',
+   api_description = 'REST API for Packet Stats',
+   api_package = 'org.onosproject.packetstats.web',
+)
diff --git a/apps/packet-stats/web/BUILD b/apps/packet-stats/web/BUILD
new file mode 100644
index 0000000..3084433
--- /dev/null
+++ b/apps/packet-stats/web/BUILD
@@ -0,0 +1,13 @@
+COMPILE_DEPS = CORE_DEPS + KRYO + JACKSON + REST + CLI + METRICS + [
+    "@jersey_server//jar",
+    "//core/store/serializers:onos-core-serializers",
+]
+
+osgi_jar(
+    api_description = "REST API for Packet Stats",
+    api_package = "org.onosproject.packetstats.rest",
+    api_title = "Packet Stats App",
+    api_version = "1.0",
+    web_context = "/onos/v1/packet-stats",
+    deps = COMPILE_DEPS,
+)
diff --git a/apps/packet-stats/web/pom.xml b/apps/packet-stats/web/pom.xml
new file mode 100644
index 0000000..2a07201
--- /dev/null
+++ b/apps/packet-stats/web/pom.xml
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2018-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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onosproject</groupId>
+        <artifactId>onos-apps-packet-stats</artifactId>
+        <version>1.14.2-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>onos-apps-packet-stats-web</artifactId>
+    <packaging>bundle</packaging>
+
+    <properties>
+        <web.context>/onos/v1/packet-stats</web.context>
+        <api.version>1.0.0</api.version>
+        <api.title>ONOS REST API for Packet Stats</api.title>
+        <api.description>
+            APIs for interacting with the Packet Stats.
+        </api.description>
+        <api.package>org.onosproject.packetstats.web</api.package>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-incubator-api</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-apps-packet-stats-app</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onlab-junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-api</artifactId>
+            <scope>test</scope>
+            <classifier>tests</classifier>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.scr.annotations</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.karaf.shell</groupId>
+            <artifactId>org.apache.karaf.shell.console</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-core-serializers</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-cli</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-apps-route-service-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-apps-route-service-api</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+            <classifier>tests</classifier>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <version>3.0.1</version>
+                <extensions>true</extensions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>2.5.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-scr-plugin</artifactId>
+                <version>1.21.0</version>
+                <executions>
+                    <execution>
+                        <id>generate-scr-srcdescriptor</id>
+                        <goals>
+                            <goal>scr</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <supportedProjectTypes>
+                        <supportedProjectType>bundle</supportedProjectType>
+                        <supportedProjectType>war</supportedProjectType>
+                    </supportedProjectTypes>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.onosproject</groupId>
+                <artifactId>onos-maven-plugin</artifactId>
+                <version>1.10</version>
+                <executions>
+                    <execution>
+                        <id>cfg</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>cfg</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>swagger</id>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>swagger</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>app</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>app</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/apps/packet-stats/web/src/main/java/org/onosproject/packetstats/web/PacketStatsWebApplication.java b/apps/packet-stats/web/src/main/java/org/onosproject/packetstats/web/PacketStatsWebApplication.java
new file mode 100644
index 0000000..8ffc5c9
--- /dev/null
+++ b/apps/packet-stats/web/src/main/java/org/onosproject/packetstats/web/PacketStatsWebApplication.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2014-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.packetstats.web;
+
+import org.onlab.rest.AbstractWebApplication;
+
+import java.util.Set;
+
+/**
+ * Packet Stats Web application.
+ */
+public class PacketStatsWebApplication extends AbstractWebApplication {
+    @Override
+    public Set<Class<?>> getClasses() {
+        return getClasses(PacketStatsWebResource.class);
+    }
+}
diff --git a/apps/packet-stats/web/src/main/java/org/onosproject/packetstats/web/PacketStatsWebResource.java b/apps/packet-stats/web/src/main/java/org/onosproject/packetstats/web/PacketStatsWebResource.java
new file mode 100644
index 0000000..a698d34
--- /dev/null
+++ b/apps/packet-stats/web/src/main/java/org/onosproject/packetstats/web/PacketStatsWebResource.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2014-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.packetstats.web;
+import javax.ws.rs.Path;
+import javax.ws.rs.GET;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import org.onosproject.rest.AbstractWebResource;
+import com.codahale.metrics.MetricFilter;
+import com.codahale.metrics.Counter;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.onlab.metrics.MetricsService;
+import java.util.Map;
+
+/**
+ * Packet Stats REST API.
+ */
+@Path("")
+public class PacketStatsWebResource extends AbstractWebResource {
+    private static final String METRIC_NAME = null;
+    MetricFilter filter = METRIC_NAME != null ? (name, metric) -> name.equals(METRIC_NAME) : MetricFilter.ALL;
+
+    @GET
+    @Path("counters")
+    @Produces(MediaType.APPLICATION_JSON)
+    public Response packetStatsCounters() {
+        ObjectNode node = getPacketStatsCountersJson();
+        return Response.status(200).entity(node).build();
+    }
+
+    private ObjectNode getPacketStatsCountersJson() {
+        MetricsService service = get(MetricsService.class);
+        ObjectNode node = mapper().createObjectNode();
+        ObjectNode pktCounterNode = mapper().createObjectNode();
+        Map<String, Counter> counters = service.getCounters(filter);
+
+        Counter arpCounter = counters.get("packetStatisticsComponent.arpFeature.arpPC");
+        Counter lldpCounter = counters.get("packetStatisticsComponent.lldpFeature.lldpPC");
+        Counter nsCounter = counters.get("packetStatisticsComponent.nbrSolicitFeature.nbrSolicitPC");
+        Counter naCounter = counters.get("packetStatisticsComponent.nbrAdvertFeature.nbrAdvertPC");
+
+        pktCounterNode.put("arpCounter", arpCounter.getCount());
+        pktCounterNode.put("lldpCounter", lldpCounter.getCount());
+        pktCounterNode.put("nsCounter", nsCounter.getCount());
+        pktCounterNode.put("naCounter", naCounter.getCount());
+
+        node.put("packet_stats_counters", pktCounterNode);
+        return node;
+
+    }
+}
diff --git a/apps/packet-stats/web/src/main/java/org/onosproject/packetstats/web/package-info.java b/apps/packet-stats/web/src/main/java/org/onosproject/packetstats/web/package-info.java
new file mode 100644
index 0000000..22cd3ed
--- /dev/null
+++ b/apps/packet-stats/web/src/main/java/org/onosproject/packetstats/web/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2017-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.
+ */
+
+/**
+ * Packet Stats REST API.
+ */
+package org.onosproject.packetstats.web;
diff --git a/apps/packet-stats/web/src/main/webapp/WEB-INF/web.xml b/apps/packet-stats/web/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..ebdaf54
--- /dev/null
+++ b/apps/packet-stats/web/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2018-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.
+  -->
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://java.sun.com/xml/ns/javaee"
+         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+         id="ONOS" version="2.5">
+    <display-name>PACKET STATS REST API v1.0</display-name>
+
+    <security-constraint>
+        <web-resource-collection>
+            <web-resource-name>Secured</web-resource-name>
+            <url-pattern>/*</url-pattern>
+        </web-resource-collection>
+        <auth-constraint>
+            <role-name>admin</role-name>
+        </auth-constraint>
+    </security-constraint>
+
+    <security-role>
+        <role-name>admin</role-name>
+    </security-role>
+
+    <login-config>
+        <auth-method>BASIC</auth-method>
+        <realm-name>karaf</realm-name>
+    </login-config>
+
+    <servlet>
+        <servlet-name>JAX-RS Service</servlet-name>
+        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
+        <init-param>
+            <param-name>javax.ws.rs.Application</param-name>
+            <param-value>org.onosproject.packetstats.web.PacketStatsWebApplication</param-value>
+        </init-param>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+
+    <servlet-mapping>
+        <servlet-name>JAX-RS Service</servlet-name>
+        <url-pattern>/*</url-pattern>
+    </servlet-mapping>
+</web-app>
