diff --git a/redfish-core/include/error_messages.hpp b/redfish-core/include/error_messages.hpp
index 9e1ddb1..b9fd429 100644
--- a/redfish-core/include/error_messages.hpp
+++ b/redfish-core/include/error_messages.hpp
@@ -33,7 +33,7 @@
  *
  *
  * @returns Message Success formatted to JSON */
-nlohmann::json success();
+nlohmann::json::object_t success();
 
 void success(crow::Response& res);
 
@@ -45,7 +45,7 @@
  *
  *
  * @returns Message GeneralError formatted to JSON */
-nlohmann::json generalError();
+nlohmann::json::object_t generalError();
 
 void generalError(crow::Response& res);
 
@@ -55,7 +55,7 @@
  *
  *
  * @returns Message Created formatted to JSON */
-nlohmann::json created();
+nlohmann::json::object_t created();
 
 void created(crow::Response& res);
 
@@ -66,7 +66,7 @@
  *
  *
  * @returns Message NoOperation formatted to JSON */
-nlohmann::json noOperation();
+nlohmann::json::object_t noOperation();
 
 void noOperation(crow::Response& res);
 
@@ -77,7 +77,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message PropertyDuplicate formatted to JSON */
-nlohmann::json propertyDuplicate(std::string_view arg1);
+nlohmann::json::object_t propertyDuplicate(std::string_view arg1);
 
 void propertyDuplicate(crow::Response& res, std::string_view arg1);
 
@@ -89,7 +89,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message PropertyUnknown formatted to JSON */
-nlohmann::json propertyUnknown(std::string_view arg1);
+nlohmann::json::object_t propertyUnknown(std::string_view arg1);
 
 void propertyUnknown(crow::Response& res, std::string_view arg1);
 
@@ -102,8 +102,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message PropertyValueTypeError formatted to JSON */
-nlohmann::json propertyValueTypeError(const nlohmann::json& arg1,
-                                      std::string_view arg2);
+nlohmann::json::object_t propertyValueTypeError(const nlohmann::json& arg1,
+                                                std::string_view arg2);
 
 void propertyValueTypeError(crow::Response& res, const nlohmann::json& arg1,
                             std::string_view arg2);
@@ -117,8 +117,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message PropertyValueFormatError formatted to JSON */
-nlohmann::json propertyValueFormatError(const nlohmann::json& arg1,
-                                        std::string_view arg2);
+nlohmann::json::object_t propertyValueFormatError(const nlohmann::json& arg1,
+                                                  std::string_view arg2);
 
 void propertyValueFormatError(crow::Response& res, const nlohmann::json& arg1,
                               std::string_view arg2);
@@ -132,8 +132,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message PropertyValueNotInList formatted to JSON */
-nlohmann::json propertyValueNotInList(const nlohmann::json& arg1,
-                                      std::string_view arg2);
+nlohmann::json::object_t propertyValueNotInList(const nlohmann::json& arg1,
+                                                std::string_view arg2);
 
 void propertyValueNotInList(crow::Response& res, const nlohmann::json& arg1,
                             std::string_view arg2);
@@ -147,8 +147,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message PropertyValueOutOfRange formatted to JSON */
-nlohmann::json propertyValueOutOfRange(const nlohmann::json& arg1,
-                                       std::string_view arg2);
+nlohmann::json::object_t propertyValueOutOfRange(const nlohmann::json& arg1,
+                                                 std::string_view arg2);
 
 void propertyValueOutOfRange(crow::Response& res, const nlohmann::json& arg1,
                              std::string_view arg2);
@@ -160,7 +160,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message PropertyValueError formatted to JSON */
-nlohmann::json propertyValueError(std::string_view arg1);
+nlohmann::json::object_t propertyValueError(std::string_view arg1);
 
 void propertyValueError(crow::Response& res, std::string_view arg1);
 
@@ -172,7 +172,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message PropertyNotWritable formatted to JSON */
-nlohmann::json propertyNotWritable(std::string_view arg1);
+nlohmann::json::object_t propertyNotWritable(std::string_view arg1);
 
 void propertyNotWritable(crow::Response& res, std::string_view arg1);
 
@@ -184,7 +184,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message PropertyNotUpdated formatted to JSON */
-nlohmann::json propertyNotUpdated(std::string_view arg1);
+nlohmann::json::object_t propertyNotUpdated(std::string_view arg1);
 
 void propertyNotUpdated(crow::Response& res, std::string_view arg1);
 
@@ -196,7 +196,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message PropertyMissing formatted to JSON */
-nlohmann::json propertyMissing(std::string_view arg1);
+nlohmann::json::object_t propertyMissing(std::string_view arg1);
 
 void propertyMissing(crow::Response& res, std::string_view arg1);
 
@@ -207,7 +207,7 @@
  *
  *
  * @returns Message MalformedJSON formatted to JSON */
-nlohmann::json malformedJSON();
+nlohmann::json::object_t malformedJSON();
 
 void malformedJSON(crow::Response& res);
 
@@ -219,7 +219,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message InvalidJSON formatted to JSON */
-nlohmann::json invalidJSON(std::string_view arg1);
+nlohmann::json::object_t invalidJSON(std::string_view arg1);
 
 void invalidJSON(crow::Response& res, std::string_view arg1);
 
@@ -230,7 +230,7 @@
  *
  *
  * @returns Message EmptyJSON formatted to JSON */
-nlohmann::json emptyJSON();
+nlohmann::json::object_t emptyJSON();
 
 void emptyJSON(crow::Response& res);
 
@@ -241,7 +241,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message ActionNotSupported formatted to JSON */
-nlohmann::json actionNotSupported(std::string_view arg1);
+nlohmann::json::object_t actionNotSupported(std::string_view arg1);
 
 void actionNotSupported(crow::Response& res, std::string_view arg1);
 
@@ -254,8 +254,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message ActionParameterMissing formatted to JSON */
-nlohmann::json actionParameterMissing(std::string_view arg1,
-                                      std::string_view arg2);
+nlohmann::json::object_t actionParameterMissing(std::string_view arg1,
+                                                std::string_view arg2);
 
 void actionParameterMissing(crow::Response& res, std::string_view arg1,
                             std::string_view arg2);
@@ -269,8 +269,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message ActionParameterDuplicate formatted to JSON */
-nlohmann::json actionParameterDuplicate(std::string_view arg1,
-                                        std::string_view arg2);
+nlohmann::json::object_t actionParameterDuplicate(std::string_view arg1,
+                                                  std::string_view arg2);
 
 void actionParameterDuplicate(crow::Response& res, std::string_view arg1,
                               std::string_view arg2);
@@ -284,8 +284,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message ActionParameterUnknown formatted to JSON */
-nlohmann::json actionParameterUnknown(std::string_view arg1,
-                                      std::string_view arg2);
+nlohmann::json::object_t actionParameterUnknown(std::string_view arg1,
+                                                std::string_view arg2);
 
 void actionParameterUnknown(crow::Response& res, std::string_view arg1,
                             std::string_view arg2);
@@ -300,7 +300,7 @@
  * @param[in] arg3 Parameter of message that will replace %3 in its body.
  *
  * @returns Message ActionParameterValueTypeError formatted to JSON */
-nlohmann::json actionParameterValueTypeError(
+nlohmann::json::object_t actionParameterValueTypeError(
     const nlohmann::json& arg1, std::string_view arg2, std::string_view arg3);
 
 void actionParameterValueTypeError(
@@ -317,7 +317,7 @@
  * @param[in] arg3 Parameter of message that will replace %3 in its body.
  *
  * @returns Message ActionParameterValueFormatError formatted to JSON */
-nlohmann::json actionParameterValueFormatError(
+nlohmann::json::object_t actionParameterValueFormatError(
     const nlohmann::json& arg1, std::string_view arg2, std::string_view arg3);
 
 void actionParameterValueFormatError(
@@ -334,7 +334,7 @@
  * @param[in] arg3 Parameter of message that will replace %3 in its body.
  *
  * @returns Message ActionParameterValueNotInList formatted to JSON */
-nlohmann::json actionParameterValueNotInList(
+nlohmann::json::object_t actionParameterValueNotInList(
     std::string_view arg1, std::string_view arg2, std::string_view arg3);
 
 void actionParameterValueNotInList(crow::Response& res, std::string_view arg1,
@@ -351,7 +351,7 @@
  * @param[in] arg3 Parameter of message that will replace %3 in its body.
  *
  * @returns Message ActionParameterValueOutOfRange formatted to JSON */
-nlohmann::json actionParameterValueOutOfRange(
+nlohmann::json::object_t actionParameterValueOutOfRange(
     std::string_view arg1, std::string_view arg2, std::string_view arg3);
 
 void actionParameterValueOutOfRange(crow::Response& res, std::string_view arg1,
@@ -367,8 +367,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message ActionParameterValueError formatted to JSON */
-nlohmann::json actionParameterValueError(const nlohmann::json& arg1,
-                                         std::string_view arg2);
+nlohmann::json::object_t actionParameterValueError(const nlohmann::json& arg1,
+                                                   std::string_view arg2);
 
 void actionParameterValueError(crow::Response& res, const nlohmann::json& arg1,
                                std::string_view arg2);
@@ -382,8 +382,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message ActionParameterNotSupported formatted to JSON */
-nlohmann::json actionParameterNotSupported(std::string_view arg1,
-                                           std::string_view arg2);
+nlohmann::json::object_t actionParameterNotSupported(std::string_view arg1,
+                                                     std::string_view arg2);
 
 void actionParameterNotSupported(crow::Response& res, std::string_view arg1,
                                  std::string_view arg2);
@@ -397,7 +397,7 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message ArraySizeTooLong formatted to JSON */
-nlohmann::json arraySizeTooLong(std::string_view arg1, uint64_t arg2);
+nlohmann::json::object_t arraySizeTooLong(std::string_view arg1, uint64_t arg2);
 
 void arraySizeTooLong(crow::Response& res, std::string_view arg1,
                       uint64_t arg2);
@@ -411,7 +411,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message ArraySizeTooShort formatted to JSON */
-nlohmann::json arraySizeTooShort(std::string_view arg1, std::string_view arg2);
+nlohmann::json::object_t arraySizeTooShort(std::string_view arg1,
+                                           std::string_view arg2);
 
 void arraySizeTooShort(crow::Response& res, std::string_view arg1,
                        std::string_view arg2);
@@ -425,8 +426,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message QueryParameterValueTypeError formatted to JSON */
-nlohmann::json queryParameterValueTypeError(const nlohmann::json& arg1,
-                                            std::string_view arg2);
+nlohmann::json::object_t queryParameterValueTypeError(
+    const nlohmann::json& arg1, std::string_view arg2);
 
 void queryParameterValueTypeError(
     crow::Response& res, const nlohmann::json& arg1, std::string_view arg2);
@@ -440,8 +441,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message QueryParameterValueFormatError formatted to JSON */
-nlohmann::json queryParameterValueFormatError(const nlohmann::json& arg1,
-                                              std::string_view arg2);
+nlohmann::json::object_t queryParameterValueFormatError(
+    const nlohmann::json& arg1, std::string_view arg2);
 
 void queryParameterValueFormatError(
     crow::Response& res, const nlohmann::json& arg1, std::string_view arg2);
@@ -453,7 +454,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message QueryParameterValueError formatted to JSON */
-nlohmann::json queryParameterValueError(std::string_view arg1);
+nlohmann::json::object_t queryParameterValueError(std::string_view arg1);
 
 void queryParameterValueError(crow::Response& res, std::string_view arg1);
 
@@ -467,7 +468,7 @@
  * @param[in] arg3 Parameter of message that will replace %3 in its body.
  *
  * @returns Message QueryParameterOutOfRange formatted to JSON */
-nlohmann::json queryParameterOutOfRange(
+nlohmann::json::object_t queryParameterOutOfRange(
     std::string_view arg1, std::string_view arg2, std::string_view arg3);
 
 void queryParameterOutOfRange(crow::Response& res, std::string_view arg1,
@@ -479,7 +480,7 @@
  *
  *
  * @returns Message QueryNotSupportedOnResource formatted to JSON */
-nlohmann::json queryNotSupportedOnResource();
+nlohmann::json::object_t queryNotSupportedOnResource();
 
 void queryNotSupportedOnResource(crow::Response& res);
 
@@ -489,7 +490,7 @@
  *
  *
  * @returns Message QueryNotSupportedOnOperation formatted to JSON */
-nlohmann::json queryNotSupportedOnOperation();
+nlohmann::json::object_t queryNotSupportedOnOperation();
 
 void queryNotSupportedOnOperation(crow::Response& res);
 
@@ -499,7 +500,7 @@
  *
  *
  * @returns Message QueryNotSupported formatted to JSON */
-nlohmann::json queryNotSupported();
+nlohmann::json::object_t queryNotSupported();
 
 void queryNotSupported(crow::Response& res);
 
@@ -510,7 +511,7 @@
  *
  *
  * @returns Message QueryCombinationInvalid formatted to JSON */
-nlohmann::json queryCombinationInvalid();
+nlohmann::json::object_t queryCombinationInvalid();
 
 void queryCombinationInvalid(crow::Response& res);
 
@@ -521,7 +522,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message QueryParameterUnsupported formatted to JSON */
-nlohmann::json queryParameterUnsupported(std::string_view arg1);
+nlohmann::json::object_t queryParameterUnsupported(std::string_view arg1);
 
 void queryParameterUnsupported(crow::Response& res, std::string_view arg1);
 
@@ -532,7 +533,7 @@
  *
  *
  * @returns Message SessionLimitExceeded formatted to JSON */
-nlohmann::json sessionLimitExceeded();
+nlohmann::json::object_t sessionLimitExceeded();
 
 void sessionLimitExceeded(crow::Response& res);
 
@@ -543,7 +544,7 @@
  *
  *
  * @returns Message EventSubscriptionLimitExceeded formatted to JSON */
-nlohmann::json eventSubscriptionLimitExceeded();
+nlohmann::json::object_t eventSubscriptionLimitExceeded();
 
 void eventSubscriptionLimitExceeded(crow::Response& res);
 
@@ -554,7 +555,7 @@
  *
  *
  * @returns Message ResourceCannotBeDeleted formatted to JSON */
-nlohmann::json resourceCannotBeDeleted();
+nlohmann::json::object_t resourceCannotBeDeleted();
 
 void resourceCannotBeDeleted(crow::Response& res);
 
@@ -565,7 +566,7 @@
  *
  *
  * @returns Message ResourceInUse formatted to JSON */
-nlohmann::json resourceInUse();
+nlohmann::json::object_t resourceInUse();
 
 void resourceInUse(crow::Response& res);
 
@@ -579,7 +580,7 @@
  * @param[in] arg3 Parameter of message that will replace %3 in its body.
  *
  * @returns Message ResourceAlreadyExists formatted to JSON */
-nlohmann::json resourceAlreadyExists(
+nlohmann::json::object_t resourceAlreadyExists(
     std::string_view arg1, std::string_view arg2, std::string_view arg3);
 
 void resourceAlreadyExists(crow::Response& res, std::string_view arg1,
@@ -594,7 +595,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message ResourceNotFound formatted to JSON */
-nlohmann::json resourceNotFound(std::string_view arg1, std::string_view arg2);
+nlohmann::json::object_t resourceNotFound(std::string_view arg1,
+                                          std::string_view arg2);
 
 void resourceNotFound(crow::Response& res, std::string_view arg1,
                       std::string_view arg2);
@@ -606,7 +608,7 @@
  *
  *
  * @returns Message PayloadTooLarge formatted to JSON */
-nlohmann::json payloadTooLarge();
+nlohmann::json::object_t payloadTooLarge();
 
 void payloadTooLarge(crow::Response& res);
 
@@ -617,7 +619,7 @@
  *
  *
  * @returns Message InsufficientStorage formatted to JSON */
-nlohmann::json insufficientStorage();
+nlohmann::json::object_t insufficientStorage();
 
 void insufficientStorage(crow::Response& res);
 
@@ -628,7 +630,7 @@
  *
  *
  * @returns Message MissingOrMalformedPart formatted to JSON */
-nlohmann::json missingOrMalformedPart();
+nlohmann::json::object_t missingOrMalformedPart();
 
 void missingOrMalformedPart(crow::Response& res);
 
@@ -639,7 +641,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message InvalidURI formatted to JSON */
-nlohmann::json invalidURI(std::string_view arg1);
+nlohmann::json::object_t invalidURI(std::string_view arg1);
 
 void invalidURI(crow::Response& res, std::string_view arg1);
 
@@ -651,7 +653,8 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message CreateFailedMissingReqProperties formatted to JSON */
-nlohmann::json createFailedMissingReqProperties(std::string_view arg1);
+nlohmann::json::object_t createFailedMissingReqProperties(
+    std::string_view arg1);
 
 void createFailedMissingReqProperties(crow::Response& res,
                                       std::string_view arg1);
@@ -663,7 +666,7 @@
  *
  *
  * @returns Message CreateLimitReachedForResource formatted to JSON */
-nlohmann::json createLimitReachedForResource();
+nlohmann::json::object_t createLimitReachedForResource();
 
 void createLimitReachedForResource(crow::Response& res);
 
@@ -674,7 +677,7 @@
  *
  *
  * @returns Message ServiceShuttingDown formatted to JSON */
-nlohmann::json serviceShuttingDown();
+nlohmann::json::object_t serviceShuttingDown();
 
 void serviceShuttingDown(crow::Response& res);
 
@@ -685,7 +688,7 @@
  *
  *
  * @returns Message ServiceInUnknownState formatted to JSON */
-nlohmann::json serviceInUnknownState();
+nlohmann::json::object_t serviceInUnknownState();
 
 void serviceInUnknownState(crow::Response& res);
 
@@ -696,7 +699,7 @@
  *
  *
  * @returns Message NoValidSession formatted to JSON */
-nlohmann::json noValidSession();
+nlohmann::json::object_t noValidSession();
 
 void noValidSession(crow::Response& res);
 
@@ -708,7 +711,7 @@
  *
  *
  * @returns Message InsufficientPrivilege formatted to JSON */
-nlohmann::json insufficientPrivilege();
+nlohmann::json::object_t insufficientPrivilege();
 
 void insufficientPrivilege(crow::Response& res);
 
@@ -718,7 +721,7 @@
  *
  *
  * @returns Message AccountModified formatted to JSON */
-nlohmann::json accountModified();
+nlohmann::json::object_t accountModified();
 
 void accountModified(crow::Response& res);
 
@@ -728,7 +731,7 @@
  *
  *
  * @returns Message AccountNotModified formatted to JSON */
-nlohmann::json accountNotModified();
+nlohmann::json::object_t accountNotModified();
 
 void accountNotModified(crow::Response& res);
 
@@ -738,7 +741,7 @@
  *
  *
  * @returns Message AccountRemoved formatted to JSON */
-nlohmann::json accountRemoved();
+nlohmann::json::object_t accountRemoved();
 
 void accountRemoved(crow::Response& res);
 
@@ -749,7 +752,7 @@
  *
  *
  * @returns Message AccountForSessionNoLongerExists formatted to JSON */
-nlohmann::json accountForSessionNoLongerExists();
+nlohmann::json::object_t accountForSessionNoLongerExists();
 
 void accountForSessionNoLongerExists(crow::Response& res);
 
@@ -760,7 +763,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message InvalidObject formatted to JSON */
-nlohmann::json invalidObject(const boost::urls::url_view_base& arg1);
+nlohmann::json::object_t invalidObject(const boost::urls::url_view_base& arg1);
 
 void invalidObject(crow::Response& res, const boost::urls::url_view_base& arg1);
 
@@ -771,7 +774,7 @@
  *
  *
  * @returns Message InternalError formatted to JSON */
-nlohmann::json internalError();
+nlohmann::json::object_t internalError();
 
 void internalError(crow::Response& res, std::source_location location =
                                             std::source_location::current());
@@ -783,7 +786,7 @@
  *
  *
  * @returns Message UnrecognizedRequestBody formatted to JSON */
-nlohmann::json unrecognizedRequestBody();
+nlohmann::json::object_t unrecognizedRequestBody();
 
 void unrecognizedRequestBody(crow::Response& res);
 
@@ -794,7 +797,8 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message ResourceMissingAtURI formatted to JSON */
-nlohmann::json resourceMissingAtURI(const boost::urls::url_view_base& arg1);
+nlohmann::json::object_t resourceMissingAtURI(
+    const boost::urls::url_view_base& arg1);
 
 void resourceMissingAtURI(crow::Response& res,
                           const boost::urls::url_view_base& arg1);
@@ -807,7 +811,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message ResourceAtUriInUnknownFormat formatted to JSON */
-nlohmann::json resourceAtUriInUnknownFormat(
+nlohmann::json::object_t resourceAtUriInUnknownFormat(
     const boost::urls::url_view_base& arg1);
 
 void resourceAtUriInUnknownFormat(crow::Response& res,
@@ -822,8 +826,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message ResourceAtUriUnauthorized formatted to JSON */
-nlohmann::json resourceAtUriUnauthorized(const boost::urls::url_view_base& arg1,
-                                         std::string_view arg2);
+nlohmann::json::object_t resourceAtUriUnauthorized(
+    const boost::urls::url_view_base& arg1, std::string_view arg2);
 
 void resourceAtUriUnauthorized(crow::Response& res,
                                const boost::urls::url_view_base& arg1,
@@ -837,7 +841,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message CouldNotEstablishConnection formatted to JSON */
-nlohmann::json couldNotEstablishConnection(
+nlohmann::json::object_t couldNotEstablishConnection(
     const boost::urls::url_view_base& arg1);
 
 void couldNotEstablishConnection(crow::Response& res,
@@ -852,7 +856,7 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message SourceDoesNotSupportProtocol formatted to JSON */
-nlohmann::json sourceDoesNotSupportProtocol(
+nlohmann::json::object_t sourceDoesNotSupportProtocol(
     const boost::urls::url_view_base& arg1, std::string_view arg2);
 
 void sourceDoesNotSupportProtocol(crow::Response& res,
@@ -867,7 +871,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message AccessDenied formatted to JSON */
-nlohmann::json accessDenied(const boost::urls::url_view_base& arg1);
+nlohmann::json::object_t accessDenied(const boost::urls::url_view_base& arg1);
 
 void accessDenied(crow::Response& res, const boost::urls::url_view_base& arg1);
 
@@ -879,7 +883,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message ServiceTemporarilyUnavailable formatted to JSON */
-nlohmann::json serviceTemporarilyUnavailable(std::string_view arg1);
+nlohmann::json::object_t serviceTemporarilyUnavailable(std::string_view arg1);
 
 void serviceTemporarilyUnavailable(crow::Response& res, std::string_view arg1);
 
@@ -890,7 +894,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message InvalidIndex formatted to JSON */
-nlohmann::json invalidIndex(uint64_t arg1);
+nlohmann::json::object_t invalidIndex(uint64_t arg1);
 
 void invalidIndex(crow::Response& res, uint64_t arg1);
 
@@ -903,8 +907,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message PropertyValueModified formatted to JSON */
-nlohmann::json propertyValueModified(std::string_view arg1,
-                                     const nlohmann::json& arg2);
+nlohmann::json::object_t propertyValueModified(std::string_view arg1,
+                                               const nlohmann::json& arg2);
 
 void propertyValueModified(crow::Response& res, std::string_view arg1,
                            const nlohmann::json& arg2);
@@ -916,7 +920,7 @@
  *
  *
  * @returns Message ResourceInStandby formatted to JSON */
-nlohmann::json resourceInStandby();
+nlohmann::json::object_t resourceInStandby();
 
 void resourceInStandby(crow::Response& res);
 
@@ -928,7 +932,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message ResourceExhaustion formatted to JSON */
-nlohmann::json resourceExhaustion(std::string_view arg1);
+nlohmann::json::object_t resourceExhaustion(std::string_view arg1);
 
 void resourceExhaustion(crow::Response& res, std::string_view arg1);
 
@@ -940,7 +944,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message StringValueTooLong formatted to JSON */
-nlohmann::json stringValueTooLong(std::string_view arg1, uint64_t arg2);
+nlohmann::json::object_t stringValueTooLong(std::string_view arg1,
+                                            uint64_t arg2);
 
 void stringValueTooLong(crow::Response& res, std::string_view arg1,
                         uint64_t arg2);
@@ -954,8 +959,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message StringValueTooShort formatted to JSON */
-nlohmann::json stringValueTooShort(std::string_view arg1,
-                                   std::string_view arg2);
+nlohmann::json::object_t stringValueTooShort(std::string_view arg1,
+                                             std::string_view arg2);
 
 void stringValueTooShort(crow::Response& res, std::string_view arg1,
                          std::string_view arg2);
@@ -966,7 +971,7 @@
  *
  *
  * @returns Message SessionTerminated formatted to JSON */
-nlohmann::json sessionTerminated();
+nlohmann::json::object_t sessionTerminated();
 
 void sessionTerminated(crow::Response& res);
 
@@ -976,7 +981,7 @@
  *
  *
  * @returns Message SubscriptionTerminated formatted to JSON */
-nlohmann::json subscriptionTerminated();
+nlohmann::json::object_t subscriptionTerminated();
 
 void subscriptionTerminated(crow::Response& res);
 
@@ -989,8 +994,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message ResourceTypeIncompatible formatted to JSON */
-nlohmann::json resourceTypeIncompatible(std::string_view arg1,
-                                        std::string_view arg2);
+nlohmann::json::object_t resourceTypeIncompatible(std::string_view arg1,
+                                                  std::string_view arg2);
 
 void resourceTypeIncompatible(crow::Response& res, std::string_view arg1,
                               std::string_view arg2);
@@ -1004,7 +1009,8 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message PasswordChangeRequired formatted to JSON */
-nlohmann::json passwordChangeRequired(const boost::urls::url_view_base& arg1);
+nlohmann::json::object_t passwordChangeRequired(
+    const boost::urls::url_view_base& arg1);
 
 void passwordChangeRequired(crow::Response& res,
                             const boost::urls::url_view_base& arg1);
@@ -1019,8 +1025,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message ResetRequired formatted to JSON */
-nlohmann::json resetRequired(const boost::urls::url_view_base& arg1,
-                             std::string_view arg2);
+nlohmann::json::object_t resetRequired(const boost::urls::url_view_base& arg1,
+                                       std::string_view arg2);
 
 void resetRequired(crow::Response& res, const boost::urls::url_view_base& arg1,
                    std::string_view arg2);
@@ -1034,7 +1040,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message ResetRecommended formatted to JSON */
-nlohmann::json resetRecommended(std::string_view arg1, std::string_view arg2);
+nlohmann::json::object_t resetRecommended(std::string_view arg1,
+                                          std::string_view arg2);
 
 void resetRecommended(crow::Response& res, std::string_view arg1,
                       std::string_view arg2);
@@ -1047,7 +1054,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message ChassisPowerStateOnRequired formatted to JSON */
-nlohmann::json chassisPowerStateOnRequired(std::string_view arg1);
+nlohmann::json::object_t chassisPowerStateOnRequired(std::string_view arg1);
 
 void chassisPowerStateOnRequired(crow::Response& res, std::string_view arg1);
 
@@ -1059,7 +1066,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message ChassisPowerStateOffRequired formatted to JSON */
-nlohmann::json chassisPowerStateOffRequired(std::string_view arg1);
+nlohmann::json::object_t chassisPowerStateOffRequired(std::string_view arg1);
 
 void chassisPowerStateOffRequired(crow::Response& res, std::string_view arg1);
 
@@ -1072,8 +1079,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message PropertyValueConflict formatted to JSON */
-nlohmann::json propertyValueConflict(std::string_view arg1,
-                                     std::string_view arg2);
+nlohmann::json::object_t propertyValueConflict(std::string_view arg1,
+                                               std::string_view arg2);
 
 void propertyValueConflict(crow::Response& res, std::string_view arg1,
                            std::string_view arg2);
@@ -1089,7 +1096,7 @@
  * @param[in] arg3 Parameter of message that will replace %3 in its body.
  *
  * @returns Message PropertyValueResourceConflict formatted to JSON */
-nlohmann::json propertyValueResourceConflict(
+nlohmann::json::object_t propertyValueResourceConflict(
     std::string_view arg1, const nlohmann::json& arg2,
     const boost::urls::url_view_base& arg3);
 
@@ -1107,8 +1114,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message PropertyValueExternalConflict formatted to JSON */
-nlohmann::json propertyValueExternalConflict(std::string_view arg1,
-                                             const nlohmann::json& arg2);
+nlohmann::json::object_t propertyValueExternalConflict(
+    std::string_view arg1, const nlohmann::json& arg2);
 
 void propertyValueExternalConflict(crow::Response& res, std::string_view arg1,
                                    const nlohmann::json& arg2);
@@ -1123,8 +1130,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message PropertyValueIncorrect formatted to JSON */
-nlohmann::json propertyValueIncorrect(std::string_view arg1,
-                                      const nlohmann::json& arg2);
+nlohmann::json::object_t propertyValueIncorrect(std::string_view arg1,
+                                                const nlohmann::json& arg2);
 
 void propertyValueIncorrect(crow::Response& res, std::string_view arg1,
                             const nlohmann::json& arg2);
@@ -1137,7 +1144,8 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message ResourceCreationConflict formatted to JSON */
-nlohmann::json resourceCreationConflict(const boost::urls::url_view_base& arg1);
+nlohmann::json::object_t resourceCreationConflict(
+    const boost::urls::url_view_base& arg1);
 
 void resourceCreationConflict(crow::Response& res,
                               const boost::urls::url_view_base& arg1);
@@ -1151,8 +1159,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message ActionParameterValueConflict formatted to JSON */
-nlohmann::json actionParameterValueConflict(std::string_view arg1,
-                                            std::string_view arg2);
+nlohmann::json::object_t actionParameterValueConflict(std::string_view arg1,
+                                                      std::string_view arg2);
 
 void actionParameterValueConflict(crow::Response& res, std::string_view arg1,
                                   std::string_view arg2);
@@ -1163,7 +1171,7 @@
  *
  *
  * @returns Message MaximumErrorsExceeded formatted to JSON */
-nlohmann::json maximumErrorsExceeded();
+nlohmann::json::object_t maximumErrorsExceeded();
 
 void maximumErrorsExceeded(crow::Response& res);
 
@@ -1174,7 +1182,7 @@
  *
  *
  * @returns Message PreconditionFailed formatted to JSON */
-nlohmann::json preconditionFailed();
+nlohmann::json::object_t preconditionFailed();
 
 void preconditionFailed(crow::Response& res);
 
@@ -1185,7 +1193,7 @@
  *
  *
  * @returns Message PreconditionRequired formatted to JSON */
-nlohmann::json preconditionRequired();
+nlohmann::json::object_t preconditionRequired();
 
 void preconditionRequired(crow::Response& res);
 
@@ -1196,7 +1204,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message HeaderMissing formatted to JSON */
-nlohmann::json headerMissing(std::string_view arg1);
+nlohmann::json::object_t headerMissing(std::string_view arg1);
 
 void headerMissing(crow::Response& res, std::string_view arg1);
 
@@ -1207,7 +1215,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message HeaderInvalid formatted to JSON */
-nlohmann::json headerInvalid(std::string_view arg1);
+nlohmann::json::object_t headerInvalid(std::string_view arg1);
 
 void headerInvalid(crow::Response& res, std::string_view arg1);
 
@@ -1218,7 +1226,7 @@
  *
  *
  * @returns Message OperationFailed formatted to JSON */
-nlohmann::json operationFailed();
+nlohmann::json::object_t operationFailed();
 
 void operationFailed(crow::Response& res);
 
@@ -1229,7 +1237,7 @@
  *
  *
  * @returns Message OperationTimeout formatted to JSON */
-nlohmann::json operationTimeout();
+nlohmann::json::object_t operationTimeout();
 
 void operationTimeout(crow::Response& res);
 
@@ -1239,7 +1247,7 @@
  *
  *
  * @returns Message OperationNotAllowed formatted to JSON */
-nlohmann::json operationNotAllowed();
+nlohmann::json::object_t operationNotAllowed();
 
 void operationNotAllowed(crow::Response& res);
 
@@ -1250,7 +1258,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message UndeterminedFault formatted to JSON */
-nlohmann::json undeterminedFault(std::string_view arg1);
+nlohmann::json::object_t undeterminedFault(std::string_view arg1);
 
 void undeterminedFault(crow::Response& res, std::string_view arg1);
 
@@ -1261,7 +1269,7 @@
  *
  *
  * @returns Message ConditionInRelatedResource formatted to JSON */
-nlohmann::json conditionInRelatedResource();
+nlohmann::json::object_t conditionInRelatedResource();
 
 void conditionInRelatedResource(crow::Response& res);
 
@@ -1273,7 +1281,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message RestrictedRole formatted to JSON */
-nlohmann::json restrictedRole(std::string_view arg1);
+nlohmann::json::object_t restrictedRole(std::string_view arg1);
 
 void restrictedRole(crow::Response& res, std::string_view arg1);
 
@@ -1285,7 +1293,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message RestrictedPrivilege formatted to JSON */
-nlohmann::json restrictedPrivilege(std::string_view arg1);
+nlohmann::json::object_t restrictedPrivilege(std::string_view arg1);
 
 void restrictedPrivilege(crow::Response& res, std::string_view arg1);
 
@@ -1298,7 +1306,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message StrictAccountTypes formatted to JSON */
-nlohmann::json strictAccountTypes(std::string_view arg1);
+nlohmann::json::object_t strictAccountTypes(std::string_view arg1);
 
 void strictAccountTypes(crow::Response& res, std::string_view arg1);
 
@@ -1310,7 +1318,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message PropertyDeprecated formatted to JSON */
-nlohmann::json propertyDeprecated(std::string_view arg1);
+nlohmann::json::object_t propertyDeprecated(std::string_view arg1);
 
 void propertyDeprecated(crow::Response& res, std::string_view arg1);
 
@@ -1321,7 +1329,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message ResourceDeprecated formatted to JSON */
-nlohmann::json resourceDeprecated(std::string_view arg1);
+nlohmann::json::object_t resourceDeprecated(std::string_view arg1);
 
 void resourceDeprecated(crow::Response& res, std::string_view arg1);
 
@@ -1333,8 +1341,8 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message PropertyValueDeprecated formatted to JSON */
-nlohmann::json propertyValueDeprecated(std::string_view arg1,
-                                       std::string_view arg2);
+nlohmann::json::object_t propertyValueDeprecated(std::string_view arg1,
+                                                 std::string_view arg2);
 
 void propertyValueDeprecated(crow::Response& res, std::string_view arg1,
                              std::string_view arg2);
@@ -1346,7 +1354,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message ActionDeprecated formatted to JSON */
-nlohmann::json actionDeprecated(std::string_view arg1);
+nlohmann::json::object_t actionDeprecated(std::string_view arg1);
 
 void actionDeprecated(crow::Response& res, std::string_view arg1);
 
@@ -1356,7 +1364,7 @@
  *
  *
  * @returns Message NetworkNameResolutionNotConfigured formatted to JSON */
-nlohmann::json networkNameResolutionNotConfigured();
+nlohmann::json::object_t networkNameResolutionNotConfigured();
 
 void networkNameResolutionNotConfigured(crow::Response& res);
 
@@ -1367,7 +1375,7 @@
  *
  *
  * @returns Message NetworkNameResolutionNotSupported formatted to JSON */
-nlohmann::json networkNameResolutionNotSupported();
+nlohmann::json::object_t networkNameResolutionNotSupported();
 
 void networkNameResolutionNotSupported(crow::Response& res);
 
@@ -1379,7 +1387,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message ServiceDisabled formatted to JSON */
-nlohmann::json serviceDisabled(std::string_view arg1);
+nlohmann::json::object_t serviceDisabled(std::string_view arg1);
 
 void serviceDisabled(crow::Response& res, std::string_view arg1);
 
@@ -1390,7 +1398,7 @@
  *
  *
  * @returns Message EventBufferExceeded formatted to JSON */
-nlohmann::json eventBufferExceeded();
+nlohmann::json::object_t eventBufferExceeded();
 
 void eventBufferExceeded(crow::Response& res);
 
@@ -1401,7 +1409,7 @@
  *
  *
  * @returns Message AuthenticationTokenRequired formatted to JSON */
-nlohmann::json authenticationTokenRequired();
+nlohmann::json::object_t authenticationTokenRequired();
 
 void authenticationTokenRequired(crow::Response& res);
 
@@ -1413,7 +1421,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message OneTimePasscodeSent formatted to JSON */
-nlohmann::json oneTimePasscodeSent(std::string_view arg1);
+nlohmann::json::object_t oneTimePasscodeSent(std::string_view arg1);
 
 void oneTimePasscodeSent(crow::Response& res, std::string_view arg1);
 
@@ -1424,7 +1432,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message LicenseRequired formatted to JSON */
-nlohmann::json licenseRequired(std::string_view arg1);
+nlohmann::json::object_t licenseRequired(std::string_view arg1);
 
 void licenseRequired(crow::Response& res, std::string_view arg1);
 
@@ -1434,7 +1442,7 @@
  *
  *
  * @returns Message PropertyModified formatted to JSON */
-nlohmann::json propertyModified();
+nlohmann::json::object_t propertyModified();
 
 void propertyModified(crow::Response& res);
 
@@ -1448,7 +1456,7 @@
  * @param[in] arg1 Parameter of message that will replace %1 in its body.
  *
  * @returns Message GenerateSecretKeyRequired formatted to JSON */
-nlohmann::json generateSecretKeyRequired(
+nlohmann::json::object_t generateSecretKeyRequired(
     const boost::urls::url_view_base& arg1);
 
 void generateSecretKeyRequired(crow::Response& res,
diff --git a/redfish-core/include/heartbeat_messages.hpp b/redfish-core/include/heartbeat_messages.hpp
index 61aadf0..8b7d3a5 100644
--- a/redfish-core/include/heartbeat_messages.hpp
+++ b/redfish-core/include/heartbeat_messages.hpp
@@ -27,7 +27,7 @@
 
 namespace messages
 {
-nlohmann::json redfishServiceFunctional();
+nlohmann::json::object_t redfishServiceFunctional();
 
 }
 } // namespace redfish
diff --git a/redfish-core/include/resource_messages.hpp b/redfish-core/include/resource_messages.hpp
index 0c5fc6a..98290ee 100644
--- a/redfish-core/include/resource_messages.hpp
+++ b/redfish-core/include/resource_messages.hpp
@@ -27,70 +27,73 @@
 
 namespace messages
 {
-nlohmann::json resourceCreated();
+nlohmann::json::object_t resourceCreated();
 
-nlohmann::json resourceRemoved();
+nlohmann::json::object_t resourceRemoved();
 
-nlohmann::json resourceErrorsDetected(std::string_view arg1,
-                                      std::string_view arg2);
-
-nlohmann::json resourceErrorsCorrected(std::string_view arg1,
-                                       std::string_view arg2);
-
-nlohmann::json resourceErrorThresholdExceeded(std::string_view arg1,
-                                              std::string_view arg2);
-
-nlohmann::json resourceErrorThresholdCleared(std::string_view arg1,
-                                             std::string_view arg2);
-
-nlohmann::json resourceWarningThresholdExceeded(std::string_view arg1,
+nlohmann::json::object_t resourceErrorsDetected(std::string_view arg1,
                                                 std::string_view arg2);
 
-nlohmann::json resourceWarningThresholdCleared(std::string_view arg1,
-                                               std::string_view arg2);
+nlohmann::json::object_t resourceErrorsCorrected(std::string_view arg1,
+                                                 std::string_view arg2);
 
-nlohmann::json resourceStatusChangedOK(std::string_view arg1,
-                                       std::string_view arg2);
+nlohmann::json::object_t resourceErrorThresholdExceeded(std::string_view arg1,
+                                                        std::string_view arg2);
 
-nlohmann::json resourceStatusChangedWarning(std::string_view arg1,
-                                            std::string_view arg2);
+nlohmann::json::object_t resourceErrorThresholdCleared(std::string_view arg1,
+                                                       std::string_view arg2);
 
-nlohmann::json resourceStatusChangedCritical(std::string_view arg1,
-                                             std::string_view arg2);
+nlohmann::json::object_t resourceWarningThresholdExceeded(
+    std::string_view arg1, std::string_view arg2);
 
-nlohmann::json resourceStateChanged(std::string_view arg1,
-                                    std::string_view arg2);
+nlohmann::json::object_t resourceWarningThresholdCleared(std::string_view arg1,
+                                                         std::string_view arg2);
 
-nlohmann::json resourcePoweredOn(std::string_view arg1);
+nlohmann::json::object_t resourceStatusChangedOK(std::string_view arg1,
+                                                 std::string_view arg2);
 
-nlohmann::json resourcePoweringOn(std::string_view arg1);
+nlohmann::json::object_t resourceStatusChangedWarning(std::string_view arg1,
+                                                      std::string_view arg2);
 
-nlohmann::json resourcePoweredOff(std::string_view arg1);
+nlohmann::json::object_t resourceStatusChangedCritical(std::string_view arg1,
+                                                       std::string_view arg2);
 
-nlohmann::json resourcePoweringOff(std::string_view arg1);
+nlohmann::json::object_t resourceStateChanged(std::string_view arg1,
+                                              std::string_view arg2);
 
-nlohmann::json resourcePaused(std::string_view arg1);
+nlohmann::json::object_t resourcePoweredOn(std::string_view arg1);
 
-nlohmann::json uRIForResourceChanged();
+nlohmann::json::object_t resourcePoweringOn(std::string_view arg1);
 
-nlohmann::json resourceChanged();
+nlohmann::json::object_t resourcePoweredOff(std::string_view arg1);
 
-nlohmann::json resourceVersionIncompatible(std::string_view arg1);
+nlohmann::json::object_t resourcePoweringOff(std::string_view arg1);
 
-nlohmann::json resourceSelfTestFailed(std::string_view arg1);
+nlohmann::json::object_t resourcePaused(std::string_view arg1);
 
-nlohmann::json resourceSelfTestCompleted();
+nlohmann::json::object_t uRIForResourceChanged();
 
-nlohmann::json testMessage();
+nlohmann::json::object_t resourceChanged();
 
-nlohmann::json aggregationSourceDiscovered(std::string_view arg1,
-                                           std::string_view arg2);
+nlohmann::json::object_t resourceVersionIncompatible(std::string_view arg1);
 
-nlohmann::json licenseExpired(std::string_view arg1, std::string_view arg2);
+nlohmann::json::object_t resourceSelfTestFailed(std::string_view arg1);
 
-nlohmann::json licenseChanged(std::string_view arg1, std::string_view arg2);
+nlohmann::json::object_t resourceSelfTestCompleted();
 
-nlohmann::json licenseAdded(std::string_view arg1, std::string_view arg2);
+nlohmann::json::object_t testMessage();
+
+nlohmann::json::object_t aggregationSourceDiscovered(std::string_view arg1,
+                                                     std::string_view arg2);
+
+nlohmann::json::object_t licenseExpired(std::string_view arg1,
+                                        std::string_view arg2);
+
+nlohmann::json::object_t licenseChanged(std::string_view arg1,
+                                        std::string_view arg2);
+
+nlohmann::json::object_t licenseAdded(std::string_view arg1,
+                                      std::string_view arg2);
 
 } // namespace messages
 } // namespace redfish
diff --git a/redfish-core/include/task_messages.hpp b/redfish-core/include/task_messages.hpp
index 48bbc68..a901de7 100644
--- a/redfish-core/include/task_messages.hpp
+++ b/redfish-core/include/task_messages.hpp
@@ -27,23 +27,24 @@
 
 namespace messages
 {
-nlohmann::json taskStarted(std::string_view arg1);
+nlohmann::json::object_t taskStarted(std::string_view arg1);
 
-nlohmann::json taskCompletedOK(std::string_view arg1);
+nlohmann::json::object_t taskCompletedOK(std::string_view arg1);
 
-nlohmann::json taskCompletedWarning(std::string_view arg1);
+nlohmann::json::object_t taskCompletedWarning(std::string_view arg1);
 
-nlohmann::json taskAborted(std::string_view arg1);
+nlohmann::json::object_t taskAborted(std::string_view arg1);
 
-nlohmann::json taskCancelled(std::string_view arg1);
+nlohmann::json::object_t taskCancelled(std::string_view arg1);
 
-nlohmann::json taskRemoved(std::string_view arg1);
+nlohmann::json::object_t taskRemoved(std::string_view arg1);
 
-nlohmann::json taskPaused(std::string_view arg1);
+nlohmann::json::object_t taskPaused(std::string_view arg1);
 
-nlohmann::json taskResumed(std::string_view arg1);
+nlohmann::json::object_t taskResumed(std::string_view arg1);
 
-nlohmann::json taskProgressChanged(std::string_view arg1, uint64_t arg2);
+nlohmann::json::object_t taskProgressChanged(std::string_view arg1,
+                                             uint64_t arg2);
 
 } // namespace messages
 } // namespace redfish
diff --git a/redfish-core/src/error_messages.cpp b/redfish-core/src/error_messages.cpp
index 1d6a544..317b9e8 100644
--- a/redfish-core/src/error_messages.cpp
+++ b/redfish-core/src/error_messages.cpp
@@ -40,8 +40,8 @@
 namespace messages
 {
 
-static nlohmann::json getLog(redfish::registries::Base::Index name,
-                             std::span<const std::string_view> args)
+static nlohmann::json::object_t getLog(redfish::registries::Base::Index name,
+                                       std::span<const std::string_view> args)
 {
     size_t index = static_cast<size_t>(name);
     if (index >= redfish::registries::Base::registry.size())
@@ -59,7 +59,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json success()
+nlohmann::json::object_t success()
 {
     return getLog(redfish::registries::Base::Index::success, {});
 }
@@ -76,7 +76,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json generalError()
+nlohmann::json::object_t generalError()
 {
     return getLog(redfish::registries::Base::Index::generalError, {});
 }
@@ -94,7 +94,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json created()
+nlohmann::json::object_t created()
 {
     return getLog(redfish::registries::Base::Index::created, {});
 }
@@ -112,7 +112,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json noOperation()
+nlohmann::json::object_t noOperation()
 {
     return getLog(redfish::registries::Base::Index::noOperation, {});
 }
@@ -130,7 +130,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json propertyDuplicate(std::string_view arg1)
+nlohmann::json::object_t propertyDuplicate(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::propertyDuplicate,
                   std::to_array({arg1}));
@@ -149,7 +149,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json propertyUnknown(std::string_view arg1)
+nlohmann::json::object_t propertyUnknown(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::propertyUnknown,
                   std::to_array({arg1}));
@@ -168,8 +168,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json propertyValueTypeError(const nlohmann::json& arg1,
-                                      std::string_view arg2)
+nlohmann::json::object_t propertyValueTypeError(const nlohmann::json& arg1,
+                                                std::string_view arg2)
 {
     std::string arg1Str =
         arg1.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
@@ -191,8 +191,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json propertyValueFormatError(const nlohmann::json& arg1,
-                                        std::string_view arg2)
+nlohmann::json::object_t propertyValueFormatError(const nlohmann::json& arg1,
+                                                  std::string_view arg2)
 {
     std::string arg1Str =
         arg1.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
@@ -214,8 +214,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json propertyValueNotInList(const nlohmann::json& arg1,
-                                      std::string_view arg2)
+nlohmann::json::object_t propertyValueNotInList(const nlohmann::json& arg1,
+                                                std::string_view arg2)
 {
     std::string arg1Str =
         arg1.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
@@ -237,8 +237,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json propertyValueOutOfRange(const nlohmann::json& arg1,
-                                       std::string_view arg2)
+nlohmann::json::object_t propertyValueOutOfRange(const nlohmann::json& arg1,
+                                                 std::string_view arg2)
 {
     std::string arg1Str =
         arg1.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
@@ -260,7 +260,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json propertyValueError(std::string_view arg1)
+nlohmann::json::object_t propertyValueError(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::propertyValueError,
                   std::to_array({arg1}));
@@ -279,7 +279,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json propertyNotWritable(std::string_view arg1)
+nlohmann::json::object_t propertyNotWritable(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::propertyNotWritable,
                   std::to_array({arg1}));
@@ -298,7 +298,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json propertyNotUpdated(std::string_view arg1)
+nlohmann::json::object_t propertyNotUpdated(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::propertyNotUpdated,
                   std::to_array({arg1}));
@@ -317,7 +317,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json propertyMissing(std::string_view arg1)
+nlohmann::json::object_t propertyMissing(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::propertyMissing,
                   std::to_array({arg1}));
@@ -336,7 +336,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json malformedJSON()
+nlohmann::json::object_t malformedJSON()
 {
     return getLog(redfish::registries::Base::Index::malformedJSON, {});
 }
@@ -354,7 +354,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json invalidJSON(std::string_view arg1)
+nlohmann::json::object_t invalidJSON(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::invalidJSON,
                   std::to_array({arg1}));
@@ -373,7 +373,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json emptyJSON()
+nlohmann::json::object_t emptyJSON()
 {
     return getLog(redfish::registries::Base::Index::emptyJSON, {});
 }
@@ -391,7 +391,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json actionNotSupported(std::string_view arg1)
+nlohmann::json::object_t actionNotSupported(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::actionNotSupported,
                   std::to_array({arg1}));
@@ -410,8 +410,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json actionParameterMissing(std::string_view arg1,
-                                      std::string_view arg2)
+nlohmann::json::object_t actionParameterMissing(std::string_view arg1,
+                                                std::string_view arg2)
 {
     return getLog(redfish::registries::Base::Index::actionParameterMissing,
                   std::to_array({arg1, arg2}));
@@ -431,8 +431,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json actionParameterDuplicate(std::string_view arg1,
-                                        std::string_view arg2)
+nlohmann::json::object_t actionParameterDuplicate(std::string_view arg1,
+                                                  std::string_view arg2)
 {
     return getLog(redfish::registries::Base::Index::actionParameterDuplicate,
                   std::to_array({arg1, arg2}));
@@ -452,8 +452,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json actionParameterUnknown(std::string_view arg1,
-                                      std::string_view arg2)
+nlohmann::json::object_t actionParameterUnknown(std::string_view arg1,
+                                                std::string_view arg2)
 {
     return getLog(redfish::registries::Base::Index::actionParameterUnknown,
                   std::to_array({arg1, arg2}));
@@ -473,7 +473,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json actionParameterValueTypeError(
+nlohmann::json::object_t actionParameterValueTypeError(
     const nlohmann::json& arg1, std::string_view arg2, std::string_view arg3)
 {
     std::string arg1Str =
@@ -499,7 +499,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json actionParameterValueFormatError(
+nlohmann::json::object_t actionParameterValueFormatError(
     const nlohmann::json& arg1, std::string_view arg2, std::string_view arg3)
 {
     std::string arg1Str =
@@ -525,7 +525,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json actionParameterValueNotInList(
+nlohmann::json::object_t actionParameterValueNotInList(
     std::string_view arg1, std::string_view arg2, std::string_view arg3)
 {
     return getLog(
@@ -548,7 +548,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json actionParameterValueOutOfRange(
+nlohmann::json::object_t actionParameterValueOutOfRange(
     std::string_view arg1, std::string_view arg2, std::string_view arg3)
 {
     return getLog(
@@ -572,8 +572,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json actionParameterValueError(const nlohmann::json& arg1,
-                                         std::string_view arg2)
+nlohmann::json::object_t actionParameterValueError(const nlohmann::json& arg1,
+                                                   std::string_view arg2)
 {
     std::string arg1Str =
         arg1.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
@@ -595,8 +595,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json actionParameterNotSupported(std::string_view arg1,
-                                           std::string_view arg2)
+nlohmann::json::object_t actionParameterNotSupported(std::string_view arg1,
+                                                     std::string_view arg2)
 {
     return getLog(redfish::registries::Base::Index::actionParameterNotSupported,
                   std::to_array({arg1, arg2}));
@@ -617,7 +617,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json arraySizeTooLong(std::string_view arg1, uint64_t arg2)
+nlohmann::json::object_t arraySizeTooLong(std::string_view arg1, uint64_t arg2)
 {
     std::string arg2Str = std::to_string(arg2);
     return getLog(redfish::registries::Base::Index::arraySizeTooLong,
@@ -637,7 +637,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json arraySizeTooShort(std::string_view arg1, std::string_view arg2)
+nlohmann::json::object_t arraySizeTooShort(std::string_view arg1,
+                                           std::string_view arg2)
 {
     return getLog(redfish::registries::Base::Index::arraySizeTooShort,
                   std::to_array({arg1, arg2}));
@@ -657,8 +658,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json queryParameterValueTypeError(const nlohmann::json& arg1,
-                                            std::string_view arg2)
+nlohmann::json::object_t queryParameterValueTypeError(
+    const nlohmann::json& arg1, std::string_view arg2)
 {
     std::string arg1Str =
         arg1.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
@@ -682,8 +683,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json queryParameterValueFormatError(const nlohmann::json& arg1,
-                                              std::string_view arg2)
+nlohmann::json::object_t queryParameterValueFormatError(
+    const nlohmann::json& arg1, std::string_view arg2)
 {
     std::string arg1Str =
         arg1.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
@@ -707,7 +708,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json queryParameterValueError(std::string_view arg1)
+nlohmann::json::object_t queryParameterValueError(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::queryParameterValueError,
                   std::to_array({arg1}));
@@ -726,7 +727,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json queryParameterOutOfRange(
+nlohmann::json::object_t queryParameterOutOfRange(
     std::string_view arg1, std::string_view arg2, std::string_view arg3)
 {
     return getLog(redfish::registries::Base::Index::queryParameterOutOfRange,
@@ -748,7 +749,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json queryNotSupportedOnResource()
+nlohmann::json::object_t queryNotSupportedOnResource()
 {
     return getLog(redfish::registries::Base::Index::queryNotSupportedOnResource,
                   {});
@@ -767,7 +768,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json queryNotSupportedOnOperation()
+nlohmann::json::object_t queryNotSupportedOnOperation()
 {
     return getLog(
         redfish::registries::Base::Index::queryNotSupportedOnOperation, {});
@@ -786,7 +787,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json queryNotSupported()
+nlohmann::json::object_t queryNotSupported()
 {
     return getLog(redfish::registries::Base::Index::queryNotSupported, {});
 }
@@ -804,7 +805,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json queryCombinationInvalid()
+nlohmann::json::object_t queryCombinationInvalid()
 {
     return getLog(redfish::registries::Base::Index::queryCombinationInvalid,
                   {});
@@ -823,7 +824,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json queryParameterUnsupported(std::string_view arg1)
+nlohmann::json::object_t queryParameterUnsupported(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::queryParameterUnsupported,
                   std::to_array({arg1}));
@@ -842,7 +843,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json sessionLimitExceeded()
+nlohmann::json::object_t sessionLimitExceeded()
 {
     return getLog(redfish::registries::Base::Index::sessionLimitExceeded, {});
 }
@@ -860,7 +861,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json eventSubscriptionLimitExceeded()
+nlohmann::json::object_t eventSubscriptionLimitExceeded()
 {
     return getLog(
         redfish::registries::Base::Index::eventSubscriptionLimitExceeded, {});
@@ -879,7 +880,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceCannotBeDeleted()
+nlohmann::json::object_t resourceCannotBeDeleted()
 {
     return getLog(redfish::registries::Base::Index::resourceCannotBeDeleted,
                   {});
@@ -898,7 +899,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceInUse()
+nlohmann::json::object_t resourceInUse()
 {
     return getLog(redfish::registries::Base::Index::resourceInUse, {});
 }
@@ -916,7 +917,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceAlreadyExists(
+nlohmann::json::object_t resourceAlreadyExists(
     std::string_view arg1, std::string_view arg2, std::string_view arg3)
 {
     return getLog(redfish::registries::Base::Index::resourceAlreadyExists,
@@ -938,7 +939,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceNotFound(std::string_view arg1, std::string_view arg2)
+nlohmann::json::object_t resourceNotFound(std::string_view arg1,
+                                          std::string_view arg2)
 {
     return getLog(redfish::registries::Base::Index::resourceNotFound,
                   std::to_array({arg1, arg2}));
@@ -958,7 +960,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json payloadTooLarge()
+nlohmann::json::object_t payloadTooLarge()
 {
     return getLog(redfish::registries::Base::Index::payloadTooLarge, {});
 }
@@ -976,7 +978,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json insufficientStorage()
+nlohmann::json::object_t insufficientStorage()
 {
     return getLog(redfish::registries::Base::Index::insufficientStorage, {});
 }
@@ -994,7 +996,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json missingOrMalformedPart()
+nlohmann::json::object_t missingOrMalformedPart()
 {
     return getLog(redfish::registries::Base::Index::missingOrMalformedPart, {});
 }
@@ -1012,7 +1014,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json invalidURI(std::string_view arg1)
+nlohmann::json::object_t invalidURI(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::invalidURI,
                   std::to_array({arg1}));
@@ -1031,7 +1033,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json createFailedMissingReqProperties(std::string_view arg1)
+nlohmann::json::object_t createFailedMissingReqProperties(std::string_view arg1)
 {
     return getLog(
         redfish::registries::Base::Index::createFailedMissingReqProperties,
@@ -1053,7 +1055,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json createLimitReachedForResource()
+nlohmann::json::object_t createLimitReachedForResource()
 {
     return getLog(
         redfish::registries::Base::Index::createLimitReachedForResource, {});
@@ -1072,7 +1074,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json serviceShuttingDown()
+nlohmann::json::object_t serviceShuttingDown()
 {
     return getLog(redfish::registries::Base::Index::serviceShuttingDown, {});
 }
@@ -1090,7 +1092,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json serviceInUnknownState()
+nlohmann::json::object_t serviceInUnknownState()
 {
     return getLog(redfish::registries::Base::Index::serviceInUnknownState, {});
 }
@@ -1108,7 +1110,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json noValidSession()
+nlohmann::json::object_t noValidSession()
 {
     return getLog(redfish::registries::Base::Index::noValidSession, {});
 }
@@ -1126,7 +1128,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json insufficientPrivilege()
+nlohmann::json::object_t insufficientPrivilege()
 {
     return getLog(redfish::registries::Base::Index::insufficientPrivilege, {});
 }
@@ -1144,7 +1146,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json accountModified()
+nlohmann::json::object_t accountModified()
 {
     return getLog(redfish::registries::Base::Index::accountModified, {});
 }
@@ -1162,7 +1164,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json accountNotModified()
+nlohmann::json::object_t accountNotModified()
 {
     return getLog(redfish::registries::Base::Index::accountNotModified, {});
 }
@@ -1180,7 +1182,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json accountRemoved()
+nlohmann::json::object_t accountRemoved()
 {
     return getLog(redfish::registries::Base::Index::accountRemoved, {});
 }
@@ -1198,7 +1200,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json accountForSessionNoLongerExists()
+nlohmann::json::object_t accountForSessionNoLongerExists()
 {
     return getLog(
         redfish::registries::Base::Index::accountForSessionNoLongerExists, {});
@@ -1217,7 +1219,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json invalidObject(const boost::urls::url_view_base& arg1)
+nlohmann::json::object_t invalidObject(const boost::urls::url_view_base& arg1)
 {
     return getLog(redfish::registries::Base::Index::invalidObject,
                   std::to_array<std::string_view>({arg1.buffer()}));
@@ -1236,7 +1238,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json internalError()
+nlohmann::json::object_t internalError()
 {
     return getLog(redfish::registries::Base::Index::internalError, {});
 }
@@ -1257,7 +1259,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json unrecognizedRequestBody()
+nlohmann::json::object_t unrecognizedRequestBody()
 {
     return getLog(redfish::registries::Base::Index::unrecognizedRequestBody,
                   {});
@@ -1276,7 +1278,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceMissingAtURI(const boost::urls::url_view_base& arg1)
+nlohmann::json::object_t resourceMissingAtURI(
+    const boost::urls::url_view_base& arg1)
 {
     return getLog(redfish::registries::Base::Index::resourceMissingAtURI,
                   std::to_array<std::string_view>({arg1.buffer()}));
@@ -1296,7 +1299,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceAtUriInUnknownFormat(
+nlohmann::json::object_t resourceAtUriInUnknownFormat(
     const boost::urls::url_view_base& arg1)
 {
     return getLog(
@@ -1318,8 +1321,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceAtUriUnauthorized(const boost::urls::url_view_base& arg1,
-                                         std::string_view arg2)
+nlohmann::json::object_t resourceAtUriUnauthorized(
+    const boost::urls::url_view_base& arg1, std::string_view arg2)
 {
     return getLog(redfish::registries::Base::Index::resourceAtUriUnauthorized,
                   std::to_array<std::string_view>({arg1.buffer(), arg2}));
@@ -1340,7 +1343,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json couldNotEstablishConnection(
+nlohmann::json::object_t couldNotEstablishConnection(
     const boost::urls::url_view_base& arg1)
 {
     return getLog(redfish::registries::Base::Index::couldNotEstablishConnection,
@@ -1361,7 +1364,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json sourceDoesNotSupportProtocol(
+nlohmann::json::object_t sourceDoesNotSupportProtocol(
     const boost::urls::url_view_base& arg1, std::string_view arg2)
 {
     return getLog(
@@ -1385,7 +1388,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json accessDenied(const boost::urls::url_view_base& arg1)
+nlohmann::json::object_t accessDenied(const boost::urls::url_view_base& arg1)
 {
     return getLog(redfish::registries::Base::Index::accessDenied,
                   std::to_array<std::string_view>({arg1.buffer()}));
@@ -1404,7 +1407,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json serviceTemporarilyUnavailable(std::string_view arg1)
+nlohmann::json::object_t serviceTemporarilyUnavailable(std::string_view arg1)
 {
     return getLog(
         redfish::registries::Base::Index::serviceTemporarilyUnavailable,
@@ -1425,7 +1428,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json invalidIndex(uint64_t arg1)
+nlohmann::json::object_t invalidIndex(uint64_t arg1)
 {
     std::string arg1Str = std::to_string(arg1);
     return getLog(redfish::registries::Base::Index::invalidIndex,
@@ -1445,8 +1448,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json propertyValueModified(std::string_view arg1,
-                                     const nlohmann::json& arg2)
+nlohmann::json::object_t propertyValueModified(std::string_view arg1,
+                                               const nlohmann::json& arg2)
 {
     std::string arg2Str =
         arg2.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
@@ -1468,7 +1471,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceInStandby()
+nlohmann::json::object_t resourceInStandby()
 {
     return getLog(redfish::registries::Base::Index::resourceInStandby, {});
 }
@@ -1486,7 +1489,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceExhaustion(std::string_view arg1)
+nlohmann::json::object_t resourceExhaustion(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::resourceExhaustion,
                   std::to_array({arg1}));
@@ -1505,7 +1508,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json stringValueTooLong(std::string_view arg1, uint64_t arg2)
+nlohmann::json::object_t stringValueTooLong(std::string_view arg1,
+                                            uint64_t arg2)
 {
     std::string arg2Str = std::to_string(arg2);
     return getLog(redfish::registries::Base::Index::stringValueTooLong,
@@ -1526,7 +1530,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json stringValueTooShort(std::string_view arg1, std::string_view arg2)
+nlohmann::json::object_t stringValueTooShort(std::string_view arg1,
+                                             std::string_view arg2)
 {
     return getLog(redfish::registries::Base::Index::stringValueTooShort,
                   std::to_array({arg1, arg2}));
@@ -1546,7 +1551,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json sessionTerminated()
+nlohmann::json::object_t sessionTerminated()
 {
     return getLog(redfish::registries::Base::Index::sessionTerminated, {});
 }
@@ -1564,7 +1569,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json subscriptionTerminated()
+nlohmann::json::object_t subscriptionTerminated()
 {
     return getLog(redfish::registries::Base::Index::subscriptionTerminated, {});
 }
@@ -1582,8 +1587,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceTypeIncompatible(std::string_view arg1,
-                                        std::string_view arg2)
+nlohmann::json::object_t resourceTypeIncompatible(std::string_view arg1,
+                                                  std::string_view arg2)
 {
     return getLog(redfish::registries::Base::Index::resourceTypeIncompatible,
                   std::to_array({arg1, arg2}));
@@ -1603,7 +1608,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json passwordChangeRequired(const boost::urls::url_view_base& arg1)
+nlohmann::json::object_t passwordChangeRequired(
+    const boost::urls::url_view_base& arg1)
 {
     return getLog(redfish::registries::Base::Index::passwordChangeRequired,
                   std::to_array<std::string_view>({arg1.buffer()}));
@@ -1622,8 +1628,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resetRequired(const boost::urls::url_view_base& arg1,
-                             std::string_view arg2)
+nlohmann::json::object_t resetRequired(const boost::urls::url_view_base& arg1,
+                                       std::string_view arg2)
 {
     return getLog(redfish::registries::Base::Index::resetRequired,
                   std::to_array<std::string_view>({arg1.buffer(), arg2}));
@@ -1643,7 +1649,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resetRecommended(std::string_view arg1, std::string_view arg2)
+nlohmann::json::object_t resetRecommended(std::string_view arg1,
+                                          std::string_view arg2)
 {
     return getLog(redfish::registries::Base::Index::resetRecommended,
                   std::to_array({arg1, arg2}));
@@ -1663,7 +1670,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json chassisPowerStateOnRequired(std::string_view arg1)
+nlohmann::json::object_t chassisPowerStateOnRequired(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::chassisPowerStateOnRequired,
                   std::to_array({arg1}));
@@ -1682,7 +1689,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json chassisPowerStateOffRequired(std::string_view arg1)
+nlohmann::json::object_t chassisPowerStateOffRequired(std::string_view arg1)
 {
     return getLog(
         redfish::registries::Base::Index::chassisPowerStateOffRequired,
@@ -1702,8 +1709,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json propertyValueConflict(std::string_view arg1,
-                                     std::string_view arg2)
+nlohmann::json::object_t propertyValueConflict(std::string_view arg1,
+                                               std::string_view arg2)
 {
     return getLog(redfish::registries::Base::Index::propertyValueConflict,
                   std::to_array({arg1, arg2}));
@@ -1723,7 +1730,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json propertyValueResourceConflict(
+nlohmann::json::object_t propertyValueResourceConflict(
     std::string_view arg1, const nlohmann::json& arg2,
     const boost::urls::url_view_base& arg3)
 {
@@ -1750,8 +1757,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json propertyValueExternalConflict(std::string_view arg1,
-                                             const nlohmann::json& arg2)
+nlohmann::json::object_t propertyValueExternalConflict(
+    std::string_view arg1, const nlohmann::json& arg2)
 {
     std::string arg2Str =
         arg2.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
@@ -1775,8 +1782,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json propertyValueIncorrect(std::string_view arg1,
-                                      const nlohmann::json& arg2)
+nlohmann::json::object_t propertyValueIncorrect(std::string_view arg1,
+                                                const nlohmann::json& arg2)
 {
     std::string arg2Str =
         arg2.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
@@ -1798,7 +1805,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceCreationConflict(const boost::urls::url_view_base& arg1)
+nlohmann::json::object_t resourceCreationConflict(
+    const boost::urls::url_view_base& arg1)
 {
     return getLog(redfish::registries::Base::Index::resourceCreationConflict,
                   std::to_array<std::string_view>({arg1.buffer()}));
@@ -1818,8 +1826,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json actionParameterValueConflict(std::string_view arg1,
-                                            std::string_view arg2)
+nlohmann::json::object_t actionParameterValueConflict(std::string_view arg1,
+                                                      std::string_view arg2)
 {
     return getLog(
         redfish::registries::Base::Index::actionParameterValueConflict,
@@ -1841,7 +1849,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json maximumErrorsExceeded()
+nlohmann::json::object_t maximumErrorsExceeded()
 {
     return getLog(redfish::registries::Base::Index::maximumErrorsExceeded, {});
 }
@@ -1859,7 +1867,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json preconditionFailed()
+nlohmann::json::object_t preconditionFailed()
 {
     return getLog(redfish::registries::Base::Index::preconditionFailed, {});
 }
@@ -1877,7 +1885,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json preconditionRequired()
+nlohmann::json::object_t preconditionRequired()
 {
     return getLog(redfish::registries::Base::Index::preconditionRequired, {});
 }
@@ -1895,7 +1903,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json headerMissing(std::string_view arg1)
+nlohmann::json::object_t headerMissing(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::headerMissing,
                   std::to_array({arg1}));
@@ -1914,7 +1922,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json headerInvalid(std::string_view arg1)
+nlohmann::json::object_t headerInvalid(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::headerInvalid,
                   std::to_array({arg1}));
@@ -1933,7 +1941,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json operationFailed()
+nlohmann::json::object_t operationFailed()
 {
     return getLog(redfish::registries::Base::Index::operationFailed, {});
 }
@@ -1951,7 +1959,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json operationTimeout()
+nlohmann::json::object_t operationTimeout()
 {
     return getLog(redfish::registries::Base::Index::operationTimeout, {});
 }
@@ -1969,7 +1977,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json operationNotAllowed()
+nlohmann::json::object_t operationNotAllowed()
 {
     return getLog(redfish::registries::Base::Index::operationNotAllowed, {});
 }
@@ -1987,7 +1995,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json undeterminedFault(std::string_view arg1)
+nlohmann::json::object_t undeterminedFault(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::undeterminedFault,
                   std::to_array({arg1}));
@@ -2006,7 +2014,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json conditionInRelatedResource()
+nlohmann::json::object_t conditionInRelatedResource()
 {
     return getLog(redfish::registries::Base::Index::conditionInRelatedResource,
                   {});
@@ -2025,7 +2033,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json restrictedRole(std::string_view arg1)
+nlohmann::json::object_t restrictedRole(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::restrictedRole,
                   std::to_array({arg1}));
@@ -2044,7 +2052,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json restrictedPrivilege(std::string_view arg1)
+nlohmann::json::object_t restrictedPrivilege(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::restrictedPrivilege,
                   std::to_array({arg1}));
@@ -2063,7 +2071,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json strictAccountTypes(std::string_view arg1)
+nlohmann::json::object_t strictAccountTypes(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::strictAccountTypes,
                   std::to_array({arg1}));
@@ -2082,7 +2090,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json propertyDeprecated(std::string_view arg1)
+nlohmann::json::object_t propertyDeprecated(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::propertyDeprecated,
                   std::to_array({arg1}));
@@ -2101,7 +2109,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceDeprecated(std::string_view arg1)
+nlohmann::json::object_t resourceDeprecated(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::resourceDeprecated,
                   std::to_array({arg1}));
@@ -2120,8 +2128,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json propertyValueDeprecated(std::string_view arg1,
-                                       std::string_view arg2)
+nlohmann::json::object_t propertyValueDeprecated(std::string_view arg1,
+                                                 std::string_view arg2)
 {
     return getLog(redfish::registries::Base::Index::propertyValueDeprecated,
                   std::to_array({arg1, arg2}));
@@ -2141,7 +2149,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json actionDeprecated(std::string_view arg1)
+nlohmann::json::object_t actionDeprecated(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::actionDeprecated,
                   std::to_array({arg1}));
@@ -2160,7 +2168,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json networkNameResolutionNotConfigured()
+nlohmann::json::object_t networkNameResolutionNotConfigured()
 {
     return getLog(
         redfish::registries::Base::Index::networkNameResolutionNotConfigured,
@@ -2180,7 +2188,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json networkNameResolutionNotSupported()
+nlohmann::json::object_t networkNameResolutionNotSupported()
 {
     return getLog(
         redfish::registries::Base::Index::networkNameResolutionNotSupported,
@@ -2200,7 +2208,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json serviceDisabled(std::string_view arg1)
+nlohmann::json::object_t serviceDisabled(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::serviceDisabled,
                   std::to_array({arg1}));
@@ -2219,7 +2227,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json eventBufferExceeded()
+nlohmann::json::object_t eventBufferExceeded()
 {
     return getLog(redfish::registries::Base::Index::eventBufferExceeded, {});
 }
@@ -2237,7 +2245,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json authenticationTokenRequired()
+nlohmann::json::object_t authenticationTokenRequired()
 {
     return getLog(redfish::registries::Base::Index::authenticationTokenRequired,
                   {});
@@ -2256,7 +2264,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json oneTimePasscodeSent(std::string_view arg1)
+nlohmann::json::object_t oneTimePasscodeSent(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::oneTimePasscodeSent,
                   std::to_array({arg1}));
@@ -2275,7 +2283,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json licenseRequired(std::string_view arg1)
+nlohmann::json::object_t licenseRequired(std::string_view arg1)
 {
     return getLog(redfish::registries::Base::Index::licenseRequired,
                   std::to_array({arg1}));
@@ -2294,7 +2302,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json propertyModified()
+nlohmann::json::object_t propertyModified()
 {
     return getLog(redfish::registries::Base::Index::propertyModified, {});
 }
@@ -2312,7 +2320,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json generateSecretKeyRequired(const boost::urls::url_view_base& arg1)
+nlohmann::json::object_t generateSecretKeyRequired(
+    const boost::urls::url_view_base& arg1)
 {
     return getLog(redfish::registries::Base::Index::generateSecretKeyRequired,
                   std::to_array<std::string_view>({arg1.buffer()}));
diff --git a/redfish-core/src/heartbeat_messages.cpp b/redfish-core/src/heartbeat_messages.cpp
index 2f9575e..28991dc 100644
--- a/redfish-core/src/heartbeat_messages.cpp
+++ b/redfish-core/src/heartbeat_messages.cpp
@@ -31,8 +31,9 @@
 namespace messages
 {
 
-static nlohmann::json getLog(redfish::registries::HeartbeatEvent::Index name,
-                             std::span<const std::string_view> args)
+static nlohmann::json::object_t getLog(
+    redfish::registries::HeartbeatEvent::Index name,
+    std::span<const std::string_view> args)
 {
     size_t index = static_cast<size_t>(name);
     if (index >= redfish::registries::HeartbeatEvent::registry.size())
@@ -51,7 +52,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json redfishServiceFunctional()
+nlohmann::json::object_t redfishServiceFunctional()
 {
     return getLog(
         redfish::registries::HeartbeatEvent::Index::redfishServiceFunctional,
diff --git a/redfish-core/src/resource_messages.cpp b/redfish-core/src/resource_messages.cpp
index 55fa8ee..17ef0c4 100644
--- a/redfish-core/src/resource_messages.cpp
+++ b/redfish-core/src/resource_messages.cpp
@@ -31,8 +31,9 @@
 namespace messages
 {
 
-static nlohmann::json getLog(redfish::registries::ResourceEvent::Index name,
-                             std::span<const std::string_view> args)
+static nlohmann::json::object_t getLog(
+    redfish::registries::ResourceEvent::Index name,
+    std::span<const std::string_view> args)
 {
     size_t index = static_cast<size_t>(name);
     if (index >= redfish::registries::ResourceEvent::registry.size())
@@ -51,7 +52,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceCreated()
+nlohmann::json::object_t resourceCreated()
 {
     return getLog(redfish::registries::ResourceEvent::Index::resourceCreated,
                   {});
@@ -64,7 +65,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceRemoved()
+nlohmann::json::object_t resourceRemoved()
 {
     return getLog(redfish::registries::ResourceEvent::Index::resourceRemoved,
                   {});
@@ -77,8 +78,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceErrorsDetected(std::string_view arg1,
-                                      std::string_view arg2)
+nlohmann::json::object_t resourceErrorsDetected(std::string_view arg1,
+                                                std::string_view arg2)
 {
     return getLog(
         redfish::registries::ResourceEvent::Index::resourceErrorsDetected,
@@ -92,8 +93,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceErrorsCorrected(std::string_view arg1,
-                                       std::string_view arg2)
+nlohmann::json::object_t resourceErrorsCorrected(std::string_view arg1,
+                                                 std::string_view arg2)
 {
     return getLog(
         redfish::registries::ResourceEvent::Index::resourceErrorsCorrected,
@@ -107,8 +108,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceErrorThresholdExceeded(std::string_view arg1,
-                                              std::string_view arg2)
+nlohmann::json::object_t resourceErrorThresholdExceeded(std::string_view arg1,
+                                                        std::string_view arg2)
 {
     return getLog(redfish::registries::ResourceEvent::Index::
                       resourceErrorThresholdExceeded,
@@ -122,8 +123,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceErrorThresholdCleared(std::string_view arg1,
-                                             std::string_view arg2)
+nlohmann::json::object_t resourceErrorThresholdCleared(std::string_view arg1,
+                                                       std::string_view arg2)
 {
     return getLog(redfish::registries::ResourceEvent::Index::
                       resourceErrorThresholdCleared,
@@ -137,8 +138,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceWarningThresholdExceeded(std::string_view arg1,
-                                                std::string_view arg2)
+nlohmann::json::object_t resourceWarningThresholdExceeded(std::string_view arg1,
+                                                          std::string_view arg2)
 {
     return getLog(redfish::registries::ResourceEvent::Index::
                       resourceWarningThresholdExceeded,
@@ -152,8 +153,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceWarningThresholdCleared(std::string_view arg1,
-                                               std::string_view arg2)
+nlohmann::json::object_t resourceWarningThresholdCleared(std::string_view arg1,
+                                                         std::string_view arg2)
 {
     return getLog(redfish::registries::ResourceEvent::Index::
                       resourceWarningThresholdCleared,
@@ -167,8 +168,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceStatusChangedOK(std::string_view arg1,
-                                       std::string_view arg2)
+nlohmann::json::object_t resourceStatusChangedOK(std::string_view arg1,
+                                                 std::string_view arg2)
 {
     return getLog(
         redfish::registries::ResourceEvent::Index::resourceStatusChangedOK,
@@ -182,8 +183,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceStatusChangedWarning(std::string_view arg1,
-                                            std::string_view arg2)
+nlohmann::json::object_t resourceStatusChangedWarning(std::string_view arg1,
+                                                      std::string_view arg2)
 {
     return getLog(
         redfish::registries::ResourceEvent::Index::resourceStatusChangedWarning,
@@ -197,8 +198,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceStatusChangedCritical(std::string_view arg1,
-                                             std::string_view arg2)
+nlohmann::json::object_t resourceStatusChangedCritical(std::string_view arg1,
+                                                       std::string_view arg2)
 {
     return getLog(redfish::registries::ResourceEvent::Index::
                       resourceStatusChangedCritical,
@@ -212,8 +213,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceStateChanged(std::string_view arg1,
-                                    std::string_view arg2)
+nlohmann::json::object_t resourceStateChanged(std::string_view arg1,
+                                              std::string_view arg2)
 {
     return getLog(
         redfish::registries::ResourceEvent::Index::resourceStateChanged,
@@ -227,7 +228,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourcePoweredOn(std::string_view arg1)
+nlohmann::json::object_t resourcePoweredOn(std::string_view arg1)
 {
     return getLog(redfish::registries::ResourceEvent::Index::resourcePoweredOn,
                   std::to_array({arg1}));
@@ -240,7 +241,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourcePoweringOn(std::string_view arg1)
+nlohmann::json::object_t resourcePoweringOn(std::string_view arg1)
 {
     return getLog(redfish::registries::ResourceEvent::Index::resourcePoweringOn,
                   std::to_array({arg1}));
@@ -253,7 +254,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourcePoweredOff(std::string_view arg1)
+nlohmann::json::object_t resourcePoweredOff(std::string_view arg1)
 {
     return getLog(redfish::registries::ResourceEvent::Index::resourcePoweredOff,
                   std::to_array({arg1}));
@@ -266,7 +267,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourcePoweringOff(std::string_view arg1)
+nlohmann::json::object_t resourcePoweringOff(std::string_view arg1)
 {
     return getLog(
         redfish::registries::ResourceEvent::Index::resourcePoweringOff,
@@ -280,7 +281,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourcePaused(std::string_view arg1)
+nlohmann::json::object_t resourcePaused(std::string_view arg1)
 {
     return getLog(redfish::registries::ResourceEvent::Index::resourcePaused,
                   std::to_array({arg1}));
@@ -293,7 +294,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json uRIForResourceChanged()
+nlohmann::json::object_t uRIForResourceChanged()
 {
     return getLog(
         redfish::registries::ResourceEvent::Index::uRIForResourceChanged, {});
@@ -306,7 +307,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceChanged()
+nlohmann::json::object_t resourceChanged()
 {
     return getLog(redfish::registries::ResourceEvent::Index::resourceChanged,
                   {});
@@ -319,7 +320,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceVersionIncompatible(std::string_view arg1)
+nlohmann::json::object_t resourceVersionIncompatible(std::string_view arg1)
 {
     return getLog(
         redfish::registries::ResourceEvent::Index::resourceVersionIncompatible,
@@ -333,7 +334,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceSelfTestFailed(std::string_view arg1)
+nlohmann::json::object_t resourceSelfTestFailed(std::string_view arg1)
 {
     return getLog(
         redfish::registries::ResourceEvent::Index::resourceSelfTestFailed,
@@ -347,7 +348,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json resourceSelfTestCompleted()
+nlohmann::json::object_t resourceSelfTestCompleted()
 {
     return getLog(
         redfish::registries::ResourceEvent::Index::resourceSelfTestCompleted,
@@ -361,7 +362,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json testMessage()
+nlohmann::json::object_t testMessage()
 {
     return getLog(redfish::registries::ResourceEvent::Index::testMessage, {});
 }
@@ -373,8 +374,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json aggregationSourceDiscovered(std::string_view arg1,
-                                           std::string_view arg2)
+nlohmann::json::object_t aggregationSourceDiscovered(std::string_view arg1,
+                                                     std::string_view arg2)
 {
     return getLog(
         redfish::registries::ResourceEvent::Index::aggregationSourceDiscovered,
@@ -388,7 +389,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json licenseExpired(std::string_view arg1, std::string_view arg2)
+nlohmann::json::object_t licenseExpired(std::string_view arg1,
+                                        std::string_view arg2)
 {
     return getLog(redfish::registries::ResourceEvent::Index::licenseExpired,
                   std::to_array({arg1, arg2}));
@@ -401,7 +403,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json licenseChanged(std::string_view arg1, std::string_view arg2)
+nlohmann::json::object_t licenseChanged(std::string_view arg1,
+                                        std::string_view arg2)
 {
     return getLog(redfish::registries::ResourceEvent::Index::licenseChanged,
                   std::to_array({arg1, arg2}));
@@ -414,7 +417,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json licenseAdded(std::string_view arg1, std::string_view arg2)
+nlohmann::json::object_t licenseAdded(std::string_view arg1,
+                                      std::string_view arg2)
 {
     return getLog(redfish::registries::ResourceEvent::Index::licenseAdded,
                   std::to_array({arg1, arg2}));
diff --git a/redfish-core/src/task_messages.cpp b/redfish-core/src/task_messages.cpp
index 1521a4a..79c312a 100644
--- a/redfish-core/src/task_messages.cpp
+++ b/redfish-core/src/task_messages.cpp
@@ -33,8 +33,9 @@
 namespace messages
 {
 
-static nlohmann::json getLog(redfish::registries::TaskEvent::Index name,
-                             std::span<const std::string_view> args)
+static nlohmann::json::object_t getLog(
+    redfish::registries::TaskEvent::Index name,
+    std::span<const std::string_view> args)
 {
     size_t index = static_cast<size_t>(name);
     if (index >= redfish::registries::TaskEvent::registry.size())
@@ -53,7 +54,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json taskStarted(std::string_view arg1)
+nlohmann::json::object_t taskStarted(std::string_view arg1)
 {
     return getLog(redfish::registries::TaskEvent::Index::taskStarted,
                   std::to_array({arg1}));
@@ -66,7 +67,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json taskCompletedOK(std::string_view arg1)
+nlohmann::json::object_t taskCompletedOK(std::string_view arg1)
 {
     return getLog(redfish::registries::TaskEvent::Index::taskCompletedOK,
                   std::to_array({arg1}));
@@ -79,7 +80,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json taskCompletedWarning(std::string_view arg1)
+nlohmann::json::object_t taskCompletedWarning(std::string_view arg1)
 {
     return getLog(redfish::registries::TaskEvent::Index::taskCompletedWarning,
                   std::to_array({arg1}));
@@ -92,7 +93,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json taskAborted(std::string_view arg1)
+nlohmann::json::object_t taskAborted(std::string_view arg1)
 {
     return getLog(redfish::registries::TaskEvent::Index::taskAborted,
                   std::to_array({arg1}));
@@ -105,7 +106,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json taskCancelled(std::string_view arg1)
+nlohmann::json::object_t taskCancelled(std::string_view arg1)
 {
     return getLog(redfish::registries::TaskEvent::Index::taskCancelled,
                   std::to_array({arg1}));
@@ -118,7 +119,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json taskRemoved(std::string_view arg1)
+nlohmann::json::object_t taskRemoved(std::string_view arg1)
 {
     return getLog(redfish::registries::TaskEvent::Index::taskRemoved,
                   std::to_array({arg1}));
@@ -131,7 +132,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json taskPaused(std::string_view arg1)
+nlohmann::json::object_t taskPaused(std::string_view arg1)
 {
     return getLog(redfish::registries::TaskEvent::Index::taskPaused,
                   std::to_array({arg1}));
@@ -144,7 +145,7 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json taskResumed(std::string_view arg1)
+nlohmann::json::object_t taskResumed(std::string_view arg1)
 {
     return getLog(redfish::registries::TaskEvent::Index::taskResumed,
                   std::to_array({arg1}));
@@ -157,7 +158,8 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json taskProgressChanged(std::string_view arg1, uint64_t arg2)
+nlohmann::json::object_t taskProgressChanged(std::string_view arg1,
+                                             uint64_t arg2)
 {
     std::string arg2Str = std::to_string(arg2);
     return getLog(redfish::registries::TaskEvent::Index::taskProgressChanged,
diff --git a/scripts/parse_registries.py b/scripts/parse_registries.py
index d60e523..03e44cb 100755
--- a/scripts/parse_registries.py
+++ b/scripts/parse_registries.py
@@ -334,7 +334,7 @@
         args.append(f"{typename} arg{arg_index}")
     function_name = entry_id[0].lower() + entry_id[1:]
     arg = ", ".join(args)
-    out += f"nlohmann::json {function_name}({arg})"
+    out += f"nlohmann::json::object_t {function_name}({arg})"
 
     if is_header:
         out += ";\n\n"
@@ -557,7 +557,7 @@
         )
         out.write(
             """
-static nlohmann::json getLog(redfish::registries::{struct_name}::Index name,
+static nlohmann::json::object_t getLog(redfish::registries::{struct_name}::Index name,
                              std::span<const std::string_view> args)
 {{
     size_t index = static_cast<size_t>(name);
