diff --git a/a1-policy-management/pom.xml b/a1-policy-management/pom.xml
index 33a6422..c6e749c 100644
--- a/a1-policy-management/pom.xml
+++ b/a1-policy-management/pom.xml
@@ -4,6 +4,7 @@
   ~ ONAP : ccsdk oran
   ~ ================================================================================
   ~ Copyright (C) 2020-2023 Nordix Foundation. All rights reserved.
+  ~ Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
   ~ ================================================================================
   ~ Licensed under the Apache License, Version 2.0 (the "License");
   ~ you may not use this file except in compliance with the License.
@@ -360,7 +361,7 @@
                                 <appName>ONAP CCSDK A1 Policy Management Service</appName>
                                 <infoUrl>https://wiki.onap.org/display/DW/O-RAN+A1+Policies+in+ONAP</infoUrl>
                                 <licenseInfo>Copyright (C) 2020-2023 Nordix Foundation. Licensed
-                                    under the Apache License.</licenseInfo>
+                                    under the Apache License, and Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.</licenseInfo>
                                 <licenseUrl>http://www.apache.org/licenses/LICENSE-2.0</licenseUrl>
                             </configOptions>
                         </configuration>
@@ -408,7 +409,7 @@
                         </goals>
                         <configuration>
                             <outputDirectory>${project.basedir}/../docs/offeredapis/swagger</outputDirectory>
-                            <verbose>true</verbose>
+                            <overwrite>true</overwrite>
                             <resources>
                                 <resource>
                                     <directory>${project.basedir}/api</directory>
diff --git a/docs/offeredapis/openapitoolgen/offeredapis/pms-api/index.html b/docs/offeredapis/openapitoolgen/offeredapis/pms-api/index.html
index c4aa60e..e0cbb20 100644
--- a/docs/offeredapis/openapitoolgen/offeredapis/pms-api/index.html
+++ b/docs/offeredapis/openapitoolgen/offeredapis/pms-api/index.html
@@ -855,7 +855,10 @@
       "description" : "If true, the access is granted"
     }
   },
-  "description" : "Result of authorization"
+  "description" : "Result of authorization",
+  "example" : {
+    "result" : true
+  }
 };
     defs["error_information"] = {
   "type" : "object",
@@ -915,7 +918,7 @@
   },
   "description" : "Authorization request for A1 policy requests"
 };
-    defs["policy_id_list_v2"] = {
+    defs["policy_id_list"] = {
   "type" : "object",
   "properties" : {
     "policy_ids" : {
@@ -927,23 +930,13 @@
       }
     }
   },
-  "description" : "A list of policy identities"
+  "description" : "A list of policy identities",
+  "example" : {
+    "policy_ids" : [ "policy_ids", "policy_ids" ]
+  }
 };
