diff --git a/redfish-core/lib/systems.hpp b/redfish-core/lib/systems.hpp
index 70c2eb8..d15a510 100644
--- a/redfish-core/lib/systems.hpp
+++ b/redfish-core/lib/systems.hpp
@@ -1157,6 +1157,74 @@
         "xyz.openbmc_project.Object.Enable", "Enabled");
 }
 
+#ifdef BMCWEB_ENABLE_REDFISH_PROVISIONING_FEATURE
+/**
+ * @brief Retrieves provisioning status
+ *
+ * @param[in] aResp     Shared pointer for completing asynchronous calls.
+ *
+ * @return None.
+ */
+void getProvisioningStatus(std::shared_ptr<AsyncResp> aResp)
+{
+    BMCWEB_LOG_DEBUG << "Get OEM information.";
+    crow::connections::systemBus->async_method_call(
+        [aResp](const boost::system::error_code ec,
+                const std::vector<std::pair<std::string, VariantType>>
+                    &propertiesList) {
+            if (ec)
+            {
+                BMCWEB_LOG_DEBUG << "DBUS response error " << ec;
+                messages::internalError(aResp->res);
+                return;
+            }
+
+            const bool *provState = nullptr;
+            const bool *lockState = nullptr;
+            for (const std::pair<std::string, VariantType> &property :
+                 propertiesList)
+            {
+                if (property.first == "UfmProvisioned")
+                {
+                    provState = std::get_if<bool>(&property.second);
+                }
+                else if (property.first == "UfmLocked")
+                {
+                    lockState = std::get_if<bool>(&property.second);
+                }
+            }
+
+            if ((provState == nullptr) || (lockState == nullptr))
+            {
+                BMCWEB_LOG_DEBUG << "Unable to get PFR attributes.";
+                messages::internalError(aResp->res);
+                return;
+            }
+
+            nlohmann::json &oemPFR =
+                aResp->res.jsonValue["Oem"]["OpenBmc"]["FirmwareProvisioning"];
+            if (*provState == true)
+            {
+                if (*lockState == true)
+                {
+                    oemPFR["ProvisioningStatus"] = "ProvisionedAndLocked";
+                }
+                else
+                {
+                    oemPFR["ProvisioningStatus"] = "ProvisionedButNotLocked";
+                }
+            }
+            else
+            {
+                oemPFR["ProvisioningStatus"] = "NotProvisioned";
+            }
+        },
+        "xyz.openbmc_project.PFR.Manager", "/xyz/openbmc_project/pfr",
+        "org.freedesktop.DBus.Properties", "GetAll",
+        "xyz.openbmc_project.PFR.Attributes");
+}
+#endif
+
 /**
  * @brief Translates watchdog timeout action DBUS property value to redfish.
  *
@@ -1668,6 +1736,9 @@
         getBootProperties(asyncResp);
         getPCIeDeviceList(asyncResp, "PCIeDevices");
         getHostWatchdogTimer(asyncResp);
+#ifdef BMCWEB_ENABLE_REDFISH_PROVISIONING_FEATURE
+        getProvisioningStatus(asyncResp);
+#endif
     }
 
     void doPatch(crow::Response &res, const crow::Request &req,
