diff --git a/include/dbus_utility.hpp b/include/dbus_utility.hpp
index 948b8f0..a8eefd5 100644
--- a/include/dbus_utility.hpp
+++ b/include/dbus_utility.hpp
@@ -78,9 +78,10 @@
 
 // clang-format on
 using DBusPropertiesMap = std::vector<std::pair<std::string, DbusVariantType>>;
-using DBusInteracesMap = std::vector<std::pair<std::string, DBusPropertiesMap>>;
+using DBusInterfacesMap =
+    std::vector<std::pair<std::string, DBusPropertiesMap>>;
 using ManagedObjectType =
-    std::vector<std::pair<sdbusplus::message::object_path, DBusInteracesMap>>;
+    std::vector<std::pair<sdbusplus::message::object_path, DBusInterfacesMap>>;
 
 // Map of service name to list of interfaces
 using MapperServiceMap =
diff --git a/include/image_upload.hpp b/include/image_upload.hpp
index 2e3e689..f5c8110 100644
--- a/include/image_upload.hpp
+++ b/include/image_upload.hpp
@@ -64,7 +64,7 @@
         BMCWEB_LOG_DEBUG("Match fired");
 
         sdbusplus::message::object_path path;
-        dbus::utility::DBusInteracesMap interfaces;
+        dbus::utility::DBusInterfacesMap interfaces;
         m.read(path, interfaces);
 
         if (std::ranges::find_if(interfaces, [](const auto& i) {
diff --git a/redfish-core/lib/account_service.hpp b/redfish-core/lib/account_service.hpp
index 4fbf3c3..298cb83 100644
--- a/redfish-core/lib/account_service.hpp
+++ b/redfish-core/lib/account_service.hpp
@@ -2009,10 +2009,11 @@
             return;
         }
         const auto userIt = std::ranges::find_if(
-            users, [accountName](
-                       const std::pair<sdbusplus::message::object_path,
-                                       dbus::utility::DBusInteracesMap>& user) {
-                return accountName == user.first.filename();
+            users,
+            [accountName](
+                const std::pair<sdbusplus::message::object_path,
+                                dbus::utility::DBusInterfacesMap>& user) {
+            return accountName == user.first.filename();
             });
 
         if (userIt == users.end())
diff --git a/redfish-core/lib/certificate_service.hpp b/redfish-core/lib/certificate_service.hpp
index 0073bc9..2fd6b96 100644
--- a/redfish-core/lib/certificate_service.hpp
+++ b/redfish-core/lib/certificate_service.hpp
@@ -819,7 +819,7 @@
             return;
         }
 
-        dbus::utility::DBusInteracesMap interfacesProperties;
+        dbus::utility::DBusInterfacesMap interfacesProperties;
 
         sdbusplus::message::object_path csrObjectPath;
         m.read(csrObjectPath, interfacesProperties);
diff --git a/redfish-core/lib/processor.hpp b/redfish-core/lib/processor.hpp
index e09a125..78f25d4 100644
--- a/redfish-core/lib/processor.hpp
+++ b/redfish-core/lib/processor.hpp
@@ -78,7 +78,7 @@
 
 inline void getCpuDataByInterface(
     const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-    const dbus::utility::DBusInteracesMap& cpuInterfacesProperties)
+    const dbus::utility::DBusInterfacesMap& cpuInterfacesProperties)
 {
     BMCWEB_LOG_DEBUG("Get CPU resources by interface.");
 
diff --git a/redfish-core/lib/sensors.hpp b/redfish-core/lib/sensors.hpp
index 76a8bdd..f1cf96c 100644
--- a/redfish-core/lib/sensors.hpp
+++ b/redfish-core/lib/sensors.hpp
@@ -971,7 +971,7 @@
 inline void objectInterfacesToJson(
     const std::string& sensorName, const std::string& sensorType,
     const std::string& chassisSubNode,
-    const dbus::utility::DBusInteracesMap& interfacesDict,
+    const dbus::utility::DBusInterfacesMap& interfacesDict,
     nlohmann::json& sensorJson, InventoryItem* inventoryItem)
 {
     for (const auto& [interface, valuesDict] : interfacesDict)
@@ -1304,7 +1304,7 @@
  */
 inline void storeInventoryItemData(
     InventoryItem& inventoryItem,
-    const dbus::utility::DBusInteracesMap& interfacesDict)
+    const dbus::utility::DBusInterfacesMap& interfacesDict)
 {
     // Get properties from Inventory.Item interface
 
diff --git a/redfish-core/lib/update_service.hpp b/redfish-core/lib/update_service.hpp
index da37625..5860de6 100644
--- a/redfish-core/lib/update_service.hpp
+++ b/redfish-core/lib/update_service.hpp
@@ -83,7 +83,7 @@
     softwareInterfaceAdded(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
                            sdbusplus::message_t& m, task::Payload&& payload)
 {
-    dbus::utility::DBusInteracesMap interfacesProperties;
+    dbus::utility::DBusInterfacesMap interfacesProperties;
 
     sdbusplus::message::object_path objPath;
 
@@ -330,7 +330,7 @@
     afterUpdateErrorMatcher(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
                             const std::string& url, sdbusplus::message_t& m)
 {
-    dbus::utility::DBusInteracesMap interfacesProperties;
+    dbus::utility::DBusInterfacesMap interfacesProperties;
     sdbusplus::message::object_path objPath;
     m.read(objPath, interfacesProperties);
     BMCWEB_LOG_DEBUG("obj path = {}", objPath.str);
diff --git a/redfish-core/lib/virtual_media.hpp b/redfish-core/lib/virtual_media.hpp
index 195bc07..304fffa 100644
--- a/redfish-core/lib/virtual_media.hpp
+++ b/redfish-core/lib/virtual_media.hpp
@@ -87,7 +87,7 @@
     std::function<void(const std::string& service, const std::string& resName,
                        const std::shared_ptr<bmcweb::AsyncResp>&,
                        const std::pair<sdbusplus::message::object_path,
-                                       dbus::utility::DBusInteracesMap>&)>;
+                                       dbus::utility::DBusInterfacesMap>&)>;
 
 inline void
     findAndParseObject(const std::string& service, const std::string& resName,
@@ -150,7 +150,7 @@
  * @brief Read all known properties from VM object interfaces
  */
 inline void
-    vmParseInterfaceObject(const dbus::utility::DBusInteracesMap& interfaces,
+    vmParseInterfaceObject(const dbus::utility::DBusInterfacesMap& interfaces,
                            const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
 {
     for (const auto& [interface, values] : interfaces)
@@ -310,7 +310,7 @@
                    const std::string& resName,
                    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
                    const std::pair<sdbusplus::message::object_path,
-                                   dbus::utility::DBusInteracesMap>& item)
+                                   dbus::utility::DBusInterfacesMap>& item)
 {
     VmMode mode = parseObjectPathAndGetMode(item.first, resName);
     if (mode == VmMode::Invalid)
