diff --git a/Redfish.md b/Redfish.md
index 8d29ec0..1f2ca29 100644
--- a/Redfish.md
+++ b/Redfish.md
@@ -677,6 +677,10 @@
 #### FabricAdapter
 
 - Location
+- Model
+- PartNumber
+- SerialNumber
+- SparePartNumber
 
 ### /redfish/v1/Systems/system/LogServices/
 
diff --git a/redfish-core/lib/fabric_adapters.hpp b/redfish-core/lib/fabric_adapters.hpp
index 5cfd0b5..f6099e6 100644
--- a/redfish-core/lib/fabric_adapters.hpp
+++ b/redfish-core/lib/fabric_adapters.hpp
@@ -59,6 +59,65 @@
         });
 }
 
+inline void
+    getFabricAdapterAsset(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
+                          const std::string& serviceName,
+                          const std::string& fabricAdapterPath)
+{
+    sdbusplus::asio::getAllProperties(
+        *crow::connections::systemBus, serviceName, fabricAdapterPath,
+        "xyz.openbmc_project.Inventory.Decorator.Asset",
+        [fabricAdapterPath,
+         aResp{aResp}](const boost::system::error_code ec,
+                       const dbus::utility::DBusPropertiesMap& propertiesList) {
+        if (ec)
+        {
+            if (ec.value() != EBADR)
+            {
+                BMCWEB_LOG_ERROR << "DBUS response error for Properties";
+                messages::internalError(aResp->res);
+            }
+            return;
+        }
+
+        const std::string* serialNumber = nullptr;
+        const std::string* model = nullptr;
+        const std::string* partNumber = nullptr;
+        const std::string* sparePartNumber = nullptr;
+
+        const bool success = sdbusplus::unpackPropertiesNoThrow(
+            dbus_utils::UnpackErrorPrinter(), propertiesList, "SerialNumber",
+            serialNumber, "Model", model, "PartNumber", partNumber,
+            "SparePartNumber", sparePartNumber);
+
+        if (!success)
+        {
+            messages::internalError(aResp->res);
+            return;
+        }
+
+        if (serialNumber != nullptr)
+        {
+            aResp->res.jsonValue["SerialNumber"] = *serialNumber;
+        }
+
+        if (model != nullptr)
+        {
+            aResp->res.jsonValue["Model"] = *model;
+        }
+
+        if (partNumber != nullptr)
+        {
+            aResp->res.jsonValue["PartNumber"] = *partNumber;
+        }
+
+        if (sparePartNumber != nullptr && !sparePartNumber->empty())
+        {
+            aResp->res.jsonValue["SparePartNumber"] = *sparePartNumber;
+        }
+        });
+}
+
 inline void doAdapterGet(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
                          const std::string& systemName,
                          const std::string& adapterId,
@@ -75,6 +134,7 @@
         "redfish", "v1", "Systems", systemName, "FabricAdapters", adapterId);
 
     getFabricAdapterLocation(aResp, serviceName, fabricAdapterPath);
+    getFabricAdapterAsset(aResp, serviceName, fabricAdapterPath);
 }
 
 inline bool checkFabricAdapterId(const std::string& adapterPath,
