diff --git a/apps/openstacktelemetry/api/BUCK b/apps/openstacktelemetry/api/BUCK
index 9fde222..e09f293 100644
--- a/apps/openstacktelemetry/api/BUCK
+++ b/apps/openstacktelemetry/api/BUCK
@@ -1,5 +1,9 @@
 COMPILE_DEPS = [
     '//lib:CORE_DEPS',
+    '//lib:kafka-clients',
+    '//lib:jersey-client',
+    '//lib:javax.ws.rs-api',
+    '//lib:influxdb-java',
 ]
 
 TEST_DEPS = [
diff --git a/apps/openstacktelemetry/api/pom.xml b/apps/openstacktelemetry/api/pom.xml
index 7c96a2a..e6b046a 100644
--- a/apps/openstacktelemetry/api/pom.xml
+++ b/apps/openstacktelemetry/api/pom.xml
@@ -36,5 +36,28 @@
             <groupId>org.onosproject</groupId>
             <artifactId>onos-api</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>org.apache.servicemix.bundles</groupId>
+            <artifactId>org.apache.servicemix.bundles.kafka-clients</artifactId>
+            <version>0.8.2.2_1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.glassfish.jersey.core</groupId>
+            <artifactId>jersey-client</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.ws.rs</groupId>
+            <artifactId>javax.ws.rs-api</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.influxdb</groupId>
+            <artifactId>influxdb-java</artifactId>
+            <version>2.2</version>
+        </dependency>
+
     </dependencies>
 </project>
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/ByteBufferCodec.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/ByteBufferCodec.java
new file mode 100644
index 0000000..fc5c5407
--- /dev/null
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/ByteBufferCodec.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2018-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.openstacktelemetry.api;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Abstraction of a codec capable for encoding/decoding arbitrary objects to/from ByteBuffer.
+ */
+public abstract class ByteBufferCodec<T> {
+
+    /**
+     * Encodes the specified entity into ByteBuffer.
+     *
+     * @param entity entity to encode
+     * @return ByteBuffer
+     * @throws java.lang.UnsupportedOperationException if the codec does not
+     *                                                  support encode operations
+     */
+    public ByteBuffer encode(T entity) {
+        throw new UnsupportedOperationException("encode() not supported");
+    }
+
+    /**
+     * Decodes the specified entity from ByteBuffer.
+     *
+     * @param buffer ByteBuffer to decode
+     * @return decoded entity
+     */
+    public T decode(ByteBuffer buffer) {
+        throw new UnsupportedOperationException("decode() not supported");
+    }
+}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/Constants.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/Constants.java
new file mode 100644
index 0000000..0f969de
--- /dev/null
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/Constants.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2018-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.openstacktelemetry.api;
+
+import org.apache.kafka.common.serialization.ByteArraySerializer;
+import org.apache.kafka.common.serialization.StringSerializer;
+
+/**
+ * Provides constants used in OpenstackTelemetry.
+ */
+public final class Constants {
+
+    private Constants() {
+    }
+
+    public static final String OPENSTACK_TELEMETRY_APP_ID = "org.onosproject.openstacktelemetry";
+
+    private static final String DEFAULT_SERVER_IP = "localhost";
+
+    public static final String DEFAULT_KAFKA_SERVER_IP = DEFAULT_SERVER_IP;
+    public static final int DEFAULT_KAFKA_SERVER_PORT = 9092;
+    public static final int DEFAULT_KAFKA_RETRIES = 0;
+    public static final String DEFAULT_KAFKA_REQUIRED_ACKS = "all";
+    public static final int DEFAULT_KAFKA_BATCH_SIZE = 16384;
+    public static final int DEFAULT_KAFKA_LINGER_MS = 1;
+    public static final int DEFAULT_KAFKA_MEMORY_BUFFER = 33554432;
+    public static final String DEFAULT_KAFKA_KEY_SERIALIZER = StringSerializer.class.toString();
+    public static final String DEFAULT_KAFKA_VALUE_SERIALIZER = ByteArraySerializer.class.toString();
+
+    public static final String DEFAULT_REST_SERVER_IP = DEFAULT_SERVER_IP;
+    public static final int DEFAULT_REST_SERVER_PORT = 80;
+}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/OpenstackTelemetry.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/GrpcTelemetryService.java
similarity index 69%
copy from apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/OpenstackTelemetry.java
copy to apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/GrpcTelemetryService.java
index 443c715..942e64b 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/OpenstackTelemetry.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/GrpcTelemetryService.java
@@ -16,12 +16,15 @@
 package org.onosproject.openstacktelemetry.api;
 
 /**
- * Openstack telemetry interface.
+ * Service API for publishing openstack telemetry through gRPC producer.
  */
-public interface OpenstackTelemetry {
+public interface GrpcTelemetryService {
 
     /**
-     * A dummy interface method.
+     * Publishes openstack telemetry to gRPC server.
+     *
+     * @param record a network metric to be published
+     * @return a response from gRPC server
      */
-    void dummy();
+    Object publish(Object record);
 }
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/OpenstackTelemetry.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/InfluxDbTelemetryService.java
similarity index 70%
copy from apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/OpenstackTelemetry.java
copy to apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/InfluxDbTelemetryService.java
index 443c715..81b5d12 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/OpenstackTelemetry.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/InfluxDbTelemetryService.java
@@ -16,12 +16,14 @@
 package org.onosproject.openstacktelemetry.api;
 
 /**
- * Openstack telemetry interface.
+ * Service API for publishing openstack telemetry through InfluxDB producer.
  */
-public interface OpenstackTelemetry {
+public interface InfluxDbTelemetryService {
 
     /**
-     * A dummy interface method.
+     * Publishes openstack telemetry to InfluxDB server.
+     *
+     * @param record a network metric to be published
      */
-    void dummy();
+    void publish(InfluxRecord<String, Object> record);
 }
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/OpenstackTelemetry.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/InfluxRecord.java
similarity index 82%
rename from apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/OpenstackTelemetry.java
rename to apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/InfluxRecord.java
index 443c715..57f2285 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/OpenstackTelemetry.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/InfluxRecord.java
@@ -16,12 +16,8 @@
 package org.onosproject.openstacktelemetry.api;
 
 /**
- * Openstack telemetry interface.
+ * A record which contains influx topic and network metric data.
  */
-public interface OpenstackTelemetry {
+public interface InfluxRecord<K, V> {
 
-    /**
-     * A dummy interface method.
-     */
-    void dummy();
 }
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/KafkaTelemetryService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/KafkaTelemetryService.java
new file mode 100644
index 0000000..60179c6
--- /dev/null
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/KafkaTelemetryService.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2018-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.openstacktelemetry.api;
+
+import org.apache.kafka.clients.producer.ProducerRecord;
+import org.apache.kafka.clients.producer.RecordMetadata;
+
+import java.util.concurrent.Future;
+
+/**
+ * Service API for publishing openstack telemetry through kafka producer.
+ */
+public interface KafkaTelemetryService {
+
+    /**
+     * Publishes openstack telemetry to Kafka server.
+     *
+     * @param record a network metric to be published
+     * @return metadata for a record that has been acknowledged
+     */
+    Future<RecordMetadata> publish(ProducerRecord<String, byte[]> record);
+}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/RestTelemetryService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/RestTelemetryService.java
new file mode 100644
index 0000000..ab0aae7
--- /dev/null
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/RestTelemetryService.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2018-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.openstacktelemetry.api;
+
+import javax.ws.rs.core.Response;
+
+/**
+ * Service API for publishing openstack telemetry through REST producer.
+ */
+public interface RestTelemetryService {
+
+    /**
+     * Publishes openstack telemetry to REST server.
+     *
+     * @param endpoint  an endpoint URL
+     * @param method    HTTP method
+     * @param record    network metrics
+     * @return response from REST server
+     */
+    Response publish(String endpoint, String method, String record);
+
+    /**
+     * Publishes openstack telemetry to REST server.
+     *
+     * @param method    HTTP method
+     * @param record    network metrics
+     * @return response from REST server
+     */
+    Response publish(String method, String record);
+
+    /**
+     * Publishes openstack telemetry to REST server.
+     * By default, the client sends record using the HTTP method configured in
+     * RestTelemetryConfig.
+     *
+     * @param record network metrics
+     * @return response from REST server
+     */
+    Response publish(String record);
+}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/GrpcTelemetryConfig.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/GrpcTelemetryConfig.java
new file mode 100644
index 0000000..56a364e
--- /dev/null
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/GrpcTelemetryConfig.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2018-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.openstacktelemetry.api.config;
+
+import java.util.Map;
+
+/**
+ * Configuration API of gRPC for publishing openstack telemetry.
+ */
+public interface GrpcTelemetryConfig {
+
+    /**
+     * Obtains gRPC server IP address.
+     *
+     * @return gRPC server IP address
+     */
+    String address();
+
+    /**
+     * Obtains gRPC server port number.
+     *
+     * @return gRPC server port number
+     */
+    int port();
+
+    /**
+     * Obtains usePlaintext gRPC config flag.
+     *
+     * @return usePlaintext gRPC config flag
+     */
+    boolean usePlaintext();
+
+    /**
+     * Obtains max inbound message size.
+     *
+     * @return max inbound message size
+     */
+    int maxInboundMsgSize();
+
+    /**
+     * Obtains kafka config maps.
+     *
+     * @return kafka config map
+     */
+    Map<String, Object> configMap();
+
+    /**
+     * Builder class of GrpcTelemetryConfig.
+     */
+    interface Builder {
+
+        /**
+         * Sets gRPC server IP address.
+         *
+         * @param address gRPC server IP address
+         * @return builder instances
+         */
+        Builder withAddress(String address);
+
+        /**
+         * Sets gRPC server port number.
+         *
+         * @param port gRPC server port number
+         * @return builder instance
+         */
+        Builder withPort(int port);
+
+        /**
+         * Sets usePlaintext config flag.
+         *
+         * @param usePlaintext usePlaintext config flag
+         * @return builder instance
+         */
+        Builder withUsePlaintext(boolean usePlaintext);
+
+        /**
+         * Sets maximum inbound message size.
+         *
+         * @param maxInboundMsgSize maximum inbound message size
+         * @return builder instance
+         */
+        Builder withMaxInboundMsgSize(int maxInboundMsgSize);
+
+        /**
+         * Sets other gRPC configuration map.
+         *
+         * @param configMap gRPC configuration map
+         * @return builder instance
+         */
+        Builder withConfigMap(Map<String, Object> configMap);
+
+        /**
+         * Creates a gRPC telemetry config instance.
+         *
+         * @return gRPC telemetry config instance
+         */
+        GrpcTelemetryConfig build();
+    }
+}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/InfluxDbTelemetryConfig.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/InfluxDbTelemetryConfig.java
new file mode 100644
index 0000000..f0c34ca
--- /dev/null
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/InfluxDbTelemetryConfig.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2018-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.openstacktelemetry.api.config;
+
+import java.util.Map;
+
+/**
+ * Configuration API of InfluxDB for publishing openstack telemetry.
+ */
+public interface InfluxDbTelemetryConfig {
+
+    /**
+     * Obtains InfluxDB server IP address.
+     *
+     * @return InfluxDB server IP address
+     */
+    String address();
+
+    /**
+     * Obtains InfluxDB server port number.
+     *
+     * @return InfluxDB server port number
+     */
+    int port();
+
+    /**
+     * Obtains InfluxDB username for accessing.
+     *
+     * @return InfluxDB username
+     */
+    String username();
+
+    /**
+     * Obtains InfluxDB password for accessing.
+     *
+     * @return InfluxDB password
+     */
+    String password();
+
+    /**
+     * Obtains InfluxDB database name.
+     *
+     * @return InfluxDB database name
+     */
+    String database();
+
+    /**
+     * Obtains InfluxDB enable batch flag.
+     *
+     * @return InfluxDB enable batch flag
+     */
+    boolean enableBatch();
+
+    /**
+     * Obtains InfluxDB config maps.
+     *
+     * @return InfluxDB config map
+     */
+    Map<String, Object> configMap();
+
+    /**
+     * Builder class of InfluxDbTelemetryConfig.
+     */
+    interface Builder {
+
+        /**
+         * Sets InfluxDB server IP address.
+         *
+         * @param address InfluxDB server IP address
+         * @return builder instances
+         */
+        Builder withAddress(String address);
+
+        /**
+         * Sets InfluxDB server port number.
+         *
+         * @param port InfluxDB server port number
+         * @return builder instance
+         */
+        Builder withPort(int port);
+
+        /**
+         * Sets InfluxDB username.
+         *
+         * @param username InfluxDB username
+         * @return builder instance
+         */
+        Builder withUsername(String username);
+
+        /**
+         * Sets InfluxDB password.
+         *
+         * @param password InfluxDB password
+         * @return builder instance
+         */
+        Builder withPassword(String password);
+
+        /**
+         * Sets InfluxDB database.
+         *
+         * @param database InfluxDB database
+         * @return builder instance
+         */
+        Builder withDatabase(String database);
+
+        /**
+         * Sets InfluxDB enable batch flag.
+         *
+         * @param enableBatch enable batch flag
+         * @return builder instance
+         */
+        Builder withEnableBatch(boolean enableBatch);
+
+        /**
+         * Sets other InfluxDB configuration map.
+         *
+         * @param configMap InfluxDB configuration map
+         * @return builder instance
+         */
+        Builder withConfigMap(Map<String, Object> configMap);
+
+        /**
+         * Creates a InfluxDB telemetry config instance.
+         *
+         * @return InfluxDB telemetry config instance
+         */
+        InfluxDbTelemetryConfig build();
+    }
+}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/KafkaTelemetryConfig.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/KafkaTelemetryConfig.java
new file mode 100644
index 0000000..d3731bb
--- /dev/null
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/KafkaTelemetryConfig.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright 2018-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.openstacktelemetry.api.config;
+
+import java.util.Map;
+
+/**
+ * Configuration API of Kafka for publishing openstack telemetry.
+ */
+public interface KafkaTelemetryConfig {
+
+    /**
+     * Obtains kafka IP address.
+     *
+     * @return kafka IP address
+     */
+    String address();
+
+    /**
+     * Obtains kafka port number.
+     *
+     * @return kafka port number
+     */
+    int port();
+
+    /**
+     * Obtains numbers of request retries.
+     *
+     * @return number of request retries
+     */
+    int retries();
+
+    /**
+     * Obtains required acknowledgement.
+     *
+     * @return required acknowledgement
+     */
+    String requiredAcks();
+
+    /**
+     * Obtains batch size.
+     *
+     * @return batch size
+     */
+    int batchSize();
+
+    /**
+     * Obtains linger.
+     *
+     * @return linger
+     */
+    int lingerMs();
+
+    /**
+     * Obtains memory buffer size.
+     *
+     * @return memory buffer size
+     */
+    int memoryBuffer();
+
+    /**
+     * Obtains kafka key serializer.
+     *
+     * @return kafka key serializer
+     */
+    String keySerializer();
+
+    /**
+     * Obtains kafka value serializer.
+     *
+     * @return kafka value serializer
+     */
+    String valueSerializer();
+
+    /**
+     * Obtains kafka config maps.
+     *
+     * @return kafka config map
+     */
+    Map<String, Object> configMap();
+
+    /**
+     * Builder class of KafkaTelemetryConfig.
+     */
+    interface Builder {
+
+        /**
+         * Sets kafka IP address.
+         *
+         * @param address kafka IP address
+         * @return builder instances
+         */
+        Builder withAddress(String address);
+
+        /**
+         * Sets kafka port number.
+         *
+         * @param port kafka port number
+         * @return builder instance
+         */
+        Builder withPort(int port);
+
+        /**
+         * Sets number of request retries.
+         *
+         * @param retries number of request retries
+         * @return builder instance
+         */
+        Builder withRetries(int retries);
+
+        /**
+         * Sets the required acknowledgment.
+         *
+         * @param requiredAcks required acknowledgement
+         * @return builder instance
+         */
+        Builder withRequiredAcks(String requiredAcks);
+
+        /**
+         * Sets batch size.
+         *
+         * @param batchSize batch size
+         * @return builder instance
+         */
+        Builder withBatchSize(int batchSize);
+
+        /**
+         * Sets linger ms.
+         *
+         * @param lingerMs linger ms
+         * @return builder instance
+         */
+        Builder withLingerMs(int lingerMs);
+
+        /**
+         * Sets memory buffer size.
+         *
+         * @param memoryBuffer memory buffer size
+         * @return builder instance
+         */
+        Builder withMemoryBuffer(int memoryBuffer);
+
+        /**
+         * Sets kafka key serializer.
+         *
+         * @param keySerializer kafka key serializer
+         * @return builder instance
+         */
+        Builder withKeySerializer(String keySerializer);
+
+        /**
+         * Sets kafka value serializer.
+         *
+         * @param valueSerializer kafka value serializer
+         * @return builder instance
+         */
+        Builder withValueSerializer(String valueSerializer);
+
+        /**
+         * Sets other kafka configuration map.
+         *
+         * @param configMap kafka configuration map
+         * @return builder instance
+         */
+        Builder withConfigMap(Map<String, Object> configMap);
+
+        /**
+         * Creates a kafka telemetry config instance.
+         *
+         * @return kafka telemetry config instance
+         */
+        KafkaTelemetryConfig build();
+    }
+}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/RestTelemetryConfig.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/RestTelemetryConfig.java
new file mode 100644
index 0000000..50643db2
--- /dev/null
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/RestTelemetryConfig.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2018-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.openstacktelemetry.api.config;
+
+import java.util.Map;
+
+/**
+ * Configuration API of REST for publishing openstack telemetry.
+ */
+public interface RestTelemetryConfig {
+
+    /**
+     * Obtains REST IP address.
+     *
+     * @return REST IP address
+     */
+    String address();
+
+    /**
+     * Obtains REST port number.
+     *
+     * @return REST port number
+     */
+    int port();
+
+    /**
+     * Obtains default REST server endpoint.
+     *
+     * @return default REST server endpoint
+     */
+    String endpoint();
+
+    /**
+     * Obtains HTTP method for publishing network metrics.
+     *
+     * @return HTTP method
+     */
+    String method();
+
+    /**
+     * Obtains request media type.
+     *
+     * @return request media type
+     */
+    String requestMediaType();
+
+    /**
+     * Obtains response media type.
+     *
+     * @return response media type
+     */
+    String responseMediaType();
+
+    /**
+     * Obtains REST config maps.
+     *
+     * @return REST config map
+     */
+    Map<String, Object> configMap();
+
+    /**
+     * Builder class for RestTelemetryConfig.
+     */
+    interface Builder {
+
+        /**
+         * Sets REST server IP address.
+         *
+         * @param address REST server IP address
+         * @return builder instance
+         */
+        Builder withAddress(String address);
+
+        /**
+         * Sets REST server port number.
+         *
+         * @param port REST server port number
+         * @return builder instance
+         */
+        Builder withPort(int port);
+
+        /**
+         * Sets REST server default endpoint.
+         *
+         * @param endpoint REST server default endpoint
+         * @return builder instance
+         */
+        Builder withEndpoint(String endpoint);
+
+        /**
+         * Sets HTTP method.
+         *
+         * @param method HTTP method
+         * @return builder instance
+         */
+        Builder withMethod(String method);
+
+        /**
+         * Sets REST request media type.
+         *
+         * @param mediaType REST request media type
+         * @return builder instance
+         */
+        Builder withRequestMediaType(String mediaType);
+
+        /**
+         * Sets REST response media type.
+         *
+         * @param mediaType REST response media type
+         * @return builder instance
+         */
+        Builder withResponseMediaType(String mediaType);
+
+        /**
+         * Sets REST config map.
+         *
+         * @param configMap REST config map
+         * @return builder instance
+         */
+        Builder withConfigMap(Map<String, Object> configMap);
+
+        /**
+         * Creates a REST telemetry config instance.
+         *
+         * @return REST telemetry config instance
+         */
+        RestTelemetryConfig build();
+    }
+}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/OpenstackTelemetry.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/package-info.java
similarity index 76%
copy from apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/OpenstackTelemetry.java
copy to apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/package-info.java
index 443c715..2c69ed9 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/OpenstackTelemetry.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/package-info.java
@@ -13,15 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.openstacktelemetry.api;
 
 /**
- * Openstack telemetry interface.
+ * Configuration API for Openstack Telemetry.
  */
-public interface OpenstackTelemetry {
-
-    /**
-     * A dummy interface method.
-     */
-    void dummy();
-}
+package org.onosproject.openstacktelemetry.api.config;
\ No newline at end of file
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/OpenstackTelemetry.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/package-info.java
similarity index 76%
copy from apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/OpenstackTelemetry.java
copy to apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/package-info.java
index 443c715..6c42045 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/OpenstackTelemetry.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/package-info.java
@@ -13,15 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.openstacktelemetry.api;
 
 /**
- * Openstack telemetry interface.
+ * Implementation package of openstack telemetry config.
  */
-public interface OpenstackTelemetry {
-
-    /**
-     * A dummy interface method.
-     */
-    void dummy();
-}
+package org.onosproject.openstacktelemetry.config;
\ No newline at end of file
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/OpenstackTelemetryImpl.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/OpenstackTelemetryImpl.java
deleted file mode 100644
index a6ab232..0000000
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/OpenstackTelemetryImpl.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2018-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.openstacktelemetry.impl;
-
-import org.onosproject.openstacktelemetry.api.OpenstackTelemetry;
-
-/**
- * A class which contains dummy implementation.
- */
-public class OpenstackTelemetryImpl implements OpenstackTelemetry {
-
-    /**
-     * OpenstackTelemetryImpl dummy method.
-     */
-    public void dummy() {
-    }
-}
