diff --git a/phosphor-power-sequencer/src/chassis.hpp b/phosphor-power-sequencer/src/chassis.hpp
new file mode 100644
index 0000000..8227953
--- /dev/null
+++ b/phosphor-power-sequencer/src/chassis.hpp
@@ -0,0 +1,116 @@
+/**
+ * Copyright © 2025 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#pragma once
+
+#include "power_sequencer_device.hpp"
+
+#include <stddef.h> // for size_t
+
+#include <memory>
+#include <string>
+#include <utility>
+#include <vector>
+
+namespace phosphor::power::sequencer
+{
+
+/**
+ * @class Chassis
+ *
+ * A chassis within the system.
+ *
+ * Chassis are typically a physical enclosure that contains system components
+ * such as CPUs, fans, power supplies, and PCIe cards. A chassis can be
+ * stand-alone, such as a tower or desktop. A chassis can also be designed to be
+ * mounted in an equipment rack.
+ */
+class Chassis
+{
+  public:
+    // Specify which compiler-generated methods we want
+    Chassis() = delete;
+    Chassis(const Chassis&) = delete;
+    Chassis(Chassis&&) = delete;
+    Chassis& operator=(const Chassis&) = delete;
+    Chassis& operator=(Chassis&&) = delete;
+    ~Chassis() = default;
+
+    /**
+     * Constructor.
+     *
+     * @param number Chassis number within the system. Must be >= 1.
+     * @param inventoryPath D-Bus inventory path of the chassis
+     * @param powerSequencers Power sequencer devices within the chassis
+     */
+    explicit Chassis(
+        size_t number, const std::string& inventoryPath,
+        std::vector<std::unique_ptr<PowerSequencerDevice>> powerSequencers) :
+        number{number}, inventoryPath{inventoryPath},
+        powerSequencers{std::move(powerSequencers)}
+    {}
+
+    /**
+     * Returns the chassis number within the system.
+     *
+     * @return chassis number
+     */
+    size_t getNumber() const
+    {
+        return number;
+    }
+
+    /**
+     * Returns the D-Bus inventory path of the chassis.
+     *
+     * @return inventory path
+     */
+    const std::string& getInventoryPath() const
+    {
+        return inventoryPath;
+    }
+
+    /**
+     * Returns the power sequencer devices within the chassis.
+     *
+     * @return power sequencer devices
+     */
+    const std::vector<std::unique_ptr<PowerSequencerDevice>>&
+        getPowerSequencers() const
+    {
+        return powerSequencers;
+    }
+
+  private:
+    /**
+     * Chassis number within the system.
+     *
+     * Chassis numbers start at 1 because chassis 0 represents the entire
+     * system.
+     */
+    size_t number;
+
+    /**
+     * D-Bus inventory path of the chassis.
+     */
+    std::string inventoryPath{};
+
+    /**
+     * Power sequencer devices within the chassis.
+     */
+    std::vector<std::unique_ptr<PowerSequencerDevice>> powerSequencers{};
+};
+
+} // namespace phosphor::power::sequencer
