diff --git a/control/json/actions/action.hpp b/control/json/actions/action.hpp
index 40547b9..cafa542 100644
--- a/control/json/actions/action.hpp
+++ b/control/json/actions/action.hpp
@@ -213,6 +213,25 @@
         }
     }
 
+    /**
+     * @brief Dump the action as JSON
+     *
+     * For now just dump its group names
+     *
+     * @return json
+     */
+    json dump() const
+    {
+        json groups = json::array();
+        std::for_each(_groups.begin(), _groups.end(),
+                      [&groups](const auto& group) {
+                          groups.push_back(group.getName());
+                      });
+        json output;
+        output["groups"] = groups;
+        return output;
+    }
+
   protected:
     /**
      * @brief Logs a message to the flight recorder using
diff --git a/control/json/event.cpp b/control/json/event.cpp
index 0f9ab8a..409006a 100644
--- a/control/json/event.cpp
+++ b/control/json/event.cpp
@@ -313,4 +313,25 @@
     }
 }
 
+json Event::dump() const
+{
+    json actionData;
+    std::for_each(_actions.begin(), _actions.end(),
+                  [&actionData](const auto& action) {
+                      actionData[action->getUniqueName()] = action->dump();
+                  });
+
+    std::vector<std::string> groupData;
+    std::for_each(_groups.begin(), _groups.end(),
+                  [&groupData](const auto& group) {
+                      groupData.push_back(group.getName());
+                  });
+
+    json eventData;
+    eventData["groups"] = groupData;
+    eventData["actions"] = actionData;
+
+    return eventData;
+}
+
 } // namespace phosphor::fan::control::json
diff --git a/control/json/event.hpp b/control/json/event.hpp
index e4e01ea..0873c06 100644
--- a/control/json/event.hpp
+++ b/control/json/event.hpp
@@ -141,6 +141,13 @@
                           const std::vector<std::string>& profiles,
                           std::vector<Group>& groups);
 
+    /**
+     * @brief Return the contained groups and actions as JSON
+     *
+     * @return json - A JSON object of groups and actions
+     */
+    json dump() const;
+
   private:
     /* The sdbusplus bus object */
     sdbusplus::bus::bus& _bus;
diff --git a/control/json/manager.cpp b/control/json/manager.cpp
index c9d679f..9129750 100644
--- a/control/json/manager.cpp
+++ b/control/json/manager.cpp
@@ -156,6 +156,10 @@
         std::visit([&obj = parameters[name]](auto&& val) { obj = val; }, value);
     }
 
+    std::for_each(_events.begin(), _events.end(), [&data](const auto& event) {
+        data["events"][event.second->getName()] = event.second->dump();
+    });
+
     data["services"] = _servTree;
 }
 
