diff --git a/apps/pce/src/main/java/org/onosproject/pce/pceservice/LspType.java b/apps/pce/src/main/java/org/onosproject/pce/pceservice/LspType.java
new file mode 100644
index 0000000..29b1292
--- /dev/null
+++ b/apps/pce/src/main/java/org/onosproject/pce/pceservice/LspType.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * 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.pce.pceservice;
+
+/**
+ * Representation of LSP type.
+ */
+public enum LspType {
+    /**
+     * Signifies that path is created via signaling mode.
+     */
+    WITH_SIGNALLING(0),
+
+    /**
+     * Signifies that path is created via SR mode.
+     */
+    SR_WITHOUT_SIGNALLING(1),
+
+    /**
+     * Signifies that path is created via without signaling and without SR mode.
+     */
+    WITHOUT_SIGNALLING_AND_WITHOUT_SR(2);
+
+    int value;
+
+    /**
+     * Assign val with the value as the LSP type.
+     *
+     * @param val LSP type
+     */
+    LspType(int val) {
+        value = val;
+    }
+
+    /**
+     * Returns value of LSP type.
+     *
+     * @return LSP type
+     */
+    public byte type() {
+        return (byte) value;
+    }
+}
\ No newline at end of file
diff --git a/apps/pce/src/main/java/org/onosproject/pce/pceservice/api/PceService.java b/apps/pce/src/main/java/org/onosproject/pce/pceservice/api/PceService.java
new file mode 100644
index 0000000..74b8519
--- /dev/null
+++ b/apps/pce/src/main/java/org/onosproject/pce/pceservice/api/PceService.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * 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.pce.pceservice.api;
+
+import java.util.List;
+
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.intent.Constraint;
+import org.onosproject.pce.pceservice.LspType;
+
+/**
+ * Service to compute path based on constraints, release path and update path with new constraints.
+ */
+public interface PceService {
+
+    /**
+     * Creates new path based on constraints and lsp type.
+     *
+     * @param src source device
+     * @param dst destination device
+     * @param constraints list of constraints to be applied on path
+     * @param lspType type of path to be setup
+     * @return false on failure and true on successful path creation
+     */
+    boolean setupPath(DeviceId src, DeviceId dst, List<Constraint> constraints, LspType lspType);
+
+    //TODO: updatePath
+    //TODO: releasePath
+    //TODO: queryPath
+}
\ No newline at end of file
diff --git a/apps/pce/src/main/java/org/onosproject/pce/pceservice/api/package-info.java b/apps/pce/src/main/java/org/onosproject/pce/pceservice/api/package-info.java
new file mode 100644
index 0000000..774c11b
--- /dev/null
+++ b/apps/pce/src/main/java/org/onosproject/pce/pceservice/api/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * PCE service API.
+ */
+package org.onosproject.pce.pceservice.api;
diff --git a/apps/pce/src/main/java/org/onosproject/pce/pceservice/package-info.java b/apps/pce/src/main/java/org/onosproject/pce/pceservice/package-info.java
new file mode 100644
index 0000000..ae5d9c7
--- /dev/null
+++ b/apps/pce/src/main/java/org/onosproject/pce/pceservice/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * PCE service application.
+ */
+package org.onosproject.pce.pceservice;
\ No newline at end of file
