diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyAdminService.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyAdminService.java
new file mode 100644
index 0000000..2c5bb48
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyAdminService.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import io.fabric8.kubernetes.api.model.networking.NetworkPolicy;
+
+/**
+ * Service for administering the inventory of kubernetes network policy.
+ */
+public interface K8sNetworkPolicyAdminService extends K8sNetworkPolicyService {
+
+    /**
+     * Creates a kubernetes network policy with the given information.
+     *
+     * @param networkPolicy the new kubernetes network policy
+     */
+    void createNetworkPolicy(NetworkPolicy networkPolicy);
+
+    /**
+     * Updates a kubernetes network policy with the given information.
+     *
+     * @param networkPolicy the updated kubernetes network policy
+     */
+    void updateNetworkPolicy(NetworkPolicy networkPolicy);
+
+    /**
+     * Removes the kubernetes network policy.
+     *
+     * @param uid kubernetes network policy UID
+     */
+    void removeNetworkPolicy(String uid);
+
+    /**
+     * Clears the existing kubernetes network policies.
+     */
+    void clear();
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyEvent.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyEvent.java
new file mode 100644
index 0000000..28c502f
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyEvent.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import io.fabric8.kubernetes.api.model.networking.NetworkPolicy;
+import org.onosproject.event.AbstractEvent;
+
+/**
+ * Describes kubernetes network policy event.
+ */
+public class K8sNetworkPolicyEvent extends
+        AbstractEvent<K8sNetworkPolicyEvent.Type, NetworkPolicy> {
+
+    /**
+     * Creates an event of a given type for the specified kubernetes network policy.
+     *
+     * @param type      kubernetes network policy event type
+     * @param subject   kubernetes network policy
+     */
+    public K8sNetworkPolicyEvent(Type type, NetworkPolicy subject) {
+        super(type, subject);
+    }
+
+    /**
+     * Kubernetes network policy events.
+     */
+    public enum Type {
+
+        /**
+         * Signifies that a new kubernetes network policy is created.
+         */
+        K8S_NETWORK_POLICY_CREATED,
+
+        /**
+         * Signifies that a new kubernetes network policy is updated.
+         */
+        K8S_NETWORK_POLICY_UPDATED,
+
+        /**
+         * Signifies that a new kubernetes network policy is removed.
+         */
+        K8S_NETWORK_POLICY_REMOVED,
+
+    }
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyListener.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyListener.java
new file mode 100644
index 0000000..ddb532f
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyListener.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import org.onosproject.event.EventListener;
+
+/**
+ * Listener for kubernetes network policy event.
+ */
+public interface K8sNetworkPolicyListener extends EventListener<K8sNetworkPolicyEvent> {
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyService.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyService.java
new file mode 100644
index 0000000..5c3e572
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyService.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import io.fabric8.kubernetes.api.model.networking.NetworkPolicy;
+import org.onosproject.event.ListenerService;
+
+import java.util.Set;
+
+/**
+ * Service for interacting with the inventory of kubernetes network policy.
+ */
+public interface K8sNetworkPolicyService
+        extends ListenerService<K8sNetworkPolicyEvent, K8sNetworkPolicyListener> {
+
+    /**
+     * Returns the kubernetes network policy with the supplied network policy UID.
+     *
+     * @param uid kubernetes network policy UID
+     * @return kubernetes network policy
+     */
+    NetworkPolicy networkPolicy(String uid);
+
+    /**
+     * Returns all kubernetes network policies registered.
+     *
+     * @return set of kubernetes network policies
+     */
+    Set<NetworkPolicy> networkPolicies();
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyStore.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyStore.java
new file mode 100644
index 0000000..c6250ae
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyStore.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import io.fabric8.kubernetes.api.model.networking.NetworkPolicy;
+import org.onosproject.store.Store;
+
+import java.util.Set;
+
+/**
+ * Manages inventory of kubernetes network policy; not intended for direct use.
+ */
+public interface K8sNetworkPolicyStore
+        extends Store<K8sNetworkPolicyEvent, K8sNetworkPolicyStoreDelegate> {
+
+    /**
+     * Creates the new kubernetes network policy.
+     *
+     * @param networkPolicy kubernetes network policy
+     */
+    void createNetworkPolicy(NetworkPolicy networkPolicy);
+
+    /**
+     * Updates the new kubernetes network policy.
+     *
+     * @param networkPolicy kubernetes network policy
+     */
+    void updateNetworkPolicy(NetworkPolicy networkPolicy);
+
+    /**
+     * Removes the kubernetes network policy with the given network policy UID.
+     *
+     * @param uid kubernetes network policy UID
+     * @return removed kubernetes network policy; null if failed
+     */
+    NetworkPolicy removeNetworkPolicy(String uid);
+
+    /**
+     * Returns the kubernetes network policy with the given network policy UID.
+     *
+     * @param uid kubernetes network policy UID
+     * @return kubernetes network policy; null if not found
+     */
+    NetworkPolicy networkPolicy(String uid);
+
+    /**
+     * Returns all kubernetes network policies.
+     *
+     * @return set of kubernetes network policies
+     */
+    Set<NetworkPolicy> networkPolicies();
+
+    /**
+     * Removes all kubernetes network policies.
+     */
+    void clear();
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyStoreDelegate.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyStoreDelegate.java
new file mode 100644
index 0000000..17099e5
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyStoreDelegate.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import org.onosproject.store.StoreDelegate;
+
+/**
+ * Kubernetes network policy store delegate abstraction.
+ */
+public interface K8sNetworkPolicyStoreDelegate extends StoreDelegate<K8sNetworkPolicyEvent> {
+}
