diff --git a/apps/cordvtn/pom.xml b/apps/cordvtn/pom.xml
index 3f3ec23..45fef52 100644
--- a/apps/cordvtn/pom.xml
+++ b/apps/cordvtn/pom.xml
@@ -70,6 +70,33 @@
         </dependency>
         <dependency>
             <groupId>org.onosproject</groupId>
+            <artifactId>onos-rest</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onlab-rest</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.ws.rs</groupId>
+            <artifactId>jsr311-api</artifactId>
+            <version>1.1.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.jersey</groupId>
+            <artifactId>jersey-servlet</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
             <artifactId>onos-app-openstackswitching-api</artifactId>
             <version>${project.version}</version>
         </dependency>
diff --git a/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtn.java b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtn.java
index 6729774..a31917a 100644
--- a/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtn.java
+++ b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtn.java
@@ -282,6 +282,14 @@
         return state != null && state.equals(NodeState.COMPLETE);
     }
 
+    @Override
+    public void createServiceDependency(ServiceId tenantServiceId, ServiceId providerServiceId) {
+    }
+
+    @Override
+    public void removeServiceDependency(ServiceId tenantServiceId, ServiceId providerServiceId) {
+    }
+
     /**
      * Returns state of a given cordvtn node.
      *
diff --git a/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtnService.java b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtnService.java
index 5ab7baf..7bbc1e3 100644
--- a/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtnService.java
+++ b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtnService.java
@@ -65,4 +65,20 @@
      * @return list of nodes
      */
     List<CordVtnNode> getNodes();
+
+    /**
+     * Creates a dependency between two services.
+     *
+     * @param tenantServiceId id of the service which has a dependency
+     * @param providerServiceId id of the service which provides dependency
+     */
+    void createServiceDependency(ServiceId tenantServiceId, ServiceId providerServiceId);
+
+    /**
+     * Removes a dependency between two services.
+     *
+     * @param tenantServiceId id of the service which has a dependency
+     * @param providerServiceId id of the service which provides dependency
+     */
+    void removeServiceDependency(ServiceId tenantServiceId, ServiceId providerServiceId);
 }
