diff --git a/http/routing/sserule.hpp b/http/routing/sserule.hpp
index 7f8e284..1a51ab0 100644
--- a/http/routing/sserule.hpp
+++ b/http/routing/sserule.hpp
@@ -38,7 +38,7 @@
             boost::beast::http::status::internal_server_error);
     }
 
-    void handleUpgrade(const Request& /*req*/,
+    void handleUpgrade(const Request& req,
                        const std::shared_ptr<bmcweb::AsyncResp>& /*asyncResp*/,
                        boost::asio::ip::tcp::socket&& adaptor) override
     {
@@ -47,9 +47,9 @@
             myConnection = std::make_shared<
                 crow::sse_socket::ConnectionImpl<boost::asio::ip::tcp::socket>>(
                 std::move(adaptor), openHandler, closeHandler);
-        myConnection->start();
+        myConnection->start(req);
     }
-    void handleUpgrade(const Request& /*req*/,
+    void handleUpgrade(const Request& req,
                        const std::shared_ptr<bmcweb::AsyncResp>& /*asyncResp*/,
                        boost::asio::ssl::stream<boost::asio::ip::tcp::socket>&&
                            adaptor) override
@@ -59,7 +59,7 @@
             myConnection = std::make_shared<crow::sse_socket::ConnectionImpl<
                 boost::asio::ssl::stream<boost::asio::ip::tcp::socket>>>(
                 std::move(adaptor), openHandler, closeHandler);
-        myConnection->start();
+        myConnection->start(req);
     }
 
     template <typename Func>
@@ -77,7 +77,8 @@
     }
 
   private:
-    std::function<void(crow::sse_socket::Connection&)> openHandler;
+    std::function<void(crow::sse_socket::Connection&, const crow::Request&)>
+        openHandler;
     std::function<void(crow::sse_socket::Connection&)> closeHandler;
 };
 
diff --git a/http/server_sent_event.hpp b/http/server_sent_event.hpp
index 1b644fc..cfc5dfb 100644
--- a/http/server_sent_event.hpp
+++ b/http/server_sent_event.hpp
@@ -38,9 +38,10 @@
 class ConnectionImpl : public Connection
 {
   public:
-    ConnectionImpl(Adaptor&& adaptorIn,
-                   std::function<void(Connection&)> openHandlerIn,
-                   std::function<void(Connection&)> closeHandlerIn) :
+    ConnectionImpl(
+        Adaptor&& adaptorIn,
+        std::function<void(Connection&, const Request&)> openHandlerIn,
+        std::function<void(Connection&)> closeHandlerIn) :
         adaptor(std::move(adaptorIn)),
         timer(static_cast<boost::asio::io_context&>(
             adaptor.get_executor().context())),
@@ -67,14 +68,14 @@
             adaptor.get_executor().context());
     }
 
-    void start()
+    void start(const Request& req)
     {
         if (!openHandler)
         {
             BMCWEB_LOG_CRITICAL("No open handler???");
             return;
         }
-        openHandler(*this);
+        openHandler(*this, req);
         sendSSEHeader();
     }
 
@@ -281,7 +282,7 @@
     boost::asio::steady_timer timer;
     bool doingWrite = false;
 
-    std::function<void(Connection&)> openHandler;
+    std::function<void(Connection&, const Request&)> openHandler;
     std::function<void(Connection&)> closeHandler;
 };
 } // namespace sse_socket
