diff --git a/vpd-manager/include/utility/json_utility.hpp b/vpd-manager/include/utility/json_utility.hpp
index 4bf3846..dad346e 100644
--- a/vpd-manager/include/utility/json_utility.hpp
+++ b/vpd-manager/include/utility/json_utility.hpp
@@ -1198,5 +1198,51 @@
     }
     return l_frusWithPresenceMonitoring;
 }
+
+/**
+ * @brief API which tells if the FRU's presence is handled
+ *
+ * For a given FRU, this API checks if it's presence is handled by vpd-manager
+ * by checking the "handlePresence" tag.
+ *
+ * @param[in] i_sysCfgJsonObj - System config JSON object.
+ * @param[in] i_vpdFruPath - EEPROM path.
+ *
+ * @return true if FRU presence is handled, false otherwise.
+ */
+inline bool isFruPresenceHandled(const nlohmann::json& i_sysCfgJsonObj,
+                                 const std::string& i_vpdFruPath)
+{
+    try
+    {
+        if (i_vpdFruPath.empty())
+        {
+            throw std::runtime_error("Given FRU path is empty.");
+        }
+
+        if (!i_sysCfgJsonObj.contains("frus"))
+        {
+            throw JsonException("Invalid system config JSON object.");
+        }
+
+        if (!i_sysCfgJsonObj["frus"].contains(i_vpdFruPath))
+        {
+            logging::logMessage(
+                "JSON object does not contain EEPROM path " + i_vpdFruPath);
+            return false;
+        }
+
+        return i_sysCfgJsonObj["frus"][i_vpdFruPath].at(0).value(
+            "handlePresence", true);
+    }
+    catch (const std::exception& l_ex)
+    {
+        logging::logMessage(
+            "Failed to check if FRU's presence is handled, reason:" +
+            std::string(l_ex.what()));
+    }
+
+    return false;
+}
 } // namespace jsonUtility
 } // namespace vpd