diff --git a/apps/cordvtn/src/main/java/org/onosproject/cordvtn/Service.java b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/Service.java
new file mode 100644
index 0000000..2c31ccc
--- /dev/null
+++ b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/Service.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2015 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.cordvtn;
+
+import com.google.common.base.MoreObjects;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.IpPrefix;
+
+import java.util.Objects;
+
+public final class Service {
+
+    enum ServiceType {
+        PRIVATE,
+        PRIVATE_DIRECT,
+        PRIVATE_INDIRECT,
+        PUBLIC_DIRECT,
+        PUBLIC_INDIRECT
+    }
+
+    private final ServiceId serviceId;
+    private final String networkId;
+    private final ServiceType serviceType;
+    private final IpPrefix serviceIpRange;
+    private final IpAddress serviceIp;
+
+    /**
+     * Default constructor.
+     *
+     * @param serviceId service id
+     * @param networkId OpenStack Neutron network id
+     * @param serviceType service type
+     * @param serviceIpRange service ip range
+     * @param serviceIp service ip
+     */
+    public Service(ServiceId serviceId, String networkId, ServiceType serviceType,
+                   IpPrefix serviceIpRange, IpAddress serviceIp) {
+        this.serviceId = serviceId;
+        this.networkId = networkId;
+        this.serviceType = serviceType;
+        this.serviceIpRange = serviceIpRange;
+        this.serviceIp = serviceIp;
+    }
+
+    /**
+     * Returns service ID.
+     *
+     * @return service id
+     */
+    public ServiceId serviceId() {
+        return serviceId;
+    }
+
+    /**
+     * Returns OpenStack Neutron network ID of this service.
+     *
+     * @return network id
+     */
+    public String networkId() {
+        return networkId;
+    }
+
+    /**
+     * Returns service type.
+     *
+     * @return service type
+     */
+    public ServiceType serviceType() {
+        return serviceType;
+    }
+
+    /**
+     * Returns service IP range.
+     *
+     * @return CIDR
+     */
+    public IpPrefix serviceIpRange() {
+        return serviceIpRange;
+    }
+
+    /**
+     * Returns service IP address.
+     *
+     * @return ip address
+     */
+    public IpAddress serviceIp() {
+        return serviceIp;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(serviceId);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (!(obj instanceof Service)) {
+            return false;
+        }
+        final Service other = (Service) obj;
+        return Objects.equals(this.serviceId, other.serviceId);
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+                .add("serviceId", serviceId)
+                .add("networkId", networkId)
+                .add("serviceType", serviceType)
+                .add("serviceIpRange", serviceIpRange)
+                .add("serviceIp", serviceIp)
+                .toString();
+    }
+}
diff --git a/apps/cordvtn/src/main/java/org/onosproject/cordvtn/ServiceId.java b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/ServiceId.java
new file mode 100644
index 0000000..0971692
--- /dev/null
+++ b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/ServiceId.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2014-2015 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.cordvtn;
+
+import com.google.common.base.MoreObjects;
+
+import java.util.Objects;
+
+/**
+ * Representation of service identifier.
+ */
+public final class ServiceId {
+
+    private final long serviceId;
+
+    /**
+     * Default constructor.
+     *
+     * @param serviceId service identifier
+     */
+    private ServiceId(long serviceId) {
+        this.serviceId = serviceId;
+    }
+
+    /**
+     * Returns the ServiceId with value.
+     *
+     * @param serviceId service id
+     * @return ServiceId
+     */
+    public static ServiceId of(long serviceId) {
+        return new ServiceId(serviceId);
+    }
+
+    /**
+     * Returns service identifier.
+     *
+     * @return service id
+     */
+    public long serviceId() {
+        return serviceId;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(serviceId);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (!(obj instanceof ServiceId)) {
+            return false;
+        }
+        final ServiceId other = (ServiceId) obj;
+        return Objects.equals(this.serviceId, other.serviceId);
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+                .add("serviceId", serviceId)
+                .toString();
+    }
+}
diff --git a/apps/cordvtn/src/main/java/org/onosproject/cordvtn/rest/ApiDocRegistrator.java b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/rest/ApiDocRegistrator.java
new file mode 100644
index 0000000..b6e876f
--- /dev/null
+++ b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/rest/ApiDocRegistrator.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2015 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.cordvtn.rest;
+
+import org.apache.felix.scr.annotations.Component;
+import org.onosproject.rest.AbstractApiDocRegistrator;
+import org.onosproject.rest.ApiDocProvider;
+
+@Component(immediate = true)
+public class ApiDocRegistrator extends AbstractApiDocRegistrator {
+    public ApiDocRegistrator() {
+        super(new ApiDocProvider("/onos/cordvtn",
+                                 "CORD VTN Service REST API",
+                                 ApiDocRegistrator.class.getClassLoader()));
+    }
+}
diff --git a/apps/cordvtn/src/main/java/org/onosproject/cordvtn/rest/ServiceDependencyWebResource.java b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/rest/ServiceDependencyWebResource.java
new file mode 100644
index 0000000..77822f2
--- /dev/null
+++ b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/rest/ServiceDependencyWebResource.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2015 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.cordvtn.rest;
+
+import org.onosproject.rest.AbstractWebResource;
+
+import javax.ws.rs.Path;
+
+/**
+ * Manages service dependency.
+ */
+@Path("service-dependency")
+public class ServiceDependencyWebResource extends AbstractWebResource {
+}
diff --git a/apps/cordvtn/src/main/java/org/onosproject/cordvtn/rest/package-info.java b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/rest/package-info.java
new file mode 100644
index 0000000..797a83f
--- /dev/null
+++ b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/rest/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 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.
+ */
+
+/**
+ * REST APIs for CORD VTN.
+ */
+package org.onosproject.cordvtn.rest;
\ No newline at end of file
