diff --git a/phosphor-regulators/src/interfaces/manager_interface.hpp b/phosphor-regulators/src/interfaces/manager_interface.hpp
new file mode 100644
index 0000000..3f262d3
--- /dev/null
+++ b/phosphor-regulators/src/interfaces/manager_interface.hpp
@@ -0,0 +1,98 @@
+#pragma once
+
+#include <systemd/sd-bus.h>
+
+#include <sdbusplus/sdbus.hpp>
+#include <sdbusplus/server/interface.hpp>
+#include <sdbusplus/vtable.hpp>
+
+#include <string>
+
+namespace phosphor
+{
+namespace power
+{
+namespace regulators
+{
+namespace interface
+{
+
+class ManagerInterface
+{
+  public:
+    /* Define all of the basic class operations:
+     *     Not allowed:
+     *         - Default constructor to avoid nullptrs.
+     *         - Copy operations due to internal unique_ptr.
+     *         - Move operations due to 'this' being registered as the
+     *           'context' with sdbus.
+     *     Allowed:
+     *         - Destructor.
+     */
+    ManagerInterface() = delete;
+    ManagerInterface(const ManagerInterface&) = delete;
+    ManagerInterface& operator=(const ManagerInterface&) = delete;
+    ManagerInterface(ManagerInterface&&) = delete;
+    ManagerInterface& operator=(ManagerInterface&&) = delete;
+    virtual ~ManagerInterface() = default;
+
+    /**
+     * @brief Constructor to put object onto bus at a dbus path.
+     * @param[in] bus - Bus to attach to.
+     * @param[in] path - Path to attach at.
+     */
+    ManagerInterface(sdbusplus::bus::bus& bus, const char* path);
+
+    /**
+     * @brief Implementation for the configure method
+     * Request to configure the regulators according to the
+     * machine's regulators configuration file.
+     */
+    virtual void configure() = 0;
+
+    /**
+     * @brief Implementation for the monitor method
+     * Begin to monitor the regulators according to the
+     * machine's regulators configuration file.
+     *
+     * @param[in] enable - Enable or disable monitoring of the regulators.
+     */
+    virtual void monitor(bool enable) = 0;
+
+    /**
+     * @brief This dbus interface's name
+     */
+    static constexpr auto interface =
+        "xyz.openbmc_project.Power.Regulators.Manager";
+
+  private:
+    /**
+     * @brief Systemd bus callback for the configure method
+     */
+    static int callbackConfigure(sd_bus_message* msg, void* context,
+                                 sd_bus_error* error);
+
+    /**
+     * @brief Systemd bus callback for the monitor method
+     */
+    static int callbackMonitor(sd_bus_message* msg, void* context,
+                               sd_bus_error* error);
+
+    /**
+     * @brief Systemd vtable structure that contains all the
+     * methods, signals, and properties of this interface with their
+     * respective systemd attributes
+     */
+    static const sdbusplus::vtable::vtable_t _vtable[];
+
+    /**
+     * @brief Holder for the instance of this interface to be
+     * on dbus
+     */
+    sdbusplus::server::interface::interface _serverInterface;
+};
+
+} // namespace interface
+} // namespace regulators
+} // namespace power
+} // namespace phosphor
