diff --git a/src/main/java/org/opencord/cordvtn/api/config/AbstractApiConfig.java b/src/main/java/org/opencord/cordvtn/api/config/AbstractApiConfig.java
new file mode 100644
index 0000000..ffac44f
--- /dev/null
+++ b/src/main/java/org/opencord/cordvtn/api/config/AbstractApiConfig.java
@@ -0,0 +1,100 @@
+/*
+ * 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.opencord.cordvtn.api.config;
+
+import com.google.common.base.MoreObjects;
+
+import java.util.Objects;
+
+/**
+ * Representation of external API access configuration.
+ */
+public abstract class AbstractApiConfig {
+
+    protected final String endpoint;
+    protected final String user;
+    protected final String password;
+
+    /**
+     * Default constructor.
+     *
+     * @param endpoint api endpoint
+     * @param user     user name
+     * @param password password of the user
+     */
+    protected AbstractApiConfig(String endpoint, String user, String password) {
+        this.endpoint = endpoint;
+        this.user = user;
+        this.password = password;
+    }
+
+    /**
+     * Returns the endpoint.
+     *
+     * @return endpoint
+     */
+    public String endpoint() {
+        return endpoint;
+    }
+
+    /**
+     * Returns the user.
+     *
+     * @return user
+     */
+    public String user() {
+        return user;
+    }
+
+    /**
+     * Returns the password.
+     *
+     * @return password
+     */
+    public String password() {
+        return password;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(endpoint, user, password);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if ((obj instanceof AbstractApiConfig)) {
+            AbstractApiConfig that = (AbstractApiConfig) obj;
+            if (Objects.equals(endpoint, that.endpoint) &&
+                    Objects.equals(user, that.user) &&
+                    Objects.equals(password, that.password)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(getClass())
+                .add("endpoint", endpoint)
+                .add("user", user)
+                .add("password", password)
+                .toString();
+    }
+}
diff --git a/src/main/java/org/opencord/cordvtn/api/config/CordVtnConfig.java b/src/main/java/org/opencord/cordvtn/api/config/CordVtnConfig.java
index 9dfa929..0789d51 100644
--- a/src/main/java/org/opencord/cordvtn/api/config/CordVtnConfig.java
+++ b/src/main/java/org/opencord/cordvtn/api/config/CordVtnConfig.java
@@ -237,5 +237,15 @@
         return publicGateways;
     }
 
-    // TODO add methods to get XOS and OpenStack API access
+    /**
+     * Returns XOS API endpoint and credential configuration.
+     *
+     * @return xos api configuration
+     */
+    public XosConfig xosConfig() {
+        JsonNode jsonNode = object.get(XOS);
+        return new XosConfig(getConfig(jsonNode, ENDPOINT),
+                             getConfig(jsonNode, USER),
+                             getConfig(jsonNode, PASSWORD));
+    }
 }
diff --git a/src/main/java/org/opencord/cordvtn/api/config/XosConfig.java b/src/main/java/org/opencord/cordvtn/api/config/XosConfig.java
new file mode 100644
index 0000000..b2387a6
--- /dev/null
+++ b/src/main/java/org/opencord/cordvtn/api/config/XosConfig.java
@@ -0,0 +1,33 @@
+/*
+ * 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.opencord.cordvtn.api.config;
+
+/**
+ * Representation of XOS API access configuration.
+ */
+public final class XosConfig extends AbstractApiConfig {
+
+    /**
+     * Default constructor.
+     *
+     * @param endpoint api endpoint
+     * @param user     user name
+     * @param password password of the user
+     */
+    public XosConfig(String endpoint, String user, String password) {
+        super(endpoint, user, password);
+    }
+}
diff --git a/src/main/java/org/opencord/cordvtn/api/net/NetworkId.java b/src/main/java/org/opencord/cordvtn/api/net/NetworkId.java
index 8bdafee..9129053 100644
--- a/src/main/java/org/opencord/cordvtn/api/net/NetworkId.java
+++ b/src/main/java/org/opencord/cordvtn/api/net/NetworkId.java
@@ -15,8 +15,11 @@
  */
 package org.opencord.cordvtn.api.net;
 
+import com.google.common.base.Strings;
 import org.onlab.util.Identifier;
 
+import static com.google.common.base.Preconditions.checkArgument;
+
 /**
  * Representation of the network identifier.
  */
@@ -38,6 +41,7 @@
      * @return network identifier
      */
     public static NetworkId of(String id) {
+        checkArgument(!Strings.isNullOrEmpty(id));
         return new NetworkId(id);
     }
 }
diff --git a/src/main/java/org/opencord/cordvtn/api/net/PortId.java b/src/main/java/org/opencord/cordvtn/api/net/PortId.java
index 10c9e8d..4a3d36e 100644
--- a/src/main/java/org/opencord/cordvtn/api/net/PortId.java
+++ b/src/main/java/org/opencord/cordvtn/api/net/PortId.java
@@ -15,8 +15,11 @@
  */
 package org.opencord.cordvtn.api.net;
 
+import com.google.common.base.Strings;
 import org.onlab.util.Identifier;
 
+import static com.google.common.base.Preconditions.checkArgument;
+
 /**
  * Representation of the port identifier.
  */
@@ -38,6 +41,7 @@
      * @return port identifier
      */
     public static PortId of(String id) {
+        checkArgument(!Strings.isNullOrEmpty(id));
         return new PortId(id);
     }
 }