-    defs["policy_info_list_v2"] = {
-  "type" : "object",
-  "properties" : {
-    "policies" : {
-      "type" : "array",
-      "description" : "List of policy information",
-      "items" : {
-        "$ref" : "#/components/schemas/policy_info_v2"
-      }
-    }
-  },
-  "description" : "List of policy information"
-};
-    defs["policy_info_v2"] = {
-  "required" : [ "policy_data", "policy_id", "policytype_id", "ric_id" ],
+    defs["policy_info"] = {
+  "required" : [ "policy_data", "policy_id", "policytype_id", "ric_id", "service_id" ],
   "type" : "object",
   "properties" : {
     "ric_id" : {
@@ -957,6 +950,7 @@
     "transient" : {
       "type" : "boolean",
       "description" : "if true, the policy is deleted at RIC restart. If false, its value is maintained by this service until explicitly deleted. Default false.",
+      "nullable" : false,
       "example" : false,
       "default" : false
     },
@@ -979,7 +973,20 @@
   },
   "description" : "Information for one A1-P Policy"
 };
-    defs["policy_status_info_v2"] = {
+    defs["policy_info_list"] = {
+  "type" : "object",
+  "properties" : {
+    "policies" : {
+      "type" : "array",
+      "description" : "List of policy information",
+      "items" : {
+        "$ref" : "#/components/schemas/policy_info"
+      }
+    }
+  },
+  "description" : "List of policy information"
+};
+    defs["policy_status_info"] = {
   "type" : "object",
   "properties" : {
     "last_modified" : {
@@ -993,7 +1000,17 @@
   },
   "description" : "Status for one A1-P Policy"
 };
-    defs["policytype_id_list_v2"] = {
+    defs["policy_type_definition"] = {
+  "type" : "object",
+  "properties" : {
+    "policy_schema" : {
+      "type" : "object",
+      "description" : "Policy type json schema. The schema is a json object following http://json-schema.org/draft-07/schema"
+    }
+  },
+  "description" : "Contains policy type schema definition"
+};
+    defs["policy_type_id_list"] = {
   "type" : "object",
   "properties" : {
     "policytype_ids" : {
@@ -1007,30 +1024,7 @@
   },
   "description" : "Information about policy types"
 };
-    defs["policytype_v2"] = {
-  "type" : "object",
-  "properties" : {
-    "policy_schema" : {
-      "type" : "object",
-      "description" : "Policy type json schema. The schema is a json object following http://json-schema.org/draft-07/schema"
-    }
-  },
-  "description" : "Policy type"
-};
-    defs["ric_info_list_v2"] = {
-  "type" : "object",
-  "properties" : {
-    "rics" : {
-      "type" : "array",
-      "description" : "List of Near-RT RIC information",
-      "items" : {
-        "$ref" : "#/components/schemas/ric_info_v2"
-      }
-    }
-  },
-  "description" : "List of Near-RT RIC information"
-};
-    defs["ric_info_v2"] = {
+    defs["ric_info"] = {
   "type" : "object",
   "properties" : {
     "ric_id" : {
@@ -1061,6 +1055,19 @@
   },
   "description" : "Information for a Near-RT RIC"
 };
+    defs["ric_info_list"] = {
+  "type" : "object",
+  "properties" : {
+    "rics" : {
+      "type" : "array",
+      "description" : "List of Near-RT RIC information",
+      "items" : {
+        "$ref" : "#/components/schemas/ric_info"
+      }
+    }
+  },
+  "description" : "List of Near-RT RIC information"
+};
     defs["service_callback_info_v2"] = {
   "required" : [ "event_type", "ric_id" ],
   "type" : "object",
@@ -1077,20 +1084,7 @@
   },
   "description" : "Information transferred as in Service callbacks (callback_url)"
 };
-    defs["service_list_v2"] = {
-  "type" : "object",
-  "properties" : {
-    "service_list" : {
-      "type" : "array",
-      "description" : "List of service information",
-      "items" : {
-        "$ref" : "#/components/schemas/service_status_v2"
-      }
-    }
-  },
-  "description" : "List of service information"
-};
-    defs["service_registration_info_v2"] = {
+    defs["service_registration_info"] = {
   "required" : [ "service_id" ],
   "type" : "object",
   "properties" : {
@@ -1110,7 +1104,7 @@
   },
   "description" : "Information for one service"
 };
-    defs["service_status_v2"] = {
+    defs["service_status"] = {
   "type" : "object",
   "properties" : {
     "callback_url" : {
@@ -1131,10 +1125,21 @@
       "description" : "time since last invocation by the service",
       "format" : "int64"
     }
-  },
-  "description" : "List of service information"
+  }
 };
-    defs["status_info_v2"] = {
+    defs["service_status_list"] = {
+  "type" : "object",
+  "properties" : {
+    "service_list" : {
+      "type" : "array",
+      "description" : "List of service information",
+      "items" : {
+        "$ref" : "#/components/schemas/service_status"
+      }
+    }
+  }
+};
+    defs["status_info"] = {
   "type" : "object",
   "properties" : {
     "status" : {
@@ -1177,8 +1182,8 @@
                     <li data-group="A1PolicyManagement" data-name="getPolicyStatus" class="">
                       <a href="#api-A1PolicyManagement-getPolicyStatus">getPolicyStatus</a>
                     </li>
-                    <li data-group="A1PolicyManagement" data-name="getPolicyType" class="">
-                      <a href="#api-A1PolicyManagement-getPolicyType">getPolicyType</a>
+                    <li data-group="A1PolicyManagement" data-name="getPolicyTypeDefinition" class="">
+                      <a href="#api-A1PolicyManagement-getPolicyTypeDefinition">getPolicyTypeDefinition</a>
                     </li>
                     <li data-group="A1PolicyManagement" data-name="getPolicyTypes" class="">
                       <a href="#api-A1PolicyManagement-getPolicyTypes">getPolicyTypes</a>
@@ -1230,6 +1235,13 @@
                     <li data-group="AuthorizationAPI" data-name="performAccessControl" class="">
                       <a href="#api-AuthorizationAPI-performAccessControl">performAccessControl</a>
                     </li>
+                  <li class="nav-header" data-group="Configuration"><a href="#api-Configuration">API Methods - Configuration</a></li>
+                    <li data-group="Configuration" data-name="getConfiguration" class="">
+                      <a href="#api-Configuration-getConfiguration">getConfiguration</a>
+                    </li>
+                    <li data-group="Configuration" data-name="putConfiguration" class="">
+                      <a href="#api-Configuration-putConfiguration">putConfiguration</a>
+                    </li>
                   <li class="nav-header" data-group="HealthCheck"><a href="#api-HealthCheck">API Methods - HealthCheck</a></li>
                     <li data-group="HealthCheck" data-name="getStatus" class="">
                       <a href="#api-HealthCheck-getStatus">getStatus</a>
@@ -1237,13 +1249,6 @@
                     <li data-group="HealthCheck" data-name="getStatusV1" class="">
                       <a href="#api-HealthCheck-getStatusV1">getStatusV1</a>
                     </li>
-                  <li class="nav-header" data-group="ManagementOfConfiguration"><a href="#api-ManagementOfConfiguration">API Methods - ManagementOfConfiguration</a></li>
-                    <li data-group="ManagementOfConfiguration" data-name="getConfiguration" class="">
-                      <a href="#api-ManagementOfConfiguration-getConfiguration">getConfiguration</a>
-                    </li>
-                    <li data-group="ManagementOfConfiguration" data-name="putConfiguration" class="">
-                      <a href="#api-ManagementOfConfiguration-putConfiguration">putConfiguration</a>
-                    </li>
                   <li class="nav-header" data-group="NearRTRICRepository"><a href="#api-NearRTRICRepository">API Methods - NearRTRICRepository</a></li>
                     <li data-group="NearRTRICRepository" data-name="getRic" class="">
                       <a href="#api-NearRTRICRepository-getRic">getRic</a>
@@ -1251,10 +1256,6 @@
                     <li data-group="NearRTRICRepository" data-name="getRics" class="">
                       <a href="#api-NearRTRICRepository-getRics">getRics</a>
                     </li>
-                  <li class="nav-header" data-group="ServiceCallbacks"><a href="#api-ServiceCallbacks">API Methods - ServiceCallbacks</a></li>
-                    <li data-group="ServiceCallbacks" data-name="serviceCallback" class="">
-                      <a href="#api-ServiceCallbacks-serviceCallback">serviceCallback</a>
-                    </li>
                   <li class="nav-header" data-group="ServiceRegistryAndSupervision"><a href="#api-ServiceRegistryAndSupervision">API Methods - ServiceRegistryAndSupervision</a></li>
                     <li data-group="ServiceRegistryAndSupervision" data-name="deleteService" class="">
                       <a href="#api-ServiceRegistryAndSupervision-deleteService">deleteService</a>
@@ -1591,22 +1592,18 @@
                                   <div id="responses-A1PolicyManagement-deletePolicy-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Not used",
-  "content" : {
-    "*/*" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/void"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -1657,22 +1654,18 @@
                                   <div id="responses-A1PolicyManagement-deletePolicy-schema-423" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Near-RT RIC is not operational",
-  "content" : {
-    "*/*" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/error_information"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -1723,22 +1716,18 @@
                                   <div id="responses-A1PolicyManagement-deletePolicy-schema-204" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Policy deleted",
-  "content" : {
-    "*/*" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/void"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -1789,22 +1778,18 @@
                                   <div id="responses-A1PolicyManagement-deletePolicy-schema-404" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Policy is not found",
-  "content" : {
-    "*/*" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/error_information"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -1883,7 +1868,7 @@
         String policyId = policyId_example; // String | 
 
         try {
-            policy_info_v2 result = apiInstance.getPolicy(policyId);
+            policy_info result = apiInstance.getPolicy(policyId);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling A1PolicyManagementApi#getPolicy");
@@ -1903,7 +1888,7 @@
         String policyId = policyId_example; // String | 
 
         try {
-            policy_info_v2 result = apiInstance.getPolicy(policyId);
+            policy_info result = apiInstance.getPolicy(policyId);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling A1PolicyManagementApi#getPolicy");
@@ -1925,7 +1910,7 @@
 
 // Returns a policy
 [apiInstance getPolicyWith:policyId
-              completionHandler: ^(policy_info_v2 output, NSError* error) {
+              completionHandler: ^(policy_info output, NSError* error) {
     if (output) {
         NSLog(@"%@", output);
     }
@@ -1977,7 +1962,7 @@
 
             try {
                 // Returns a policy
-                policy_info_v2 result = apiInstance.getPolicy(policyId);
+                policy_info result = apiInstance.getPolicy(policyId);
                 Debug.WriteLine(result);
             } catch (Exception e) {
                 Debug.Print("Exception when calling A1PolicyManagementApi.getPolicy: " + e.Message );
@@ -2127,22 +2112,18 @@
                                   <div id="responses-A1PolicyManagement-getPolicy-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Policy found",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/policy_info_v2"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -2193,22 +2174,18 @@
                                   <div id="responses-A1PolicyManagement-getPolicy-schema-404" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Policy is not found",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/error_information"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -2290,7 +2267,7 @@
         String typeName = typeName_example; // String | Select policies of types with the given type name (type identity has the format <typename_version>)
 
         try {
-            policy_id_list_v2 result = apiInstance.getPolicyIds(policytypeId, ricId, serviceId, typeName);
+            policy_id_list result = apiInstance.getPolicyIds(policytypeId, ricId, serviceId, typeName);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling A1PolicyManagementApi#getPolicyIds");
@@ -2313,7 +2290,7 @@
         String typeName = typeName_example; // String | Select policies of types with the given type name (type identity has the format <typename_version>)
 
         try {
-            policy_id_list_v2 result = apiInstance.getPolicyIds(policytypeId, ricId, serviceId, typeName);
+            policy_id_list result = apiInstance.getPolicyIds(policytypeId, ricId, serviceId, typeName);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling A1PolicyManagementApi#getPolicyIds");
@@ -2341,7 +2318,7 @@
     ricId:ricId
     serviceId:serviceId
     typeName:typeName
-              completionHandler: ^(policy_id_list_v2 output, NSError* error) {
+              completionHandler: ^(policy_id_list output, NSError* error) {
     if (output) {
         NSLog(@"%@", output);
     }
@@ -2401,7 +2378,7 @@
 
             try {
                 // Query policy identities
-                policy_id_list_v2 result = apiInstance.getPolicyIds(policytypeId, ricId, serviceId, typeName);
+                policy_id_list result = apiInstance.getPolicyIds(policytypeId, ricId, serviceId, typeName);
                 Debug.WriteLine(result);
             } catch (Exception e) {
                 Debug.Print("Exception when calling A1PolicyManagementApi.getPolicyIds: " + e.Message );
@@ -2623,22 +2600,18 @@
                                   <div id="responses-A1PolicyManagement-getPolicyIds-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Policy identities",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/policy_id_list_v2"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -2689,22 +2662,18 @@
                                   <div id="responses-A1PolicyManagement-getPolicyIds-schema-404" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Near-RT RIC or type not found",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/error_information"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -2786,7 +2755,7 @@
         String typeName = typeName_example; // String | Select policies of a given type name (type identity has the format <typename_version>)
 
         try {
-            policy_info_list_v2 result = apiInstance.getPolicyInstances(policytypeId, ricId, serviceId, typeName);
+            policy_info_list result = apiInstance.getPolicyInstances(policytypeId, ricId, serviceId, typeName);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling A1PolicyManagementApi#getPolicyInstances");
@@ -2809,7 +2778,7 @@
         String typeName = typeName_example; // String | Select policies of a given type name (type identity has the format <typename_version>)
 
         try {
-            policy_info_list_v2 result = apiInstance.getPolicyInstances(policytypeId, ricId, serviceId, typeName);
+            policy_info_list result = apiInstance.getPolicyInstances(policytypeId, ricId, serviceId, typeName);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling A1PolicyManagementApi#getPolicyInstances");
@@ -2837,7 +2806,7 @@
     ricId:ricId
     serviceId:serviceId
     typeName:typeName
-              completionHandler: ^(policy_info_list_v2 output, NSError* error) {
+              completionHandler: ^(policy_info_list output, NSError* error) {
     if (output) {
         NSLog(@"%@", output);
     }
@@ -2897,7 +2866,7 @@
 
             try {
                 // Query for A1 policy instances
-                policy_info_list_v2 result = apiInstance.getPolicyInstances(policytypeId, ricId, serviceId, typeName);
+                policy_info_list result = apiInstance.getPolicyInstances(policytypeId, ricId, serviceId, typeName);
                 Debug.WriteLine(result);
             } catch (Exception e) {
                 Debug.Print("Exception when calling A1PolicyManagementApi.getPolicyInstances: " + e.Message );
@@ -3119,22 +3088,18 @@
                                   <div id="responses-A1PolicyManagement-getPolicyInstances-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Policies",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/policy_info_list_v2"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -3185,22 +3150,18 @@
                                   <div id="responses-A1PolicyManagement-getPolicyInstances-schema-404" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Near-RT RIC, policy type or service not found",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/error_information"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -3279,7 +3240,7 @@
         String policyId = policyId_example; // String | 
 
         try {
-            policy_status_info_v2 result = apiInstance.getPolicyStatus(policyId);
+            policy_status_info result = apiInstance.getPolicyStatus(policyId);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling A1PolicyManagementApi#getPolicyStatus");
@@ -3299,7 +3260,7 @@
         String policyId = policyId_example; // String | 
 
         try {
-            policy_status_info_v2 result = apiInstance.getPolicyStatus(policyId);
+            policy_status_info result = apiInstance.getPolicyStatus(policyId);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling A1PolicyManagementApi#getPolicyStatus");
@@ -3321,7 +3282,7 @@
 
 // Returns a policy status
 [apiInstance getPolicyStatusWith:policyId
-              completionHandler: ^(policy_status_info_v2 output, NSError* error) {
+              completionHandler: ^(policy_status_info output, NSError* error) {
     if (output) {
         NSLog(@"%@", output);
     }
@@ -3373,7 +3334,7 @@
 
             try {
                 // Returns a policy status
-                policy_status_info_v2 result = apiInstance.getPolicyStatus(policyId);
+                policy_status_info result = apiInstance.getPolicyStatus(policyId);
                 Debug.WriteLine(result);
             } catch (Exception e) {
                 Debug.Print("Exception when calling A1PolicyManagementApi.getPolicyStatus: " + e.Message );
@@ -3523,22 +3484,18 @@
                                   <div id="responses-A1PolicyManagement-getPolicyStatus-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Policy status",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/policy_status_info_v2"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -3589,22 +3546,18 @@
                                   <div id="responses-A1PolicyManagement-getPolicyStatus-schema-404" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Policy is not found",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/error_information"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -3628,10 +3581,10 @@
                         </article>
                       </div>
                       <hr>
-                    <div id="api-A1PolicyManagement-getPolicyType">
-                      <article id="api-A1PolicyManagement-getPolicyType-0" data-group="User" data-name="getPolicyType" data-version="0">
+                    <div id="api-A1PolicyManagement-getPolicyTypeDefinition">
+                      <article id="api-A1PolicyManagement-getPolicyTypeDefinition-0" data-group="User" data-name="getPolicyTypeDefinition" data-version="0">
                         <div class="pull-left">
-                          <h1>getPolicyType</h1>
+                          <h1>getPolicyTypeDefinition</h1>
                           <p>Returns a policy type definition</p>
                         </div>
                         <div class="pull-right"></div>
@@ -3645,28 +3598,28 @@
                           <h3>Usage and SDK Samples</h3>
                         </p>
                         <ul class="nav nav-tabs nav-tabs-examples">
-                          <li class="active"><a href="#examples-A1PolicyManagement-getPolicyType-0-curl">Curl</a></li>
-                          <li class=""><a href="#examples-A1PolicyManagement-getPolicyType-0-java">Java</a></li>
-                          <li class=""><a href="#examples-A1PolicyManagement-getPolicyType-0-android">Android</a></li>
-                          <!--<li class=""><a href="#examples-A1PolicyManagement-getPolicyType-0-groovy">Groovy</a></li>-->
-                          <li class=""><a href="#examples-A1PolicyManagement-getPolicyType-0-objc">Obj-C</a></li>
-                          <li class=""><a href="#examples-A1PolicyManagement-getPolicyType-0-javascript">JavaScript</a></li>
-                          <!--<li class=""><a href="#examples-A1PolicyManagement-getPolicyType-0-angular">Angular</a></li>-->
-                          <li class=""><a href="#examples-A1PolicyManagement-getPolicyType-0-csharp">C#</a></li>
-                          <li class=""><a href="#examples-A1PolicyManagement-getPolicyType-0-php">PHP</a></li>
-                          <li class=""><a href="#examples-A1PolicyManagement-getPolicyType-0-perl">Perl</a></li>
-                          <li class=""><a href="#examples-A1PolicyManagement-getPolicyType-0-python">Python</a></li>
-                          <li class=""><a href="#examples-A1PolicyManagement-getPolicyType-0-rust">Rust</a></li>
+                          <li class="active"><a href="#examples-A1PolicyManagement-getPolicyTypeDefinition-0-curl">Curl</a></li>
+                          <li class=""><a href="#examples-A1PolicyManagement-getPolicyTypeDefinition-0-java">Java</a></li>
+                          <li class=""><a href="#examples-A1PolicyManagement-getPolicyTypeDefinition-0-android">Android</a></li>
+                          <!--<li class=""><a href="#examples-A1PolicyManagement-getPolicyTypeDefinition-0-groovy">Groovy</a></li>-->
+                          <li class=""><a href="#examples-A1PolicyManagement-getPolicyTypeDefinition-0-objc">Obj-C</a></li>
+                          <li class=""><a href="#examples-A1PolicyManagement-getPolicyTypeDefinition-0-javascript">JavaScript</a></li>
+                          <!--<li class=""><a href="#examples-A1PolicyManagement-getPolicyTypeDefinition-0-angular">Angular</a></li>-->
+                          <li class=""><a href="#examples-A1PolicyManagement-getPolicyTypeDefinition-0-csharp">C#</a></li>
+                          <li class=""><a href="#examples-A1PolicyManagement-getPolicyTypeDefinition-0-php">PHP</a></li>
+                          <li class=""><a href="#examples-A1PolicyManagement-getPolicyTypeDefinition-0-perl">Perl</a></li>
+                          <li class=""><a href="#examples-A1PolicyManagement-getPolicyTypeDefinition-0-python">Python</a></li>
+                          <li class=""><a href="#examples-A1PolicyManagement-getPolicyTypeDefinition-0-rust">Rust</a></li>
                         </ul>
 
                         <div class="tab-content">
-                          <div class="tab-pane active" id="examples-A1PolicyManagement-getPolicyType-0-curl">
+                          <div class="tab-pane active" id="examples-A1PolicyManagement-getPolicyTypeDefinition-0-curl">
                             <pre class="prettyprint"><code class="language-bsh">curl -X GET \
- -H "Accept: */*" \
+ -H "Accept: application/json" \
  "http://localhost/a1-policy/v2/policy-types/{policytype_id}"
 </code></pre>
                           </div>
-                          <div class="tab-pane" id="examples-A1PolicyManagement-getPolicyType-0-java">
+                          <div class="tab-pane" id="examples-A1PolicyManagement-getPolicyTypeDefinition-0-java">
                             <pre class="prettyprint"><code class="language-java">import org.openapitools.client.*;
 import org.openapitools.client.auth.*;
 import org.openapitools.client.model.*;
@@ -3683,10 +3636,10 @@
         String policytypeId = policytypeId_example; // String | 
 
         try {
-            policytype_v2 result = apiInstance.getPolicyType(policytypeId);
+            policy_type_definition result = apiInstance.getPolicyTypeDefinition(policytypeId);
             System.out.println(result);
         } catch (ApiException e) {
-            System.err.println("Exception when calling A1PolicyManagementApi#getPolicyType");
+            System.err.println("Exception when calling A1PolicyManagementApi#getPolicyTypeDefinition");
             e.printStackTrace();
         }
     }
@@ -3694,7 +3647,7 @@
 </code></pre>
                           </div>
 
-                          <div class="tab-pane" id="examples-A1PolicyManagement-getPolicyType-0-android">
+                          <div class="tab-pane" id="examples-A1PolicyManagement-getPolicyTypeDefinition-0-android">
                             <pre class="prettyprint"><code class="language-java">import org.openapitools.client.api.A1PolicyManagementApi;
 
 public class A1PolicyManagementApiExample {
@@ -3703,20 +3656,20 @@
         String policytypeId = policytypeId_example; // String | 
 
         try {
-            policytype_v2 result = apiInstance.getPolicyType(policytypeId);
+            policy_type_definition result = apiInstance.getPolicyTypeDefinition(policytypeId);
             System.out.println(result);
         } catch (ApiException e) {
-            System.err.println("Exception when calling A1PolicyManagementApi#getPolicyType");
+            System.err.println("Exception when calling A1PolicyManagementApi#getPolicyTypeDefinition");
             e.printStackTrace();
         }
     }
 }</code></pre>
                           </div>
   <!--
-  <div class="tab-pane" id="examples-A1PolicyManagement-getPolicyType-0-groovy">
+  <div class="tab-pane" id="examples-A1PolicyManagement-getPolicyTypeDefinition-0-groovy">
   <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre>
   </div> -->
-                            <div class="tab-pane" id="examples-A1PolicyManagement-getPolicyType-0-objc">
+                            <div class="tab-pane" id="examples-A1PolicyManagement-getPolicyTypeDefinition-0-objc">
                               <pre class="prettyprint"><code class="language-cpp">
 
 // Create an instance of the API class
@@ -3724,8 +3677,8 @@
 String *policytypeId = policytypeId_example; //  (default to null)
 
 // Returns a policy type definition
-[apiInstance getPolicyTypeWith:policytypeId
-              completionHandler: ^(policytype_v2 output, NSError* error) {
+[apiInstance getPolicyTypeDefinitionWith:policytypeId
+              completionHandler: ^(policy_type_definition output, NSError* error) {
     if (output) {
         NSLog(@"%@", output);
     }
@@ -3736,7 +3689,7 @@
 </code></pre>
                             </div>
 
-                            <div class="tab-pane" id="examples-A1PolicyManagement-getPolicyType-0-javascript">
+                            <div class="tab-pane" id="examples-A1PolicyManagement-getPolicyTypeDefinition-0-javascript">
                               <pre class="prettyprint"><code class="language-js">var A1PolicyManagementService = require('a1_policy_management_service');
 
 // Create an instance of the API class
@@ -3750,14 +3703,14 @@
     console.log('API called successfully. Returned data: ' + data);
   }
 };
-api.getPolicyType(policytypeId, callback);
+api.getPolicyTypeDefinition(policytypeId, callback);
 </code></pre>
                             </div>
 
-                            <!--<div class="tab-pane" id="examples-A1PolicyManagement-getPolicyType-0-angular">
+                            <!--<div class="tab-pane" id="examples-A1PolicyManagement-getPolicyTypeDefinition-0-angular">
               <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre>
             </div>-->
-                            <div class="tab-pane" id="examples-A1PolicyManagement-getPolicyType-0-csharp">
+                            <div class="tab-pane" id="examples-A1PolicyManagement-getPolicyTypeDefinition-0-csharp">
                               <pre class="prettyprint"><code class="language-cs">using System;
 using System.Diagnostics;
 using Org.OpenAPITools.Api;
@@ -3766,7 +3719,7 @@
 
 namespace Example
 {
-    public class getPolicyTypeExample
+    public class getPolicyTypeDefinitionExample
     {
         public void main()
         {
@@ -3777,10 +3730,10 @@
 
             try {
                 // Returns a policy type definition
-                policytype_v2 result = apiInstance.getPolicyType(policytypeId);
+                policy_type_definition result = apiInstance.getPolicyTypeDefinition(policytypeId);
                 Debug.WriteLine(result);
             } catch (Exception e) {
-                Debug.Print("Exception when calling A1PolicyManagementApi.getPolicyType: " + e.Message );
+                Debug.Print("Exception when calling A1PolicyManagementApi.getPolicyTypeDefinition: " + e.Message );
             }
         }
     }
@@ -3788,7 +3741,7 @@
 </code></pre>
                             </div>
 
-                            <div class="tab-pane" id="examples-A1PolicyManagement-getPolicyType-0-php">
+                            <div class="tab-pane" id="examples-A1PolicyManagement-getPolicyTypeDefinition-0-php">
                               <pre class="prettyprint"><code class="language-php"><&#63;php
 require_once(__DIR__ . '/vendor/autoload.php');
 
@@ -3797,15 +3750,15 @@
 $policytypeId = policytypeId_example; // String | 
 
 try {
-    $result = $api_instance->getPolicyType($policytypeId);
+    $result = $api_instance->getPolicyTypeDefinition($policytypeId);
     print_r($result);
 } catch (Exception $e) {
-    echo 'Exception when calling A1PolicyManagementApi->getPolicyType: ', $e->getMessage(), PHP_EOL;
+    echo 'Exception when calling A1PolicyManagementApi->getPolicyTypeDefinition: ', $e->getMessage(), PHP_EOL;
 }
 ?></code></pre>
                             </div>
 
-                            <div class="tab-pane" id="examples-A1PolicyManagement-getPolicyType-0-perl">
+                            <div class="tab-pane" id="examples-A1PolicyManagement-getPolicyTypeDefinition-0-perl">
                               <pre class="prettyprint"><code class="language-perl">use Data::Dumper;
 use WWW::OPenAPIClient::Configuration;
 use WWW::OPenAPIClient::A1PolicyManagementApi;
@@ -3815,15 +3768,15 @@
 my $policytypeId = policytypeId_example; # String | 
 
 eval {
-    my $result = $api_instance->getPolicyType(policytypeId => $policytypeId);
+    my $result = $api_instance->getPolicyTypeDefinition(policytypeId => $policytypeId);
     print Dumper($result);
 };
 if ($@) {
-    warn "Exception when calling A1PolicyManagementApi->getPolicyType: $@\n";
+    warn "Exception when calling A1PolicyManagementApi->getPolicyTypeDefinition: $@\n";
 }</code></pre>
                             </div>
 
-                            <div class="tab-pane" id="examples-A1PolicyManagement-getPolicyType-0-python">
+                            <div class="tab-pane" id="examples-A1PolicyManagement-getPolicyTypeDefinition-0-python">
                               <pre class="prettyprint"><code class="language-python">from __future__ import print_statement
 import time
 import openapi_client
@@ -3836,20 +3789,20 @@
 
 try:
     # Returns a policy type definition
-    api_response = api_instance.get_policy_type(policytypeId)
+    api_response = api_instance.get_policy_type_definition(policytypeId)
     pprint(api_response)
 except ApiException as e:
-    print("Exception when calling A1PolicyManagementApi->getPolicyType: %s\n" % e)</code></pre>
+    print("Exception when calling A1PolicyManagementApi->getPolicyTypeDefinition: %s\n" % e)</code></pre>
                             </div>
 
-                            <div class="tab-pane" id="examples-A1PolicyManagement-getPolicyType-0-rust">
+                            <div class="tab-pane" id="examples-A1PolicyManagement-getPolicyTypeDefinition-0-rust">
                               <pre class="prettyprint"><code class="language-rust">extern crate A1PolicyManagementApi;
 
 pub fn main() {
     let policytypeId = policytypeId_example; // String
 
     let mut context = A1PolicyManagementApi::Context::default();
-    let result = client.getPolicyType(policytypeId, &context).wait();
+    let result = client.getPolicyTypeDefinition(policytypeId, &context).wait();
 
     println!("{:?}", result);
 }
@@ -3874,7 +3827,7 @@
 <td>
 
 
-    <div id="d2e199_getPolicyType_policytypeId">
+    <div id="d2e199_getPolicyTypeDefinition_policytypeId">
         <div class="json-schema-view">
             <div class="primitive">
                 <span class="type">
@@ -3897,23 +3850,23 @@
 
 
                           <h2>Responses</h2>
-                            <h3 id="examples-A1PolicyManagement-getPolicyType-title-200"></h3>
-                            <p id="examples-A1PolicyManagement-getPolicyType-description-200" class="marked"></p>
+                            <h3 id="examples-A1PolicyManagement-getPolicyTypeDefinition-title-200"></h3>
+                            <p id="examples-A1PolicyManagement-getPolicyTypeDefinition-description-200" class="marked"></p>
                             <script>
-                              var responseA1PolicyManagement200_description = `Policy type`;
+                              var responseA1PolicyManagement200_description = `schema of the given policy type`;
                               var responseA1PolicyManagement200_description_break = responseA1PolicyManagement200_description.indexOf('\n');
                               if (responseA1PolicyManagement200_description_break == -1) {
-                                $("#examples-A1PolicyManagement-getPolicyType-title-200").text("Status: 200 - " + responseA1PolicyManagement200_description);
+                                $("#examples-A1PolicyManagement-getPolicyTypeDefinition-title-200").text("Status: 200 - " + responseA1PolicyManagement200_description);
                               } else {
-                                $("#examples-A1PolicyManagement-getPolicyType-title-200").text("Status: 200 - " + responseA1PolicyManagement200_description.substring(0, responseA1PolicyManagement200_description_break));
-                                $("#examples-A1PolicyManagement-getPolicyType-description-200").html(responseA1PolicyManagement200_description.substring(responseA1PolicyManagement200_description_break));
+                                $("#examples-A1PolicyManagement-getPolicyTypeDefinition-title-200").text("Status: 200 - " + responseA1PolicyManagement200_description.substring(0, responseA1PolicyManagement200_description_break));
+                                $("#examples-A1PolicyManagement-getPolicyTypeDefinition-description-200").html(responseA1PolicyManagement200_description.substring(responseA1PolicyManagement200_description_break));
                               }
                             </script>
 
 
-                            <ul id="responses-detail-A1PolicyManagement-getPolicyType-200" class="nav nav-tabs nav-tabs-examples" >
+                            <ul id="responses-detail-A1PolicyManagement-getPolicyTypeDefinition-200" class="nav nav-tabs nav-tabs-examples" >
                                 <li class="active">
-                                  <a data-toggle="tab" href="#responses-A1PolicyManagement-getPolicyType-200-schema">Schema</a>
+                                  <a data-toggle="tab" href="#responses-A1PolicyManagement-getPolicyTypeDefinition-200-schema">Schema</a>
                                 </li>
 
 
@@ -3922,27 +3875,23 @@
                             </ul>
 
 
-                            <div class="tab-content" id="responses-A1PolicyManagement-getPolicyType-200-wrapper" style='margin-bottom: 10px;'>
-                                <div class="tab-pane active" id="responses-A1PolicyManagement-getPolicyType-200-schema">
-                                  <div id="responses-A1PolicyManagement-getPolicyType-schema-200" class="exampleStyle">
+                            <div class="tab-content" id="responses-A1PolicyManagement-getPolicyTypeDefinition-200-wrapper" style='margin-bottom: 10px;'>
+                                <div class="tab-pane active" id="responses-A1PolicyManagement-getPolicyTypeDefinition-200-schema">
+                                  <div id="responses-A1PolicyManagement-getPolicyTypeDefinition-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Policy type",
-  "content" : {
-    "*/*" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/policytype_v2"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -3953,33 +3902,33 @@
                                         }
 
                                         var view = new JSONSchemaView(schema, 3);
-                                        $('#responses-A1PolicyManagement-getPolicyType-200-schema-data').val(JSON.stringify(schema));
-                                        var result = $('#responses-A1PolicyManagement-getPolicyType-schema-200');
+                                        $('#responses-A1PolicyManagement-getPolicyTypeDefinition-200-schema-data').val(JSON.stringify(schema));
+                                        var result = $('#responses-A1PolicyManagement-getPolicyTypeDefinition-schema-200');
                                         result.empty();
                                         result.append(view.render());
                                       });
                                     </script>
                                   </div>
-                                  <input id='responses-A1PolicyManagement-getPolicyType-200-schema-data' type='hidden' value=''></input>
+                                  <input id='responses-A1PolicyManagement-getPolicyTypeDefinition-200-schema-data' type='hidden' value=''></input>
                                 </div>
                             </div>
-                            <h3 id="examples-A1PolicyManagement-getPolicyType-title-404"></h3>
-                            <p id="examples-A1PolicyManagement-getPolicyType-description-404" class="marked"></p>
+                            <h3 id="examples-A1PolicyManagement-getPolicyTypeDefinition-title-404"></h3>
+                            <p id="examples-A1PolicyManagement-getPolicyTypeDefinition-description-404" class="marked"></p>
                             <script>
                               var responseA1PolicyManagement404_description = `Policy type is not found`;
                               var responseA1PolicyManagement404_description_break = responseA1PolicyManagement404_description.indexOf('\n');
                               if (responseA1PolicyManagement404_description_break == -1) {
-                                $("#examples-A1PolicyManagement-getPolicyType-title-404").text("Status: 404 - " + responseA1PolicyManagement404_description);
+                                $("#examples-A1PolicyManagement-getPolicyTypeDefinition-title-404").text("Status: 404 - " + responseA1PolicyManagement404_description);
                               } else {
-                                $("#examples-A1PolicyManagement-getPolicyType-title-404").text("Status: 404 - " + responseA1PolicyManagement404_description.substring(0, responseA1PolicyManagement404_description_break));
-                                $("#examples-A1PolicyManagement-getPolicyType-description-404").html(responseA1PolicyManagement404_description.substring(responseA1PolicyManagement404_description_break));
+                                $("#examples-A1PolicyManagement-getPolicyTypeDefinition-title-404").text("Status: 404 - " + responseA1PolicyManagement404_description.substring(0, responseA1PolicyManagement404_description_break));
+                                $("#examples-A1PolicyManagement-getPolicyTypeDefinition-description-404").html(responseA1PolicyManagement404_description.substring(responseA1PolicyManagement404_description_break));
                               }
                             </script>
 
 
-                            <ul id="responses-detail-A1PolicyManagement-getPolicyType-404" class="nav nav-tabs nav-tabs-examples" >
+                            <ul id="responses-detail-A1PolicyManagement-getPolicyTypeDefinition-404" class="nav nav-tabs nav-tabs-examples" >
                                 <li class="active">
-                                  <a data-toggle="tab" href="#responses-A1PolicyManagement-getPolicyType-404-schema">Schema</a>
+                                  <a data-toggle="tab" href="#responses-A1PolicyManagement-getPolicyTypeDefinition-404-schema">Schema</a>
                                 </li>
 
 
@@ -3988,27 +3937,23 @@
                             </ul>
 
 
-                            <div class="tab-content" id="responses-A1PolicyManagement-getPolicyType-404-wrapper" style='margin-bottom: 10px;'>
-                                <div class="tab-pane active" id="responses-A1PolicyManagement-getPolicyType-404-schema">
-                                  <div id="responses-A1PolicyManagement-getPolicyType-schema-404" class="exampleStyle">
+                            <div class="tab-content" id="responses-A1PolicyManagement-getPolicyTypeDefinition-404-wrapper" style='margin-bottom: 10px;'>
+                                <div class="tab-pane active" id="responses-A1PolicyManagement-getPolicyTypeDefinition-404-schema">
+                                  <div id="responses-A1PolicyManagement-getPolicyTypeDefinition-schema-404" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Policy type is not found",
-  "content" : {
-    "*/*" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/error_information"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -4019,14 +3964,14 @@
                                         }
 
                                         var view = new JSONSchemaView(schema, 3);
-                                        $('#responses-A1PolicyManagement-getPolicyType-404-schema-data').val(JSON.stringify(schema));
-                                        var result = $('#responses-A1PolicyManagement-getPolicyType-schema-404');
+                                        $('#responses-A1PolicyManagement-getPolicyTypeDefinition-404-schema-data').val(JSON.stringify(schema));
+                                        var result = $('#responses-A1PolicyManagement-getPolicyTypeDefinition-schema-404');
                                         result.empty();
                                         result.append(view.render());
                                       });
                                     </script>
                                   </div>
-                                  <input id='responses-A1PolicyManagement-getPolicyType-404-schema-data' type='hidden' value=''></input>
+                                  <input id='responses-A1PolicyManagement-getPolicyTypeDefinition-404-schema-data' type='hidden' value=''></input>
                                 </div>
                             </div>
                         </article>
@@ -4089,7 +4034,7 @@
         String compatibleWithVersion = compatibleWithVersion_example; // String | Select types that are compatible with the given version. This parameter is only applicable in conjunction with type_name. As an example version 1.9.1 is compatible with 1.0.0 but not the other way around. Matching types will be returned sorted in ascending order.
 
         try {
-            policytype_id_list_v2 result = apiInstance.getPolicyTypes(ricId, typeName, compatibleWithVersion);
+            policy_type_id_list result = apiInstance.getPolicyTypes(ricId, typeName, compatibleWithVersion);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling A1PolicyManagementApi#getPolicyTypes");
@@ -4111,7 +4056,7 @@
         String compatibleWithVersion = compatibleWithVersion_example; // String | Select types that are compatible with the given version. This parameter is only applicable in conjunction with type_name. As an example version 1.9.1 is compatible with 1.0.0 but not the other way around. Matching types will be returned sorted in ascending order.
 
         try {
-            policytype_id_list_v2 result = apiInstance.getPolicyTypes(ricId, typeName, compatibleWithVersion);
+            policy_type_id_list result = apiInstance.getPolicyTypes(ricId, typeName, compatibleWithVersion);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling A1PolicyManagementApi#getPolicyTypes");
@@ -4137,7 +4082,7 @@
 [apiInstance getPolicyTypesWith:ricId
     typeName:typeName
     compatibleWithVersion:compatibleWithVersion
-              completionHandler: ^(policytype_id_list_v2 output, NSError* error) {
+              completionHandler: ^(policy_type_id_list output, NSError* error) {
     if (output) {
         NSLog(@"%@", output);
     }
@@ -4195,7 +4140,7 @@
 
             try {
                 // Query policy type identities
-                policytype_id_list_v2 result = apiInstance.getPolicyTypes(ricId, typeName, compatibleWithVersion);
+                policy_type_id_list result = apiInstance.getPolicyTypes(ricId, typeName, compatibleWithVersion);
                 Debug.WriteLine(result);
             } catch (Exception e) {
                 Debug.Print("Exception when calling A1PolicyManagementApi.getPolicyTypes: " + e.Message );
@@ -4393,22 +4338,18 @@
                                   <div id="responses-A1PolicyManagement-getPolicyTypes-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Policy type IDs",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/policytype_id_list_v2"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -4459,22 +4400,18 @@
                                   <div id="responses-A1PolicyManagement-getPolicyTypes-schema-404" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Near-RT RIC is not found",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/error_information"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -4552,10 +4489,10 @@
 
         // Create an instance of the API class
         A1PolicyManagementApi apiInstance = new A1PolicyManagementApi();
-        PolicyInfoV2 policyInfoV2 = ; // PolicyInfoV2 | 
+        PolicyInfo policyInfo = ; // PolicyInfo | 
 
         try {
-            Object result = apiInstance.putPolicy(policyInfoV2);
+            Object result = apiInstance.putPolicy(policyInfo);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling A1PolicyManagementApi#putPolicy");
@@ -4572,10 +4509,10 @@
 public class A1PolicyManagementApiExample {
     public static void main(String[] args) {
         A1PolicyManagementApi apiInstance = new A1PolicyManagementApi();
-        PolicyInfoV2 policyInfoV2 = ; // PolicyInfoV2 | 
+        PolicyInfo policyInfo = ; // PolicyInfo | 
 
         try {
-            Object result = apiInstance.putPolicy(policyInfoV2);
+            Object result = apiInstance.putPolicy(policyInfo);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling A1PolicyManagementApi#putPolicy");
@@ -4593,10 +4530,10 @@
 
 // Create an instance of the API class
 A1PolicyManagementApi *apiInstance = [[A1PolicyManagementApi alloc] init];
-PolicyInfoV2 *policyInfoV2 = ; // 
+PolicyInfo *policyInfo = ; // 
 
 // Create or update a policy
-[apiInstance putPolicyWith:policyInfoV2
+[apiInstance putPolicyWith:policyInfo
               completionHandler: ^(Object output, NSError* error) {
     if (output) {
         NSLog(@"%@", output);
@@ -4613,7 +4550,7 @@
 
 // Create an instance of the API class
 var api = new A1PolicyManagementService.A1PolicyManagementApi()
-var policyInfoV2 = ; // {PolicyInfoV2} 
+var policyInfo = ; // {PolicyInfo} 
 
 var callback = function(error, data, response) {
   if (error) {
@@ -4622,7 +4559,7 @@
     console.log('API called successfully. Returned data: ' + data);
   }
 };
-api.putPolicy(policyInfoV2, callback);
+api.putPolicy(policyInfo, callback);
 </code></pre>
                             </div>
 
@@ -4645,11 +4582,11 @@
 
             // Create an instance of the API class
             var apiInstance = new A1PolicyManagementApi();
-            var policyInfoV2 = new PolicyInfoV2(); // PolicyInfoV2 | 
+            var policyInfo = new PolicyInfo(); // PolicyInfo | 
 
             try {
                 // Create or update a policy
-                Object result = apiInstance.putPolicy(policyInfoV2);
+                Object result = apiInstance.putPolicy(policyInfo);
                 Debug.WriteLine(result);
             } catch (Exception e) {
                 Debug.Print("Exception when calling A1PolicyManagementApi.putPolicy: " + e.Message );
@@ -4666,10 +4603,10 @@
 
 // Create an instance of the API class
 $api_instance = new OpenAPITools\Client\Api\A1PolicyManagementApi();
-$policyInfoV2 = ; // PolicyInfoV2 | 
+$policyInfo = ; // PolicyInfo | 
 
 try {
-    $result = $api_instance->putPolicy($policyInfoV2);
+    $result = $api_instance->putPolicy($policyInfo);
     print_r($result);
 } catch (Exception $e) {
     echo 'Exception when calling A1PolicyManagementApi->putPolicy: ', $e->getMessage(), PHP_EOL;
@@ -4684,10 +4621,10 @@
 
 # Create an instance of the API class
 my $api_instance = WWW::OPenAPIClient::A1PolicyManagementApi->new();
-my $policyInfoV2 = WWW::OPenAPIClient::Object::PolicyInfoV2->new(); # PolicyInfoV2 | 
+my $policyInfo = WWW::OPenAPIClient::Object::PolicyInfo->new(); # PolicyInfo | 
 
 eval {
-    my $result = $api_instance->putPolicy(policyInfoV2 => $policyInfoV2);
+    my $result = $api_instance->putPolicy(policyInfo => $policyInfo);
     print Dumper($result);
 };
 if ($@) {
@@ -4704,11 +4641,11 @@
 
 # Create an instance of the API class
 api_instance = openapi_client.A1PolicyManagementApi()
-policyInfoV2 =  # PolicyInfoV2 | 
+policyInfo =  # PolicyInfo | 
 
 try:
     # Create or update a policy
-    api_response = api_instance.put_policy(policyInfoV2)
+    api_response = api_instance.put_policy(policyInfo)
     pprint(api_response)
 except ApiException as e:
     print("Exception when calling A1PolicyManagementApi->putPolicy: %s\n" % e)</code></pre>
@@ -4718,10 +4655,10 @@
                               <pre class="prettyprint"><code class="language-rust">extern crate A1PolicyManagementApi;
 
 pub fn main() {
-    let policyInfoV2 = ; // PolicyInfoV2
+    let policyInfo = ; // PolicyInfo
 
     let mut context = A1PolicyManagementApi::Context::default();
-    let result = client.putPolicy(policyInfoV2, &context).wait();
+    let result = client.putPolicy(policyInfo, &context).wait();
 
     println!("{:?}", result);
 }
@@ -4744,7 +4681,7 @@
                                 <th width="150px">Name</th>
                                 <th>Description</th>
                               </tr>
-                                <tr><td style="width:150px;">policyInfoV2 <span style="color:red;">*</span></td>
+                                <tr><td style="width:150px;">policyInfo <span style="color:red;">*</span></td>
 <td>
 <p class="marked"></p>
 <script>
@@ -4753,7 +4690,7 @@
   "content" : {
     "application/json" : {
       "schema" : {
-        "$ref" : "#/components/schemas/policy_info_v2"
+        "$ref" : "#/components/schemas/policy_info"
       }
     }
   },
@@ -4774,12 +4711,12 @@
   }
 
   var view = new JSONSchemaView(schema,2,{isBodyParam: true});
-  var result = $('#d2e199_putPolicy_policyInfoV2');
+  var result = $('#d2e199_putPolicy_policyInfo');
   result.empty();
   result.append(view.render());
 });
 </script>
-<div id="d2e199_putPolicy_policyInfoV2"></div>
+<div id="d2e199_putPolicy_policyInfo"></div>
 </td>
 </tr>
 
@@ -4818,22 +4755,18 @@
                                   <div id="responses-A1PolicyManagement-putPolicy-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Policy updated",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/void"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -4884,22 +4817,18 @@
                                   <div id="responses-A1PolicyManagement-putPolicy-schema-201" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Policy created",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/void"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -4950,22 +4879,18 @@
                                   <div id="responses-A1PolicyManagement-putPolicy-schema-423" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Near-RT RIC is not operational",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/error_information"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -5016,22 +4941,18 @@
                                   <div id="responses-A1PolicyManagement-putPolicy-schema-404" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Near-RT RIC or policy type is not found",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/error_information"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -5320,32 +5241,18 @@
                                   <div id="responses-Actuator-health-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "OK",
-  "content" : {
-    "application/vnd.spring-boot.actuator.v3+json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    },
-    "application/json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    },
-    "application/vnd.spring-boot.actuator.v2+json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -5631,32 +5538,18 @@
                                   <div id="responses-Actuator-healthPath-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "OK",
-  "content" : {
-    "application/vnd.spring-boot.actuator.v3+json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    },
-    "application/json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    },
-    "application/vnd.spring-boot.actuator.v2+json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -5942,22 +5835,18 @@
                                   <div id="responses-Actuator-heapdump-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "OK",
-  "content" : {
-    "application/octet-stream" : {
-      "schema" : {
-        "type" : "object"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -6243,32 +6132,18 @@
                                   <div id="responses-Actuator-info-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "OK",
-  "content" : {
-    "application/vnd.spring-boot.actuator.v3+json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    },
-    "application/json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    },
-    "application/vnd.spring-boot.actuator.v2+json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -6554,50 +6429,18 @@
                                   <div id="responses-Actuator-links-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "OK",
-  "content" : {
-    "application/vnd.spring-boot.actuator.v3+json" : {
-      "schema" : {
-        "type" : "object",
-        "additionalProperties" : {
-          "type" : "object",
-          "additionalProperties" : {
-            "$ref" : "#/components/schemas/Link"
-          }
-        }
-      }
-    },
-    "application/json" : {
-      "schema" : {
-        "type" : "object",
-        "additionalProperties" : {
-          "type" : "object",
-          "additionalProperties" : {
-            "$ref" : "#/components/schemas/Link"
-          }
-        }
-      }
-    },
-    "application/vnd.spring-boot.actuator.v2+json" : {
-      "schema" : {
-        "type" : "object",
-        "additionalProperties" : {
-          "type" : "object",
-          "additionalProperties" : {
-            "$ref" : "#/components/schemas/Link"
-          }
-        }
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -6883,22 +6726,18 @@
                                   <div id="responses-Actuator-logfile-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "OK",
-  "content" : {
-    "text/plain;charset=UTF-8" : {
-      "schema" : {
-        "type" : "object"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -7184,32 +7023,18 @@
                                   <div id="responses-Actuator-loggers-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "OK",
-  "content" : {
-    "application/vnd.spring-boot.actuator.v3+json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    },
-    "application/json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    },
-    "application/vnd.spring-boot.actuator.v2+json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -7532,32 +7357,18 @@
                                   <div id="responses-Actuator-loggersName-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "OK",
-  "content" : {
-    "application/vnd.spring-boot.actuator.v3+json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    },
-    "application/json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    },
-    "application/vnd.spring-boot.actuator.v2+json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -7940,22 +7751,18 @@
                                   <div id="responses-Actuator-loggersName2-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "OK",
-  "content" : {
-    "*/*" : {
-      "schema" : {
-        "type" : "object"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -8241,32 +8048,18 @@
                                   <div id="responses-Actuator-metrics-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "OK",
-  "content" : {
-    "application/vnd.spring-boot.actuator.v3+json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    },
-    "application/json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    },
-    "application/vnd.spring-boot.actuator.v2+json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -8589,32 +8382,18 @@
                                   <div id="responses-Actuator-metricsRequiredMetricName-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "OK",
-  "content" : {
-    "application/vnd.spring-boot.actuator.v3+json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    },
-    "application/json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    },
-    "application/vnd.spring-boot.actuator.v2+json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -8900,32 +8679,18 @@
                                   <div id="responses-Actuator-shutdown-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "OK",
-  "content" : {
-    "application/vnd.spring-boot.actuator.v3+json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    },
-    "application/json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    },
-    "application/vnd.spring-boot.actuator.v2+json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -9211,37 +8976,18 @@
                                   <div id="responses-Actuator-threaddump-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "OK",
-  "content" : {
-    "text/plain;charset=UTF-8" : {
-      "schema" : {
-        "type" : "object"
-      }
-    },
-    "application/vnd.spring-boot.actuator.v3+json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    },
-    "application/json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    },
-    "application/vnd.spring-boot.actuator.v2+json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -9588,22 +9334,18 @@
                                   <div id="responses-AuthorizationAPI-performAccessControl-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "OK",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/authorization_result"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -9628,6 +9370,847 @@
                       </div>
                       <hr>
                   </section>
+                <section id="api-Configuration">
+                  <h1>Configuration</h1>
+                    <div id="api-Configuration-getConfiguration">
+                      <article id="api-Configuration-getConfiguration-0" data-group="User" data-name="getConfiguration" data-version="0">
+                        <div class="pull-left">
+                          <h1>getConfiguration</h1>
+                          <p>Returns the contents of the application configuration file</p>
+                        </div>
+                        <div class="pull-right"></div>
+                        <div class="clearfix"></div>
+                        <p></p>
+                        <p class="marked"></p>
+                        <p></p>
+                        <br />
+                        <pre class="prettyprint language-html prettyprinted" data-type="get"><code><span class="pln">/a1-policy/v2/configuration</span></code></pre>
+                        <p>
+                          <h3>Usage and SDK Samples</h3>
+                        </p>
+                        <ul class="nav nav-tabs nav-tabs-examples">
+                          <li class="active"><a href="#examples-Configuration-getConfiguration-0-curl">Curl</a></li>
+                          <li class=""><a href="#examples-Configuration-getConfiguration-0-java">Java</a></li>
+                          <li class=""><a href="#examples-Configuration-getConfiguration-0-android">Android</a></li>
+                          <!--<li class=""><a href="#examples-Configuration-getConfiguration-0-groovy">Groovy</a></li>-->
+                          <li class=""><a href="#examples-Configuration-getConfiguration-0-objc">Obj-C</a></li>
+                          <li class=""><a href="#examples-Configuration-getConfiguration-0-javascript">JavaScript</a></li>
+                          <!--<li class=""><a href="#examples-Configuration-getConfiguration-0-angular">Angular</a></li>-->
+                          <li class=""><a href="#examples-Configuration-getConfiguration-0-csharp">C#</a></li>
+                          <li class=""><a href="#examples-Configuration-getConfiguration-0-php">PHP</a></li>
+                          <li class=""><a href="#examples-Configuration-getConfiguration-0-perl">Perl</a></li>
+                          <li class=""><a href="#examples-Configuration-getConfiguration-0-python">Python</a></li>
+                          <li class=""><a href="#examples-Configuration-getConfiguration-0-rust">Rust</a></li>
+                        </ul>
+
+                        <div class="tab-content">
+                          <div class="tab-pane active" id="examples-Configuration-getConfiguration-0-curl">
+                            <pre class="prettyprint"><code class="language-bsh">curl -X GET \
+ -H "Accept: application/json" \
+ "http://localhost/a1-policy/v2/configuration"
+</code></pre>
+                          </div>
+                          <div class="tab-pane" id="examples-Configuration-getConfiguration-0-java">
+                            <pre class="prettyprint"><code class="language-java">import org.openapitools.client.*;
+import org.openapitools.client.auth.*;
+import org.openapitools.client.model.*;
+import org.openapitools.client.api.ConfigurationApi;
+
+import java.io.File;
+import java.util.*;
+
+public class ConfigurationApiExample {
+    public static void main(String[] args) {
+
+        // Create an instance of the API class
+        ConfigurationApi apiInstance = new ConfigurationApi();
+
+        try {
+            'String' result = apiInstance.getConfiguration();
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling ConfigurationApi#getConfiguration");
+            e.printStackTrace();
+        }
+    }
+}
+</code></pre>
+                          </div>
+
+                          <div class="tab-pane" id="examples-Configuration-getConfiguration-0-android">
+                            <pre class="prettyprint"><code class="language-java">import org.openapitools.client.api.ConfigurationApi;
+
+public class ConfigurationApiExample {
+    public static void main(String[] args) {
+        ConfigurationApi apiInstance = new ConfigurationApi();
+
+        try {
+            'String' result = apiInstance.getConfiguration();
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling ConfigurationApi#getConfiguration");
+            e.printStackTrace();
+        }
+    }
+}</code></pre>
+                          </div>
+  <!--
+  <div class="tab-pane" id="examples-Configuration-getConfiguration-0-groovy">
+  <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre>
+  </div> -->
+                            <div class="tab-pane" id="examples-Configuration-getConfiguration-0-objc">
+                              <pre class="prettyprint"><code class="language-cpp">
+
+// Create an instance of the API class
+ConfigurationApi *apiInstance = [[ConfigurationApi alloc] init];
+
+// Returns the contents of the application configuration file
+[apiInstance getConfigurationWithCompletionHandler: 
+              ^('String' output, NSError* error) {
+    if (output) {
+        NSLog(@"%@", output);
+    }
+    if (error) {
+        NSLog(@"Error: %@", error);
+    }
+}];
+</code></pre>
+                            </div>
+
+                            <div class="tab-pane" id="examples-Configuration-getConfiguration-0-javascript">
+                              <pre class="prettyprint"><code class="language-js">var A1PolicyManagementService = require('a1_policy_management_service');
+
+// Create an instance of the API class
+var api = new A1PolicyManagementService.ConfigurationApi()
+var callback = function(error, data, response) {
+  if (error) {
+    console.error(error);
+  } else {
+    console.log('API called successfully. Returned data: ' + data);
+  }
+};
+api.getConfiguration(callback);
+</code></pre>
+                            </div>
+
+                            <!--<div class="tab-pane" id="examples-Configuration-getConfiguration-0-angular">
+              <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre>
+            </div>-->
+                            <div class="tab-pane" id="examples-Configuration-getConfiguration-0-csharp">
+                              <pre class="prettyprint"><code class="language-cs">using System;
+using System.Diagnostics;
+using Org.OpenAPITools.Api;
+using Org.OpenAPITools.Client;
+using Org.OpenAPITools.Model;
+
+namespace Example
+{
+    public class getConfigurationExample
+    {
+        public void main()
+        {
+
+            // Create an instance of the API class
+            var apiInstance = new ConfigurationApi();
+
+            try {
+                // Returns the contents of the application configuration file
+                'String' result = apiInstance.getConfiguration();
+                Debug.WriteLine(result);
+            } catch (Exception e) {
+                Debug.Print("Exception when calling ConfigurationApi.getConfiguration: " + e.Message );
+            }
+        }
+    }
+}
+</code></pre>
+                            </div>
+
+                            <div class="tab-pane" id="examples-Configuration-getConfiguration-0-php">
+                              <pre class="prettyprint"><code class="language-php"><&#63;php
+require_once(__DIR__ . '/vendor/autoload.php');
+
+// Create an instance of the API class
+$api_instance = new OpenAPITools\Client\Api\ConfigurationApi();
+
+try {
+    $result = $api_instance->getConfiguration();
+    print_r($result);
+} catch (Exception $e) {
+    echo 'Exception when calling ConfigurationApi->getConfiguration: ', $e->getMessage(), PHP_EOL;
+}
+?></code></pre>
+                            </div>
+
+                            <div class="tab-pane" id="examples-Configuration-getConfiguration-0-perl">
+                              <pre class="prettyprint"><code class="language-perl">use Data::Dumper;
+use WWW::OPenAPIClient::Configuration;
+use WWW::OPenAPIClient::ConfigurationApi;
+
+# Create an instance of the API class
+my $api_instance = WWW::OPenAPIClient::ConfigurationApi->new();
+
+eval {
+    my $result = $api_instance->getConfiguration();
+    print Dumper($result);
+};
+if ($@) {
+    warn "Exception when calling ConfigurationApi->getConfiguration: $@\n";
+}</code></pre>
+                            </div>
+
+                            <div class="tab-pane" id="examples-Configuration-getConfiguration-0-python">
+                              <pre class="prettyprint"><code class="language-python">from __future__ import print_statement
+import time
+import openapi_client
+from openapi_client.rest import ApiException
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = openapi_client.ConfigurationApi()
+
+try:
+    # Returns the contents of the application configuration file
+    api_response = api_instance.get_configuration()
+    pprint(api_response)
+except ApiException as e:
+    print("Exception when calling ConfigurationApi->getConfiguration: %s\n" % e)</code></pre>
+                            </div>
+
+                            <div class="tab-pane" id="examples-Configuration-getConfiguration-0-rust">
+                              <pre class="prettyprint"><code class="language-rust">extern crate ConfigurationApi;
+
+pub fn main() {
+
+    let mut context = ConfigurationApi::Context::default();
+    let result = client.getConfiguration(&context).wait();
+
+    println!("{:?}", result);
+}
+</code></pre>
+                            </div>
+                          </div>
+
+                          <h2>Scopes</h2>
+                          <table>
+                            
+                          </table>
+
+                          <h2>Parameters</h2>
+
+
+
+
+
+
+                          <h2>Responses</h2>
+                            <h3 id="examples-Configuration-getConfiguration-title-200"></h3>
+                            <p id="examples-Configuration-getConfiguration-description-200" class="marked"></p>
+                            <script>
+                              var responseConfiguration200_description = `Configuration`;
+                              var responseConfiguration200_description_break = responseConfiguration200_description.indexOf('\n');
+                              if (responseConfiguration200_description_break == -1) {
+                                $("#examples-Configuration-getConfiguration-title-200").text("Status: 200 - " + responseConfiguration200_description);
+                              } else {
+                                $("#examples-Configuration-getConfiguration-title-200").text("Status: 200 - " + responseConfiguration200_description.substring(0, responseConfiguration200_description_break));
+                                $("#examples-Configuration-getConfiguration-description-200").html(responseConfiguration200_description.substring(responseConfiguration200_description_break));
+                              }
+                            </script>
+
+
+                            <ul id="responses-detail-Configuration-getConfiguration-200" class="nav nav-tabs nav-tabs-examples" >
+                                <li class="active">
+                                  <a data-toggle="tab" href="#responses-Configuration-getConfiguration-200-schema">Schema</a>
+                                </li>
+
+
+
+
+                            </ul>
+
+
+                            <div class="tab-content" id="responses-Configuration-getConfiguration-200-wrapper" style='margin-bottom: 10px;'>
+                                <div class="tab-pane active" id="responses-Configuration-getConfiguration-200-schema">
+                                  <div id="responses-Configuration-getConfiguration-schema-200" class="exampleStyle">
+                                    <script>
+                                      $(document).ready(function() {
+                                        var schemaWrapper = ;
+                                        var schema = findNode('schema',schemaWrapper).schema;
+                                        if (!schema) {
+                                          schema = schemaWrapper.schema;
+                                        }
+                                        if (schema.$ref != null) {
+                                          schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        } else if (schema.items != null && schema.items.$ref != null) {
+                                            schema.items = defsParser.$refs.get(schema.items.$ref);
+                                        } else {
+                                          schemaWrapper.definitions = Object.assign({}, defs);
+                                          $RefParser.dereference(schemaWrapper).catch(function(err) {
+                                            console.log(err);
+                                          });
+                                        }
+
+                                        var view = new JSONSchemaView(schema, 3);
+                                        $('#responses-Configuration-getConfiguration-200-schema-data').val(JSON.stringify(schema));
+                                        var result = $('#responses-Configuration-getConfiguration-schema-200');
+                                        result.empty();
+                                        result.append(view.render());
+                                      });
+                                    </script>
+                                  </div>
+                                  <input id='responses-Configuration-getConfiguration-200-schema-data' type='hidden' value=''></input>
+                                </div>
+                            </div>
+                            <h3 id="examples-Configuration-getConfiguration-title-404"></h3>
+                            <p id="examples-Configuration-getConfiguration-description-404" class="marked"></p>
+                            <script>
+                              var responseConfiguration404_description = `File is not found or readable`;
+                              var responseConfiguration404_description_break = responseConfiguration404_description.indexOf('\n');
+                              if (responseConfiguration404_description_break == -1) {
+                                $("#examples-Configuration-getConfiguration-title-404").text("Status: 404 - " + responseConfiguration404_description);
+                              } else {
+                                $("#examples-Configuration-getConfiguration-title-404").text("Status: 404 - " + responseConfiguration404_description.substring(0, responseConfiguration404_description_break));
+                                $("#examples-Configuration-getConfiguration-description-404").html(responseConfiguration404_description.substring(responseConfiguration404_description_break));
+                              }
+                            </script>
+
+
+                            <ul id="responses-detail-Configuration-getConfiguration-404" class="nav nav-tabs nav-tabs-examples" >
+                                <li class="active">
+                                  <a data-toggle="tab" href="#responses-Configuration-getConfiguration-404-schema">Schema</a>
+                                </li>
+
+
+
+
+                            </ul>
+
+
+                            <div class="tab-content" id="responses-Configuration-getConfiguration-404-wrapper" style='margin-bottom: 10px;'>
+                                <div class="tab-pane active" id="responses-Configuration-getConfiguration-404-schema">
+                                  <div id="responses-Configuration-getConfiguration-schema-404" class="exampleStyle">
+                                    <script>
+                                      $(document).ready(function() {
+                                        var schemaWrapper = ;
+                                        var schema = findNode('schema',schemaWrapper).schema;
+                                        if (!schema) {
+                                          schema = schemaWrapper.schema;
+                                        }
+                                        if (schema.$ref != null) {
+                                          schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        } else if (schema.items != null && schema.items.$ref != null) {
+                                            schema.items = defsParser.$refs.get(schema.items.$ref);
+                                        } else {
+                                          schemaWrapper.definitions = Object.assign({}, defs);
+                                          $RefParser.dereference(schemaWrapper).catch(function(err) {
+                                            console.log(err);
+                                          });
+                                        }
+
+                                        var view = new JSONSchemaView(schema, 3);
+                                        $('#responses-Configuration-getConfiguration-404-schema-data').val(JSON.stringify(schema));
+                                        var result = $('#responses-Configuration-getConfiguration-schema-404');
+                                        result.empty();
+                                        result.append(view.render());
+                                      });
+                                    </script>
+                                  </div>
+                                  <input id='responses-Configuration-getConfiguration-404-schema-data' type='hidden' value=''></input>
+                                </div>
+                            </div>
+                        </article>
+                      </div>
+                      <hr>
+                    <div id="api-Configuration-putConfiguration">
+                      <article id="api-Configuration-putConfiguration-0" data-group="User" data-name="putConfiguration" data-version="0">
+                        <div class="pull-left">
+                          <h1>putConfiguration</h1>
+                          <p>Replace the current configuration file with the given configuration</p>
+                        </div>
+                        <div class="pull-right"></div>
+                        <div class="clearfix"></div>
+                        <p></p>
+                        <p class="marked"></p>
+                        <p></p>
+                        <br />
+                        <pre class="prettyprint language-html prettyprinted" data-type="put"><code><span class="pln">/a1-policy/v2/configuration</span></code></pre>
+                        <p>
+                          <h3>Usage and SDK Samples</h3>
+                        </p>
+                        <ul class="nav nav-tabs nav-tabs-examples">
+                          <li class="active"><a href="#examples-Configuration-putConfiguration-0-curl">Curl</a></li>
+                          <li class=""><a href="#examples-Configuration-putConfiguration-0-java">Java</a></li>
+                          <li class=""><a href="#examples-Configuration-putConfiguration-0-android">Android</a></li>
+                          <!--<li class=""><a href="#examples-Configuration-putConfiguration-0-groovy">Groovy</a></li>-->
+                          <li class=""><a href="#examples-Configuration-putConfiguration-0-objc">Obj-C</a></li>
+                          <li class=""><a href="#examples-Configuration-putConfiguration-0-javascript">JavaScript</a></li>
+                          <!--<li class=""><a href="#examples-Configuration-putConfiguration-0-angular">Angular</a></li>-->
+                          <li class=""><a href="#examples-Configuration-putConfiguration-0-csharp">C#</a></li>
+                          <li class=""><a href="#examples-Configuration-putConfiguration-0-php">PHP</a></li>
+                          <li class=""><a href="#examples-Configuration-putConfiguration-0-perl">Perl</a></li>
+                          <li class=""><a href="#examples-Configuration-putConfiguration-0-python">Python</a></li>
+                          <li class=""><a href="#examples-Configuration-putConfiguration-0-rust">Rust</a></li>
+                        </ul>
+
+                        <div class="tab-content">
+                          <div class="tab-pane active" id="examples-Configuration-putConfiguration-0-curl">
+                            <pre class="prettyprint"><code class="language-bsh">curl -X PUT \
+ -H "Accept: */*" \
+ -H "Content-Type: application/json" \
+ "http://localhost/a1-policy/v2/configuration" \
+ -d ''
+</code></pre>
+                          </div>
+                          <div class="tab-pane" id="examples-Configuration-putConfiguration-0-java">
+                            <pre class="prettyprint"><code class="language-java">import org.openapitools.client.*;
+import org.openapitools.client.auth.*;
+import org.openapitools.client.model.*;
+import org.openapitools.client.api.ConfigurationApi;
+
+import java.io.File;
+import java.util.*;
+
+public class ConfigurationApiExample {
+    public static void main(String[] args) {
+
+        // Create an instance of the API class
+        ConfigurationApi apiInstance = new ConfigurationApi();
+        Object body = Object; // Object | 
+
+        try {
+            Object result = apiInstance.putConfiguration(body);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling ConfigurationApi#putConfiguration");
+            e.printStackTrace();
+        }
+    }
+}
+</code></pre>
+                          </div>
+
+                          <div class="tab-pane" id="examples-Configuration-putConfiguration-0-android">
+                            <pre class="prettyprint"><code class="language-java">import org.openapitools.client.api.ConfigurationApi;
+
+public class ConfigurationApiExample {
+    public static void main(String[] args) {
+        ConfigurationApi apiInstance = new ConfigurationApi();
+        Object body = Object; // Object | 
+
+        try {
+            Object result = apiInstance.putConfiguration(body);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling ConfigurationApi#putConfiguration");
+            e.printStackTrace();
+        }
+    }
+}</code></pre>
+                          </div>
+  <!--
+  <div class="tab-pane" id="examples-Configuration-putConfiguration-0-groovy">
+  <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre>
+  </div> -->
+                            <div class="tab-pane" id="examples-Configuration-putConfiguration-0-objc">
+                              <pre class="prettyprint"><code class="language-cpp">
+
+// Create an instance of the API class
+ConfigurationApi *apiInstance = [[ConfigurationApi alloc] init];
+Object *body = Object; // 
+
+// Replace the current configuration file with the given configuration
+[apiInstance putConfigurationWith:body
+              completionHandler: ^(Object output, NSError* error) {
+    if (output) {
+        NSLog(@"%@", output);
+    }
+    if (error) {
+        NSLog(@"Error: %@", error);
+    }
+}];
+</code></pre>
+                            </div>
+
+                            <div class="tab-pane" id="examples-Configuration-putConfiguration-0-javascript">
+                              <pre class="prettyprint"><code class="language-js">var A1PolicyManagementService = require('a1_policy_management_service');
+
+// Create an instance of the API class
+var api = new A1PolicyManagementService.ConfigurationApi()
+var body = Object; // {Object} 
+
+var callback = function(error, data, response) {
+  if (error) {
+    console.error(error);
+  } else {
+    console.log('API called successfully. Returned data: ' + data);
+  }
+};
+api.putConfiguration(body, callback);
+</code></pre>
+                            </div>
+
+                            <!--<div class="tab-pane" id="examples-Configuration-putConfiguration-0-angular">
+              <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre>
+            </div>-->
+                            <div class="tab-pane" id="examples-Configuration-putConfiguration-0-csharp">
+                              <pre class="prettyprint"><code class="language-cs">using System;
+using System.Diagnostics;
+using Org.OpenAPITools.Api;
+using Org.OpenAPITools.Client;
+using Org.OpenAPITools.Model;
+
+namespace Example
+{
+    public class putConfigurationExample
+    {
+        public void main()
+        {
+
+            // Create an instance of the API class
+            var apiInstance = new ConfigurationApi();
+            var body = Object;  // Object | 
+
+            try {
+                // Replace the current configuration file with the given configuration
+                Object result = apiInstance.putConfiguration(body);
+                Debug.WriteLine(result);
+            } catch (Exception e) {
+                Debug.Print("Exception when calling ConfigurationApi.putConfiguration: " + e.Message );
+            }
+        }
+    }
+}
+</code></pre>
+                            </div>
+
+                            <div class="tab-pane" id="examples-Configuration-putConfiguration-0-php">
+                              <pre class="prettyprint"><code class="language-php"><&#63;php
+require_once(__DIR__ . '/vendor/autoload.php');
+
+// Create an instance of the API class
+$api_instance = new OpenAPITools\Client\Api\ConfigurationApi();
+$body = Object; // Object | 
+
+try {
+    $result = $api_instance->putConfiguration($body);
+    print_r($result);
+} catch (Exception $e) {
+    echo 'Exception when calling ConfigurationApi->putConfiguration: ', $e->getMessage(), PHP_EOL;
+}
+?></code></pre>
+                            </div>
+
+                            <div class="tab-pane" id="examples-Configuration-putConfiguration-0-perl">
+                              <pre class="prettyprint"><code class="language-perl">use Data::Dumper;
+use WWW::OPenAPIClient::Configuration;
+use WWW::OPenAPIClient::ConfigurationApi;
+
+# Create an instance of the API class
+my $api_instance = WWW::OPenAPIClient::ConfigurationApi->new();
+my $body = WWW::OPenAPIClient::Object::Object->new(); # Object | 
+
+eval {
+    my $result = $api_instance->putConfiguration(body => $body);
+    print Dumper($result);
+};
+if ($@) {
+    warn "Exception when calling ConfigurationApi->putConfiguration: $@\n";
+}</code></pre>
+                            </div>
+
+                            <div class="tab-pane" id="examples-Configuration-putConfiguration-0-python">
+                              <pre class="prettyprint"><code class="language-python">from __future__ import print_statement
+import time
+import openapi_client
+from openapi_client.rest import ApiException
+from pprint import pprint
+
+# Create an instance of the API class
+api_instance = openapi_client.ConfigurationApi()
+body = Object # Object | 
+
+try:
+    # Replace the current configuration file with the given configuration
+    api_response = api_instance.put_configuration(body)
+    pprint(api_response)
+except ApiException as e:
+    print("Exception when calling ConfigurationApi->putConfiguration: %s\n" % e)</code></pre>
+                            </div>
+
+                            <div class="tab-pane" id="examples-Configuration-putConfiguration-0-rust">
+                              <pre class="prettyprint"><code class="language-rust">extern crate ConfigurationApi;
+
+pub fn main() {
+    let body = Object; // Object
+
+    let mut context = ConfigurationApi::Context::default();
+    let result = client.putConfiguration(body, &context).wait();
+
+    println!("{:?}", result);
+}
+</code></pre>
+                            </div>
+                          </div>
+
+                          <h2>Scopes</h2>
+                          <table>
+                            
+                          </table>
+
+                          <h2>Parameters</h2>
+
+
+
+                            <div class="methodsubtabletitle">Body parameters</div>
+                            <table id="methodsubtable">
+                              <tr>
+                                <th width="150px">Name</th>
+                                <th>Description</th>
+                              </tr>
+                                <tr><td style="width:150px;">body <span style="color:red;">*</span></td>
+<td>
+<p class="marked"></p>
+<script>
+$(document).ready(function() {
+  var schemaWrapper = {
+  "content" : {
+    "application/json" : {
+      "schema" : {
+        "type" : "object"
+      }
+    }
+  },
+  "required" : true
+};
+
+  var schema = findNode('schema',schemaWrapper).schema;
+  if (!schema) {
+    schema = schemaWrapper.schema;
+  }
+  if (schema.$ref != null) {
+    schema = defsParser.$refs.get(schema.$ref);
+  } else {
+    schemaWrapper.definitions = Object.assign({}, defs);
+    $RefParser.dereference(schemaWrapper).catch(function(err) {
+      console.log(err);
+    });
+  }
+
+  var view = new JSONSchemaView(schema,2,{isBodyParam: true});
+  var result = $('#d2e199_putConfiguration_body');
+  result.empty();
+  result.append(view.render());
+});
+</script>
+<div id="d2e199_putConfiguration_body"></div>
+</td>
+</tr>
+
+                            </table>
+
+
+
+                          <h2>Responses</h2>
+                            <h3 id="examples-Configuration-putConfiguration-title-200"></h3>
+                            <p id="examples-Configuration-putConfiguration-description-200" class="marked"></p>
+                            <script>
+                              var responseConfiguration200_description = `Configuration updated`;
+                              var responseConfiguration200_description_break = responseConfiguration200_description.indexOf('\n');
+                              if (responseConfiguration200_description_break == -1) {
+                                $("#examples-Configuration-putConfiguration-title-200").text("Status: 200 - " + responseConfiguration200_description);
+                              } else {
+                                $("#examples-Configuration-putConfiguration-title-200").text("Status: 200 - " + responseConfiguration200_description.substring(0, responseConfiguration200_description_break));
+                                $("#examples-Configuration-putConfiguration-description-200").html(responseConfiguration200_description.substring(responseConfiguration200_description_break));
+                              }
+                            </script>
+
+
+                            <ul id="responses-detail-Configuration-putConfiguration-200" class="nav nav-tabs nav-tabs-examples" >
+                                <li class="active">
+                                  <a data-toggle="tab" href="#responses-Configuration-putConfiguration-200-schema">Schema</a>
+                                </li>
+
+
+
+
+                            </ul>
+
+
+                            <div class="tab-content" id="responses-Configuration-putConfiguration-200-wrapper" style='margin-bottom: 10px;'>
+                                <div class="tab-pane active" id="responses-Configuration-putConfiguration-200-schema">
+                                  <div id="responses-Configuration-putConfiguration-schema-200" class="exampleStyle">
+                                    <script>
+                                      $(document).ready(function() {
+                                        var schemaWrapper = ;
+                                        var schema = findNode('schema',schemaWrapper).schema;
+                                        if (!schema) {
+                                          schema = schemaWrapper.schema;
+                                        }
+                                        if (schema.$ref != null) {
+                                          schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        } else if (schema.items != null && schema.items.$ref != null) {
+                                            schema.items = defsParser.$refs.get(schema.items.$ref);
+                                        } else {
+                                          schemaWrapper.definitions = Object.assign({}, defs);
+                                          $RefParser.dereference(schemaWrapper).catch(function(err) {
+                                            console.log(err);
+                                          });
+                                        }
+
+                                        var view = new JSONSchemaView(schema, 3);
+                                        $('#responses-Configuration-putConfiguration-200-schema-data').val(JSON.stringify(schema));
+                                        var result = $('#responses-Configuration-putConfiguration-schema-200');
+                                        result.empty();
+                                        result.append(view.render());
+                                      });
+                                    </script>
+                                  </div>
+                                  <input id='responses-Configuration-putConfiguration-200-schema-data' type='hidden' value=''></input>
+                                </div>
+                            </div>
+                            <h3 id="examples-Configuration-putConfiguration-title-400"></h3>
+                            <p id="examples-Configuration-putConfiguration-description-400" class="marked"></p>
+                            <script>
+                              var responseConfiguration400_description = `Invalid configuration provided`;
+                              var responseConfiguration400_description_break = responseConfiguration400_description.indexOf('\n');
+                              if (responseConfiguration400_description_break == -1) {
+                                $("#examples-Configuration-putConfiguration-title-400").text("Status: 400 - " + responseConfiguration400_description);
+                              } else {
+                                $("#examples-Configuration-putConfiguration-title-400").text("Status: 400 - " + responseConfiguration400_description.substring(0, responseConfiguration400_description_break));
+                                $("#examples-Configuration-putConfiguration-description-400").html(responseConfiguration400_description.substring(responseConfiguration400_description_break));
+                              }
+                            </script>
+
+
+                            <ul id="responses-detail-Configuration-putConfiguration-400" class="nav nav-tabs nav-tabs-examples" >
+                                <li class="active">
+                                  <a data-toggle="tab" href="#responses-Configuration-putConfiguration-400-schema">Schema</a>
+                                </li>
+
+
+
+
+                            </ul>
+
+
+                            <div class="tab-content" id="responses-Configuration-putConfiguration-400-wrapper" style='margin-bottom: 10px;'>
+                                <div class="tab-pane active" id="responses-Configuration-putConfiguration-400-schema">
+                                  <div id="responses-Configuration-putConfiguration-schema-400" class="exampleStyle">
+                                    <script>
+                                      $(document).ready(function() {
+                                        var schemaWrapper = ;
+                                        var schema = findNode('schema',schemaWrapper).schema;
+                                        if (!schema) {
+                                          schema = schemaWrapper.schema;
+                                        }
+                                        if (schema.$ref != null) {
+                                          schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        } else if (schema.items != null && schema.items.$ref != null) {
+                                            schema.items = defsParser.$refs.get(schema.items.$ref);
+                                        } else {
+                                          schemaWrapper.definitions = Object.assign({}, defs);
+                                          $RefParser.dereference(schemaWrapper).catch(function(err) {
+                                            console.log(err);
+                                          });
+                                        }
+
+                                        var view = new JSONSchemaView(schema, 3);
+                                        $('#responses-Configuration-putConfiguration-400-schema-data').val(JSON.stringify(schema));
+                                        var result = $('#responses-Configuration-putConfiguration-schema-400');
+                                        result.empty();
+                                        result.append(view.render());
+                                      });
+                                    </script>
+                                  </div>
+                                  <input id='responses-Configuration-putConfiguration-400-schema-data' type='hidden' value=''></input>
+                                </div>
+                            </div>
+                            <h3 id="examples-Configuration-putConfiguration-title-500"></h3>
+                            <p id="examples-Configuration-putConfiguration-description-500" class="marked"></p>
+                            <script>
+                              var responseConfiguration500_description = `Something went wrong when replacing the configuration. Try again.`;
+                              var responseConfiguration500_description_break = responseConfiguration500_description.indexOf('\n');
+                              if (responseConfiguration500_description_break == -1) {
+                                $("#examples-Configuration-putConfiguration-title-500").text("Status: 500 - " + responseConfiguration500_description);
+                              } else {
+                                $("#examples-Configuration-putConfiguration-title-500").text("Status: 500 - " + responseConfiguration500_description.substring(0, responseConfiguration500_description_break));
+                                $("#examples-Configuration-putConfiguration-description-500").html(responseConfiguration500_description.substring(responseConfiguration500_description_break));
+                              }
+                            </script>
+
+
+                            <ul id="responses-detail-Configuration-putConfiguration-500" class="nav nav-tabs nav-tabs-examples" >
+                                <li class="active">
+                                  <a data-toggle="tab" href="#responses-Configuration-putConfiguration-500-schema">Schema</a>
+                                </li>
+
+
+
+
+                            </ul>
+
+
+                            <div class="tab-content" id="responses-Configuration-putConfiguration-500-wrapper" style='margin-bottom: 10px;'>
+                                <div class="tab-pane active" id="responses-Configuration-putConfiguration-500-schema">
+                                  <div id="responses-Configuration-putConfiguration-schema-500" class="exampleStyle">
+                                    <script>
+                                      $(document).ready(function() {
+                                        var schemaWrapper = ;
+                                        var schema = findNode('schema',schemaWrapper).schema;
+                                        if (!schema) {
+                                          schema = schemaWrapper.schema;
+                                        }
+                                        if (schema.$ref != null) {
+                                          schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        } else if (schema.items != null && schema.items.$ref != null) {
+                                            schema.items = defsParser.$refs.get(schema.items.$ref);
+                                        } else {
+                                          schemaWrapper.definitions = Object.assign({}, defs);
+                                          $RefParser.dereference(schemaWrapper).catch(function(err) {
+                                            console.log(err);
+                                          });
+                                        }
+
+                                        var view = new JSONSchemaView(schema, 3);
+                                        $('#responses-Configuration-putConfiguration-500-schema-data').val(JSON.stringify(schema));
+                                        var result = $('#responses-Configuration-putConfiguration-schema-500');
+                                        result.empty();
+                                        result.append(view.render());
+                                      });
+                                    </script>
+                                  </div>
+                                  <input id='responses-Configuration-putConfiguration-500-schema-data' type='hidden' value=''></input>
+                                </div>
+                            </div>
+                        </article>
+                      </div>
+                      <hr>
+                  </section>
                 <section id="api-HealthCheck">
                   <h1>HealthCheck</h1>
                     <div id="api-HealthCheck-getStatus">
@@ -9684,7 +10267,7 @@
         HealthCheckApi apiInstance = new HealthCheckApi();
 
         try {
-            status_info_v2 result = apiInstance.getStatus();
+            status_info result = apiInstance.getStatus();
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling HealthCheckApi#getStatus");
@@ -9703,7 +10286,7 @@
         HealthCheckApi apiInstance = new HealthCheckApi();
 
         try {
-            status_info_v2 result = apiInstance.getStatus();
+            status_info result = apiInstance.getStatus();
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling HealthCheckApi#getStatus");
@@ -9724,7 +10307,7 @@
 
 // Returns status and statistics of this service
 [apiInstance getStatusWithCompletionHandler: 
-              ^(status_info_v2 output, NSError* error) {
+              ^(status_info output, NSError* error) {
     if (output) {
         NSLog(@"%@", output);
     }
@@ -9773,7 +10356,7 @@
 
             try {
                 // Returns status and statistics of this service
-                status_info_v2 result = apiInstance.getStatus();
+                status_info result = apiInstance.getStatus();
                 Debug.WriteLine(result);
             } catch (Exception e) {
                 Debug.Print("Exception when calling HealthCheckApi.getStatus: " + e.Message );
@@ -9892,22 +10475,18 @@
                                   <div id="responses-HealthCheck-getStatus-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Service is living",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/status_info_v2"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -10193,22 +10772,18 @@
                                   <div id="responses-HealthCheck-getStatusV1-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Service is living",
-  "content" : {
-    "*/*" : {
-      "schema" : {
-        "type" : "string"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -10233,867 +10808,6 @@
                       </div>
                       <hr>
                   </section>
-                <section id="api-ManagementOfConfiguration">
-                  <h1>ManagementOfConfiguration</h1>
-                    <div id="api-ManagementOfConfiguration-getConfiguration">
-                      <article id="api-ManagementOfConfiguration-getConfiguration-0" data-group="User" data-name="getConfiguration" data-version="0">
-                        <div class="pull-left">
-                          <h1>getConfiguration</h1>
-                          <p>Returns the contents of the application configuration file</p>
-                        </div>
-                        <div class="pull-right"></div>
-                        <div class="clearfix"></div>
-                        <p></p>
-                        <p class="marked"></p>
-                        <p></p>
-                        <br />
-                        <pre class="prettyprint language-html prettyprinted" data-type="get"><code><span class="pln">/a1-policy/v2/configuration</span></code></pre>
-                        <p>
-                          <h3>Usage and SDK Samples</h3>
-                        </p>
-                        <ul class="nav nav-tabs nav-tabs-examples">
-                          <li class="active"><a href="#examples-ManagementOfConfiguration-getConfiguration-0-curl">Curl</a></li>
-                          <li class=""><a href="#examples-ManagementOfConfiguration-getConfiguration-0-java">Java</a></li>
-                          <li class=""><a href="#examples-ManagementOfConfiguration-getConfiguration-0-android">Android</a></li>
-                          <!--<li class=""><a href="#examples-ManagementOfConfiguration-getConfiguration-0-groovy">Groovy</a></li>-->
-                          <li class=""><a href="#examples-ManagementOfConfiguration-getConfiguration-0-objc">Obj-C</a></li>
-                          <li class=""><a href="#examples-ManagementOfConfiguration-getConfiguration-0-javascript">JavaScript</a></li>
-                          <!--<li class=""><a href="#examples-ManagementOfConfiguration-getConfiguration-0-angular">Angular</a></li>-->
-                          <li class=""><a href="#examples-ManagementOfConfiguration-getConfiguration-0-csharp">C#</a></li>
-                          <li class=""><a href="#examples-ManagementOfConfiguration-getConfiguration-0-php">PHP</a></li>
-                          <li class=""><a href="#examples-ManagementOfConfiguration-getConfiguration-0-perl">Perl</a></li>
-                          <li class=""><a href="#examples-ManagementOfConfiguration-getConfiguration-0-python">Python</a></li>
-                          <li class=""><a href="#examples-ManagementOfConfiguration-getConfiguration-0-rust">Rust</a></li>
-                        </ul>
-
-                        <div class="tab-content">
-                          <div class="tab-pane active" id="examples-ManagementOfConfiguration-getConfiguration-0-curl">
-                            <pre class="prettyprint"><code class="language-bsh">curl -X GET \
- -H "Accept: application/json" \
- "http://localhost/a1-policy/v2/configuration"
-</code></pre>
-                          </div>
-                          <div class="tab-pane" id="examples-ManagementOfConfiguration-getConfiguration-0-java">
-                            <pre class="prettyprint"><code class="language-java">import org.openapitools.client.*;
-import org.openapitools.client.auth.*;
-import org.openapitools.client.model.*;
-import org.openapitools.client.api.ManagementOfConfigurationApi;
-
-import java.io.File;
-import java.util.*;
-
-public class ManagementOfConfigurationApiExample {
-    public static void main(String[] args) {
-
-        // Create an instance of the API class
-        ManagementOfConfigurationApi apiInstance = new ManagementOfConfigurationApi();
-
-        try {
-            Object result = apiInstance.getConfiguration();
-            System.out.println(result);
-        } catch (ApiException e) {
-            System.err.println("Exception when calling ManagementOfConfigurationApi#getConfiguration");
-            e.printStackTrace();
-        }
-    }
-}
-</code></pre>
-                          </div>
-
-                          <div class="tab-pane" id="examples-ManagementOfConfiguration-getConfiguration-0-android">
-                            <pre class="prettyprint"><code class="language-java">import org.openapitools.client.api.ManagementOfConfigurationApi;
-
-public class ManagementOfConfigurationApiExample {
-    public static void main(String[] args) {
-        ManagementOfConfigurationApi apiInstance = new ManagementOfConfigurationApi();
-
-        try {
-            Object result = apiInstance.getConfiguration();
-            System.out.println(result);
-        } catch (ApiException e) {
-            System.err.println("Exception when calling ManagementOfConfigurationApi#getConfiguration");
-            e.printStackTrace();
-        }
-    }
-}</code></pre>
-                          </div>
-  <!--
-  <div class="tab-pane" id="examples-ManagementOfConfiguration-getConfiguration-0-groovy">
-  <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre>
-  </div> -->
-                            <div class="tab-pane" id="examples-ManagementOfConfiguration-getConfiguration-0-objc">
-                              <pre class="prettyprint"><code class="language-cpp">
-
-// Create an instance of the API class
-ManagementOfConfigurationApi *apiInstance = [[ManagementOfConfigurationApi alloc] init];
-
-// Returns the contents of the application configuration file
-[apiInstance getConfigurationWithCompletionHandler: 
-              ^(Object output, NSError* error) {
-    if (output) {
-        NSLog(@"%@", output);
-    }
-    if (error) {
-        NSLog(@"Error: %@", error);
-    }
-}];
-</code></pre>
-                            </div>
-
-                            <div class="tab-pane" id="examples-ManagementOfConfiguration-getConfiguration-0-javascript">
-                              <pre class="prettyprint"><code class="language-js">var A1PolicyManagementService = require('a1_policy_management_service');
-
-// Create an instance of the API class
-var api = new A1PolicyManagementService.ManagementOfConfigurationApi()
-var callback = function(error, data, response) {
-  if (error) {
-    console.error(error);
-  } else {
-    console.log('API called successfully. Returned data: ' + data);
-  }
-};
-api.getConfiguration(callback);
-</code></pre>
-                            </div>
-
-                            <!--<div class="tab-pane" id="examples-ManagementOfConfiguration-getConfiguration-0-angular">
-              <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre>
-            </div>-->
-                            <div class="tab-pane" id="examples-ManagementOfConfiguration-getConfiguration-0-csharp">
-                              <pre class="prettyprint"><code class="language-cs">using System;
-using System.Diagnostics;
-using Org.OpenAPITools.Api;
-using Org.OpenAPITools.Client;
-using Org.OpenAPITools.Model;
-
-namespace Example
-{
-    public class getConfigurationExample
-    {
-        public void main()
-        {
-
-            // Create an instance of the API class
-            var apiInstance = new ManagementOfConfigurationApi();
-
-            try {
-                // Returns the contents of the application configuration file
-                Object result = apiInstance.getConfiguration();
-                Debug.WriteLine(result);
-            } catch (Exception e) {
-                Debug.Print("Exception when calling ManagementOfConfigurationApi.getConfiguration: " + e.Message );
-            }
-        }
-    }
-}
-</code></pre>
-                            </div>
-
-                            <div class="tab-pane" id="examples-ManagementOfConfiguration-getConfiguration-0-php">
-                              <pre class="prettyprint"><code class="language-php"><&#63;php
-require_once(__DIR__ . '/vendor/autoload.php');
-
-// Create an instance of the API class
-$api_instance = new OpenAPITools\Client\Api\ManagementOfConfigurationApi();
-
-try {
-    $result = $api_instance->getConfiguration();
-    print_r($result);
-} catch (Exception $e) {
-    echo 'Exception when calling ManagementOfConfigurationApi->getConfiguration: ', $e->getMessage(), PHP_EOL;
-}
-?></code></pre>
-                            </div>
-
-                            <div class="tab-pane" id="examples-ManagementOfConfiguration-getConfiguration-0-perl">
-                              <pre class="prettyprint"><code class="language-perl">use Data::Dumper;
-use WWW::OPenAPIClient::Configuration;
-use WWW::OPenAPIClient::ManagementOfConfigurationApi;
-
-# Create an instance of the API class
-my $api_instance = WWW::OPenAPIClient::ManagementOfConfigurationApi->new();
-
-eval {
-    my $result = $api_instance->getConfiguration();
-    print Dumper($result);
-};
-if ($@) {
-    warn "Exception when calling ManagementOfConfigurationApi->getConfiguration: $@\n";
-}</code></pre>
-                            </div>
-
-                            <div class="tab-pane" id="examples-ManagementOfConfiguration-getConfiguration-0-python">
-                              <pre class="prettyprint"><code class="language-python">from __future__ import print_statement
-import time
-import openapi_client
-from openapi_client.rest import ApiException
-from pprint import pprint
-
-# Create an instance of the API class
-api_instance = openapi_client.ManagementOfConfigurationApi()
-
-try:
-    # Returns the contents of the application configuration file
-    api_response = api_instance.get_configuration()
-    pprint(api_response)
-except ApiException as e:
-    print("Exception when calling ManagementOfConfigurationApi->getConfiguration: %s\n" % e)</code></pre>
-                            </div>
-
-                            <div class="tab-pane" id="examples-ManagementOfConfiguration-getConfiguration-0-rust">
-                              <pre class="prettyprint"><code class="language-rust">extern crate ManagementOfConfigurationApi;
-
-pub fn main() {
-
-    let mut context = ManagementOfConfigurationApi::Context::default();
-    let result = client.getConfiguration(&context).wait();
-
-    println!("{:?}", result);
-}
-</code></pre>
-                            </div>
-                          </div>
-
-                          <h2>Scopes</h2>
-                          <table>
-                            
-                          </table>
-
-                          <h2>Parameters</h2>
-
-
-
-
-
-
-                          <h2>Responses</h2>
-                            <h3 id="examples-ManagementOfConfiguration-getConfiguration-title-200"></h3>
-                            <p id="examples-ManagementOfConfiguration-getConfiguration-description-200" class="marked"></p>
-                            <script>
-                              var responseManagementOfConfiguration200_description = `Configuration`;
-                              var responseManagementOfConfiguration200_description_break = responseManagementOfConfiguration200_description.indexOf('\n');
-                              if (responseManagementOfConfiguration200_description_break == -1) {
-                                $("#examples-ManagementOfConfiguration-getConfiguration-title-200").text("Status: 200 - " + responseManagementOfConfiguration200_description);
-                              } else {
-                                $("#examples-ManagementOfConfiguration-getConfiguration-title-200").text("Status: 200 - " + responseManagementOfConfiguration200_description.substring(0, responseManagementOfConfiguration200_description_break));
-                                $("#examples-ManagementOfConfiguration-getConfiguration-description-200").html(responseManagementOfConfiguration200_description.substring(responseManagementOfConfiguration200_description_break));
-                              }
-                            </script>
-
-
-                            <ul id="responses-detail-ManagementOfConfiguration-getConfiguration-200" class="nav nav-tabs nav-tabs-examples" >
-                                <li class="active">
-                                  <a data-toggle="tab" href="#responses-ManagementOfConfiguration-getConfiguration-200-schema">Schema</a>
-                                </li>
-
-
-
-
-                            </ul>
-
-
-                            <div class="tab-content" id="responses-ManagementOfConfiguration-getConfiguration-200-wrapper" style='margin-bottom: 10px;'>
-                                <div class="tab-pane active" id="responses-ManagementOfConfiguration-getConfiguration-200-schema">
-                                  <div id="responses-ManagementOfConfiguration-getConfiguration-schema-200" class="exampleStyle">
-                                    <script>
-                                      $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Configuration",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    }
-  }
-};
-                                        var schema = findNode('schema',schemaWrapper).schema;
-                                        if (!schema) {
-                                          schema = schemaWrapper.schema;
-                                        }
-                                        if (schema.$ref != null) {
-                                          schema = defsParser.$refs.get(schema.$ref);
-                                        } else if (schema.items != null && schema.items.$ref != null) {
-                                            schema.items = defsParser.$refs.get(schema.items.$ref);
-                                        } else {
-                                          schemaWrapper.definitions = Object.assign({}, defs);
-                                          $RefParser.dereference(schemaWrapper).catch(function(err) {
-                                            console.log(err);
-                                          });
-                                        }
-
-                                        var view = new JSONSchemaView(schema, 3);
-                                        $('#responses-ManagementOfConfiguration-getConfiguration-200-schema-data').val(JSON.stringify(schema));
-                                        var result = $('#responses-ManagementOfConfiguration-getConfiguration-schema-200');
-                                        result.empty();
-                                        result.append(view.render());
-                                      });
-                                    </script>
-                                  </div>
-                                  <input id='responses-ManagementOfConfiguration-getConfiguration-200-schema-data' type='hidden' value=''></input>
-                                </div>
-                            </div>
-                            <h3 id="examples-ManagementOfConfiguration-getConfiguration-title-404"></h3>
-                            <p id="examples-ManagementOfConfiguration-getConfiguration-description-404" class="marked"></p>
-                            <script>
-                              var responseManagementOfConfiguration404_description = `File is not found or readable`;
-                              var responseManagementOfConfiguration404_description_break = responseManagementOfConfiguration404_description.indexOf('\n');
-                              if (responseManagementOfConfiguration404_description_break == -1) {
-                                $("#examples-ManagementOfConfiguration-getConfiguration-title-404").text("Status: 404 - " + responseManagementOfConfiguration404_description);
-                              } else {
-                                $("#examples-ManagementOfConfiguration-getConfiguration-title-404").text("Status: 404 - " + responseManagementOfConfiguration404_description.substring(0, responseManagementOfConfiguration404_description_break));
-                                $("#examples-ManagementOfConfiguration-getConfiguration-description-404").html(responseManagementOfConfiguration404_description.substring(responseManagementOfConfiguration404_description_break));
-                              }
-                            </script>
-
-
-                            <ul id="responses-detail-ManagementOfConfiguration-getConfiguration-404" class="nav nav-tabs nav-tabs-examples" >
-                                <li class="active">
-                                  <a data-toggle="tab" href="#responses-ManagementOfConfiguration-getConfiguration-404-schema">Schema</a>
-                                </li>
-
-
-
-
-                            </ul>
-
-
-                            <div class="tab-content" id="responses-ManagementOfConfiguration-getConfiguration-404-wrapper" style='margin-bottom: 10px;'>
-                                <div class="tab-pane active" id="responses-ManagementOfConfiguration-getConfiguration-404-schema">
-                                  <div id="responses-ManagementOfConfiguration-getConfiguration-schema-404" class="exampleStyle">
-                                    <script>
-                                      $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "File is not found or readable",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/error_information"
-      }
-    }
-  }
-};
-                                        var schema = findNode('schema',schemaWrapper).schema;
-                                        if (!schema) {
-                                          schema = schemaWrapper.schema;
-                                        }
-                                        if (schema.$ref != null) {
-                                          schema = defsParser.$refs.get(schema.$ref);
-                                        } else if (schema.items != null && schema.items.$ref != null) {
-                                            schema.items = defsParser.$refs.get(schema.items.$ref);
-                                        } else {
-                                          schemaWrapper.definitions = Object.assign({}, defs);
-                                          $RefParser.dereference(schemaWrapper).catch(function(err) {
-                                            console.log(err);
-                                          });
-                                        }
-
-                                        var view = new JSONSchemaView(schema, 3);
-                                        $('#responses-ManagementOfConfiguration-getConfiguration-404-schema-data').val(JSON.stringify(schema));
-                                        var result = $('#responses-ManagementOfConfiguration-getConfiguration-schema-404');
-                                        result.empty();
-                                        result.append(view.render());
-                                      });
-                                    </script>
-                                  </div>
-                                  <input id='responses-ManagementOfConfiguration-getConfiguration-404-schema-data' type='hidden' value=''></input>
-                                </div>
-                            </div>
-                        </article>
-                      </div>
-                      <hr>
-                    <div id="api-ManagementOfConfiguration-putConfiguration">
-                      <article id="api-ManagementOfConfiguration-putConfiguration-0" data-group="User" data-name="putConfiguration" data-version="0">
-                        <div class="pull-left">
-                          <h1>putConfiguration</h1>
-                          <p>Replace the current configuration file with the given configuration</p>
-                        </div>
-                        <div class="pull-right"></div>
-                        <div class="clearfix"></div>
-                        <p></p>
-                        <p class="marked"></p>
-                        <p></p>
-                        <br />
-                        <pre class="prettyprint language-html prettyprinted" data-type="put"><code><span class="pln">/a1-policy/v2/configuration</span></code></pre>
-                        <p>
-                          <h3>Usage and SDK Samples</h3>
-                        </p>
-                        <ul class="nav nav-tabs nav-tabs-examples">
-                          <li class="active"><a href="#examples-ManagementOfConfiguration-putConfiguration-0-curl">Curl</a></li>
-                          <li class=""><a href="#examples-ManagementOfConfiguration-putConfiguration-0-java">Java</a></li>
-                          <li class=""><a href="#examples-ManagementOfConfiguration-putConfiguration-0-android">Android</a></li>
-                          <!--<li class=""><a href="#examples-ManagementOfConfiguration-putConfiguration-0-groovy">Groovy</a></li>-->
-                          <li class=""><a href="#examples-ManagementOfConfiguration-putConfiguration-0-objc">Obj-C</a></li>
-                          <li class=""><a href="#examples-ManagementOfConfiguration-putConfiguration-0-javascript">JavaScript</a></li>
-                          <!--<li class=""><a href="#examples-ManagementOfConfiguration-putConfiguration-0-angular">Angular</a></li>-->
-                          <li class=""><a href="#examples-ManagementOfConfiguration-putConfiguration-0-csharp">C#</a></li>
-                          <li class=""><a href="#examples-ManagementOfConfiguration-putConfiguration-0-php">PHP</a></li>
-                          <li class=""><a href="#examples-ManagementOfConfiguration-putConfiguration-0-perl">Perl</a></li>
-                          <li class=""><a href="#examples-ManagementOfConfiguration-putConfiguration-0-python">Python</a></li>
-                          <li class=""><a href="#examples-ManagementOfConfiguration-putConfiguration-0-rust">Rust</a></li>
-                        </ul>
-
-                        <div class="tab-content">
-                          <div class="tab-pane active" id="examples-ManagementOfConfiguration-putConfiguration-0-curl">
-                            <pre class="prettyprint"><code class="language-bsh">curl -X PUT \
- -H "Accept: */*" \
- -H "Content-Type: application/json" \
- "http://localhost/a1-policy/v2/configuration" \
- -d ''
-</code></pre>
-                          </div>
-                          <div class="tab-pane" id="examples-ManagementOfConfiguration-putConfiguration-0-java">
-                            <pre class="prettyprint"><code class="language-java">import org.openapitools.client.*;
-import org.openapitools.client.auth.*;
-import org.openapitools.client.model.*;
-import org.openapitools.client.api.ManagementOfConfigurationApi;
-
-import java.io.File;
-import java.util.*;
-
-public class ManagementOfConfigurationApiExample {
-    public static void main(String[] args) {
-
-        // Create an instance of the API class
-        ManagementOfConfigurationApi apiInstance = new ManagementOfConfigurationApi();
-        Object body = Object; // Object | 
-
-        try {
-            Object result = apiInstance.putConfiguration(body);
-            System.out.println(result);
-        } catch (ApiException e) {
-            System.err.println("Exception when calling ManagementOfConfigurationApi#putConfiguration");
-            e.printStackTrace();
-        }
-    }
-}
-</code></pre>
-                          </div>
-
-                          <div class="tab-pane" id="examples-ManagementOfConfiguration-putConfiguration-0-android">
-                            <pre class="prettyprint"><code class="language-java">import org.openapitools.client.api.ManagementOfConfigurationApi;
-
-public class ManagementOfConfigurationApiExample {
-    public static void main(String[] args) {
-        ManagementOfConfigurationApi apiInstance = new ManagementOfConfigurationApi();
-        Object body = Object; // Object | 
-
-        try {
-            Object result = apiInstance.putConfiguration(body);
-            System.out.println(result);
-        } catch (ApiException e) {
-            System.err.println("Exception when calling ManagementOfConfigurationApi#putConfiguration");
-            e.printStackTrace();
-        }
-    }
-}</code></pre>
-                          </div>
-  <!--
-  <div class="tab-pane" id="examples-ManagementOfConfiguration-putConfiguration-0-groovy">
-  <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre>
-  </div> -->
-                            <div class="tab-pane" id="examples-ManagementOfConfiguration-putConfiguration-0-objc">
-                              <pre class="prettyprint"><code class="language-cpp">
-
-// Create an instance of the API class
-ManagementOfConfigurationApi *apiInstance = [[ManagementOfConfigurationApi alloc] init];
-Object *body = Object; // 
-
-// Replace the current configuration file with the given configuration
-[apiInstance putConfigurationWith:body
-              completionHandler: ^(Object output, NSError* error) {
-    if (output) {
-        NSLog(@"%@", output);
-    }
-    if (error) {
-        NSLog(@"Error: %@", error);
-    }
-}];
-</code></pre>
-                            </div>
-
-                            <div class="tab-pane" id="examples-ManagementOfConfiguration-putConfiguration-0-javascript">
-                              <pre class="prettyprint"><code class="language-js">var A1PolicyManagementService = require('a1_policy_management_service');
-
-// Create an instance of the API class
-var api = new A1PolicyManagementService.ManagementOfConfigurationApi()
-var body = Object; // {Object} 
-
-var callback = function(error, data, response) {
-  if (error) {
-    console.error(error);
-  } else {
-    console.log('API called successfully. Returned data: ' + data);
-  }
-};
-api.putConfiguration(body, callback);
-</code></pre>
-                            </div>
-
-                            <!--<div class="tab-pane" id="examples-ManagementOfConfiguration-putConfiguration-0-angular">
-              <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre>
-            </div>-->
-                            <div class="tab-pane" id="examples-ManagementOfConfiguration-putConfiguration-0-csharp">
-                              <pre class="prettyprint"><code class="language-cs">using System;
-using System.Diagnostics;
-using Org.OpenAPITools.Api;
-using Org.OpenAPITools.Client;
-using Org.OpenAPITools.Model;
-
-namespace Example
-{
-    public class putConfigurationExample
-    {
-        public void main()
-        {
-
-            // Create an instance of the API class
-            var apiInstance = new ManagementOfConfigurationApi();
-            var body = Object;  // Object | 
-
-            try {
-                // Replace the current configuration file with the given configuration
-                Object result = apiInstance.putConfiguration(body);
-                Debug.WriteLine(result);
-            } catch (Exception e) {
-                Debug.Print("Exception when calling ManagementOfConfigurationApi.putConfiguration: " + e.Message );
-            }
-        }
-    }
-}
-</code></pre>
-                            </div>
-
-                            <div class="tab-pane" id="examples-ManagementOfConfiguration-putConfiguration-0-php">
-                              <pre class="prettyprint"><code class="language-php"><&#63;php
-require_once(__DIR__ . '/vendor/autoload.php');
-
-// Create an instance of the API class
-$api_instance = new OpenAPITools\Client\Api\ManagementOfConfigurationApi();
-$body = Object; // Object | 
-
-try {
-    $result = $api_instance->putConfiguration($body);
-    print_r($result);
-} catch (Exception $e) {
-    echo 'Exception when calling ManagementOfConfigurationApi->putConfiguration: ', $e->getMessage(), PHP_EOL;
-}
-?></code></pre>
-                            </div>
-
-                            <div class="tab-pane" id="examples-ManagementOfConfiguration-putConfiguration-0-perl">
-                              <pre class="prettyprint"><code class="language-perl">use Data::Dumper;
-use WWW::OPenAPIClient::Configuration;
-use WWW::OPenAPIClient::ManagementOfConfigurationApi;
-
-# Create an instance of the API class
-my $api_instance = WWW::OPenAPIClient::ManagementOfConfigurationApi->new();
-my $body = WWW::OPenAPIClient::Object::Object->new(); # Object | 
-
-eval {
-    my $result = $api_instance->putConfiguration(body => $body);
-    print Dumper($result);
-};
-if ($@) {
-    warn "Exception when calling ManagementOfConfigurationApi->putConfiguration: $@\n";
-}</code></pre>
-                            </div>
-
-                            <div class="tab-pane" id="examples-ManagementOfConfiguration-putConfiguration-0-python">
-                              <pre class="prettyprint"><code class="language-python">from __future__ import print_statement
-import time
-import openapi_client
-from openapi_client.rest import ApiException
-from pprint import pprint
-
-# Create an instance of the API class
-api_instance = openapi_client.ManagementOfConfigurationApi()
-body = Object # Object | 
-
-try:
-    # Replace the current configuration file with the given configuration
-    api_response = api_instance.put_configuration(body)
-    pprint(api_response)
-except ApiException as e:
-    print("Exception when calling ManagementOfConfigurationApi->putConfiguration: %s\n" % e)</code></pre>
-                            </div>
-
-                            <div class="tab-pane" id="examples-ManagementOfConfiguration-putConfiguration-0-rust">
-                              <pre class="prettyprint"><code class="language-rust">extern crate ManagementOfConfigurationApi;
-
-pub fn main() {
-    let body = Object; // Object
-
-    let mut context = ManagementOfConfigurationApi::Context::default();
-    let result = client.putConfiguration(body, &context).wait();
-
-    println!("{:?}", result);
-}
-</code></pre>
-                            </div>
-                          </div>
-
-                          <h2>Scopes</h2>
-                          <table>
-                            
-                          </table>
-
-                          <h2>Parameters</h2>
-
-
-
-                            <div class="methodsubtabletitle">Body parameters</div>
-                            <table id="methodsubtable">
-                              <tr>
-                                <th width="150px">Name</th>
-                                <th>Description</th>
-                              </tr>
-                                <tr><td style="width:150px;">body <span style="color:red;">*</span></td>
-<td>
-<p class="marked"></p>
-<script>
-$(document).ready(function() {
-  var schemaWrapper = {
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "type" : "object"
-      }
-    }
-  },
-  "required" : true
-};
-
-  var schema = findNode('schema',schemaWrapper).schema;
-  if (!schema) {
-    schema = schemaWrapper.schema;
-  }
-  if (schema.$ref != null) {
-    schema = defsParser.$refs.get(schema.$ref);
-  } else {
-    schemaWrapper.definitions = Object.assign({}, defs);
-    $RefParser.dereference(schemaWrapper).catch(function(err) {
-      console.log(err);
-    });
-  }
-
-  var view = new JSONSchemaView(schema,2,{isBodyParam: true});
-  var result = $('#d2e199_putConfiguration_body');
-  result.empty();
-  result.append(view.render());
-});
-</script>
-<div id="d2e199_putConfiguration_body"></div>
-</td>
-</tr>
-
-                            </table>
-
-
-
-                          <h2>Responses</h2>
-                            <h3 id="examples-ManagementOfConfiguration-putConfiguration-title-200"></h3>
-                            <p id="examples-ManagementOfConfiguration-putConfiguration-description-200" class="marked"></p>
-                            <script>
-                              var responseManagementOfConfiguration200_description = `Configuration updated`;
-                              var responseManagementOfConfiguration200_description_break = responseManagementOfConfiguration200_description.indexOf('\n');
-                              if (responseManagementOfConfiguration200_description_break == -1) {
-                                $("#examples-ManagementOfConfiguration-putConfiguration-title-200").text("Status: 200 - " + responseManagementOfConfiguration200_description);
-                              } else {
-                                $("#examples-ManagementOfConfiguration-putConfiguration-title-200").text("Status: 200 - " + responseManagementOfConfiguration200_description.substring(0, responseManagementOfConfiguration200_description_break));
-                                $("#examples-ManagementOfConfiguration-putConfiguration-description-200").html(responseManagementOfConfiguration200_description.substring(responseManagementOfConfiguration200_description_break));
-                              }
-                            </script>
-
-
-                            <ul id="responses-detail-ManagementOfConfiguration-putConfiguration-200" class="nav nav-tabs nav-tabs-examples" >
-                                <li class="active">
-                                  <a data-toggle="tab" href="#responses-ManagementOfConfiguration-putConfiguration-200-schema">Schema</a>
-                                </li>
-
-
-
-
-                            </ul>
-
-
-                            <div class="tab-content" id="responses-ManagementOfConfiguration-putConfiguration-200-wrapper" style='margin-bottom: 10px;'>
-                                <div class="tab-pane active" id="responses-ManagementOfConfiguration-putConfiguration-200-schema">
-                                  <div id="responses-ManagementOfConfiguration-putConfiguration-schema-200" class="exampleStyle">
-                                    <script>
-                                      $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Configuration updated",
-  "content" : {
-    "*/*" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/void"
-      }
-    }
-  }
-};
-                                        var schema = findNode('schema',schemaWrapper).schema;
-                                        if (!schema) {
-                                          schema = schemaWrapper.schema;
-                                        }
-                                        if (schema.$ref != null) {
-                                          schema = defsParser.$refs.get(schema.$ref);
-                                        } else if (schema.items != null && schema.items.$ref != null) {
-                                            schema.items = defsParser.$refs.get(schema.items.$ref);
-                                        } else {
-                                          schemaWrapper.definitions = Object.assign({}, defs);
-                                          $RefParser.dereference(schemaWrapper).catch(function(err) {
-                                            console.log(err);
-                                          });
-                                        }
-
-                                        var view = new JSONSchemaView(schema, 3);
-                                        $('#responses-ManagementOfConfiguration-putConfiguration-200-schema-data').val(JSON.stringify(schema));
-                                        var result = $('#responses-ManagementOfConfiguration-putConfiguration-schema-200');
-                                        result.empty();
-                                        result.append(view.render());
-                                      });
-                                    </script>
-                                  </div>
-                                  <input id='responses-ManagementOfConfiguration-putConfiguration-200-schema-data' type='hidden' value=''></input>
-                                </div>
-                            </div>
-                            <h3 id="examples-ManagementOfConfiguration-putConfiguration-title-400"></h3>
-                            <p id="examples-ManagementOfConfiguration-putConfiguration-description-400" class="marked"></p>
-                            <script>
-                              var responseManagementOfConfiguration400_description = `Invalid configuration provided`;
-                              var responseManagementOfConfiguration400_description_break = responseManagementOfConfiguration400_description.indexOf('\n');
-                              if (responseManagementOfConfiguration400_description_break == -1) {
-                                $("#examples-ManagementOfConfiguration-putConfiguration-title-400").text("Status: 400 - " + responseManagementOfConfiguration400_description);
-                              } else {
-                                $("#examples-ManagementOfConfiguration-putConfiguration-title-400").text("Status: 400 - " + responseManagementOfConfiguration400_description.substring(0, responseManagementOfConfiguration400_description_break));
-                                $("#examples-ManagementOfConfiguration-putConfiguration-description-400").html(responseManagementOfConfiguration400_description.substring(responseManagementOfConfiguration400_description_break));
-                              }
-                            </script>
-
-
-                            <ul id="responses-detail-ManagementOfConfiguration-putConfiguration-400" class="nav nav-tabs nav-tabs-examples" >
-                                <li class="active">
-                                  <a data-toggle="tab" href="#responses-ManagementOfConfiguration-putConfiguration-400-schema">Schema</a>
-                                </li>
-
-
-
-
-                            </ul>
-
-
-                            <div class="tab-content" id="responses-ManagementOfConfiguration-putConfiguration-400-wrapper" style='margin-bottom: 10px;'>
-                                <div class="tab-pane active" id="responses-ManagementOfConfiguration-putConfiguration-400-schema">
-                                  <div id="responses-ManagementOfConfiguration-putConfiguration-schema-400" class="exampleStyle">
-                                    <script>
-                                      $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Invalid configuration provided",
-  "content" : {
-    "*/*" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/error_information"
-      }
-    }
-  }
-};
-                                        var schema = findNode('schema',schemaWrapper).schema;
-                                        if (!schema) {
-                                          schema = schemaWrapper.schema;
-                                        }
-                                        if (schema.$ref != null) {
-                                          schema = defsParser.$refs.get(schema.$ref);
-                                        } else if (schema.items != null && schema.items.$ref != null) {
-                                            schema.items = defsParser.$refs.get(schema.items.$ref);
-                                        } else {
-                                          schemaWrapper.definitions = Object.assign({}, defs);
-                                          $RefParser.dereference(schemaWrapper).catch(function(err) {
-                                            console.log(err);
-                                          });
-                                        }
-
-                                        var view = new JSONSchemaView(schema, 3);
-                                        $('#responses-ManagementOfConfiguration-putConfiguration-400-schema-data').val(JSON.stringify(schema));
-                                        var result = $('#responses-ManagementOfConfiguration-putConfiguration-schema-400');
-                                        result.empty();
-                                        result.append(view.render());
-                                      });
-                                    </script>
-                                  </div>
-                                  <input id='responses-ManagementOfConfiguration-putConfiguration-400-schema-data' type='hidden' value=''></input>
-                                </div>
-                            </div>
-                            <h3 id="examples-ManagementOfConfiguration-putConfiguration-title-500"></h3>
-                            <p id="examples-ManagementOfConfiguration-putConfiguration-description-500" class="marked"></p>
-                            <script>
-                              var responseManagementOfConfiguration500_description = `Something went wrong when replacing the configuration. Try again.`;
-                              var responseManagementOfConfiguration500_description_break = responseManagementOfConfiguration500_description.indexOf('\n');
-                              if (responseManagementOfConfiguration500_description_break == -1) {
-                                $("#examples-ManagementOfConfiguration-putConfiguration-title-500").text("Status: 500 - " + responseManagementOfConfiguration500_description);
-                              } else {
-                                $("#examples-ManagementOfConfiguration-putConfiguration-title-500").text("Status: 500 - " + responseManagementOfConfiguration500_description.substring(0, responseManagementOfConfiguration500_description_break));
-                                $("#examples-ManagementOfConfiguration-putConfiguration-description-500").html(responseManagementOfConfiguration500_description.substring(responseManagementOfConfiguration500_description_break));
-                              }
-                            </script>
-
-
-                            <ul id="responses-detail-ManagementOfConfiguration-putConfiguration-500" class="nav nav-tabs nav-tabs-examples" >
-                                <li class="active">
-                                  <a data-toggle="tab" href="#responses-ManagementOfConfiguration-putConfiguration-500-schema">Schema</a>
-                                </li>
-
-
-
-
-                            </ul>
-
-
-                            <div class="tab-content" id="responses-ManagementOfConfiguration-putConfiguration-500-wrapper" style='margin-bottom: 10px;'>
-                                <div class="tab-pane active" id="responses-ManagementOfConfiguration-putConfiguration-500-schema">
-                                  <div id="responses-ManagementOfConfiguration-putConfiguration-schema-500" class="exampleStyle">
-                                    <script>
-                                      $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Something went wrong when replacing the configuration. Try again.",
-  "content" : {
-    "*/*" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/error_information"
-      }
-    }
-  }
-};
-                                        var schema = findNode('schema',schemaWrapper).schema;
-                                        if (!schema) {
-                                          schema = schemaWrapper.schema;
-                                        }
-                                        if (schema.$ref != null) {
-                                          schema = defsParser.$refs.get(schema.$ref);
-                                        } else if (schema.items != null && schema.items.$ref != null) {
-                                            schema.items = defsParser.$refs.get(schema.items.$ref);
-                                        } else {
-                                          schemaWrapper.definitions = Object.assign({}, defs);
-                                          $RefParser.dereference(schemaWrapper).catch(function(err) {
-                                            console.log(err);
-                                          });
-                                        }
-
-                                        var view = new JSONSchemaView(schema, 3);
-                                        $('#responses-ManagementOfConfiguration-putConfiguration-500-schema-data').val(JSON.stringify(schema));
-                                        var result = $('#responses-ManagementOfConfiguration-putConfiguration-schema-500');
-                                        result.empty();
-                                        result.append(view.render());
-                                      });
-                                    </script>
-                                  </div>
-                                  <input id='responses-ManagementOfConfiguration-putConfiguration-500-schema-data' type='hidden' value=''></input>
-                                </div>
-                            </div>
-                        </article>
-                      </div>
-                      <hr>
-                  </section>
                 <section id="api-NearRTRICRepository">
                   <h1>NearRTRICRepository</h1>
                     <div id="api-NearRTRICRepository-getRic">
@@ -11152,7 +10866,7 @@
         String ricId = ricId_example; // String | The identity of a Near-RT RIC to get information for.
 
         try {
-            ric_info_v2 result = apiInstance.getRic(managedElementId, ricId);
+            ric_info result = apiInstance.getRic(managedElementId, ricId);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling NearRTRICRepositoryApi#getRic");
@@ -11173,7 +10887,7 @@
         String ricId = ricId_example; // String | The identity of a Near-RT RIC to get information for.
 
         try {
-            ric_info_v2 result = apiInstance.getRic(managedElementId, ricId);
+            ric_info result = apiInstance.getRic(managedElementId, ricId);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling NearRTRICRepositoryApi#getRic");
@@ -11197,7 +10911,7 @@
 // Returns info for one Near-RT RIC
 [apiInstance getRicWith:managedElementId
     ricId:ricId
-              completionHandler: ^(ric_info_v2 output, NSError* error) {
+              completionHandler: ^(ric_info output, NSError* error) {
     if (output) {
         NSLog(@"%@", output);
     }
@@ -11253,7 +10967,7 @@
 
             try {
                 // Returns info for one Near-RT RIC
-                ric_info_v2 result = apiInstance.getRic(managedElementId, ricId);
+                ric_info result = apiInstance.getRic(managedElementId, ricId);
                 Debug.WriteLine(result);
             } catch (Exception e) {
                 Debug.Print("Exception when calling NearRTRICRepositoryApi.getRic: " + e.Message );
@@ -11427,22 +11141,18 @@
                                   <div id="responses-NearRTRICRepository-getRic-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Near-RT RIC is found",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/ric_info_v2"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -11493,22 +11203,18 @@
                                   <div id="responses-NearRTRICRepository-getRic-schema-404" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Near-RT RIC is not found",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/error_information"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -11587,7 +11293,7 @@
         String policytypeId = policytypeId_example; // String | The identity of a policy type. If given, all Near-RT RICs supporting the policy type are returned
 
         try {
-            ric_info_list_v2 result = apiInstance.getRics(policytypeId);
+            ric_info_list result = apiInstance.getRics(policytypeId);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling NearRTRICRepositoryApi#getRics");
@@ -11607,7 +11313,7 @@
         String policytypeId = policytypeId_example; // String | The identity of a policy type. If given, all Near-RT RICs supporting the policy type are returned
 
         try {
-            ric_info_list_v2 result = apiInstance.getRics(policytypeId);
+            ric_info_list result = apiInstance.getRics(policytypeId);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling NearRTRICRepositoryApi#getRics");
@@ -11629,7 +11335,7 @@
 
 // Query Near-RT RIC information
 [apiInstance getRicsWith:policytypeId
-              completionHandler: ^(ric_info_list_v2 output, NSError* error) {
+              completionHandler: ^(ric_info_list output, NSError* error) {
     if (output) {
         NSLog(@"%@", output);
     }
@@ -11683,7 +11389,7 @@
 
             try {
                 // Query Near-RT RIC information
-                ric_info_list_v2 result = apiInstance.getRics(policytypeId);
+                ric_info_list result = apiInstance.getRics(policytypeId);
                 Debug.WriteLine(result);
             } catch (Exception e) {
                 Debug.Print("Exception when calling NearRTRICRepositoryApi.getRics: " + e.Message );
@@ -11833,22 +11539,18 @@
                                   <div id="responses-NearRTRICRepository-getRics-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "OK",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/ric_info_list_v2"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -11899,22 +11601,18 @@
                                   <div id="responses-NearRTRICRepository-getRics-schema-404" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Policy type is not found",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/error_information"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -11939,368 +11637,6 @@
                       </div>
                       <hr>
                   </section>
-                <section id="api-ServiceCallbacks">
-                  <h1>ServiceCallbacks</h1>
-                    <div id="api-ServiceCallbacks-serviceCallback">
-                      <article id="api-ServiceCallbacks-serviceCallback-0" data-group="User" data-name="serviceCallback" data-version="0">
-                        <div class="pull-left">
-                          <h1>serviceCallback</h1>
-                          <p>Callback for Near-RT RIC status</p>
-                        </div>
-                        <div class="pull-right"></div>
-                        <div class="clearfix"></div>
-                        <p></p>
-                        <p class="marked">The URL to this call is registered at Service registration.</p>
-                        <p></p>
-                        <br />
-                        <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/r-app/near-rt-ric-status</span></code></pre>
-                        <p>
-                          <h3>Usage and SDK Samples</h3>
-                        </p>
-                        <ul class="nav nav-tabs nav-tabs-examples">
-                          <li class="active"><a href="#examples-ServiceCallbacks-serviceCallback-0-curl">Curl</a></li>
-                          <li class=""><a href="#examples-ServiceCallbacks-serviceCallback-0-java">Java</a></li>
-                          <li class=""><a href="#examples-ServiceCallbacks-serviceCallback-0-android">Android</a></li>
-                          <!--<li class=""><a href="#examples-ServiceCallbacks-serviceCallback-0-groovy">Groovy</a></li>-->
-                          <li class=""><a href="#examples-ServiceCallbacks-serviceCallback-0-objc">Obj-C</a></li>
-                          <li class=""><a href="#examples-ServiceCallbacks-serviceCallback-0-javascript">JavaScript</a></li>
-                          <!--<li class=""><a href="#examples-ServiceCallbacks-serviceCallback-0-angular">Angular</a></li>-->
-                          <li class=""><a href="#examples-ServiceCallbacks-serviceCallback-0-csharp">C#</a></li>
-                          <li class=""><a href="#examples-ServiceCallbacks-serviceCallback-0-php">PHP</a></li>
-                          <li class=""><a href="#examples-ServiceCallbacks-serviceCallback-0-perl">Perl</a></li>
-                          <li class=""><a href="#examples-ServiceCallbacks-serviceCallback-0-python">Python</a></li>
-                          <li class=""><a href="#examples-ServiceCallbacks-serviceCallback-0-rust">Rust</a></li>
-                        </ul>
-
-                        <div class="tab-content">
-                          <div class="tab-pane active" id="examples-ServiceCallbacks-serviceCallback-0-curl">
-                            <pre class="prettyprint"><code class="language-bsh">curl -X POST \
- -H "Accept: application/json" \
- -H "Content-Type: application/json" \
- "http://localhost/r-app/near-rt-ric-status" \
- -d ''
-</code></pre>
-                          </div>
-                          <div class="tab-pane" id="examples-ServiceCallbacks-serviceCallback-0-java">
-                            <pre class="prettyprint"><code class="language-java">import org.openapitools.client.*;
-import org.openapitools.client.auth.*;
-import org.openapitools.client.model.*;
-import org.openapitools.client.api.ServiceCallbacksApi;
-
-import java.io.File;
-import java.util.*;
-
-public class ServiceCallbacksApiExample {
-    public static void main(String[] args) {
-
-        // Create an instance of the API class
-        ServiceCallbacksApi apiInstance = new ServiceCallbacksApi();
-        ServiceCallbackInfoV2 serviceCallbackInfoV2 = ; // ServiceCallbackInfoV2 | 
-
-        try {
-            Object result = apiInstance.serviceCallback(serviceCallbackInfoV2);
-            System.out.println(result);
-        } catch (ApiException e) {
-            System.err.println("Exception when calling ServiceCallbacksApi#serviceCallback");
-            e.printStackTrace();
-        }
-    }
-}
-</code></pre>
-                          </div>
-
-                          <div class="tab-pane" id="examples-ServiceCallbacks-serviceCallback-0-android">
-                            <pre class="prettyprint"><code class="language-java">import org.openapitools.client.api.ServiceCallbacksApi;
-
-public class ServiceCallbacksApiExample {
-    public static void main(String[] args) {
-        ServiceCallbacksApi apiInstance = new ServiceCallbacksApi();
-        ServiceCallbackInfoV2 serviceCallbackInfoV2 = ; // ServiceCallbackInfoV2 | 
-
-        try {
-            Object result = apiInstance.serviceCallback(serviceCallbackInfoV2);
-            System.out.println(result);
-        } catch (ApiException e) {
-            System.err.println("Exception when calling ServiceCallbacksApi#serviceCallback");
-            e.printStackTrace();
-        }
-    }
-}</code></pre>
-                          </div>
-  <!--
-  <div class="tab-pane" id="examples-ServiceCallbacks-serviceCallback-0-groovy">
-  <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre>
-  </div> -->
-                            <div class="tab-pane" id="examples-ServiceCallbacks-serviceCallback-0-objc">
-                              <pre class="prettyprint"><code class="language-cpp">
-
-// Create an instance of the API class
-ServiceCallbacksApi *apiInstance = [[ServiceCallbacksApi alloc] init];
-ServiceCallbackInfoV2 *serviceCallbackInfoV2 = ; // 
-
-// Callback for Near-RT RIC status
-[apiInstance serviceCallbackWith:serviceCallbackInfoV2
-              completionHandler: ^(Object output, NSError* error) {
-    if (output) {
-        NSLog(@"%@", output);
-    }
-    if (error) {
-        NSLog(@"Error: %@", error);
-    }
-}];
-</code></pre>
-                            </div>
-
-                            <div class="tab-pane" id="examples-ServiceCallbacks-serviceCallback-0-javascript">
-                              <pre class="prettyprint"><code class="language-js">var A1PolicyManagementService = require('a1_policy_management_service');
-
-// Create an instance of the API class
-var api = new A1PolicyManagementService.ServiceCallbacksApi()
-var serviceCallbackInfoV2 = ; // {ServiceCallbackInfoV2} 
-
-var callback = function(error, data, response) {
-  if (error) {
-    console.error(error);
-  } else {
-    console.log('API called successfully. Returned data: ' + data);
-  }
-};
-api.serviceCallback(serviceCallbackInfoV2, callback);
-</code></pre>
-                            </div>
-
-                            <!--<div class="tab-pane" id="examples-ServiceCallbacks-serviceCallback-0-angular">
-              <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre>
-            </div>-->
-                            <div class="tab-pane" id="examples-ServiceCallbacks-serviceCallback-0-csharp">
-                              <pre class="prettyprint"><code class="language-cs">using System;
-using System.Diagnostics;
-using Org.OpenAPITools.Api;
-using Org.OpenAPITools.Client;
-using Org.OpenAPITools.Model;
-
-namespace Example
-{
-    public class serviceCallbackExample
-    {
-        public void main()
-        {
-
-            // Create an instance of the API class
-            var apiInstance = new ServiceCallbacksApi();
-            var serviceCallbackInfoV2 = new ServiceCallbackInfoV2(); // ServiceCallbackInfoV2 | 
-
-            try {
-                // Callback for Near-RT RIC status
-                Object result = apiInstance.serviceCallback(serviceCallbackInfoV2);
-                Debug.WriteLine(result);
-            } catch (Exception e) {
-                Debug.Print("Exception when calling ServiceCallbacksApi.serviceCallback: " + e.Message );
-            }
-        }
-    }
-}
-</code></pre>
-                            </div>
-
-                            <div class="tab-pane" id="examples-ServiceCallbacks-serviceCallback-0-php">
-                              <pre class="prettyprint"><code class="language-php"><&#63;php
-require_once(__DIR__ . '/vendor/autoload.php');
-
-// Create an instance of the API class
-$api_instance = new OpenAPITools\Client\Api\ServiceCallbacksApi();
-$serviceCallbackInfoV2 = ; // ServiceCallbackInfoV2 | 
-
-try {
-    $result = $api_instance->serviceCallback($serviceCallbackInfoV2);
-    print_r($result);
-} catch (Exception $e) {
-    echo 'Exception when calling ServiceCallbacksApi->serviceCallback: ', $e->getMessage(), PHP_EOL;
-}
-?></code></pre>
-                            </div>
-
-                            <div class="tab-pane" id="examples-ServiceCallbacks-serviceCallback-0-perl">
-                              <pre class="prettyprint"><code class="language-perl">use Data::Dumper;
-use WWW::OPenAPIClient::Configuration;
-use WWW::OPenAPIClient::ServiceCallbacksApi;
-
-# Create an instance of the API class
-my $api_instance = WWW::OPenAPIClient::ServiceCallbacksApi->new();
-my $serviceCallbackInfoV2 = WWW::OPenAPIClient::Object::ServiceCallbackInfoV2->new(); # ServiceCallbackInfoV2 | 
-
-eval {
-    my $result = $api_instance->serviceCallback(serviceCallbackInfoV2 => $serviceCallbackInfoV2);
-    print Dumper($result);
-};
-if ($@) {
-    warn "Exception when calling ServiceCallbacksApi->serviceCallback: $@\n";
-}</code></pre>
-                            </div>
-
-                            <div class="tab-pane" id="examples-ServiceCallbacks-serviceCallback-0-python">
-                              <pre class="prettyprint"><code class="language-python">from __future__ import print_statement
-import time
-import openapi_client
-from openapi_client.rest import ApiException
-from pprint import pprint
-
-# Create an instance of the API class
-api_instance = openapi_client.ServiceCallbacksApi()
-serviceCallbackInfoV2 =  # ServiceCallbackInfoV2 | 
-
-try:
-    # Callback for Near-RT RIC status
-    api_response = api_instance.service_callback(serviceCallbackInfoV2)
-    pprint(api_response)
-except ApiException as e:
-    print("Exception when calling ServiceCallbacksApi->serviceCallback: %s\n" % e)</code></pre>
-                            </div>
-
-                            <div class="tab-pane" id="examples-ServiceCallbacks-serviceCallback-0-rust">
-                              <pre class="prettyprint"><code class="language-rust">extern crate ServiceCallbacksApi;
-
-pub fn main() {
-    let serviceCallbackInfoV2 = ; // ServiceCallbackInfoV2
-
-    let mut context = ServiceCallbacksApi::Context::default();
-    let result = client.serviceCallback(serviceCallbackInfoV2, &context).wait();
-
-    println!("{:?}", result);
-}
-</code></pre>
-                            </div>
-                          </div>
-
-                          <h2>Scopes</h2>
-                          <table>
-                            
-                          </table>
-
-                          <h2>Parameters</h2>
-
-
-
-                            <div class="methodsubtabletitle">Body parameters</div>
-                            <table id="methodsubtable">
-                              <tr>
-                                <th width="150px">Name</th>
-                                <th>Description</th>
-                              </tr>
-                                <tr><td style="width:150px;">serviceCallbackInfoV2 <span style="color:red;">*</span></td>
-<td>
-<p class="marked"></p>
-<script>
-$(document).ready(function() {
-  var schemaWrapper = {
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/service_callback_info_v2"
-      }
-    }
-  },
-  "required" : true
-};
-
-  var schema = findNode('schema',schemaWrapper).schema;
-  if (!schema) {
-    schema = schemaWrapper.schema;
-  }
-  if (schema.$ref != null) {
-    schema = defsParser.$refs.get(schema.$ref);
-  } else {
-    schemaWrapper.definitions = Object.assign({}, defs);
-    $RefParser.dereference(schemaWrapper).catch(function(err) {
-      console.log(err);
-    });
-  }
-
-  var view = new JSONSchemaView(schema,2,{isBodyParam: true});
-  var result = $('#d2e199_serviceCallback_serviceCallbackInfoV2');
-  result.empty();
-  result.append(view.render());
-});
-</script>
-<div id="d2e199_serviceCallback_serviceCallbackInfoV2"></div>
-</td>
-</tr>
-
-                            </table>
-
-
-
-                          <h2>Responses</h2>
-                            <h3 id="examples-ServiceCallbacks-serviceCallback-title-200"></h3>
-                            <p id="examples-ServiceCallbacks-serviceCallback-description-200" class="marked"></p>
-                            <script>
-                              var responseServiceCallbacks200_description = `OK`;
-                              var responseServiceCallbacks200_description_break = responseServiceCallbacks200_description.indexOf('\n');
-                              if (responseServiceCallbacks200_description_break == -1) {
-                                $("#examples-ServiceCallbacks-serviceCallback-title-200").text("Status: 200 - " + responseServiceCallbacks200_description);
-                              } else {
-                                $("#examples-ServiceCallbacks-serviceCallback-title-200").text("Status: 200 - " + responseServiceCallbacks200_description.substring(0, responseServiceCallbacks200_description_break));
-                                $("#examples-ServiceCallbacks-serviceCallback-description-200").html(responseServiceCallbacks200_description.substring(responseServiceCallbacks200_description_break));
-                              }
-                            </script>
-
-
-                            <ul id="responses-detail-ServiceCallbacks-serviceCallback-200" class="nav nav-tabs nav-tabs-examples" >
-                                <li class="active">
-                                  <a data-toggle="tab" href="#responses-ServiceCallbacks-serviceCallback-200-schema">Schema</a>
-                                </li>
-
-
-
-
-                            </ul>
-
-
-                            <div class="tab-content" id="responses-ServiceCallbacks-serviceCallback-200-wrapper" style='margin-bottom: 10px;'>
-                                <div class="tab-pane active" id="responses-ServiceCallbacks-serviceCallback-200-schema">
-                                  <div id="responses-ServiceCallbacks-serviceCallback-schema-200" class="exampleStyle">
-                                    <script>
-                                      $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "OK",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/void"
-      }
-    }
-  }
-};
-                                        var schema = findNode('schema',schemaWrapper).schema;
-                                        if (!schema) {
-                                          schema = schemaWrapper.schema;
-                                        }
-                                        if (schema.$ref != null) {
-                                          schema = defsParser.$refs.get(schema.$ref);
-                                        } else if (schema.items != null && schema.items.$ref != null) {
-                                            schema.items = defsParser.$refs.get(schema.items.$ref);
-                                        } else {
-                                          schemaWrapper.definitions = Object.assign({}, defs);
-                                          $RefParser.dereference(schemaWrapper).catch(function(err) {
-                                            console.log(err);
-                                          });
-                                        }
-
-                                        var view = new JSONSchemaView(schema, 3);
-                                        $('#responses-ServiceCallbacks-serviceCallback-200-schema-data').val(JSON.stringify(schema));
-                                        var result = $('#responses-ServiceCallbacks-serviceCallback-schema-200');
-                                        result.empty();
-                                        result.append(view.render());
-                                      });
-                                    </script>
-                                  </div>
-                                  <input id='responses-ServiceCallbacks-serviceCallback-200-schema-data' type='hidden' value=''></input>
-                                </div>
-                            </div>
-                        </article>
-                      </div>
-                      <hr>
-                  </section>
                 <section id="api-ServiceRegistryAndSupervision">
                   <h1>ServiceRegistryAndSupervision</h1>
                     <div id="api-ServiceRegistryAndSupervision-deleteService">
@@ -12602,22 +11938,18 @@
                                   <div id="responses-ServiceRegistryAndSupervision-deleteService-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Not used",
-  "content" : {
-    "*/*" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/void"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -12668,22 +12000,18 @@
                                   <div id="responses-ServiceRegistryAndSupervision-deleteService-schema-204" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Service unregistered",
-  "content" : {
-    "*/*" : {
-      "schema" : {
-        "type" : "object"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -12734,22 +12062,18 @@
                                   <div id="responses-ServiceRegistryAndSupervision-deleteService-schema-404" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Service not found",
-  "content" : {
-    "*/*" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/error_information"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -12828,7 +12152,7 @@
         String serviceId = serviceId_example; // String | The identity of the service
 
         try {
-            service_list_v2 result = apiInstance.getServices(serviceId);
+            service_status_list result = apiInstance.getServices(serviceId);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling ServiceRegistryAndSupervisionApi#getServices");
@@ -12848,7 +12172,7 @@
         String serviceId = serviceId_example; // String | The identity of the service
 
         try {
-            service_list_v2 result = apiInstance.getServices(serviceId);
+            service_status_list result = apiInstance.getServices(serviceId);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling ServiceRegistryAndSupervisionApi#getServices");
@@ -12870,7 +12194,7 @@
 
 // Returns service information
 [apiInstance getServicesWith:serviceId
-              completionHandler: ^(service_list_v2 output, NSError* error) {
+              completionHandler: ^(service_status_list output, NSError* error) {
     if (output) {
         NSLog(@"%@", output);
     }
@@ -12924,7 +12248,7 @@
 
             try {
                 // Returns service information
-                service_list_v2 result = apiInstance.getServices(serviceId);
+                service_status_list result = apiInstance.getServices(serviceId);
                 Debug.WriteLine(result);
             } catch (Exception e) {
                 Debug.Print("Exception when calling ServiceRegistryAndSupervisionApi.getServices: " + e.Message );
@@ -13074,22 +12398,18 @@
                                   <div id="responses-ServiceRegistryAndSupervision-getServices-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "OK",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/service_list_v2"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -13140,22 +12460,18 @@
                                   <div id="responses-ServiceRegistryAndSupervision-getServices-schema-404" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Service is not found",
-  "content" : {
-    "application/json" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/error_information"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -13478,22 +12794,18 @@
                                   <div id="responses-ServiceRegistryAndSupervision-keepAliveService-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Service supervision timer refreshed, OK",
-  "content" : {
-    "*/*" : {
-      "schema" : {
-        "type" : "object"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -13544,22 +12856,18 @@
                                   <div id="responses-ServiceRegistryAndSupervision-keepAliveService-schema-404" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "The service is not found, needs re-registration",
-  "content" : {
-    "*/*" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/error_information"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -13637,10 +12945,10 @@
 
         // Create an instance of the API class
         ServiceRegistryAndSupervisionApi apiInstance = new ServiceRegistryAndSupervisionApi();
-        ServiceRegistrationInfoV2 serviceRegistrationInfoV2 = ; // ServiceRegistrationInfoV2 | 
+        ServiceRegistrationInfo serviceRegistrationInfo = ; // ServiceRegistrationInfo | 
 
         try {
-            Object result = apiInstance.putService(serviceRegistrationInfoV2);
+            Object result = apiInstance.putService(serviceRegistrationInfo);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling ServiceRegistryAndSupervisionApi#putService");
@@ -13657,10 +12965,10 @@
 public class ServiceRegistryAndSupervisionApiExample {
     public static void main(String[] args) {
         ServiceRegistryAndSupervisionApi apiInstance = new ServiceRegistryAndSupervisionApi();
-        ServiceRegistrationInfoV2 serviceRegistrationInfoV2 = ; // ServiceRegistrationInfoV2 | 
+        ServiceRegistrationInfo serviceRegistrationInfo = ; // ServiceRegistrationInfo | 
 
         try {
-            Object result = apiInstance.putService(serviceRegistrationInfoV2);
+            Object result = apiInstance.putService(serviceRegistrationInfo);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling ServiceRegistryAndSupervisionApi#putService");
@@ -13678,10 +12986,10 @@
 
 // Create an instance of the API class
 ServiceRegistryAndSupervisionApi *apiInstance = [[ServiceRegistryAndSupervisionApi alloc] init];
-ServiceRegistrationInfoV2 *serviceRegistrationInfoV2 = ; // 
+ServiceRegistrationInfo *serviceRegistrationInfo = ; // 
 
 // Register a service
-[apiInstance putServiceWith:serviceRegistrationInfoV2
+[apiInstance putServiceWith:serviceRegistrationInfo
               completionHandler: ^(Object output, NSError* error) {
     if (output) {
         NSLog(@"%@", output);
@@ -13698,7 +13006,7 @@
 
 // Create an instance of the API class
 var api = new A1PolicyManagementService.ServiceRegistryAndSupervisionApi()
-var serviceRegistrationInfoV2 = ; // {ServiceRegistrationInfoV2} 
+var serviceRegistrationInfo = ; // {ServiceRegistrationInfo} 
 
 var callback = function(error, data, response) {
   if (error) {
@@ -13707,7 +13015,7 @@
     console.log('API called successfully. Returned data: ' + data);
   }
 };
-api.putService(serviceRegistrationInfoV2, callback);
+api.putService(serviceRegistrationInfo, callback);
 </code></pre>
                             </div>
 
@@ -13730,11 +13038,11 @@
 
             // Create an instance of the API class
             var apiInstance = new ServiceRegistryAndSupervisionApi();
-            var serviceRegistrationInfoV2 = new ServiceRegistrationInfoV2(); // ServiceRegistrationInfoV2 | 
+            var serviceRegistrationInfo = new ServiceRegistrationInfo(); // ServiceRegistrationInfo | 
 
             try {
                 // Register a service
-                Object result = apiInstance.putService(serviceRegistrationInfoV2);
+                Object result = apiInstance.putService(serviceRegistrationInfo);
                 Debug.WriteLine(result);
             } catch (Exception e) {
                 Debug.Print("Exception when calling ServiceRegistryAndSupervisionApi.putService: " + e.Message );
@@ -13751,10 +13059,10 @@
 
 // Create an instance of the API class
 $api_instance = new OpenAPITools\Client\Api\ServiceRegistryAndSupervisionApi();
-$serviceRegistrationInfoV2 = ; // ServiceRegistrationInfoV2 | 
+$serviceRegistrationInfo = ; // ServiceRegistrationInfo | 
 
 try {
-    $result = $api_instance->putService($serviceRegistrationInfoV2);
+    $result = $api_instance->putService($serviceRegistrationInfo);
     print_r($result);
 } catch (Exception $e) {
     echo 'Exception when calling ServiceRegistryAndSupervisionApi->putService: ', $e->getMessage(), PHP_EOL;
@@ -13769,10 +13077,10 @@
 
 # Create an instance of the API class
 my $api_instance = WWW::OPenAPIClient::ServiceRegistryAndSupervisionApi->new();
-my $serviceRegistrationInfoV2 = WWW::OPenAPIClient::Object::ServiceRegistrationInfoV2->new(); # ServiceRegistrationInfoV2 | 
+my $serviceRegistrationInfo = WWW::OPenAPIClient::Object::ServiceRegistrationInfo->new(); # ServiceRegistrationInfo | 
 
 eval {
-    my $result = $api_instance->putService(serviceRegistrationInfoV2 => $serviceRegistrationInfoV2);
+    my $result = $api_instance->putService(serviceRegistrationInfo => $serviceRegistrationInfo);
     print Dumper($result);
 };
 if ($@) {
@@ -13789,11 +13097,11 @@
 
 # Create an instance of the API class
 api_instance = openapi_client.ServiceRegistryAndSupervisionApi()
-serviceRegistrationInfoV2 =  # ServiceRegistrationInfoV2 | 
+serviceRegistrationInfo =  # ServiceRegistrationInfo | 
 
 try:
     # Register a service
-    api_response = api_instance.put_service(serviceRegistrationInfoV2)
+    api_response = api_instance.put_service(serviceRegistrationInfo)
     pprint(api_response)
 except ApiException as e:
     print("Exception when calling ServiceRegistryAndSupervisionApi->putService: %s\n" % e)</code></pre>
@@ -13803,10 +13111,10 @@
                               <pre class="prettyprint"><code class="language-rust">extern crate ServiceRegistryAndSupervisionApi;
 
 pub fn main() {
-    let serviceRegistrationInfoV2 = ; // ServiceRegistrationInfoV2
+    let serviceRegistrationInfo = ; // ServiceRegistrationInfo
 
     let mut context = ServiceRegistryAndSupervisionApi::Context::default();
-    let result = client.putService(serviceRegistrationInfoV2, &context).wait();
+    let result = client.putService(serviceRegistrationInfo, &context).wait();
 
     println!("{:?}", result);
 }
@@ -13829,7 +13137,7 @@
                                 <th width="150px">Name</th>
                                 <th>Description</th>
                               </tr>
-                                <tr><td style="width:150px;">serviceRegistrationInfoV2 <span style="color:red;">*</span></td>
+                                <tr><td style="width:150px;">serviceRegistrationInfo <span style="color:red;">*</span></td>
 <td>
 <p class="marked"></p>
 <script>
@@ -13838,7 +13146,7 @@
   "content" : {
     "application/json" : {
       "schema" : {
-        "$ref" : "#/components/schemas/service_registration_info_v2"
+        "$ref" : "#/components/schemas/service_registration_info"
       }
     }
   },
@@ -13859,12 +13167,12 @@
   }
 
   var view = new JSONSchemaView(schema,2,{isBodyParam: true});
-  var result = $('#d2e199_putService_serviceRegistrationInfoV2');
+  var result = $('#d2e199_putService_serviceRegistrationInfo');
   result.empty();
   result.append(view.render());
 });
 </script>
-<div id="d2e199_putService_serviceRegistrationInfoV2"></div>
+<div id="d2e199_putService_serviceRegistrationInfo"></div>
 </td>
 </tr>
 
@@ -13903,22 +13211,18 @@
                                   <div id="responses-ServiceRegistryAndSupervision-putService-schema-200" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Service updated",
-  "content" : {
-    "*/*" : {
-      "schema" : {
-        "type" : "object"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -13969,22 +13273,18 @@
                                   <div id="responses-ServiceRegistryAndSupervision-putService-schema-201" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "Service created",
-  "content" : {
-    "*/*" : {
-      "schema" : {
-        "type" : "object"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -14035,22 +13335,18 @@
                                   <div id="responses-ServiceRegistryAndSupervision-putService-schema-400" class="exampleStyle">
                                     <script>
                                       $(document).ready(function() {
-                                        var schemaWrapper = {
-  "description" : "The ServiceRegistrationInfo is not accepted",
-  "content" : {
-    "*/*" : {
-      "schema" : {
-        "$ref" : "#/components/schemas/error_information"
-      }
-    }
-  }
-};
+                                        var schemaWrapper = ;
                                         var schema = findNode('schema',schemaWrapper).schema;
                                         if (!schema) {
                                           schema = schemaWrapper.schema;
                                         }
                                         if (schema.$ref != null) {
                                           schema = defsParser.$refs.get(schema.$ref);
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
                                         } else if (schema.items != null && schema.items.$ref != null) {
                                             schema.items = defsParser.$refs.get(schema.items.$ref);
                                         } else {
@@ -14082,7 +13378,7 @@
                   <div class="app-desc">Information URL: <a href="https://wiki.onap.org/display/DW/O-RAN+A1+Policies+in+ONAP">https://wiki.onap.org/display/DW/O-RAN+A1+Policies+in+ONAP</a></div>
                   <div class="app-desc">Contact Info: <a href="team@openapitools.org">team@openapitools.org</a></div>
               </p>
-                <div class="license-info">Copyright (C) 2020-2023 Nordix Foundation. Licensed under the Apache License.</div>
+                <div class="license-info">Copyright (C) 2020-2023 Nordix Foundation. Licensed under the Apache License, and Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.</div>
                 <div class="license-url">http://www.apache.org/licenses/LICENSE-2.0</div>
             </div>
           </div>
diff --git a/docs/offeredapis/swagger/pms-api.json b/docs/offeredapis/swagger/pms-api.json
index 33fa5e1..d6d212f 100644
--- a/docs/offeredapis/swagger/pms-api.json
+++ b/docs/offeredapis/swagger/pms-api.json
@@ -1,1020 +1,1791 @@
 {
-    "components": {"schemas": {
-        "error_information": {
-            "description": "Problem as defined in https://tools.ietf.org/html/rfc7807",
-            "type": "object",
-            "properties": {
-                "detail": {
-                    "description": " A human-readable explanation specific to this occurrence of the problem.",
-                    "type": "string",
-                    "example": "Policy type not found"
-                },
-                "status": {
-                    "format": "int32",
-                    "description": "The HTTP status code generated by the origin server for this occurrence of the problem. ",
-                    "type": "integer",
-                    "example": 404
-                }
-            }
-        },
-        "void": {
-            "description": "Void/empty",
-            "type": "object"
-        },
-        "status_info_v2": {
-            "type": "object",
-            "properties": {"status": {
-                "description": "status text",
-                "type": "string"
-            }}
-        },
-        "authorization_result": {
-            "description": "Result of authorization",
-            "type": "object",
-            "required": ["result"],
-            "properties": {"result": {
-                "description": "If true, the access is granted",
-                "type": "boolean"
-            }}
-        },
-        "ric_info_v2": {
-            "description": "Information for a Near-RT RIC",
-            "type": "object",
-            "properties": {
-                "ric_id": {
-                    "description": "identity of the Near-RT RIC",
-                    "type": "string"
-                },
-                "managed_element_ids": {
-                    "description": "O1 identities for managed entities",
-                    "type": "array",
-                    "items": {
-                        "description": "O1 identities for managed entities",
-                        "type": "string"
-                    }
-                },
-                "state": {
-                    "description": "Represents the states for a Near-RT RIC",
-                    "type": "string",
-                    "enum": [
-                        "UNAVAILABLE",
-                        "AVAILABLE",
-                        "SYNCHRONIZING",
-                        "CONSISTENCY_CHECK"
-                    ]
-                },
-                "policytype_ids": {
-                    "description": "supported policy types",
-                    "type": "array",
-                    "items": {
-                        "description": "supported policy types",
-                        "type": "string"
-                    }
-                }
-            }
-        },
-        "service_registration_info_v2": {
-            "description": "Information for one service",
-            "type": "object",
-            "required": ["service_id"],
-            "properties": {
-                "callback_url": {
-                    "description": "callback for notifying of Near-RT RIC state changes",
-                    "type": "string"
-                },
-                "service_id": {
-                    "description": "identity of the service",
-                    "type": "string"
-                },
-                "keep_alive_interval_seconds": {
-                    "format": "int64",
-                    "description": "keep alive interval for the service. This is used to enable optional heartbeat supervision of the service. If set (> 0) the registered service should regularly invoke a 'keepalive' REST call. When a service fails to invoke this 'keepalive' call within the configured time, the service is considered unavailable. An unavailable service will be automatically deregistered and its policies will be deleted. Value 0 means timeout supervision is disabled.",
-                    "type": "integer"
-                }
-            }
-        },
-        "policy_info_list_v2": {
-            "description": "List of policy information",
-            "type": "object",
-            "properties": {"policies": {
-                "description": "List of policy information",
-                "type": "array",
-                "items": {"$ref": "#/components/schemas/policy_info_v2"}
-            }}
-        },
-        "policy_status_info_v2": {
-            "description": "Status for one A1-P Policy",
-            "type": "object",
-            "properties": {
-                "last_modified": {
-                    "description": "timestamp, last modification time",
-                    "type": "string"
-                },
-                "status": {
-                    "description": "the Policy status",
-                    "type": "object"
-                }
-            }
-        },
-        "service_status_v2": {
-            "description": "List of service information",
-            "type": "object",
-            "properties": {
-                "callback_url": {
-                    "description": "callback for notifying of RIC synchronization",
-                    "type": "string"
-                },
-                "service_id": {
-                    "description": "identity of the service",
-                    "type": "string"
-                },
-                "keep_alive_interval_seconds": {
-                    "format": "int64",
-                    "description": "policy keep alive timeout",
-                    "type": "integer"
-                },
-                "time_since_last_activity_seconds": {
-                    "format": "int64",
-                    "description": "time since last invocation by the service",
-                    "type": "integer"
-                }
-            }
-        },
-        "ric_info_list_v2": {
-            "description": "List of Near-RT RIC information",
-            "type": "object",
-            "properties": {"rics": {
-                "description": "List of Near-RT RIC information",
-                "type": "array",
-                "items": {"$ref": "#/components/schemas/ric_info_v2"}
-            }}
-        },
-        "policytype_v2": {
-            "description": "Policy type",
-            "type": "object",
-            "properties": {"policy_schema": {
-                "description": "Policy type json schema. The schema is a json object following http://json-schema.org/draft-07/schema",
-                "type": "object"
-            }}
-        },
-        "input": {
-            "description": "input",
-            "type": "object",
-            "required": [
-                "access_type",
-                "auth_token",
-                "policy_type_id"
-            ],
-            "properties": {
-                "access_type": {
-                    "description": "Access type",
-                    "type": "string",
-                    "enum": [
-                        "READ",
-                        "WRITE",
-                        "DELETE"
-                    ]
-                },
-                "auth_token": {
-                    "description": "Authorization token",
-                    "type": "string"
-                },
-                "policy_type_id": {
-                    "description": "Policy type identifier",
-                    "type": "string"
-                }
-            }
-        },
-        "policy_authorization": {
-            "description": "Authorization request for A1 policy requests",
-            "type": "object",
-            "required": ["input"],
-            "properties": {"input": {"$ref": "#/components/schemas/input"}}
-        },
-        "policytype_id_list_v2": {
-            "description": "Information about policy types",
-            "type": "object",
-            "properties": {"policytype_ids": {
-                "description": "Policy type identities",
-                "type": "array",
-                "items": {
-                    "description": "Policy type identities",
-                    "type": "string"
-                }
-            }}
-        },
-        "policy_info_v2": {
-            "description": "Information for one A1-P Policy",
-            "type": "object",
-            "required": [
-                "policy_data",
-                "policy_id",
-                "policytype_id",
-                "ric_id"
-            ],
-            "properties": {
-                "ric_id": {
-                    "description": "identity of the target Near-RT RIC",
-                    "type": "string"
-                },
-                "policy_id": {
-                    "description": "identity of the policy",
-                    "type": "string"
-                },
-                "transient": {
-                    "default": false,
-                    "description": "if true, the policy is deleted at RIC restart. If false, its value is maintained by this service until explicitly deleted. Default false.",
-                    "type": "boolean",
-                    "example": false
-                },
-                "service_id": {
-                    "description": "the identity of the service owning the policy. This can be used to group the policies (it is possible to get all policies associated to a service). Note that the service does not need to be registered.",
-                    "type": "string"
-                },
-                "policy_data": {
-                    "description": "the configuration of the policy",
-                    "type": "object"
-                },
-                "status_notification_uri": {
-                    "description": "Callback URI for policy status updates",
-                    "type": "string"
-                },
-                "policytype_id": {
-                    "description": "identity of the policy type",
-                    "type": "string"
-                }
-            }
-        },
-        "policy_id_list_v2": {
-            "description": "A list of policy identities",
-            "type": "object",
-            "properties": {"policy_ids": {
-                "description": "Policy identities",
-                "type": "array",
-                "items": {
-                    "description": "Policy identities",
-                    "type": "string"
-                }
-            }}
-        },
-        "service_list_v2": {
-            "description": "List of service information",
-            "type": "object",
-            "properties": {"service_list": {
-                "description": "List of service information",
-                "type": "array",
-                "items": {"$ref": "#/components/schemas/service_status_v2"}
-            }}
-        },
-        "service_callback_info_v2": {
-            "description": "Information transferred as in Service callbacks (callback_url)",
-            "type": "object",
-            "required": [
-                "event_type",
-                "ric_id"
-            ],
-            "properties": {
-                "ric_id": {
-                    "description": "identity of a Near-RT RIC",
-                    "type": "string"
-                },
-                "event_type": {
-                    "description": "values:\nAVAILABLE: the  Near-RT RIC has become available for A1 Policy management",
-                    "type": "string",
-                    "enum": ["AVAILABLE"]
-                }
-            }
-        },
-        "Link": {
-            "type": "object",
-            "properties": {
-                "templated": {"type": "boolean"},
-                "href": {"type": "string"}
-            }
-        }
-    }},
-    "openapi": "3.0.1",
-    "paths": {
-        "/a1-policy/v2/policy-instances": {"get": {
-            "summary": "Query for A1 policy instances",
-            "description": "Returns a list of A1 policies matching given search criteria. <br>If several query parameters are defined, the policies matching all conditions are returned.",
-            "operationId": "getPolicyInstances",
-            "responses": {
-                "200": {
-                    "description": "Policies",
-                    "content": {"application/json": {"schema": {"$ref": "#/components/schemas/policy_info_list_v2"}}}
-                },
-                "404": {
-                    "description": "Near-RT RIC, policy type or service not found",
-                    "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
-                }
-            },
-            "parameters": [
-                {
-                    "schema": {"type": "string"},
-                    "in": "query",
-                    "name": "policytype_id",
-                    "description": "Select policies with a given type identity.",
-                    "required": false
-                },
-                {
-                    "schema": {"type": "string"},
-                    "in": "query",
-                    "name": "ric_id",
-                    "description": "Select policies for a given Near-RT RIC identity.",
-                    "required": false
-                },
-                {
-                    "schema": {"type": "string"},
-                    "in": "query",
-                    "name": "service_id",
-                    "description": "Select policies owned by a given service.",
-                    "required": false
-                },
-                {
-                    "schema": {"type": "string"},
-                    "in": "query",
-                    "name": "type_name",
-                    "description": "Select policies of a given type name (type identity has the format <typename_version>)",
-                    "required": false
-                }
-            ],
-            "tags": ["A1 Policy Management"]
-        }},
-        "/example-authz-check": {"post": {
-            "summary": "Request for access authorization.",
-            "requestBody": {
-                "content": {"application/json": {"schema": {"$ref": "#/components/schemas/policy_authorization"}}},
-                "required": true
-            },
-            "description": "The authorization function decides if access is granted.",
-            "operationId": "performAccessControl",
-            "responses": {"200": {
-                "description": "OK",
-                "content": {"application/json": {"schema": {"$ref": "#/components/schemas/authorization_result"}}}
-            }},
-            "tags": ["Authorization API"]
-        }},
-        "/actuator/threaddump": {"get": {
-            "summary": "Actuator web endpoint 'threaddump'",
-            "operationId": "threaddump",
-            "responses": {"200": {
-                "description": "OK",
-                "content": {
-                    "text/plain;charset=UTF-8": {"schema": {"type": "object"}},
-                    "application/vnd.spring-boot.actuator.v3+json": {"schema": {"type": "object"}},
-                    "application/json": {"schema": {"type": "object"}},
-                    "application/vnd.spring-boot.actuator.v2+json": {"schema": {"type": "object"}}
-                }
-            }},
-            "tags": ["Actuator"]
-        }},
-        "/a1-policy/v2/status": {"get": {
-            "summary": "Returns status and statistics of this service",
-            "operationId": "getStatus",
-            "responses": {"200": {
-                "description": "Service is living",
-                "content": {"application/json": {"schema": {"$ref": "#/components/schemas/status_info_v2"}}}
-            }},
-            "tags": ["Health Check"]
-        }},
-        "/actuator/loggers": {"get": {
-            "summary": "Actuator web endpoint 'loggers'",
-            "operationId": "loggers",
-            "responses": {"200": {
-                "description": "OK",
-                "content": {
-                    "application/vnd.spring-boot.actuator.v3+json": {"schema": {"type": "object"}},
-                    "application/json": {"schema": {"type": "object"}},
-                    "application/vnd.spring-boot.actuator.v2+json": {"schema": {"type": "object"}}
-                }
-            }},
-            "tags": ["Actuator"]
-        }},
-        "/actuator/health/**": {"get": {
-            "summary": "Actuator web endpoint 'health-path'",
-            "operationId": "health-path",
-            "responses": {"200": {
-                "description": "OK",
-                "content": {
-                    "application/vnd.spring-boot.actuator.v3+json": {"schema": {"type": "object"}},
-                    "application/json": {"schema": {"type": "object"}},
-                    "application/vnd.spring-boot.actuator.v2+json": {"schema": {"type": "object"}}
-                }
-            }},
-            "tags": ["Actuator"]
-        }},
-        "/a1-policy/v2/rics/ric": {"get": {
-            "summary": "Returns info for one Near-RT RIC",
-            "description": "Either a Near-RT RIC identity or a Managed Element identity can be specified.<br>The intention with Managed Element identity is the ID used in O1 for accessing the traffical element (such as the ID of CU).",
-            "operationId": "getRic",
-            "responses": {
-                "200": {
-                    "description": "Near-RT RIC is found",
-                    "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ric_info_v2"}}}
-                },
-                "404": {
-                    "description": "Near-RT RIC is not found",
-                    "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
-                }
-            },
-            "parameters": [
-                {
-                    "schema": {"type": "string"},
-                    "in": "query",
-                    "name": "managed_element_id",
-                    "description": "The identity of a Managed Element. If given, the Near-RT RIC managing the ME is returned.",
-                    "required": false
-                },
-                {
-                    "schema": {"type": "string"},
-                    "in": "query",
-                    "name": "ric_id",
-                    "description": "The identity of a Near-RT RIC to get information for.",
-                    "required": false
-                }
-            ],
-            "tags": ["NearRT-RIC Repository"]
-        }},
-        "/actuator/shutdown": {"post": {
-            "summary": "Actuator web endpoint 'shutdown'",
-            "operationId": "shutdown",
-            "responses": {"200": {
-                "description": "OK",
-                "content": {
-                    "application/vnd.spring-boot.actuator.v3+json": {"schema": {"type": "object"}},
-                    "application/json": {"schema": {"type": "object"}},
-                    "application/vnd.spring-boot.actuator.v2+json": {"schema": {"type": "object"}}
-                }
-            }},
-            "tags": ["Actuator"]
-        }},
-        "/a1-policy/v2/policy-types": {"get": {
-            "summary": "Query policy type identities",
-            "operationId": "getPolicyTypes",
-            "responses": {
-                "200": {
-                    "description": "Policy type IDs",
-                    "content": {"application/json": {"schema": {"$ref": "#/components/schemas/policytype_id_list_v2"}}}
-                },
-                "404": {
-                    "description": "Near-RT RIC is not found",
-                    "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
-                }
-            },
-            "parameters": [
-                {
-                    "schema": {"type": "string"},
-                    "in": "query",
-                    "name": "ric_id",
-                    "description": "Select types for the given Near-RT RIC identity.",
-                    "required": false
-                },
-                {
-                    "schema": {"type": "string"},
-                    "in": "query",
-                    "name": "type_name",
-                    "description": "Select types with the given type name (type identity has the format <typename_version>)",
-                    "required": false
-                },
-                {
-                    "schema": {"type": "string"},
-                    "in": "query",
-                    "name": "compatible_with_version",
-                    "description": "Select types that are compatible with the given version. This parameter is only applicable in conjunction with type_name. As an example version 1.9.1 is compatible with 1.0.0 but not the other way around. Matching types will be returned sorted in ascending order.",
-                    "required": false
-                }
-            ],
-            "tags": ["A1 Policy Management"]
-        }},
-        "/a1-policy/v2/policies/{policy_id}": {
-            "get": {
-                "summary": "Returns a policy",
-                "operationId": "getPolicy",
-                "responses": {
-                    "200": {
-                        "description": "Policy found",
-                        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/policy_info_v2"}}}
-                    },
-                    "404": {
-                        "description": "Policy is not found",
-                        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
-                    }
-                },
-                "parameters": [{
-                    "schema": {"type": "string"},
-                    "in": "path",
-                    "name": "policy_id",
-                    "required": true
-                }],
-                "tags": ["A1 Policy Management"]
-            },
-            "delete": {
-                "summary": "Delete a policy",
-                "operationId": "deletePolicy",
-                "responses": {
-                    "200": {
-                        "description": "Not used",
-                        "content": {"*/*": {"schema": {"$ref": "#/components/schemas/void"}}}
-                    },
-                    "423": {
-                        "description": "Near-RT RIC is not operational",
-                        "content": {"*/*": {"schema": {"$ref": "#/components/schemas/error_information"}}}
-                    },
-                    "204": {
-                        "description": "Policy deleted",
-                        "content": {"*/*": {"schema": {"$ref": "#/components/schemas/void"}}}
-                    },
-                    "404": {
-                        "description": "Policy is not found",
-                        "content": {"*/*": {"schema": {"$ref": "#/components/schemas/error_information"}}}
-                    }
-                },
-                "parameters": [{
-                    "schema": {"type": "string"},
-                    "in": "path",
-                    "name": "policy_id",
-                    "required": true
-                }],
-                "tags": ["A1 Policy Management"]
-            }
-        },
-        "/actuator/metrics/{requiredMetricName}": {"get": {
-            "summary": "Actuator web endpoint 'metrics-requiredMetricName'",
-            "operationId": "metrics-requiredMetricName",
-            "responses": {"200": {
-                "description": "OK",
-                "content": {
-                    "application/vnd.spring-boot.actuator.v3+json": {"schema": {"type": "object"}},
-                    "application/json": {"schema": {"type": "object"}},
-                    "application/vnd.spring-boot.actuator.v2+json": {"schema": {"type": "object"}}
-                }
-            }},
-            "parameters": [{
-                "schema": {"type": "string"},
-                "in": "path",
-                "name": "requiredMetricName",
-                "required": true
-            }],
-            "tags": ["Actuator"]
-        }},
-        "/a1-policy/v2/configuration": {
-            "get": {
-                "summary": "Returns the contents of the application configuration file",
-                "operationId": "getConfiguration",
-                "responses": {
-                    "200": {
-                        "description": "Configuration",
-                        "content": {"application/json": {"schema": {"type": "object"}}}
-                    },
-                    "404": {
-                        "description": "File is not found or readable",
-                        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
-                    }
-                },
-                "tags": ["Management of configuration"]
-            },
-            "put": {
-                "summary": "Replace the current configuration file with the given configuration",
-                "requestBody": {
-                    "content": {"application/json": {"schema": {"type": "object"}}},
-                    "required": true
-                },
-                "operationId": "putConfiguration",
-                "responses": {
-                    "200": {
-                        "description": "Configuration updated",
-                        "content": {"*/*": {"schema": {"$ref": "#/components/schemas/void"}}}
-                    },
-                    "400": {
-                        "description": "Invalid configuration provided",
-                        "content": {"*/*": {"schema": {"$ref": "#/components/schemas/error_information"}}}
-                    },
-                    "500": {
-                        "description": "Something went wrong when replacing the configuration. Try again.",
-                        "content": {"*/*": {"schema": {"$ref": "#/components/schemas/error_information"}}}
-                    }
-                },
-                "tags": ["Management of configuration"]
-            }
-        },
-        "/actuator": {"get": {
-            "summary": "Actuator root web endpoint",
-            "operationId": "links",
-            "responses": {"200": {
-                "description": "OK",
-                "content": {
-                    "application/vnd.spring-boot.actuator.v3+json": {"schema": {
-                        "additionalProperties": {
-                            "additionalProperties": {"$ref": "#/components/schemas/Link"},
-                            "type": "object"
-                        },
-                        "type": "object"
-                    }},
-                    "application/json": {"schema": {
-                        "additionalProperties": {
-                            "additionalProperties": {"$ref": "#/components/schemas/Link"},
-                            "type": "object"
-                        },
-                        "type": "object"
-                    }},
-                    "application/vnd.spring-boot.actuator.v2+json": {"schema": {
-                        "additionalProperties": {
-                            "additionalProperties": {"$ref": "#/components/schemas/Link"},
-                            "type": "object"
-                        },
-                        "type": "object"
-                    }}
-                }
-            }},
-            "tags": ["Actuator"]
-        }},
-        "/actuator/loggers/{name}": {
-            "post": {
-                "summary": "Actuator web endpoint 'loggers-name'",
-                "requestBody": {"content": {"application/json": {"schema": {
-                    "type": "string",
-                    "enum": [
-                        "TRACE",
-                        "DEBUG",
-                        "INFO",
-                        "WARN",
-                        "ERROR",
-                        "FATAL",
-                        "OFF"
-                    ]
-                }}}},
-                "operationId": "loggers-name_2",
-                "responses": {"200": {
-                    "description": "OK",
-                    "content": {"*/*": {"schema": {"type": "object"}}}
-                }},
-                "parameters": [{
-                    "schema": {"type": "string"},
-                    "in": "path",
-                    "name": "name",
-                    "required": true
-                }],
-                "tags": ["Actuator"]
-            },
-            "get": {
-                "summary": "Actuator web endpoint 'loggers-name'",
-                "operationId": "loggers-name",
-                "responses": {"200": {
-                    "description": "OK",
-                    "content": {
-                        "application/vnd.spring-boot.actuator.v3+json": {"schema": {"type": "object"}},
-                        "application/json": {"schema": {"type": "object"}},
-                        "application/vnd.spring-boot.actuator.v2+json": {"schema": {"type": "object"}}
-                    }
-                }},
-                "parameters": [{
-                    "schema": {"type": "string"},
-                    "in": "path",
-                    "name": "name",
-                    "required": true
-                }],
-                "tags": ["Actuator"]
-            }
-        },
-        "/a1-policy/v2/services/{service_id}/keepalive": {"put": {
-            "summary": "Heartbeat indicates that the service is running",
-            "description": "A registered service should invoke this operation regularly to indicate that it is still alive. If a registered service fails to invoke this operation before the end of a timeout period the service will be deregistered and all its A1 policies wil be removed. (This timeout can be set or disabled when each service is initially registered)",
-            "operationId": "keepAliveService",
-            "responses": {
-                "200": {
-                    "description": "Service supervision timer refreshed, OK",
-                    "content": {"*/*": {"schema": {"type": "object"}}}
-                },
-                "404": {
-                    "description": "The service is not found, needs re-registration",
-                    "content": {"*/*": {"schema": {"$ref": "#/components/schemas/error_information"}}}
-                }
-            },
-            "parameters": [{
-                "schema": {"type": "string"},
-                "in": "path",
-                "name": "service_id",
-                "required": true
-            }],
-            "tags": ["Service Registry and Supervision"]
-        }},
-        "/actuator/metrics": {"get": {
-            "summary": "Actuator web endpoint 'metrics'",
-            "operationId": "metrics",
-            "responses": {"200": {
-                "description": "OK",
-                "content": {
-                    "application/vnd.spring-boot.actuator.v3+json": {"schema": {"type": "object"}},
-                    "application/json": {"schema": {"type": "object"}},
-                    "application/vnd.spring-boot.actuator.v2+json": {"schema": {"type": "object"}}
-                }
-            }},
-            "tags": ["Actuator"]
-        }},
-        "/a1-policy/v2/rics": {"get": {
-            "summary": "Query Near-RT RIC information",
-            "description": "The call returns all Near-RT RICs that supports a given policy type identity",
-            "operationId": "getRics",
-            "responses": {
-                "200": {
-                    "description": "OK",
-                    "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ric_info_list_v2"}}}
-                },
-                "404": {
-                    "description": "Policy type is not found",
-                    "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
-                }
-            },
-            "parameters": [{
-                "schema": {"type": "string"},
-                "in": "query",
-                "name": "policytype_id",
-                "description": "The identity of a policy type. If given, all Near-RT RICs supporting the policy type are returned",
-                "required": false
-            }],
-            "tags": ["NearRT-RIC Repository"]
-        }},
-        "/a1-policy/v2/services": {
-            "get": {
-                "summary": "Returns service information",
-                "description": "Either information about a registered service with given identity or all registered services are returned.",
-                "operationId": "getServices",
-                "responses": {
-                    "200": {
-                        "description": "OK",
-                        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/service_list_v2"}}}
-                    },
-                    "404": {
-                        "description": "Service is not found",
-                        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
-                    }
-                },
-                "parameters": [{
-                    "schema": {"type": "string"},
-                    "in": "query",
-                    "name": "service_id",
-                    "description": "The identity of the service",
-                    "required": false
-                }],
-                "tags": ["Service Registry and Supervision"]
-            },
-            "put": {
-                "summary": "Register a service",
-                "requestBody": {
-                    "content": {"application/json": {"schema": {"$ref": "#/components/schemas/service_registration_info_v2"}}},
-                    "required": true
-                },
-                "description": "Registering a service is needed to:<ul><li>Get callbacks about available NearRT RICs.<\/li><li>Activate supervision of the service. If a service is inactive, its policies will automatically be deleted.<\/li><\/ul>Policies can be created even if the service is not registerred. This is a feature which it is optional to use.",
-                "operationId": "putService",
-                "responses": {
-                    "200": {
-                        "description": "Service updated",
-                        "content": {"*/*": {"schema": {"type": "object"}}}
-                    },
-                    "201": {
-                        "description": "Service created",
-                        "content": {"*/*": {"schema": {"type": "object"}}}
-                    },
-                    "400": {
-                        "description": "The ServiceRegistrationInfo is not accepted",
-                        "content": {"*/*": {"schema": {"$ref": "#/components/schemas/error_information"}}}
-                    }
-                },
-                "tags": ["Service Registry and Supervision"]
-            }
-        },
-        "/actuator/info": {"get": {
-            "summary": "Actuator web endpoint 'info'",
-            "operationId": "info",
-            "responses": {"200": {
-                "description": "OK",
-                "content": {
-                    "application/vnd.spring-boot.actuator.v3+json": {"schema": {"type": "object"}},
-                    "application/json": {"schema": {"type": "object"}},
-                    "application/vnd.spring-boot.actuator.v2+json": {"schema": {"type": "object"}}
-                }
-            }},
-            "tags": ["Actuator"]
-        }},
-        "/status": {"get": {
-            "summary": "Returns status and statistics of this service",
-            "operationId": "getStatusV1",
-            "responses": {"200": {
-                "description": "Service is living",
-                "content": {"*/*": {"schema": {"type": "string"}}}
-            }},
-            "tags": ["Health Check"]
-        }},
-        "/a1-policy/v2/policy-types/{policytype_id}": {"get": {
-            "summary": "Returns a policy type definition",
-            "operationId": "getPolicyType",
-            "responses": {
-                "200": {
-                    "description": "Policy type",
-                    "content": {"*/*": {"schema": {"$ref": "#/components/schemas/policytype_v2"}}}
-                },
-                "404": {
-                    "description": "Policy type is not found",
-                    "content": {"*/*": {"schema": {"$ref": "#/components/schemas/error_information"}}}
-                }
-            },
-            "parameters": [{
-                "schema": {"type": "string"},
-                "in": "path",
-                "name": "policytype_id",
-                "required": true
-            }],
-            "tags": ["A1 Policy Management"]
-        }},
-        "/actuator/logfile": {"get": {
-            "summary": "Actuator web endpoint 'logfile'",
-            "operationId": "logfile",
-            "responses": {"200": {
-                "description": "OK",
-                "content": {"text/plain;charset=UTF-8": {"schema": {"type": "object"}}}
-            }},
-            "tags": ["Actuator"]
-        }},
-        "/actuator/health": {"get": {
-            "summary": "Actuator web endpoint 'health'",
-            "operationId": "health",
-            "responses": {"200": {
-                "description": "OK",
-                "content": {
-                    "application/vnd.spring-boot.actuator.v3+json": {"schema": {"type": "object"}},
-                    "application/json": {"schema": {"type": "object"}},
-                    "application/vnd.spring-boot.actuator.v2+json": {"schema": {"type": "object"}}
-                }
-            }},
-            "tags": ["Actuator"]
-        }},
-        "/a1-policy/v2/policies": {
-            "get": {
-                "summary": "Query policy identities",
-                "description": "Returns a list of A1 policies matching given search criteria. <br>If several query parameters are defined, the policies matching all conditions are returned.",
-                "operationId": "getPolicyIds",
-                "responses": {
-                    "200": {
-                        "description": "Policy identities",
-                        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/policy_id_list_v2"}}}
-                    },
-                    "404": {
-                        "description": "Near-RT RIC or type not found",
-                        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
-                    }
-                },
-                "parameters": [
-                    {
-                        "schema": {"type": "string"},
-                        "in": "query",
-                        "name": "policytype_id",
-                        "description": "Select policies of a given policy type identity.",
-                        "required": false
-                    },
-                    {
-                        "schema": {"type": "string"},
-                        "in": "query",
-                        "name": "ric_id",
-                        "description": "Select policies of a given Near-RT RIC identity.",
-                        "required": false
-                    },
-                    {
-                        "schema": {"type": "string"},
-                        "in": "query",
-                        "name": "service_id",
-                        "description": "Select policies owned by a given service.",
-                        "required": false
-                    },
-                    {
-                        "schema": {"type": "string"},
-                        "in": "query",
-                        "name": "type_name",
-                        "description": "Select policies of types with the given type name (type identity has the format <typename_version>)",
-                        "required": false
-                    }
-                ],
-                "tags": ["A1 Policy Management"]
-            },
-            "put": {
-                "summary": "Create or update a policy",
-                "requestBody": {
-                    "content": {"application/json": {"schema": {"$ref": "#/components/schemas/policy_info_v2"}}},
-                    "required": true
-                },
-                "operationId": "putPolicy",
-                "responses": {
-                    "200": {
-                        "description": "Policy updated",
-                        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/void"}}}
-                    },
-                    "201": {
-                        "description": "Policy created",
-                        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/void"}}}
-                    },
-                    "423": {
-                        "description": "Near-RT RIC is not operational",
-                        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
-                    },
-                    "404": {
-                        "description": "Near-RT RIC or policy type is not found",
-                        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
-                    }
-                },
-                "tags": ["A1 Policy Management"]
-            }
-        },
-        "/r-app/near-rt-ric-status": {"post": {
-            "summary": "Callback for Near-RT RIC status",
-            "requestBody": {
-                "content": {"application/json": {"schema": {"$ref": "#/components/schemas/service_callback_info_v2"}}},
-                "required": true
-            },
-            "description": "The URL to this call is registered at Service registration.",
-            "operationId": "serviceCallback",
-            "responses": {"200": {
-                "description": "OK",
-                "content": {"application/json": {"schema": {"$ref": "#/components/schemas/void"}}}
-            }},
-            "tags": ["Service callbacks"]
-        }},
-        "/a1-policy/v2/services/{service_id}": {"delete": {
-            "summary": "Unregister a service",
-            "operationId": "deleteService",
-            "responses": {
-                "200": {
-                    "description": "Not used",
-                    "content": {"*/*": {"schema": {"$ref": "#/components/schemas/void"}}}
-                },
-                "204": {
-                    "description": "Service unregistered",
-                    "content": {"*/*": {"schema": {"type": "object"}}}
-                },
-                "404": {
-                    "description": "Service not found",
-                    "content": {"*/*": {"schema": {"$ref": "#/components/schemas/error_information"}}}
-                }
-            },
-            "parameters": [{
-                "schema": {"type": "string"},
-                "in": "path",
-                "name": "service_id",
-                "required": true
-            }],
-            "tags": ["Service Registry and Supervision"]
-        }},
-        "/actuator/heapdump": {"get": {
-            "summary": "Actuator web endpoint 'heapdump'",
-            "operationId": "heapdump",
-            "responses": {"200": {
-                "description": "OK",
-                "content": {"application/octet-stream": {"schema": {"type": "object"}}}
-            }},
-            "tags": ["Actuator"]
-        }},
-        "/a1-policy/v2/policies/{policy_id}/status": {"get": {
-            "summary": "Returns a policy status",
-            "operationId": "getPolicyStatus",
-            "responses": {
-                "200": {
-                    "description": "Policy status",
-                    "content": {"application/json": {"schema": {"$ref": "#/components/schemas/policy_status_info_v2"}}}
-                },
-                "404": {
-                    "description": "Policy is not found",
-                    "content": {"application/json": {"schema": {"$ref": "#/components/schemas/error_information"}}}
-                }
-            },
-            "parameters": [{
-                "schema": {"type": "string"},
-                "in": "path",
-                "name": "policy_id",
-                "required": true
-            }],
-            "tags": ["A1 Policy Management"]
-        }}
+  "openapi" : "3.0.3",
+  "info" : {
+    "title" : "A1 Policy Management Service",
+    "description" : "<h2>General</h2><p>The O-RAN Non-RT RIC Policy Management Service provides a REST API for management of A1 policies. <br/>The main tasks of the service are:</p><ul><li>A1 Policy creation, modification and deletion.</li><li>Monitoring and maintaining consistency of the SMO view of A1 policies and the Near-RT RICs</li><li>Maintaining a view of supported Near-RT RIC policy types</li><li>Supervision of using services (R-APPs). When a service is unavailable, its policies are removed.</li></ul><h2>APIs provided or defined by the service</h2><h3>A1 Policy Management</h3><p>This is an API for management of A1 Policies.</p><ul><li>A1 Policy retrieval, creation, modification and deletion.</li><li>Retrieval of supported A1 Policy types for a Near-RT RIC</li><li>Retrieval of status for existing A1 policies</li></ul><h3>Management of configuration</h3><p>API for updating and retrieval of the component configuration. Note that there other ways to maintain the configuration.</p><h3>Service callbacks</h3><p>These are endpoints that are invoked by this service. The callbacks are registered in this service at service registration.</p><h3>NearRT-RIC Repository</h3><p>This is an API that provides support for looking up a NearRT-RIC. Each A1 policy is targeted for one Near-RT RIC.</p><h3>Health Check</h3><p>API used for supervision of the PMS component.</p><h3>Service Registry and Supervision</h3><p>API used for registering services that uses PMS. Each A1 policy is optionally owned by a service. PMS can supervise each registered service by a heart-beat supervision and will automatically remove policies for unavailable services. Note that a service does not need to be registered in order to create A1 Policies. This is a feature that is optional to use.</p><h3>Authorization API</h3><p>API used for access control of A1 Policy access. If configured, an external authorization provider is requested to grant access to the A1 Policy type.</p><h3>Spring Boot Actuator</h3><p>Provides generic functions  used to monitor and manage the Spring web application.</p>",
+    "license" : {
+      "name" : "Copyright (C) 2020-2023 Nordix Foundation. Licensed under the Apache License, and Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.",
+      "url" : "http://www.apache.org/licenses/LICENSE-2.0"
     },
-    "info": {
-        "license": {
-            "name": "Copyright (C) 2020-2023 Nordix Foundation. Licensed under the Apache License.",
-            "url": "http://www.apache.org/licenses/LICENSE-2.0"
-        },
-        "description": "<h2>General<\/h2><p>The O-RAN Non-RT RIC Policy Management Service provides a REST API for management of A1 policies. <br/>The main tasks of the service are:<\/p><ul><li>A1 Policy creation, modification and deletion.<\/li><li>Monitoring and maintaining consistency of the SMO view of A1 policies and the Near-RT RICs<\/li><li>Maintaining a view of supported Near-RT RIC policy types<\/li><li>Supervision of using services (R-APPs). When a service is unavailable, its policies are removed.<\/li><\/ul><h2>APIs provided or defined by the service<\/h2><h3>A1 Policy Management<\/h3><p>This is an API for management of A1 Policies.<\/p><ul><li>A1 Policy retrieval, creation, modification and deletion.<\/li><li>Retrieval of supported A1 Policy types for a Near-RT RIC<\/li><li>Retrieval of status for existing A1 policies<\/li><\/ul><h3>Management of configuration<\/h3><p>API for updating and retrieval of the component configuration. Note that there other ways to maintain the configuration.<\/p><h3>Service callbacks<\/h3><p>These are endpoints that are invoked by this service. The callbacks are registered in this service at service registration.<\/p><h3>NearRT-RIC Repository<\/h3><p>This is an API that provides support for looking up a NearRT-RIC. Each A1 policy is targeted for one Near-RT RIC.<\/p><h3>Health Check<\/h3><p>API used for supervision of the PMS component.<\/p><h3>Service Registry and Supervision<\/h3><p>API used for registering services that uses PMS. Each A1 policy is optionally owned by a service. PMS can supervise each registered service by a heart-beat supervision and will automatically remove policies for unavailable services. Note that a service does not need to be registered in order to create A1 Policies. This is a feature that is optional to use.<\/p><h3>Authorization API<\/h3><p>API used for access control of A1 Policy access. If configured, an external authorization provider is requested to grant access to the A1 Policy type.<\/p><h3>Spring Boot Actuator<\/h3><p>Provides generic functions  used to monitor and manage the Spring web application.<\/p>",
-        "title": "A1 Policy Management Service",
-        "version": "1.2.0"
-    },
-    "tags": [
-        {
-            "name": "Authorization API",
-            "description": "API used for authorization of information A1 policy access (this is provided by an authorization producer such as OPA).\nNote that this API is called by PMS, it is not provided.\n"
-        },
-        {
-            "name": "Actuator",
-            "description": "Monitor and interact",
-            "externalDocs": {
-                "description": "Spring Boot Actuator Web API Documentation",
-                "url": "https://docs.spring.io/spring-boot/docs/current/actuator-api/html/"
+    "version" : "1.2.0"
+  },
+  "servers" : [ {
+    "url" : "/"
+  } ],
+  "tags" : [ {
+    "name" : "Authorization API",
+    "description" : "API used for authorization of information A1 policy access (this is provided by an authorization producer such as OPA). <br> Note that this API is called by PMS, it is not provided."
+  }, {
+    "name" : "Actuator",
+    "description" : "Monitor and interact",
+    "externalDocs" : {
+      "description" : "Spring Boot Actuator Web API Documentation",
+      "url" : "https://docs.spring.io/spring-boot/docs/current/actuator-api/html/"
+    }
+  } ],
+  "paths" : {
+    "/a1-policy/v2/policy-instances" : {
+      "get" : {
+        "tags" : [ "A1 Policy Management" ],
+        "summary" : "Query for A1 policy instances",
+        "description" : "Returns a list of A1 policies matching given search criteria. <br>If several query parameters are defined, the policies matching all conditions are returned.",
+        "operationId" : "getPolicyInstances",
+        "parameters" : [ {
+          "name" : "policytype_id",
+          "in" : "query",
+          "description" : "Select policies with a given type identity.",
+          "required" : false,
+          "style" : "form",
+          "explode" : true,
+          "schema" : {
+            "type" : "string"
+          }
+        }, {
+          "name" : "ric_id",
+          "in" : "query",
+          "description" : "Select policies for a given Near-RT RIC identity.",
+          "required" : false,
+          "style" : "form",
+          "explode" : true,
+          "schema" : {
+            "type" : "string"
+          }
+        }, {
+          "name" : "service_id",
+          "in" : "query",
+          "description" : "Select policies owned by a given service.",
+          "required" : false,
+          "style" : "form",
+          "explode" : true,
+          "schema" : {
+            "type" : "string"
+          }
+        }, {
+          "name" : "type_name",
+          "in" : "query",
+          "description" : "Select policies of a given type name (type identity has the format <typename_version>)",
+          "required" : false,
+          "style" : "form",
+          "explode" : true,
+          "schema" : {
+            "type" : "string"
+          }
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Policies",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/policy_info_list"
+                },
+                "examples" : {
+                  "policy_info_list" : {
+                    "$ref" : "#/components/examples/policy_info_list"
+                  }
+                }
+              }
             }
+          },
+          "404" : {
+            "description" : "Near-RT RIC, policy type or service not found",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/error_information"
+                }
+              }
+            }
+          }
         }
-    ]
+      }
+    },
+    "/example-authz-check" : {
+      "post" : {
+        "tags" : [ "Authorization API" ],
+        "summary" : "Request for access authorization.",
+        "description" : "The authorization function decides if access is granted.",
+        "operationId" : "performAccessControl",
+        "requestBody" : {
+          "content" : {
+            "application/json" : {
+              "schema" : {
+                "$ref" : "#/components/schemas/policy_authorization"
+              }
+            }
+          },
+          "required" : true
+        },
+        "responses" : {
+          "200" : {
+            "description" : "OK",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/authorization_result"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/actuator/threaddump" : {
+      "get" : {
+        "tags" : [ "Actuator" ],
+        "summary" : "Actuator web endpoint 'threaddump'",
+        "operationId" : "threaddump",
+        "responses" : {
+          "200" : {
+            "description" : "OK",
+            "content" : {
+              "text/plain;charset=UTF-8" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              },
+              "application/vnd.spring-boot.actuator.v3+json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              },
+              "application/json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              },
+              "application/vnd.spring-boot.actuator.v2+json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/a1-policy/v2/status" : {
+      "get" : {
+        "tags" : [ "Health Check" ],
+        "summary" : "Returns status and statistics of this service",
+        "operationId" : "getStatus",
+        "responses" : {
+          "200" : {
+            "description" : "Service is living",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/status_info"
+                },
+                "examples" : {
+                  "status_info" : {
+                    "$ref" : "#/components/examples/status_info"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/actuator/loggers" : {
+      "get" : {
+        "tags" : [ "Actuator" ],
+        "summary" : "Actuator web endpoint 'loggers'",
+        "operationId" : "loggers",
+        "responses" : {
+          "200" : {
+            "description" : "OK",
+            "content" : {
+              "application/vnd.spring-boot.actuator.v3+json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              },
+              "application/json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              },
+              "application/vnd.spring-boot.actuator.v2+json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/actuator/health/**" : {
+      "get" : {
+        "tags" : [ "Actuator" ],
+        "summary" : "Actuator web endpoint 'health-path'",
+        "operationId" : "health-path",
+        "responses" : {
+          "200" : {
+            "description" : "OK",
+            "content" : {
+              "application/vnd.spring-boot.actuator.v3+json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              },
+              "application/json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              },
+              "application/vnd.spring-boot.actuator.v2+json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/a1-policy/v2/rics/ric" : {
+      "get" : {
+        "tags" : [ "NearRT-RIC Repository" ],
+        "summary" : "Returns info for one Near-RT RIC",
+        "description" : "Either a Near-RT RIC identity or a Managed Element identity can be specified.<br>The intention with Managed Element identity is the ID used in O1 for accessing the traffical element (such as the ID of CU).",
+        "operationId" : "getRic",
+        "parameters" : [ {
+          "name" : "managed_element_id",
+          "in" : "query",
+          "description" : "The identity of a Managed Element. If given, the Near-RT RIC managing the ME is returned.",
+          "required" : false,
+          "style" : "form",
+          "explode" : true,
+          "schema" : {
+            "type" : "string"
+          }
+        }, {
+          "name" : "ric_id",
+          "in" : "query",
+          "description" : "The identity of a Near-RT RIC to get information for.",
+          "required" : false,
+          "style" : "form",
+          "explode" : true,
+          "schema" : {
+            "type" : "string"
+          }
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Near-RT RIC is found",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/ric_info"
+                },
+                "examples" : {
+                  "ric_info" : {
+                    "$ref" : "#/components/examples/ric_info"
+                  }
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Near-RT RIC is not found",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/error_information"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/actuator/shutdown" : {
+      "post" : {
+        "tags" : [ "Actuator" ],
+        "summary" : "Actuator web endpoint 'shutdown'",
+        "operationId" : "shutdown",
+        "responses" : {
+          "200" : {
+            "description" : "OK",
+            "content" : {
+              "application/vnd.spring-boot.actuator.v3+json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              },
+              "application/json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              },
+              "application/vnd.spring-boot.actuator.v2+json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/a1-policy/v2/policy-types" : {
+      "get" : {
+        "tags" : [ "A1 Policy Management" ],
+        "summary" : "Query policy type identities",
+        "operationId" : "getPolicyTypes",
+        "parameters" : [ {
+          "name" : "ric_id",
+          "in" : "query",
+          "description" : "Select types for the given Near-RT RIC identity.",
+          "required" : false,
+          "style" : "form",
+          "explode" : true,
+          "schema" : {
+            "type" : "string"
+          }
+        }, {
+          "name" : "type_name",
+          "in" : "query",
+          "description" : "Select types with the given type name (type identity has the format <typename_version>)",
+          "required" : false,
+          "style" : "form",
+          "explode" : true,
+          "schema" : {
+            "type" : "string"
+          }
+        }, {
+          "name" : "compatible_with_version",
+          "in" : "query",
+          "description" : "Select types that are compatible with the given version. This parameter is only applicable in conjunction with type_name. As an example version 1.9.1 is compatible with 1.0.0 but not the other way around. Matching types will be returned sorted in ascending order.",
+          "required" : false,
+          "style" : "form",
+          "explode" : true,
+          "schema" : {
+            "type" : "string"
+          }
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Policy type IDs",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/policy_type_id_list"
+                },
+                "examples" : {
+                  "policy_type_id_list" : {
+                    "$ref" : "#/components/examples/policy_type_id_list"
+                  }
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Near-RT RIC is not found",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/error_information"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/a1-policy/v2/policies/{policy_id}" : {
+      "get" : {
+        "tags" : [ "A1 Policy Management" ],
+        "summary" : "Returns a policy",
+        "operationId" : "getPolicy",
+        "parameters" : [ {
+          "name" : "policy_id",
+          "in" : "path",
+          "required" : true,
+          "style" : "simple",
+          "explode" : false,
+          "schema" : {
+            "type" : "string"
+          }
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Policy found",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/policy_info"
+                },
+                "examples" : {
+                  "policy_info" : {
+                    "$ref" : "#/components/examples/policy_info"
+                  }
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Policy is not found",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/error_information"
+                }
+              }
+            }
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "A1 Policy Management" ],
+        "summary" : "Delete a policy",
+        "operationId" : "deletePolicy",
+        "parameters" : [ {
+          "name" : "policy_id",
+          "in" : "path",
+          "required" : true,
+          "style" : "simple",
+          "explode" : false,
+          "schema" : {
+            "type" : "string"
+          }
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Not used",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/void"
+                }
+              }
+            }
+          },
+          "423" : {
+            "description" : "Near-RT RIC is not operational",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/error_information"
+                }
+              }
+            }
+          },
+          "204" : {
+            "description" : "Policy deleted",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/void"
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Policy is not found",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/error_information"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/actuator/metrics/{requiredMetricName}" : {
+      "get" : {
+        "tags" : [ "Actuator" ],
+        "summary" : "Actuator web endpoint 'metrics-requiredMetricName'",
+        "operationId" : "metrics-requiredMetricName",
+        "parameters" : [ {
+          "name" : "requiredMetricName",
+          "in" : "path",
+          "required" : true,
+          "style" : "simple",
+          "explode" : false,
+          "schema" : {
+            "type" : "string"
+          }
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "OK",
+            "content" : {
+              "application/vnd.spring-boot.actuator.v3+json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              },
+              "application/json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              },
+              "application/vnd.spring-boot.actuator.v2+json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/a1-policy/v2/configuration" : {
+      "get" : {
+        "tags" : [ "configuration" ],
+        "summary" : "Returns the contents of the application configuration file",
+        "operationId" : "getConfiguration",
+        "responses" : {
+          "200" : {
+            "description" : "Configuration",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "type" : "string"
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "File is not found or readable",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/error_information"
+                }
+              }
+            }
+          }
+        }
+      },
+      "put" : {
+        "tags" : [ "configuration" ],
+        "summary" : "Replace the current configuration file with the given configuration",
+        "operationId" : "putConfiguration",
+        "requestBody" : {
+          "content" : {
+            "application/json" : {
+              "schema" : {
+                "type" : "object"
+              }
+            }
+          },
+          "required" : true
+        },
+        "responses" : {
+          "200" : {
+            "description" : "Configuration updated",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/void"
+                }
+              }
+            }
+          },
+          "400" : {
+            "description" : "Invalid configuration provided",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/error_information"
+                }
+              }
+            }
+          },
+          "500" : {
+            "description" : "Something went wrong when replacing the configuration. Try again.",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/error_information"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/actuator" : {
+      "get" : {
+        "tags" : [ "Actuator" ],
+        "summary" : "Actuator root web endpoint",
+        "operationId" : "links",
+        "responses" : {
+          "200" : {
+            "description" : "OK",
+            "content" : {
+              "application/vnd.spring-boot.actuator.v3+json" : {
+                "schema" : {
+                  "type" : "object",
+                  "additionalProperties" : {
+                    "type" : "object",
+                    "additionalProperties" : {
+                      "$ref" : "#/components/schemas/Link"
+                    }
+                  }
+                }
+              },
+              "application/json" : {
+                "schema" : {
+                  "type" : "object",
+                  "additionalProperties" : {
+                    "type" : "object",
+                    "additionalProperties" : {
+                      "$ref" : "#/components/schemas/Link"
+                    }
+                  }
+                }
+              },
+              "application/vnd.spring-boot.actuator.v2+json" : {
+                "schema" : {
+                  "type" : "object",
+                  "additionalProperties" : {
+                    "type" : "object",
+                    "additionalProperties" : {
+                      "$ref" : "#/components/schemas/Link"
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/actuator/loggers/{name}" : {
+      "get" : {
+        "tags" : [ "Actuator" ],
+        "summary" : "Actuator web endpoint 'loggers-name'",
+        "operationId" : "loggers-name",
+        "parameters" : [ {
+          "name" : "name",
+          "in" : "path",
+          "required" : true,
+          "style" : "simple",
+          "explode" : false,
+          "schema" : {
+            "type" : "string"
+          }
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "OK",
+            "content" : {
+              "application/vnd.spring-boot.actuator.v3+json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              },
+              "application/json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              },
+              "application/vnd.spring-boot.actuator.v2+json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              }
+            }
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "Actuator" ],
+        "summary" : "Actuator web endpoint 'loggers-name'",
+        "operationId" : "loggers-name_2",
+        "parameters" : [ {
+          "name" : "name",
+          "in" : "path",
+          "required" : true,
+          "style" : "simple",
+          "explode" : false,
+          "schema" : {
+            "type" : "string"
+          }
+        } ],
+        "requestBody" : {
+          "content" : {
+            "application/json" : {
+              "schema" : {
+                "type" : "string",
+                "enum" : [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL", "OFF" ]
+              }
+            }
+          }
+        },
+        "responses" : {
+          "200" : {
+            "description" : "OK",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/a1-policy/v2/services/{service_id}/keepalive" : {
+      "put" : {
+        "tags" : [ "Service Registry and Supervision" ],
+        "summary" : "Heartbeat indicates that the service is running",
+        "description" : "A registered service should invoke this operation regularly to indicate that it is still alive. If a registered service fails to invoke this operation before the end of a timeout period the service will be deregistered and all its A1 policies wil be removed. (This timeout can be set or disabled when each service is initially registered)",
+        "operationId" : "keepAliveService",
+        "parameters" : [ {
+          "name" : "service_id",
+          "in" : "path",
+          "required" : true,
+          "style" : "simple",
+          "explode" : false,
+          "schema" : {
+            "type" : "string"
+          }
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Service supervision timer refreshed, OK",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "The service is not found, needs re-registration",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/error_information"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/actuator/metrics" : {
+      "get" : {
+        "tags" : [ "Actuator" ],
+        "summary" : "Actuator web endpoint 'metrics'",
+        "operationId" : "metrics",
+        "responses" : {
+          "200" : {
+            "description" : "OK",
+            "content" : {
+              "application/vnd.spring-boot.actuator.v3+json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              },
+              "application/json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              },
+              "application/vnd.spring-boot.actuator.v2+json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/a1-policy/v2/rics" : {
+      "get" : {
+        "tags" : [ "NearRT-RIC Repository" ],
+        "summary" : "Query Near-RT RIC information",
+        "description" : "The call returns all Near-RT RICs that supports a given policy type identity",
+        "operationId" : "getRics",
+        "parameters" : [ {
+          "name" : "policytype_id",
+          "in" : "query",
+          "description" : "The identity of a policy type. If given, all Near-RT RICs supporting the policy type are returned",
+          "required" : false,
+          "style" : "form",
+          "explode" : true,
+          "schema" : {
+            "type" : "string"
+          }
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "OK",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/ric_info_list"
+                },
+                "examples" : {
+                  "ric_info_list" : {
+                    "$ref" : "#/components/examples/ric_info_list"
+                  }
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Policy type is not found",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/error_information"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/a1-policy/v2/services" : {
+      "get" : {
+        "tags" : [ "Service Registry and Supervision" ],
+        "summary" : "Returns service information",
+        "description" : "Either information about a registered service with given identity or all registered services are returned.",
+        "operationId" : "getServices",
+        "parameters" : [ {
+          "name" : "service_id",
+          "in" : "query",
+          "description" : "The identity of the service",
+          "required" : false,
+          "style" : "form",
+          "explode" : true,
+          "schema" : {
+            "type" : "string"
+          }
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "OK",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/service_status_list"
+                },
+                "examples" : {
+                  "service_status_list" : {
+                    "$ref" : "#/components/examples/service_status_list"
+                  }
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Service is not found",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/error_information"
+                }
+              }
+            }
+          }
+        }
+      },
+      "put" : {
+        "tags" : [ "Service Registry and Supervision" ],
+        "summary" : "Register a service",
+        "description" : "Registering a service is needed to:<ul><li>Get callbacks about available NearRT RICs.</li><li>Activate supervision of the service. If a service is inactive, its policies will automatically be deleted.</li></ul>Policies can be created even if the service is not registerred. This is a feature which it is optional to use.",
+        "operationId" : "putService",
+        "requestBody" : {
+          "content" : {
+            "application/json" : {
+              "schema" : {
+                "$ref" : "#/components/schemas/service_registration_info"
+              }
+            }
+          },
+          "required" : true
+        },
+        "responses" : {
+          "200" : {
+            "description" : "Service updated",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "201" : {
+            "description" : "Service created",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "400" : {
+            "description" : "The ServiceRegistrationInfo is not accepted",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/error_information"
+                }
+              }
+            }
+          }
+        },
+        "callbacks" : {
+          "RICStatus" : {
+            "{$request.body#/callback_url}" : {
+              "post" : {
+                "tags" : [ "Service callbacks" ],
+                "summary" : "Callback for Near-RT RIC status",
+                "description" : "The URL to this call is registered at Service registration.",
+                "operationId" : "serviceCallback",
+                "requestBody" : {
+                  "content" : {
+                    "application/json" : {
+                      "schema" : {
+                        "$ref" : "#/components/schemas/service_callback_info_v2"
+                      }
+                    }
+                  },
+                  "required" : true
+                },
+                "responses" : {
+                  "200" : {
+                    "description" : "OK",
+                    "content" : {
+                      "application/json" : {
+                        "schema" : {
+                          "$ref" : "#/components/schemas/void"
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/actuator/info" : {
+      "get" : {
+        "tags" : [ "Actuator" ],
+        "summary" : "Actuator web endpoint 'info'",
+        "operationId" : "info",
+        "responses" : {
+          "200" : {
+            "description" : "OK",
+            "content" : {
+              "application/vnd.spring-boot.actuator.v3+json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              },
+              "application/json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              },
+              "application/vnd.spring-boot.actuator.v2+json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/status" : {
+      "get" : {
+        "tags" : [ "Health Check" ],
+        "summary" : "Returns status and statistics of this service",
+        "operationId" : "getStatusV1",
+        "responses" : {
+          "200" : {
+            "description" : "Service is living",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "type" : "string"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/a1-policy/v2/policy-types/{policytype_id}" : {
+      "get" : {
+        "tags" : [ "A1 Policy Management" ],
+        "summary" : "Returns a policy type definition",
+        "operationId" : "getPolicyTypeDefinition",
+        "parameters" : [ {
+          "name" : "policytype_id",
+          "in" : "path",
+          "required" : true,
+          "style" : "simple",
+          "explode" : false,
+          "schema" : {
+            "type" : "string"
+          }
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "schema of the given policy type",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/policy_type_definition"
+                },
+                "examples" : {
+                  "policy_type_definition" : {
+                    "$ref" : "#/components/examples/policy_type_definition"
+                  }
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Policy type is not found",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/error_information"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/actuator/logfile" : {
+      "get" : {
+        "tags" : [ "Actuator" ],
+        "summary" : "Actuator web endpoint 'logfile'",
+        "operationId" : "logfile",
+        "responses" : {
+          "200" : {
+            "description" : "OK",
+            "content" : {
+              "text/plain;charset=UTF-8" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/actuator/health" : {
+      "get" : {
+        "tags" : [ "Actuator" ],
+        "summary" : "Actuator web endpoint 'health'",
+        "operationId" : "health",
+        "responses" : {
+          "200" : {
+            "description" : "OK",
+            "content" : {
+              "application/vnd.spring-boot.actuator.v3+json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              },
+              "application/json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              },
+              "application/vnd.spring-boot.actuator.v2+json" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/a1-policy/v2/policies" : {
+      "get" : {
+        "tags" : [ "A1 Policy Management" ],
+        "summary" : "Query policy identities",
+        "description" : "Returns a list of A1 policies matching given search criteria. <br>If several query parameters are defined, the policies matching all conditions are returned.",
+        "operationId" : "getPolicyIds",
+        "parameters" : [ {
+          "name" : "policytype_id",
+          "in" : "query",
+          "description" : "Select policies of a given policy type identity.",
+          "required" : false,
+          "style" : "form",
+          "explode" : true,
+          "schema" : {
+            "type" : "string"
+          }
+        }, {
+          "name" : "ric_id",
+          "in" : "query",
+          "description" : "Select policies of a given Near-RT RIC identity.",
+          "required" : false,
+          "style" : "form",
+          "explode" : true,
+          "schema" : {
+            "type" : "string"
+          }
+        }, {
+          "name" : "service_id",
+          "in" : "query",
+          "description" : "Select policies owned by a given service.",
+          "required" : false,
+          "style" : "form",
+          "explode" : true,
+          "schema" : {
+            "type" : "string"
+          }
+        }, {
+          "name" : "type_name",
+          "in" : "query",
+          "description" : "Select policies of types with the given type name (type identity has the format <typename_version>)",
+          "required" : false,
+          "style" : "form",
+          "explode" : true,
+          "schema" : {
+            "type" : "string"
+          }
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Policy identities",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/policy_id_list"
+                },
+                "examples" : {
+                  "policy_id_list" : {
+                    "$ref" : "#/components/examples/policy_id_list"
+                  }
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Near-RT RIC or type not found",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/error_information"
+                }
+              }
+            }
+          }
+        }
+      },
+      "put" : {
+        "tags" : [ "A1 Policy Management" ],
+        "summary" : "Create or update a policy",
+        "operationId" : "putPolicy",
+        "requestBody" : {
+          "content" : {
+            "application/json" : {
+              "schema" : {
+                "$ref" : "#/components/schemas/policy_info"
+              }
+            }
+          },
+          "required" : true
+        },
+        "responses" : {
+          "200" : {
+            "description" : "Policy updated",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/void"
+                }
+              }
+            }
+          },
+          "201" : {
+            "description" : "Policy created",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/void"
+                }
+              }
+            }
+          },
+          "423" : {
+            "description" : "Near-RT RIC is not operational",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/error_information"
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Near-RT RIC or policy type is not found",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/error_information"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/a1-policy/v2/services/{service_id}" : {
+      "delete" : {
+        "tags" : [ "Service Registry and Supervision" ],
+        "summary" : "Unregister a service",
+        "operationId" : "deleteService",
+        "parameters" : [ {
+          "name" : "service_id",
+          "in" : "path",
+          "required" : true,
+          "style" : "simple",
+          "explode" : false,
+          "schema" : {
+            "type" : "string"
+          }
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Not used",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/void"
+                }
+              }
+            }
+          },
+          "204" : {
+            "description" : "Service unregistered",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Service not found",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/error_information"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/actuator/heapdump" : {
+      "get" : {
+        "tags" : [ "Actuator" ],
+        "summary" : "Actuator web endpoint 'heapdump'",
+        "operationId" : "heapdump",
+        "responses" : {
+          "200" : {
+            "description" : "OK",
+            "content" : {
+              "application/octet-stream" : {
+                "schema" : {
+                  "type" : "object"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/a1-policy/v2/policies/{policy_id}/status" : {
+      "get" : {
+        "tags" : [ "A1 Policy Management" ],
+        "summary" : "Returns a policy status",
+        "operationId" : "getPolicyStatus",
+        "parameters" : [ {
+          "name" : "policy_id",
+          "in" : "path",
+          "required" : true,
+          "style" : "simple",
+          "explode" : false,
+          "schema" : {
+            "type" : "string"
+          }
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Policy status",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/policy_status_info"
+                },
+                "examples" : {
+                  "policy_status_info" : {
+                    "$ref" : "#/components/examples/policy_status_info"
+                  }
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Policy is not found",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/error_information"
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  },
+  "components" : {
+    "schemas" : {
+      "policy_type_definition" : {
+        "type" : "object",
+        "properties" : {
+          "policy_schema" : {
+            "type" : "object",
+            "description" : "Policy type json schema. The schema is a json object following http://json-schema.org/draft-07/schema"
+          }
+        },
+        "description" : "Contains policy type schema definition"
+      },
+      "error_information" : {
+        "type" : "object",
+        "properties" : {
+          "detail" : {
+            "type" : "string",
+            "description" : " A human-readable explanation specific to this occurrence of the problem.",
+            "example" : "Policy type not found"
+          },
+          "status" : {
+            "type" : "integer",
+            "description" : "The HTTP status code generated by the origin server for this occurrence of the problem. ",
+            "format" : "int32",
+            "example" : 404
+          }
+        },
+        "description" : "Problem as defined in https://tools.ietf.org/html/rfc7807"
+      },
+      "void" : {
+        "type" : "object",
+        "description" : "Void/empty"
+      },
+      "status_info" : {
+        "type" : "object",
+        "properties" : {
+          "status" : {
+            "type" : "string",
+            "description" : "status text"
+          }
+        }
+      },
+      "authorization_result" : {
+        "required" : [ "result" ],
+        "type" : "object",
+        "properties" : {
+          "result" : {
+            "type" : "boolean",
+            "description" : "If true, the access is granted"
+          }
+        },
+        "description" : "Result of authorization",
+        "example" : {
+          "result" : true
+        }
+      },
+      "ric_info" : {
+        "type" : "object",
+        "properties" : {
+          "ric_id" : {
+            "type" : "string",
+            "description" : "identity of the Near-RT RIC"
+          },
+          "managed_element_ids" : {
+            "type" : "array",
+            "description" : "O1 identities for managed entities",
+            "items" : {
+              "type" : "string",
+              "description" : "O1 identities for managed entities"
+            }
+          },
+          "state" : {
+            "type" : "string",
+            "description" : "Represents the states for a Near-RT RIC",
+            "enum" : [ "UNAVAILABLE", "AVAILABLE", "SYNCHRONIZING", "CONSISTENCY_CHECK" ]
+          },
+          "policytype_ids" : {
+            "type" : "array",
+            "description" : "supported policy types",
+            "items" : {
+              "type" : "string",
+              "description" : "supported policy types"
+            }
+          }
+        },
+        "description" : "Information for a Near-RT RIC"
+      },
+      "service_registration_info" : {
+        "required" : [ "service_id" ],
+        "type" : "object",
+        "properties" : {
+          "callback_url" : {
+            "type" : "string",
+            "description" : "callback for notifying of Near-RT RIC state changes"
+          },
+          "service_id" : {
+            "type" : "string",
+            "description" : "identity of the service"
+          },
+          "keep_alive_interval_seconds" : {
+            "type" : "integer",
+            "description" : "keep alive interval for the service. This is used to enable optional heartbeat supervision of the service. If set (> 0) the registered service should regularly invoke a 'keepalive' REST call. When a service fails to invoke this 'keepalive' call within the configured time, the service is considered unavailable. An unavailable service will be automatically deregistered and its policies will be deleted. Value 0 means timeout supervision is disabled.",
+            "format" : "int64"
+          }
+        },
+        "description" : "Information for one service"
+      },
+      "policy_info_list" : {
+        "type" : "object",
+        "properties" : {
+          "policies" : {
+            "type" : "array",
+            "description" : "List of policy information",
+            "items" : {
+              "$ref" : "#/components/schemas/policy_info"
+            }
+          }
+        },
+        "description" : "List of policy information"
+      },
+      "policy_status_info" : {
+        "type" : "object",
+        "properties" : {
+          "last_modified" : {
+            "type" : "string",
+            "description" : "timestamp, last modification time"
+          },
+          "status" : {
+            "type" : "object",
+            "description" : "the Policy status"
+          }
+        },
+        "description" : "Status for one A1-P Policy"
+      },
+      "service_status" : {
+        "type" : "object",
+        "properties" : {
+          "callback_url" : {
+            "type" : "string",
+            "description" : "callback for notifying of RIC synchronization"
+          },
+          "service_id" : {
+            "type" : "string",
+            "description" : "identity of the service"
+          },
+          "keep_alive_interval_seconds" : {
+            "type" : "integer",
+            "description" : "policy keep alive timeout",
+            "format" : "int64"
+          },
+          "time_since_last_activity_seconds" : {
+            "type" : "integer",
+            "description" : "time since last invocation by the service",
+            "format" : "int64"
+          }
+        }
+      },
+      "ric_info_list" : {
+        "type" : "object",
+        "properties" : {
+          "rics" : {
+            "type" : "array",
+            "description" : "List of Near-RT RIC information",
+            "items" : {
+              "$ref" : "#/components/schemas/ric_info"
+            }
+          }
+        },
+        "description" : "List of Near-RT RIC information"
+      },
+      "input" : {
+        "required" : [ "access_type", "auth_token", "policy_type_id" ],
+        "type" : "object",
+        "properties" : {
+          "access_type" : {
+            "type" : "string",
+            "description" : "Access type",
+            "enum" : [ "READ", "WRITE", "DELETE" ]
+          },
+          "auth_token" : {
+            "type" : "string",
+            "description" : "Authorization token"
+          },
+          "policy_type_id" : {
+            "type" : "string",
+            "description" : "Policy type identifier"
+          }
+        },
+        "description" : "input"
+      },
+      "policy_authorization" : {
+        "required" : [ "input" ],
+        "type" : "object",
+        "properties" : {
+          "input" : {
+            "$ref" : "#/components/schemas/input"
+          }
+        },
+        "description" : "Authorization request for A1 policy requests"
+      },
+      "policy_type_id_list" : {
+        "type" : "object",
+        "properties" : {
+          "policytype_ids" : {
+            "type" : "array",
+            "description" : "Policy type identities",
+            "items" : {
+              "type" : "string",
+              "description" : "Policy type identities"
+            }
+          }
+        },
+        "description" : "Information about policy types"
+      },
+      "policy_info" : {
+        "required" : [ "policy_data", "policy_id", "policytype_id", "ric_id", "service_id" ],
+        "type" : "object",
+        "properties" : {
+          "ric_id" : {
+            "type" : "string",
+            "description" : "identity of the target Near-RT RIC"
+          },
+          "policy_id" : {
+            "type" : "string",
+            "description" : "identity of the policy"
+          },
+          "transient" : {
+            "type" : "boolean",
+            "description" : "if true, the policy is deleted at RIC restart. If false, its value is maintained by this service until explicitly deleted. Default false.",
+            "nullable" : false,
+            "example" : false,
+            "default" : false
+          },
+          "service_id" : {
+            "type" : "string",
+            "description" : "the identity of the service owning the policy. This can be used to group the policies (it is possible to get all policies associated to a service). Note that the service does not need to be registered."
+          },
+          "policy_data" : {
+            "type" : "object",
+            "description" : "the configuration of the policy"
+          },
+          "status_notification_uri" : {
+            "type" : "string",
+            "description" : "Callback URI for policy status updates"
+          },
+          "policytype_id" : {
+            "type" : "string",
+            "description" : "identity of the policy type"
+          }
+        },
+        "description" : "Information for one A1-P Policy"
+      },
+      "policy_id_list" : {
+        "type" : "object",
+        "properties" : {
+          "policy_ids" : {
+            "type" : "array",
+            "description" : "Policy identities",
+            "items" : {
+              "type" : "string",
+              "description" : "Policy identities"
+            }
+          }
+        },
+        "description" : "A list of policy identities",
+        "example" : {
+          "policy_ids" : [ "policy_ids", "policy_ids" ]
+        }
+      },
+      "service_status_list" : {
+        "type" : "object",
+        "properties" : {
+          "service_list" : {
+            "type" : "array",
+            "description" : "List of service information",
+            "items" : {
+              "$ref" : "#/components/schemas/service_status"
+            }
+          }
+        }
+      },
+      "service_callback_info_v2" : {
+        "required" : [ "event_type", "ric_id" ],
+        "type" : "object",
+        "properties" : {
+          "ric_id" : {
+            "type" : "string",
+            "description" : "identity of a Near-RT RIC"
+          },
+          "event_type" : {
+            "type" : "string",
+            "description" : "values:\nAVAILABLE: the  Near-RT RIC has become available for A1 Policy management",
+            "enum" : [ "AVAILABLE" ]
+          }
+        },
+        "description" : "Information transferred as in Service callbacks (callback_url)"
+      },
+      "Link" : {
+        "type" : "object",
+        "properties" : {
+          "templated" : {
+            "type" : "boolean"
+          },
+          "href" : {
+            "type" : "string"
+          }
+        }
+      }
+    },
+    "examples" : {
+      "service_status" : {
+        "description" : "List of service information",
+        "value" : {
+          "callback_url" : "callback_url",
+          "service_id" : "service_id",
+          "keep_alive_interval_seconds" : 0,
+          "time_since_last_activity_seconds" : 6
+        }
+      },
+      "service_status_list" : {
+        "description" : "List of service information",
+        "value" : {
+          "service_list" : [ {
+            "callback_url" : "callback_url",
+            "service_id" : "service_id",
+            "keep_alive_interval_seconds" : 0,
+            "time_since_last_activity_seconds" : 6
+          }, {
+            "callback_url" : "callback_url",
+            "service_id" : "service_id",
+            "keep_alive_interval_seconds" : 0,
+            "time_since_last_activity_seconds" : 6
+          } ]
+        }
+      },
+      "policy_type_definition" : {
+        "description" : "Schema of the given Policy type",
+        "value" : {
+          "policy_schema" : "{}"
+        }
+      },
+      "policy_type_id_list" : {
+        "description" : "Array of policy type id's",
+        "value" : {
+          "policy_type_id_list" : [ "policytype_id", "policytype_id" ]
+        }
+      },
+      "policy_info" : {
+        "description" : "Policy information of one A1-P policy",
+        "value" : {
+          "ric_id" : "ric_id",
+          "policy_id" : "policy_id",
+          "transient" : false,
+          "service_id" : "service_id",
+          "policy_data" : "{}",
+          "status_notification_uri" : "status_notification_uri",
+          "policytype_id" : "policytype_id"
+        }
+      },
+      "policy_info_list" : {
+        "description" : "List of policy information",
+        "value" : {
+          "policies" : [ {
+            "ric_id" : "ric_id",
+            "policy_id" : "policy_id",
+            "transient" : false,
+            "service_id" : "service_id",
+            "policy_data" : "{}",
+            "status_notification_uri" : "status_notification_uri",
+            "policytype_id" : "policytype_id"
+          }, {
+            "ric_id" : "ric_id",
+            "policy_id" : "policy_id",
+            "transient" : false,
+            "service_id" : "service_id",
+            "policy_data" : "{}",
+            "status_notification_uri" : "status_notification_uri",
+            "policytype_id" : "policytype_id"
+          } ]
+        }
+      },
+      "policy_id_list" : {
+        "description" : "A list of policy identities",
+        "value" : {
+          "policy_ids" : [ "policy_ids", "policy_ids" ]
+        }
+      },
+      "policy_status_info" : {
+        "description" : "Status for one A1-P Policy",
+        "value" : {
+          "last_modified" : "last_modified",
+          "status" : "{}"
+        }
+      },
+      "status_info" : {
+        "value" : {
+          "status" : "status"
+        }
+      },
+      "ric_info" : {
+        "value" : {
+          "ric_id" : "ric_id",
+          "managed_element_ids" : [ "managed_element_ids", "managed_element_ids" ],
+          "state" : "UNAVAILABLE",
+          "policytype_ids" : [ "policytype_ids", "policytype_ids" ]
+        }
+      },
+      "ric_info_list" : {
+        "value" : {
+          "rics" : [ {
+            "ric_id" : "ric_id",
+            "managed_element_ids" : [ "managed_element_ids", "managed_element_ids" ],
+            "state" : "UNAVAILABLE",
+            "policytype_ids" : [ "policytype_ids", "policytype_ids" ]
+          }, {
+            "ric_id" : "ric_id",
+            "managed_element_ids" : [ "managed_element_ids", "managed_element_ids" ],
+            "state" : "UNAVAILABLE",
+            "policytype_ids" : [ "policytype_ids", "policytype_ids" ]
+          } ]
+        }
+      }
+    }
+  }
 }
\ No newline at end of file
diff --git a/docs/offeredapis/swagger/pms-api.yaml b/docs/offeredapis/swagger/pms-api.yaml
index 44dc2ba..0895f50 100644
--- a/docs/offeredapis/swagger/pms-api.yaml
+++ b/docs/offeredapis/swagger/pms-api.yaml
@@ -1,4 +1,25 @@
-openapi: 3.0.1
+#  ============LICENSE_START=======================================================
+#  Copyright (C) 2020-2023 Nordix Foundation
+#  Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+#  Modifications Copyright (C) 2021 Pantheon.tech
+#  Modifications Copyright (C) 2021 Bell Canada
+#  ================================================================================
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+#  SPDX-License-Identifier: Apache-2.0
+#  ============LICENSE_END=========================================================
+
+openapi: 3.0.3
 info:
   description: "<h2>General</h2><p>The O-RAN Non-RT RIC Policy Management Service\
     \ provides a REST API for management of A1 policies. <br/>The main tasks of the\
@@ -27,22 +48,23 @@
     \ Actuator</h3><p>Provides generic functions  used to monitor and manage the Spring\
     \ web application.</p>"
   license:
-    name: Copyright (C) 2020-2023 Nordix Foundation. Licensed under the Apache License.
+    name: Copyright (C) 2020-2023 Nordix Foundation. Licensed under the Apache License, and
+          Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
     url: http://www.apache.org/licenses/LICENSE-2.0
   title: A1 Policy Management Service
   version: 1.2.0
 servers:
-- url: /
+  - url: /
 tags:
-- description: "API used for authorization of information A1 policy access (this is\
-    \ provided by an authorization producer such as OPA).\nNote that this API is called\
-    \ by PMS, it is not provided.\n"
-  name: Authorization API
-- description: Monitor and interact
-  externalDocs:
-    description: Spring Boot Actuator Web API Documentation
-    url: https://docs.spring.io/spring-boot/docs/current/actuator-api/html/
-  name: Actuator
+  - description: "API used for authorization of information A1 policy access (this is 
+     provided by an authorization producer such as OPA). <br> Note that this API is called
+     by PMS, it is not provided."
+    name: Authorization API
+  - description: Monitor and interact
+    externalDocs:
+      description: Spring Boot Actuator Web API Documentation
+      url: https://docs.spring.io/spring-boot/docs/current/actuator-api/html/
+    name: Actuator
 paths:
   /a1-policy/v2/policy-instances:
     get:
@@ -51,45 +73,48 @@
         \ are returned."
       operationId: getPolicyInstances
       parameters:
-      - description: Select policies with a given type identity.
-        explode: true
-        in: query
-        name: policytype_id
-        required: false
-        schema:
-          type: string
-        style: form
-      - description: Select policies for a given Near-RT RIC identity.
-        explode: true
-        in: query
-        name: ric_id
-        required: false
-        schema:
-          type: string
-        style: form
-      - description: Select policies owned by a given service.
-        explode: true
-        in: query
-        name: service_id
-        required: false
-        schema:
-          type: string
-        style: form
-      - description: Select policies of a given type name (type identity has the format
-          <typename_version>)
-        explode: true
-        in: query
-        name: type_name
-        required: false
-        schema:
-          type: string
-        style: form
+        - description: Select policies with a given type identity.
+          explode: true
+          in: query
+          name: policytype_id
+          required: false
+          schema:
+            type: string
+          style: form
+        - description: Select policies for a given Near-RT RIC identity.
+          explode: true
+          in: query
+          name: ric_id
+          required: false
+          schema:
+            type: string
+          style: form
+        - description: Select policies owned by a given service.
+          explode: true
+          in: query
+          name: service_id
+          required: false
+          schema:
+            type: string
+          style: form
+        - description: Select policies of a given type name (type identity has the format
+            <typename_version>)
+          explode: true
+          in: query
+          name: type_name
+          required: false
+          schema:
+            type: string
+          style: form
       responses:
         "200":
           content:
             application/json:
+              examples:
+                policy_info_list:
+                  $ref: '#/components/examples/policy_info_list'
               schema:
-                $ref: '#/components/schemas/policy_info_list_v2'
+                $ref: '#/components/schemas/policy_info_list'
           description: Policies
         "404":
           content:
@@ -99,7 +124,7 @@
           description: "Near-RT RIC, policy type or service not found"
       summary: Query for A1 policy instances
       tags:
-      - A1 Policy Management
+        - A1 Policy Management
   /example-authz-check:
     post:
       description: The authorization function decides if access is granted.
@@ -119,7 +144,7 @@
           description: OK
       summary: Request for access authorization.
       tags:
-      - Authorization API
+        - Authorization API
   /actuator/threaddump:
     get:
       operationId: threaddump
@@ -141,7 +166,7 @@
           description: OK
       summary: Actuator web endpoint 'threaddump'
       tags:
-      - Actuator
+        - Actuator
   /a1-policy/v2/status:
     get:
       operationId: getStatus
@@ -150,11 +175,14 @@
           content:
             application/json:
               schema:
-                $ref: '#/components/schemas/status_info_v2'
+                $ref: '#/components/schemas/status_info'
+              examples:
+                status_info:
+                  $ref: '#/components/examples/status_info'
           description: Service is living
       summary: Returns status and statistics of this service
       tags:
-      - Health Check
+        - Health Check
   /actuator/loggers:
     get:
       operationId: loggers
@@ -173,7 +201,7 @@
           description: OK
       summary: Actuator web endpoint 'loggers'
       tags:
-      - Actuator
+        - Actuator
   /actuator/health/**:
     get:
       operationId: health-path
@@ -192,7 +220,7 @@
           description: OK
       summary: Actuator web endpoint 'health-path'
       tags:
-      - Actuator
+        - Actuator
   /a1-policy/v2/rics/ric:
     get:
       description: Either a Near-RT RIC identity or a Managed Element identity can
@@ -200,29 +228,32 @@
         in O1 for accessing the traffical element (such as the ID of CU).
       operationId: getRic
       parameters:
-      - description: "The identity of a Managed Element. If given, the Near-RT RIC\
+        - description: "The identity of a Managed Element. If given, the Near-RT RIC\
           \ managing the ME is returned."
-        explode: true
-        in: query
-        name: managed_element_id
-        required: false
-        schema:
-          type: string
-        style: form
-      - description: The identity of a Near-RT RIC to get information for.
-        explode: true
-        in: query
-        name: ric_id
-        required: false
-        schema:
-          type: string
-        style: form
+          explode: true
+          in: query
+          name: managed_element_id
+          required: false
+          schema:
+            type: string
+          style: form
+        - description: The identity of a Near-RT RIC to get information for.
+          explode: true
+          in: query
+          name: ric_id
+          required: false
+          schema:
+            type: string
+          style: form
       responses:
         "200":
           content:
             application/json:
               schema:
-                $ref: '#/components/schemas/ric_info_v2'
+                $ref: '#/components/schemas/ric_info'
+              examples:
+                ric_info:
+                  $ref: '#/components/examples/ric_info'
           description: Near-RT RIC is found
         "404":
           content:
@@ -232,7 +263,7 @@
           description: Near-RT RIC is not found
       summary: Returns info for one Near-RT RIC
       tags:
-      - NearRT-RIC Repository
+        - NearRT-RIC Repository
   /actuator/shutdown:
     post:
       operationId: shutdown
@@ -251,45 +282,48 @@
           description: OK
       summary: Actuator web endpoint 'shutdown'
       tags:
-      - Actuator
+        - Actuator
   /a1-policy/v2/policy-types:
     get:
       operationId: getPolicyTypes
       parameters:
-      - description: Select types for the given Near-RT RIC identity.
-        explode: true
-        in: query
-        name: ric_id
-        required: false
-        schema:
-          type: string
-        style: form
-      - description: Select types with the given type name (type identity has the
-          format <typename_version>)
-        explode: true
-        in: query
-        name: type_name
-        required: false
-        schema:
-          type: string
-        style: form
-      - description: Select types that are compatible with the given version. This
-          parameter is only applicable in conjunction with type_name. As an example
-          version 1.9.1 is compatible with 1.0.0 but not the other way around. Matching
-          types will be returned sorted in ascending order.
-        explode: true
-        in: query
-        name: compatible_with_version
-        required: false
-        schema:
-          type: string
-        style: form
+        - description: Select types for the given Near-RT RIC identity.
+          explode: true
+          in: query
+          name: ric_id
+          required: false
+          schema:
+            type: string
+          style: form
+        - description: Select types with the given type name (type identity has the
+            format <typename_version>)
+          explode: true
+          in: query
+          name: type_name
+          required: false
+          schema:
+            type: string
+          style: form
+        - description: Select types that are compatible with the given version. This
+            parameter is only applicable in conjunction with type_name. As an example
+            version 1.9.1 is compatible with 1.0.0 but not the other way around. Matching
+            types will be returned sorted in ascending order.
+          explode: true
+          in: query
+          name: compatible_with_version
+          required: false
+          schema:
+            type: string
+          style: form
       responses:
         "200":
           content:
             application/json:
+              examples:
+                policy_type_id_list:
+                  $ref: '#/components/examples/policy_type_id_list'
               schema:
-                $ref: '#/components/schemas/policytype_id_list_v2'
+                $ref: '#/components/schemas/policy_type_id_list'
           description: Policy type IDs
         "404":
           content:
@@ -299,18 +333,18 @@
           description: Near-RT RIC is not found
       summary: Query policy type identities
       tags:
-      - A1 Policy Management
+        - A1 Policy Management
   /a1-policy/v2/policies/{policy_id}:
     delete:
       operationId: deletePolicy
       parameters:
-      - explode: false
-        in: path
-        name: policy_id
-        required: true
-        schema:
-          type: string
-        style: simple
+        - explode: false
+          in: path
+          name: policy_id
+          required: true
+          schema:
+            type: string
+          style: simple
       responses:
         "200":
           content:
@@ -338,23 +372,26 @@
           description: Policy is not found
       summary: Delete a policy
       tags:
-      - A1 Policy Management
+        - A1 Policy Management
     get:
       operationId: getPolicy
       parameters:
-      - explode: false
-        in: path
-        name: policy_id
-        required: true
-        schema:
-          type: string
-        style: simple
+        - explode: false
+          in: path
+          name: policy_id
+          required: true
+          schema:
+            type: string
+          style: simple
       responses:
         "200":
           content:
             application/json:
               schema:
-                $ref: '#/components/schemas/policy_info_v2'
+                $ref: '#/components/schemas/policy_info'
+              examples:
+                policy_info:
+                  $ref: '#/components/examples/policy_info'
           description: Policy found
         "404":
           content:
@@ -364,18 +401,18 @@
           description: Policy is not found
       summary: Returns a policy
       tags:
-      - A1 Policy Management
+        - A1 Policy Management
   /actuator/metrics/{requiredMetricName}:
     get:
       operationId: metrics-requiredMetricName
       parameters:
-      - explode: false
-        in: path
-        name: requiredMetricName
-        required: true
-        schema:
-          type: string
-        style: simple
+        - explode: false
+          in: path
+          name: requiredMetricName
+          required: true
+          schema:
+            type: string
+          style: simple
       responses:
         "200":
           content:
@@ -391,7 +428,7 @@
           description: OK
       summary: Actuator web endpoint 'metrics-requiredMetricName'
       tags:
-      - Actuator
+        - Actuator
   /a1-policy/v2/configuration:
     get:
       operationId: getConfiguration
@@ -400,7 +437,7 @@
           content:
             application/json:
               schema:
-                type: object
+                type: string
           description: Configuration
         "404":
           content:
@@ -410,7 +447,7 @@
           description: File is not found or readable
       summary: Returns the contents of the application configuration file
       tags:
-      - Management of configuration
+        - configuration
     put:
       operationId: putConfiguration
       requestBody:
@@ -441,7 +478,7 @@
             again.
       summary: Replace the current configuration file with the given configuration
       tags:
-      - Management of configuration
+        - configuration
   /actuator:
     get:
       operationId: links
@@ -472,18 +509,18 @@
           description: OK
       summary: Actuator root web endpoint
       tags:
-      - Actuator
+        - Actuator
   /actuator/loggers/{name}:
     get:
       operationId: loggers-name
       parameters:
-      - explode: false
-        in: path
-        name: name
-        required: true
-        schema:
-          type: string
-        style: simple
+        - explode: false
+          in: path
+          name: name
+          required: true
+          schema:
+            type: string
+          style: simple
       responses:
         "200":
           content:
@@ -499,29 +536,29 @@
           description: OK
       summary: Actuator web endpoint 'loggers-name'
       tags:
-      - Actuator
+        - Actuator
     post:
       operationId: loggers-name_2
       parameters:
-      - explode: false
-        in: path
-        name: name
-        required: true
-        schema:
-          type: string
-        style: simple
+        - explode: false
+          in: path
+          name: name
+          required: true
+          schema:
+            type: string
+          style: simple
       requestBody:
         content:
           application/json:
             schema:
               enum:
-              - TRACE
-              - DEBUG
-              - INFO
-              - WARN
-              - ERROR
-              - FATAL
-              - "OFF"
+                - TRACE
+                - DEBUG
+                - INFO
+                - WARN
+                - ERROR
+                - FATAL
+                - "OFF"
               type: string
       responses:
         "200":
@@ -532,7 +569,7 @@
           description: OK
       summary: Actuator web endpoint 'loggers-name'
       tags:
-      - Actuator
+        - Actuator
   /a1-policy/v2/services/{service_id}/keepalive:
     put:
       description: A registered service should invoke this operation regularly to
@@ -542,13 +579,13 @@
         when each service is initially registered)
       operationId: keepAliveService
       parameters:
-      - explode: false
-        in: path
-        name: service_id
-        required: true
-        schema:
-          type: string
-        style: simple
+        - explode: false
+          in: path
+          name: service_id
+          required: true
+          schema:
+            type: string
+          style: simple
       responses:
         "200":
           content:
@@ -564,7 +601,7 @@
           description: "The service is not found, needs re-registration"
       summary: Heartbeat indicates that the service is running
       tags:
-      - Service Registry and Supervision
+        - Service Registry and Supervision
   /actuator/metrics:
     get:
       operationId: metrics
@@ -583,28 +620,31 @@
           description: OK
       summary: Actuator web endpoint 'metrics'
       tags:
-      - Actuator
+        - Actuator
   /a1-policy/v2/rics:
     get:
       description: The call returns all Near-RT RICs that supports a given policy
         type identity
       operationId: getRics
       parameters:
-      - description: "The identity of a policy type. If given, all Near-RT RICs supporting\
+        - description: "The identity of a policy type. If given, all Near-RT RICs supporting\
           \ the policy type are returned"
-        explode: true
-        in: query
-        name: policytype_id
-        required: false
-        schema:
-          type: string
-        style: form
+          explode: true
+          in: query
+          name: policytype_id
+          required: false
+          schema:
+            type: string
+          style: form
       responses:
         "200":
           content:
             application/json:
               schema:
-                $ref: '#/components/schemas/ric_info_list_v2'
+                $ref: '#/components/schemas/ric_info_list'
+              examples:
+                ric_info_list:
+                  $ref: '#/components/examples/ric_info_list'
           description: OK
         "404":
           content:
@@ -614,27 +654,30 @@
           description: Policy type is not found
       summary: Query Near-RT RIC information
       tags:
-      - NearRT-RIC Repository
+        - NearRT-RIC Repository
   /a1-policy/v2/services:
     get:
       description: Either information about a registered service with given identity
         or all registered services are returned.
       operationId: getServices
       parameters:
-      - description: The identity of the service
-        explode: true
-        in: query
-        name: service_id
-        required: false
-        schema:
-          type: string
-        style: form
+        - description: The identity of the service
+          explode: true
+          in: query
+          name: service_id
+          required: false
+          schema:
+            type: string
+          style: form
       responses:
         "200":
           content:
             application/json:
               schema:
-                $ref: '#/components/schemas/service_list_v2'
+                $ref: '#/components/schemas/service_status_list'
+              examples:
+                service_status_list:
+                  $ref: '#/components/examples/service_status_list'
           description: OK
         "404":
           content:
@@ -644,7 +687,7 @@
           description: Service is not found
       summary: Returns service information
       tags:
-      - Service Registry and Supervision
+        - Service Registry and Supervision
     put:
       description: "Registering a service is needed to:<ul><li>Get callbacks about\
         \ available NearRT RICs.</li><li>Activate supervision of the service. If a\
@@ -656,7 +699,7 @@
         content:
           application/json:
             schema:
-              $ref: '#/components/schemas/service_registration_info_v2'
+              $ref: '#/components/schemas/service_registration_info'
         required: true
       responses:
         "200":
@@ -679,7 +722,29 @@
           description: The ServiceRegistrationInfo is not accepted
       summary: Register a service
       tags:
-      - Service Registry and Supervision
+        - Service Registry and Supervision
+      callbacks:
+        RICStatus:
+          "{$request.body#/callback_url}":
+           post:
+            description: The URL to this call is registered at Service registration.
+            operationId: serviceCallback
+            requestBody:
+              content:
+                application/json:
+                  schema:
+                    $ref: '#/components/schemas/service_callback_info_v2'
+              required: true
+            responses:
+              "200":
+                content:
+                  application/json:
+                    schema:
+                      $ref: '#/components/schemas/void'
+                description: OK
+            summary: Callback for Near-RT RIC status
+            tags:
+              - Service callbacks
   /actuator/info:
     get:
       operationId: info
@@ -698,7 +763,7 @@
           description: OK
       summary: Actuator web endpoint 'info'
       tags:
-      - Actuator
+        - Actuator
   /status:
     get:
       operationId: getStatusV1
@@ -711,34 +776,37 @@
           description: Service is living
       summary: Returns status and statistics of this service
       tags:
-      - Health Check
+        - Health Check
   /a1-policy/v2/policy-types/{policytype_id}:
     get:
-      operationId: getPolicyType
+      operationId: getPolicyTypeDefinition
       parameters:
-      - explode: false
-        in: path
-        name: policytype_id
-        required: true
-        schema:
-          type: string
-        style: simple
+        - explode: false
+          in: path
+          name: policytype_id
+          required: true
+          schema:
+            type: string
+          style: simple
       responses:
         "200":
           content:
-            '*/*':
+            application/json:
               schema:
-                $ref: '#/components/schemas/policytype_v2'
-          description: Policy type
+                $ref: '#/components/schemas/policy_type_definition'
+              examples:
+                policy_type_definition:
+                  $ref: '#/components/examples/policy_type_definition'
+          description: schema of the given policy type
         "404":
           content:
-            '*/*':
+            application/json:
               schema:
                 $ref: '#/components/schemas/error_information'
           description: Policy type is not found
       summary: Returns a policy type definition
       tags:
-      - A1 Policy Management
+        - A1 Policy Management
   /actuator/logfile:
     get:
       operationId: logfile
@@ -751,7 +819,7 @@
           description: OK
       summary: Actuator web endpoint 'logfile'
       tags:
-      - Actuator
+        - Actuator
   /actuator/health:
     get:
       operationId: health
@@ -770,7 +838,7 @@
           description: OK
       summary: Actuator web endpoint 'health'
       tags:
-      - Actuator
+        - Actuator
   /a1-policy/v2/policies:
     get:
       description: "Returns a list of A1 policies matching given search criteria.\
@@ -778,45 +846,48 @@
         \ are returned."
       operationId: getPolicyIds
       parameters:
-      - description: Select policies of a given policy type identity.
-        explode: true
-        in: query
-        name: policytype_id
-        required: false
-        schema:
-          type: string
-        style: form
-      - description: Select policies of a given Near-RT RIC identity.
-        explode: true
-        in: query
-        name: ric_id
-        required: false
-        schema:
-          type: string
-        style: form
-      - description: Select policies owned by a given service.
-        explode: true
-        in: query
-        name: service_id
-        required: false
-        schema:
-          type: string
-        style: form
-      - description: Select policies of types with the given type name (type identity
-          has the format <typename_version>)
-        explode: true
-        in: query
-        name: type_name
-        required: false
-        schema:
-          type: string
-        style: form
+        - description: Select policies of a given policy type identity.
+          explode: true
+          in: query
+          name: policytype_id
+          required: false
+          schema:
+            type: string
+          style: form
+        - description: Select policies of a given Near-RT RIC identity.
+          explode: true
+          in: query
+          name: ric_id
+          required: false
+          schema:
+            type: string
+          style: form
+        - description: Select policies owned by a given service.
+          explode: true
+          in: query
+          name: service_id
+          required: false
+          schema:
+            type: string
+          style: form
+        - description: Select policies of types with the given type name (type identity
+            has the format <typename_version>)
+          explode: true
+          in: query
+          name: type_name
+          required: false
+          schema:
+            type: string
+          style: form
       responses:
         "200":
           content:
             application/json:
+              examples:
+                policy_id_list:
+                  $ref: '#/components/examples/policy_id_list'
               schema:
-                $ref: '#/components/schemas/policy_id_list_v2'
+                $ref: '#/components/schemas/policy_id_list'
           description: Policy identities
         "404":
           content:
@@ -826,14 +897,14 @@
           description: Near-RT RIC or type not found
       summary: Query policy identities
       tags:
-      - A1 Policy Management
+        - A1 Policy Management
     put:
       operationId: putPolicy
       requestBody:
         content:
           application/json:
             schema:
-              $ref: '#/components/schemas/policy_info_v2'
+              $ref: '#/components/schemas/policy_info'
         required: true
       responses:
         "200":
@@ -862,38 +933,18 @@
           description: Near-RT RIC or policy type is not found
       summary: Create or update a policy
       tags:
-      - A1 Policy Management
-  /r-app/near-rt-ric-status:
-    post:
-      description: The URL to this call is registered at Service registration.
-      operationId: serviceCallback
-      requestBody:
-        content:
-          application/json:
-            schema:
-              $ref: '#/components/schemas/service_callback_info_v2'
-        required: true
-      responses:
-        "200":
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/void'
-          description: OK
-      summary: Callback for Near-RT RIC status
-      tags:
-      - Service callbacks
+        - A1 Policy Management
   /a1-policy/v2/services/{service_id}:
     delete:
       operationId: deleteService
       parameters:
-      - explode: false
-        in: path
-        name: service_id
-        required: true
-        schema:
-          type: string
-        style: simple
+        - explode: false
+          in: path
+          name: service_id
+          required: true
+          schema:
+            type: string
+          style: simple
       responses:
         "200":
           content:
@@ -915,7 +966,7 @@
           description: Service not found
       summary: Unregister a service
       tags:
-      - Service Registry and Supervision
+        - Service Registry and Supervision
   /actuator/heapdump:
     get:
       operationId: heapdump
@@ -928,24 +979,27 @@
           description: OK
       summary: Actuator web endpoint 'heapdump'
       tags:
-      - Actuator
+        - Actuator
   /a1-policy/v2/policies/{policy_id}/status:
     get:
       operationId: getPolicyStatus
       parameters:
-      - explode: false
-        in: path
-        name: policy_id
-        required: true
-        schema:
-          type: string
-        style: simple
+        - explode: false
+          in: path
+          name: policy_id
+          required: true
+          schema:
+            type: string
+          style: simple
       responses:
         "200":
           content:
             application/json:
+              examples:
+                policy_status_info:
+                  $ref: '#/components/examples/policy_status_info'
               schema:
-                $ref: '#/components/schemas/policy_status_info_v2'
+                $ref: '#/components/schemas/policy_status_info'
           description: Policy status
         "404":
           content:
@@ -955,9 +1009,118 @@
           description: Policy is not found
       summary: Returns a policy status
       tags:
-      - A1 Policy Management
+        - A1 Policy Management
 components:
+  examples:
+    service_status:
+      description: List of service information
+      value:
+        callback_url: callback_url
+        service_id: service_id
+        keep_alive_interval_seconds: 0
+        time_since_last_activity_seconds: 6
+    service_status_list:
+      description: List of service information
+      value:
+        service_list:
+          - callback_url: callback_url
+            service_id: service_id
+            keep_alive_interval_seconds: 0
+            time_since_last_activity_seconds: 6
+          - callback_url: callback_url
+            service_id: service_id
+            keep_alive_interval_seconds: 0
+            time_since_last_activity_seconds: 6
+    policy_type_definition:
+      description: Schema of the given Policy type
+      value:
+        policy_schema: "{}"
+    policy_type_id_list:
+      description: Array of policy type id's
+      value:
+        policy_type_id_list:
+          - policytype_id
+          - policytype_id
+    policy_info:
+      description: Policy information of one A1-P policy
+      value:
+        ric_id: ric_id
+        policy_id: policy_id
+        transient: false
+        service_id: service_id
+        policy_data: "{}"
+        status_notification_uri: status_notification_uri
+        policytype_id: policytype_id
+    policy_info_list:
+      description: List of policy information
+      value:
+        policies:
+          - ric_id: ric_id
+            policy_id: policy_id
+            transient: false
+            service_id: service_id
+            policy_data: "{}"
+            status_notification_uri: status_notification_uri
+            policytype_id: policytype_id
+          - ric_id: ric_id
+            policy_id: policy_id
+            transient: false
+            service_id: service_id
+            policy_data: "{}"
+            status_notification_uri: status_notification_uri
+            policytype_id: policytype_id
+    policy_id_list:
+      description: A list of policy identities
+      value:
+        policy_ids:
+          - policy_ids
+          - policy_ids
+    policy_status_info:
+      description: Status for one A1-P Policy
+      value:
+        last_modified: last_modified
+        status: "{}"
+    status_info:
+      value:
+        status: status
+    ric_info:
+      value:
+        ric_id: ric_id
+        managed_element_ids:
+          - managed_element_ids
+          - managed_element_ids
+        state: UNAVAILABLE
+        policytype_ids:
+          - policytype_ids
+          - policytype_ids
+    ric_info_list:
+      value:
+        rics:
+          - ric_id: ric_id
+            managed_element_ids:
+              - managed_element_ids
+              - managed_element_ids
+            state: UNAVAILABLE
+            policytype_ids:
+              - policytype_ids
+              - policytype_ids
+          - ric_id: ric_id
+            managed_element_ids:
+              - managed_element_ids
+              - managed_element_ids
+            state: UNAVAILABLE
+            policytype_ids:
+              - policytype_ids
+              - policytype_ids
   schemas:
+    policy_type_definition:
+      description: Contains policy type schema definition
+      type: object
+      properties:
+        policy_schema:
+          description: Policy type json schema. The schema is a json object following
+            http://json-schema.org/draft-07/schema
+          type: object
     error_information:
       description: Problem as defined in https://tools.ietf.org/html/rfc7807
       properties:
@@ -976,9 +1139,7 @@
     void:
       description: Void/empty
       type: object
-    status_info_v2:
-      example:
-        status: status
+    status_info:
       properties:
         status:
           description: status text
@@ -993,19 +1154,10 @@
           description: "If true, the access is granted"
           type: boolean
       required:
-      - result
+        - result
       type: object
-    ric_info_v2:
+    ric_info:
       description: Information for a Near-RT RIC
-      example:
-        ric_id: ric_id
-        managed_element_ids:
-        - managed_element_ids
-        - managed_element_ids
-        state: UNAVAILABLE
-        policytype_ids:
-        - policytype_ids
-        - policytype_ids
       properties:
         ric_id:
           description: identity of the Near-RT RIC
@@ -1019,10 +1171,10 @@
         state:
           description: Represents the states for a Near-RT RIC
           enum:
-          - UNAVAILABLE
-          - AVAILABLE
-          - SYNCHRONIZING
-          - CONSISTENCY_CHECK
+            - UNAVAILABLE
+            - AVAILABLE
+            - SYNCHRONIZING
+            - CONSISTENCY_CHECK
           type: string
         policytype_ids:
           description: supported policy types
@@ -1031,7 +1183,7 @@
             type: string
           type: array
       type: object
-    service_registration_info_v2:
+    service_registration_info:
       description: Information for one service
       properties:
         callback_url:
@@ -1051,38 +1203,19 @@
           format: int64
           type: integer
       required:
-      - service_id
+        - service_id
       type: object
-    policy_info_list_v2:
+    policy_info_list:
       description: List of policy information
-      example:
-        policies:
-        - ric_id: ric_id
-          policy_id: policy_id
-          transient: false
-          service_id: service_id
-          policy_data: "{}"
-          status_notification_uri: status_notification_uri
-          policytype_id: policytype_id
-        - ric_id: ric_id
-          policy_id: policy_id
-          transient: false
-          service_id: service_id
-          policy_data: "{}"
-          status_notification_uri: status_notification_uri
-          policytype_id: policytype_id
       properties:
         policies:
           description: List of policy information
           items:
-            $ref: '#/components/schemas/policy_info_v2'
+            $ref: '#/components/schemas/policy_info'
           type: array
       type: object
-    policy_status_info_v2:
+    policy_status_info:
       description: Status for one A1-P Policy
-      example:
-        last_modified: last_modified
-        status: "{}"
       properties:
         last_modified:
           description: "timestamp, last modification time"
@@ -1091,13 +1224,7 @@
           description: the Policy status
           type: object
       type: object
-    service_status_v2:
-      description: List of service information
-      example:
-        callback_url: callback_url
-        service_id: service_id
-        keep_alive_interval_seconds: 0
-        time_since_last_activity_seconds: 6
+    service_status:
       properties:
         callback_url:
           description: callback for notifying of RIC synchronization
@@ -1114,52 +1241,24 @@
           format: int64
           type: integer
       type: object
-    ric_info_list_v2:
+    ric_info_list:
       description: List of Near-RT RIC information
-      example:
-        rics:
-        - ric_id: ric_id
-          managed_element_ids:
-          - managed_element_ids
-          - managed_element_ids
-          state: UNAVAILABLE
-          policytype_ids:
-          - policytype_ids
-          - policytype_ids
-        - ric_id: ric_id
-          managed_element_ids:
-          - managed_element_ids
-          - managed_element_ids
-          state: UNAVAILABLE
-          policytype_ids:
-          - policytype_ids
-          - policytype_ids
       properties:
         rics:
           description: List of Near-RT RIC information
           items:
-            $ref: '#/components/schemas/ric_info_v2'
+            $ref: '#/components/schemas/ric_info'
           type: array
       type: object
-    policytype_v2:
-      description: Policy type
-      example:
-        policy_schema: "{}"
-      properties:
-        policy_schema:
-          description: Policy type json schema. The schema is a json object following
-            http://json-schema.org/draft-07/schema
-          type: object
-      type: object
     input:
       description: input
       properties:
         access_type:
           description: Access type
           enum:
-          - READ
-          - WRITE
-          - DELETE
+            - READ
+            - WRITE
+            - DELETE
           type: string
         auth_token:
           description: Authorization token
@@ -1168,9 +1267,9 @@
           description: Policy type identifier
           type: string
       required:
-      - access_type
-      - auth_token
-      - policy_type_id
+        - access_type
+        - auth_token
+        - policy_type_id
       type: object
     policy_authorization:
       description: Authorization request for A1 policy requests
@@ -1178,14 +1277,10 @@
         input:
           $ref: '#/components/schemas/input'
       required:
-      - input
+        - input
       type: object
-    policytype_id_list_v2:
+    policy_type_id_list:
       description: Information about policy types
-      example:
-        policytype_ids:
-        - policytype_ids
-        - policytype_ids
       properties:
         policytype_ids:
           description: Policy type identities
@@ -1194,16 +1289,8 @@
             type: string
           type: array
       type: object
-    policy_info_v2:
+    policy_info:
       description: Information for one A1-P Policy
-      example:
-        ric_id: ric_id
-        policy_id: policy_id
-        transient: false
-        service_id: service_id
-        policy_data: "{}"
-        status_notification_uri: status_notification_uri
-        policytype_id: policytype_id
       properties:
         ric_id:
           description: identity of the target Near-RT RIC
@@ -1217,6 +1304,7 @@
             \ value is maintained by this service until explicitly deleted. Default\
             \ false."
           example: false
+          nullable: false
           type: boolean
         service_id:
           description: the identity of the service owning the policy. This can be
@@ -1233,17 +1321,18 @@
           description: identity of the policy type
           type: string
       required:
-      - policy_data
-      - policy_id
-      - policytype_id
-      - ric_id
+        - ric_id
+        - policy_id
+        - service_id
+        - policy_data
+        - policytype_id
       type: object
-    policy_id_list_v2:
+    policy_id_list:
       description: A list of policy identities
       example:
         policy_ids:
-        - policy_ids
-        - policy_ids
+          - policy_ids
+          - policy_ids
       properties:
         policy_ids:
           description: Policy identities
@@ -1252,23 +1341,12 @@
             type: string
           type: array
       type: object
-    service_list_v2:
-      description: List of service information
-      example:
-        service_list:
-        - callback_url: callback_url
-          service_id: service_id
-          keep_alive_interval_seconds: 0
-          time_since_last_activity_seconds: 6
-        - callback_url: callback_url
-          service_id: service_id
-          keep_alive_interval_seconds: 0
-          time_since_last_activity_seconds: 6
+    service_status_list:
       properties:
         service_list:
           description: List of service information
           items:
-            $ref: '#/components/schemas/service_status_v2'
+            $ref: '#/components/schemas/service_status'
           type: array
       type: object
     service_callback_info_v2:
@@ -1281,11 +1359,11 @@
           description: "values:\nAVAILABLE: the  Near-RT RIC has become available\
             \ for A1 Policy management"
           enum:
-          - AVAILABLE
+            - AVAILABLE
           type: string
       required:
-      - event_type
-      - ric_id
+        - event_type
+        - ric_id
       type: object
     Link:
       properties:
