diff --git a/vpd-manager/include/exceptions.hpp b/vpd-manager/include/exceptions.hpp
index 12ab4eb..7109453 100644
--- a/vpd-manager/include/exceptions.hpp
+++ b/vpd-manager/include/exceptions.hpp
@@ -1,5 +1,7 @@
 #pragma once
 
+#include "types.hpp"
+
 #include <stdexcept>
 
 namespace vpd
@@ -39,6 +41,8 @@
         return m_errMsg.c_str();
     }
 
+    // TODO: Create getErrorType api by defining VPD default error type
+
   private:
     /** @brief string to hold the reason of exception */
     std::string m_errMsg;
@@ -68,6 +72,16 @@
      */
     explicit EccException(const std::string& msg) : Exception(msg) {}
 
+    /** @brief Method to get error type
+     *
+     * @return Error type which has to be logged for errors of type
+     * EccException.
+     */
+    types::ErrorType getErrorType() const
+    {
+        return types::ErrorType::EccCheckFailed;
+    }
+
 }; // class EccException
 
 /** @class DataException
@@ -93,6 +107,15 @@
      */
     explicit DataException(const std::string& msg) : Exception(msg) {}
 
+    /** @brief Method to get error type
+     *
+     * @return Error type which has to be logged for errors of type
+     * DataException.
+     */
+    types::ErrorType getErrorType() const
+    {
+        return types::ErrorType::InvalidVpdMessage;
+    }
 }; // class DataException
 
 class JsonException : public Exception
@@ -124,6 +147,16 @@
         return m_jsonPath;
     }
 
+    /** @brief Method to get error type
+     *
+     * @return Error type which has to be logged for errors of type
+     * JsonException.
+     */
+    types::ErrorType getErrorType() const
+    {
+        return types::ErrorType::JsonFailure;
+    }
+
   private:
     /** To hold the path of Json that failed*/
     std::string m_jsonPath;
@@ -152,6 +185,16 @@
      *  @param[in] msg - string to define exception
      */
     explicit GpioException(const std::string& msg) : Exception(msg) {}
+
+    /** @brief Method to get error type
+     *
+     * @return Error type which has to be logged for errors of type
+     * GpioException.
+     */
+    types::ErrorType getErrorType() const
+    {
+        return types::ErrorType::GpioError;
+    }
 };
 
 /** @class DbusException
@@ -176,6 +219,16 @@
      *  @param[in] msg - string to define exception
      */
     explicit DbusException(const std::string& msg) : Exception(msg) {}
+
+    /** @brief Method to get error type
+     *
+     * @return Error type which has to be logged for errors of type
+     * DbusException.
+     */
+    types::ErrorType getErrorType() const
+    {
+        return types::ErrorType::DbusFailure;
+    }
 };
 
 /** @class FirmwareException
@@ -200,6 +253,16 @@
      *  @param[in] msg - string to define exception
      */
     explicit FirmwareException(const std::string& msg) : Exception(msg) {}
+
+    /** @brief Method to get error type
+     *
+     * @return Error type which has to be logged for errors of type
+     * FirmwareException.
+     */
+    types::ErrorType getErrorType() const
+    {
+        return types::ErrorType::InternalFailure;
+    }
 };
 
 /** @class EepromException
@@ -224,6 +287,16 @@
      *  @param[in] msg - string to define exception
      */
     explicit EepromException(const std::string& msg) : Exception(msg) {}
+
+    /** @brief Method to get error type
+     *
+     * @return Error type which has to be logged for errors of type
+     * EepromException.
+     */
+    types::ErrorType getErrorType() const
+    {
+        return types::ErrorType::InvalidEeprom;
+    }
 };
 
 } // namespace vpd
