diff --git a/redfish-core/include/redfish.hpp b/redfish-core/include/redfish.hpp
index 540bb07..89d5679 100644
--- a/redfish-core/include/redfish.hpp
+++ b/redfish-core/include/redfish.hpp
@@ -52,6 +52,7 @@
 #include "task.hpp"
 #include "telemetry_service.hpp"
 #include "thermal.hpp"
+#include "thermal_metrics.hpp"
 #include "thermal_subsystem.hpp"
 #include "trigger.hpp"
 #include "update_service.hpp"
@@ -95,6 +96,7 @@
         requestRoutesPowerSubsystem(app);
         requestRoutesPowerSupply(app);
         requestRoutesPowerSupplyCollection(app);
+        requestRoutesThermalMetrics(app);
         requestRoutesThermalSubsystem(app);
         requestRoutesFan(app);
         requestRoutesFanCollection(app);
diff --git a/redfish-core/lib/thermal_metrics.hpp b/redfish-core/lib/thermal_metrics.hpp
new file mode 100644
index 0000000..f254118
--- /dev/null
+++ b/redfish-core/lib/thermal_metrics.hpp
@@ -0,0 +1,91 @@
+#pragma once
+
+#include "app.hpp"
+#include "query.hpp"
+#include "registries/privilege_registry.hpp"
+#include "utils/chassis_utils.hpp"
+
+#include <functional>
+#include <memory>
+#include <optional>
+#include <string>
+
+namespace redfish
+{
+inline void
+    doThermalMetrics(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+                     const std::string& chassisId,
+                     const std::optional<std::string>& validChassisPath)
+{
+    if (!validChassisPath)
+    {
+        messages::resourceNotFound(asyncResp->res, "Chassis", chassisId);
+        return;
+    }
+
+    asyncResp->res.addHeader(
+        boost::beast::http::field::link,
+        "</redfish/v1/JsonSchemas/ThermalMetrics/ThermalMetrics.json>; rel=describedby");
+    asyncResp->res.jsonValue["@odata.type"] =
+        "#ThermalMetrics.v1_0_1.ThermalMetrics";
+    asyncResp->res.jsonValue["@odata.id"] = boost::urls::format(
+        "/redfish/v1/Chassis/{}/ThermalSubsystem/ThermalMetrics", chassisId);
+    asyncResp->res.jsonValue["Id"] = "ThermalMetrics";
+    asyncResp->res.jsonValue["Name"] = "Thermal Metrics";
+}
+
+inline void handleThermalMetricsHead(
+    App& app, const crow::Request& req,
+    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+    const std::string& chassisId)
+{
+    if (!redfish::setUpRedfishRoute(app, req, asyncResp))
+    {
+        return;
+    }
+
+    redfish::chassis_utils::getValidChassisPath(
+        asyncResp, chassisId,
+        [asyncResp,
+         chassisId](const std::optional<std::string>& validChassisPath) {
+        if (!validChassisPath)
+        {
+            messages::resourceNotFound(asyncResp->res, "Chassis", chassisId);
+            return;
+        }
+        asyncResp->res.addHeader(
+            boost::beast::http::field::link,
+            "</redfish/v1/JsonSchemas/ThermalMetrics/ThermalMetrics.json>; rel=describedby");
+    });
+}
+
+inline void
+    handleThermalMetricsGet(App& app, const crow::Request& req,
+                            const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+                            const std::string& chassisId)
+{
+    if (!redfish::setUpRedfishRoute(app, req, asyncResp))
+    {
+        return;
+    }
+
+    redfish::chassis_utils::getValidChassisPath(
+        asyncResp, chassisId,
+        std::bind_front(doThermalMetrics, asyncResp, chassisId));
+}
+
+inline void requestRoutesThermalMetrics(App& app)
+{
+    BMCWEB_ROUTE(app,
+                 "/redfish/v1/Chassis/<str>/ThermalSubsystem/ThermalMetrics/")
+        .privileges(redfish::privileges::headThermalMetrics)
+        .methods(boost::beast::http::verb::head)(
+            std::bind_front(handleThermalMetricsHead, std::ref(app)));
+
+    BMCWEB_ROUTE(app,
+                 "/redfish/v1/Chassis/<str>/ThermalSubsystem/ThermalMetrics/")
+        .privileges(redfish::privileges::getThermalMetrics)
+        .methods(boost::beast::http::verb::get)(
+            std::bind_front(handleThermalMetricsGet, std::ref(app)));
+}
+} // namespace redfish
diff --git a/redfish-core/lib/thermal_subsystem.hpp b/redfish-core/lib/thermal_subsystem.hpp
index 92e623e..c52f395 100644
--- a/redfish-core/lib/thermal_subsystem.hpp
+++ b/redfish-core/lib/thermal_subsystem.hpp
@@ -41,6 +41,11 @@
     asyncResp->res.jsonValue["Fans"]["@odata.id"] = boost::urls::format(
         "/redfish/v1/Chassis/{}/ThermalSubsystem/Fans", chassisId);
 
+    asyncResp->res.jsonValue["ThermalMetrics"]["@odata.id"] =
+        boost::urls::format(
+            "/redfish/v1/Chassis/{}/ThermalSubsystem/ThermalMetrics",
+            chassisId);
+
     asyncResp->res.jsonValue["Status"]["State"] = "Enabled";
     asyncResp->res.jsonValue["Status"]["Health"] = "OK";
 }
