diff --git a/netconf/api/src/main/java/org/onosproject/netconf/NetconfSession.java b/netconf/api/src/main/java/org/onosproject/netconf/NetconfSession.java
new file mode 100644
index 0000000..73c435f
--- /dev/null
+++ b/netconf/api/src/main/java/org/onosproject/netconf/NetconfSession.java
@@ -0,0 +1,129 @@
+/*
+ * 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.netconf;
+
+import java.util.List;
+
+/**
+ * NETCONF session object that allows NETCONF operations on top with the physical
+ * device on top of an SSH connection.
+ */
+// TODO change return type of methdos to <Capability, XMLdoc, string or yang obj>
+public interface NetconfSession {
+
+    /**
+     * Retrives the requested configuration, different from get-config.
+     * @param request the XML containing the request to the server.
+     * @return device running configuration
+     */
+    String get(String request);
+
+    /**
+     * Executes an RPC to the server.
+     * @param request the XML containing the RPC for the server.
+     * @return Server response or ERROR
+     */
+    String doRPC(String request);
+
+    /**
+     * Retrives the specified configuration.
+     *
+     * @param targetConfiguration the type of configuration to retrieve.
+     * @return specified configuration.
+     */
+    String getConfig(String targetConfiguration);
+
+    /**
+     * Retrives part of the specivied configuration based on the filterSchema.
+     *
+     * @param targetConfiguration       the type of configuration to retrieve.
+     * @param configurationFilterSchema XML schema to filter the configuration
+     *                                  elements we are interested in
+     * @return device running configuration.
+     */
+    String getConfig(String targetConfiguration, String configurationFilterSchema);
+
+    /**
+     * Retrives part of the specified configuration based on the filterSchema.
+     *
+     * @param newConfiguration configuration to set
+     * @return true if the configuration was edited correctly
+     */
+
+    boolean editConfig(String newConfiguration);
+
+    /**
+     * Copies the new configuration, an Url or a complete configuration xml tree
+     * to the target configuration.
+     * The target configuration can't be the running one
+     *
+     * @param targetConfiguration the type of configuration to retrieve.
+     * @param newConfiguration    configuration to set
+     * @return true if the configuration was copied correctly
+     */
+    boolean copyConfig(String targetConfiguration, String newConfiguration);
+
+    /**
+     * Deletes part of the specified configuration based on the filterSchema.
+     *
+     * @param targetConfiguration the name of the configuration to delete
+     * @return true if the configuration was copied correctly
+     */
+    boolean deleteConfig(String targetConfiguration);
+
+    /**
+     * Locks the candidate configuration.
+     *
+     * @return true if successful.
+     */
+    boolean lock();
+
+    /**
+     * Unlocks the candidate configuration.
+     *
+     * @return true if successful.
+     */
+    boolean unlock();
+
+    /**
+     * Closes the Netconf session with the device.
+     * the first time it tries gracefully, then kills it forcefully
+     * @return true if closed
+     */
+    boolean close();
+
+    /**
+     * Gets the session ID of the Netconf session.
+     *
+     * @return Session ID as a string.
+     */
+    String getSessionId();
+
+    /**
+     * Gets the capabilities of the Netconf server associated to this session.
+     *
+     * @return Network capabilities as a string.
+     */
+    String getServerCapabilities();
+
+    /**
+     * Sets the device capabilities.
+     * @param capabilities list of capabilities the device has.
+     */
+    void setDeviceCapabilities(List<String> capabilities);
+
+}
