diff --git a/api/go/github.com/openconfig/gnmi/proto/collector/collector.pb.go b/api/go/github.com/openconfig/gnmi/proto/collector/collector.pb.go
index 3eba4d2363d6c5103edbfcedba8205d6d1580c66..4374f3e6a65f82652abbfdfd21f328112f5f2586 100644
--- a/api/go/github.com/openconfig/gnmi/proto/collector/collector.pb.go
+++ b/api/go/github.com/openconfig/gnmi/proto/collector/collector.pb.go
@@ -16,7 +16,7 @@
 
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: github.com/openconfig/gnmi/proto/collector/collector.proto
 
diff --git a/api/go/github.com/openconfig/gnmi/proto/gnmi/gnmi.pb.go b/api/go/github.com/openconfig/gnmi/proto/gnmi/gnmi.pb.go
index 0d1e241b07492d5c4fdf1ce37b7d91a4db6f3cbb..0d3b99995f256357fa87bba78e5233f600a7049e 100644
--- a/api/go/github.com/openconfig/gnmi/proto/gnmi/gnmi.pb.go
+++ b/api/go/github.com/openconfig/gnmi/proto/gnmi/gnmi.pb.go
@@ -16,7 +16,7 @@
 
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: github.com/openconfig/gnmi/proto/gnmi/gnmi.proto
 
diff --git a/api/go/github.com/openconfig/gnmi/proto/gnmi_ext/gnmi_ext.pb.go b/api/go/github.com/openconfig/gnmi/proto/gnmi_ext/gnmi_ext.pb.go
index 5536b80f43ec09a50dd8e97150bfff1c5b936b6f..84ee798b720dc8b9608c901aa89984834e580c0f 100644
--- a/api/go/github.com/openconfig/gnmi/proto/gnmi_ext/gnmi_ext.pb.go
+++ b/api/go/github.com/openconfig/gnmi/proto/gnmi_ext/gnmi_ext.pb.go
@@ -16,7 +16,7 @@
 
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: github.com/openconfig/gnmi/proto/gnmi_ext/gnmi_ext.proto
 
diff --git a/api/go/github.com/openconfig/gnmi/proto/target/target.pb.go b/api/go/github.com/openconfig/gnmi/proto/target/target.pb.go
index 607f004a958349760e6319f97fc759bb5d8a6b81..f76d4b320b5552776d4c91ec6aee3a87f5663d7e 100644
--- a/api/go/github.com/openconfig/gnmi/proto/target/target.pb.go
+++ b/api/go/github.com/openconfig/gnmi/proto/target/target.pb.go
@@ -16,7 +16,7 @@
 
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: github.com/openconfig/gnmi/proto/target/target.proto
 
diff --git a/api/go/github.com/openconfig/gnmi/testing/fake/proto/fake.pb.go b/api/go/github.com/openconfig/gnmi/testing/fake/proto/fake.pb.go
index 18fcb63861fb8a5ff0a7499cb6248b1fc11d8396..e2efcc837f8d2f46bbb391694011e6769973d030 100644
--- a/api/go/github.com/openconfig/gnmi/testing/fake/proto/fake.pb.go
+++ b/api/go/github.com/openconfig/gnmi/testing/fake/proto/fake.pb.go
@@ -4,7 +4,7 @@
 
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: github.com/openconfig/gnmi/testing/fake/proto/fake.proto
 
diff --git a/api/go/gosdn/app/app.pb.go b/api/go/gosdn/app/app.pb.go
index 2f69f65da012e1aceb6291d3d379063c337dc3e8..4d49104591f2fe02d5212c08a959fd62a53ca774 100644
--- a/api/go/gosdn/app/app.pb.go
+++ b/api/go/gosdn/app/app.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/app/app.proto
 
diff --git a/api/go/gosdn/configurationmanagement/configurationmanagement.pb.go b/api/go/gosdn/configurationmanagement/configurationmanagement.pb.go
index 1a8b68cabba56fc5ab1067360802da8fde8deba9..25731648216ef0f9e911ff7389375ed451698b2e 100644
--- a/api/go/gosdn/configurationmanagement/configurationmanagement.pb.go
+++ b/api/go/gosdn/configurationmanagement/configurationmanagement.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/configurationmanagement/configurationmanagement.proto
 
diff --git a/api/go/gosdn/configurationmanagement/configurationmanagement.pb.gw.go b/api/go/gosdn/configurationmanagement/configurationmanagement.pb.gw.go
index 20532a16287ee289ec75dccd97ab6a8aa12286e9..5c5c9924c9551b4168450b1ff11fde4a6fb23537 100644
--- a/api/go/gosdn/configurationmanagement/configurationmanagement.pb.gw.go
+++ b/api/go/gosdn/configurationmanagement/configurationmanagement.pb.gw.go
@@ -43,6 +43,7 @@ func request_ConfigurationManagementService_ExportSDNConfig_0(ctx context.Contex
 		metadata runtime.ServerMetadata
 		err      error
 	)
+	io.Copy(io.Discard, req.Body)
 	val, ok := pathParams["pid"]
 	if !ok {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid")
@@ -93,6 +94,7 @@ func request_ConfigurationManagementService_ImportSDNConfig_0(ctx context.Contex
 		metadata runtime.ServerMetadata
 		err      error
 	)
+	io.Copy(io.Discard, req.Body)
 	val, ok := pathParams["pid"]
 	if !ok {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid")
diff --git a/api/go/gosdn/conflict/conflict.pb.go b/api/go/gosdn/conflict/conflict.pb.go
index 89b844920edf23c2b9cd5f8549977f5386a45b50..193bf7cb4ef8976ee0aac87ad17dd91c7b25533a 100644
--- a/api/go/gosdn/conflict/conflict.pb.go
+++ b/api/go/gosdn/conflict/conflict.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/conflict/conflict.proto
 
diff --git a/api/go/gosdn/csbi/csbi.pb.go b/api/go/gosdn/csbi/csbi.pb.go
index 39d930645bb15dbf9cec3e90f86c4dc3a9328da6..6331c09572fc34b0184f37c2c422d138c40a5eae 100644
--- a/api/go/gosdn/csbi/csbi.pb.go
+++ b/api/go/gosdn/csbi/csbi.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/csbi/csbi.proto
 
diff --git a/api/go/gosdn/networkelement/networkelement.pb.go b/api/go/gosdn/networkelement/networkelement.pb.go
index 17e66647eb62526acac70faceba3524b7fa141a2..9eb67529e2924b1079bef1dfe57e9db60cedf429 100644
--- a/api/go/gosdn/networkelement/networkelement.pb.go
+++ b/api/go/gosdn/networkelement/networkelement.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/networkelement/networkelement.proto
 
diff --git a/api/go/gosdn/networkelement/networkelement.pb.gw.go b/api/go/gosdn/networkelement/networkelement.pb.gw.go
index 409a3a5a49e9847619b07b02b5de6583db065547..1671997bfd828d895e832e9ca276f13fc9618e0c 100644
--- a/api/go/gosdn/networkelement/networkelement.pb.gw.go
+++ b/api/go/gosdn/networkelement/networkelement.pb.gw.go
@@ -66,6 +66,7 @@ func request_NetworkElementService_GetAllFlattened_0(ctx context.Context, marsha
 		protoReq GetAllFlattenedRequest
 		metadata runtime.ServerMetadata
 	)
+	io.Copy(io.Discard, req.Body)
 	if err := req.ParseForm(); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
@@ -99,6 +100,7 @@ func request_NetworkElementService_Get_0(ctx context.Context, marshaler runtime.
 		metadata runtime.ServerMetadata
 		err      error
 	)
+	io.Copy(io.Discard, req.Body)
 	val, ok := pathParams["mneid"]
 	if !ok {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid")
@@ -148,6 +150,7 @@ func request_NetworkElementService_ParseYang_0(ctx context.Context, marshaler ru
 		protoReq ParseYangRequest
 		metadata runtime.ServerMetadata
 	)
+	io.Copy(io.Discard, req.Body)
 	if err := req.ParseForm(); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
@@ -205,6 +208,7 @@ func request_NetworkElementService_GetPath_0(ctx context.Context, marshaler runt
 		metadata runtime.ServerMetadata
 		err      error
 	)
+	io.Copy(io.Discard, req.Body)
 	val, ok := pathParams["mneid"]
 	if !ok {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid")
@@ -271,6 +275,7 @@ func request_NetworkElementService_GetIntendedPath_0(ctx context.Context, marsha
 		metadata runtime.ServerMetadata
 		err      error
 	)
+	io.Copy(io.Discard, req.Body)
 	val, ok := pathParams["mneid"]
 	if !ok {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid")
@@ -361,6 +366,7 @@ func request_NetworkElementService_Delete_0(ctx context.Context, marshaler runti
 		metadata runtime.ServerMetadata
 		err      error
 	)
+	io.Copy(io.Discard, req.Body)
 	val, ok := pathParams["mneid"]
 	if !ok {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid")
@@ -410,6 +416,7 @@ func request_NetworkElementService_GetChangeList_0(ctx context.Context, marshale
 		protoReq GetChangeListRequest
 		metadata runtime.ServerMetadata
 	)
+	io.Copy(io.Discard, req.Body)
 	if err := req.ParseForm(); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
@@ -443,6 +450,7 @@ func request_NetworkElementService_GetChange_0(ctx context.Context, marshaler ru
 		metadata runtime.ServerMetadata
 		err      error
 	)
+	io.Copy(io.Discard, req.Body)
 	val, ok := pathParams["cuid"]
 	if !ok {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cuid")
diff --git a/api/go/gosdn/plugin-internal/plugin-internal.pb.go b/api/go/gosdn/plugin-internal/plugin-internal.pb.go
index 6d52ec6b0126f9658e61e829e2777749855f61c6..5e04dfcd9f2f0a638bd49bc759a9bc1499993ba6 100644
--- a/api/go/gosdn/plugin-internal/plugin-internal.pb.go
+++ b/api/go/gosdn/plugin-internal/plugin-internal.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/plugin-internal/plugin-internal.proto
 
@@ -164,58 +164,6 @@ func (x *PluginSchemaPayload) GetChunk() []byte {
 	return nil
 }
 
-type GetAvailablePluginsResponse struct {
-	state         protoimpl.MessageState    `protogen:"open.v1"`
-	Timestamp     int64                     `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch.
-	Plugins       []*plugin_registry.Plugin `protobuf:"bytes,2,rep,name=plugins,proto3" json:"plugins,omitempty"`
-	unknownFields protoimpl.UnknownFields
-	sizeCache     protoimpl.SizeCache
-}
-
-func (x *GetAvailablePluginsResponse) Reset() {
-	*x = GetAvailablePluginsResponse{}
-	mi := &file_gosdn_plugin_internal_plugin_internal_proto_msgTypes[3]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
-}
-
-func (x *GetAvailablePluginsResponse) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetAvailablePluginsResponse) ProtoMessage() {}
-
-func (x *GetAvailablePluginsResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdn_plugin_internal_plugin_internal_proto_msgTypes[3]
-	if x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use GetAvailablePluginsResponse.ProtoReflect.Descriptor instead.
-func (*GetAvailablePluginsResponse) Descriptor() ([]byte, []int) {
-	return file_gosdn_plugin_internal_plugin_internal_proto_rawDescGZIP(), []int{3}
-}
-
-func (x *GetAvailablePluginsResponse) GetTimestamp() int64 {
-	if x != nil {
-		return x.Timestamp
-	}
-	return 0
-}
-
-func (x *GetAvailablePluginsResponse) GetPlugins() []*plugin_registry.Plugin {
-	if x != nil {
-		return x.Plugins
-	}
-	return nil
-}
-
 var File_gosdn_plugin_internal_plugin_internal_proto protoreflect.FileDescriptor
 
 var file_gosdn_plugin_internal_plugin_internal_proto_rawDesc = string([]byte{
@@ -241,42 +189,28 @@ var file_gosdn_plugin_internal_plugin_internal_proto_rawDesc = string([]byte{
 	0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x2b, 0x0a, 0x13, 0x50, 0x6c,
 	0x75, 0x67, 0x69, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61,
 	0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c,
-	0x52, 0x05, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x74, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x41, 0x76,
-	0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
-	0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73,
-	0x74, 0x61, 0x6d, 0x70, 0x12, 0x37, 0x0a, 0x07, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x18,
-	0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c,
-	0x75, 0x67, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x6c,
-	0x75, 0x67, 0x69, 0x6e, 0x52, 0x07, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x32, 0xf2, 0x02,
-	0x0a, 0x15, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
-	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x69, 0x0a, 0x10, 0x41, 0x76, 0x61, 0x69, 0x6c,
-	0x61, 0x62, 0x6c, 0x65, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x12, 0x31, 0x2e, 0x67, 0x6f,
-	0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72,
-	0x6e, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65,
-	0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22,
-	0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x72, 0x65,
-	0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x53,
-	0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c,
+	0x52, 0x05, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x32, 0x84, 0x02, 0x0a, 0x15, 0x50, 0x6c, 0x75, 0x67,
+	0x69, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+	0x65, 0x12, 0x7b, 0x0a, 0x10, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x6c,
+	0x75, 0x67, 0x69, 0x6e, 0x73, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c,
 	0x75, 0x67, 0x69, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x47, 0x65,
-	0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75,
-	0x67, 0x69, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x50, 0x6c, 0x75,
-	0x67, 0x69, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64,
-	0x30, 0x01, 0x12, 0x7e, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62,
-	0x6c, 0x65, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x73, 0x64,
-	0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
-	0x6c, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x6c,
-	0x75, 0x67, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67,
-	0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x67, 0x69,
-	0x73, 0x74, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x22, 0x10, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69,
-	0x6e, 0x73, 0x42, 0x3b, 0x5a, 0x39, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68,
-	0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73,
-	0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f,
-	0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x62,
-	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e,
+	0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e,
+	0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
+	0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x10, 0x82, 0xd3,
+	0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x12, 0x6e,
+	0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d,
+	0x61, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e,
+	0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x75,
+	0x67, 0x69, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x2a, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f,
+	0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x53,
+	0x63, 0x68, 0x65, 0x6d, 0x61, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x30, 0x01, 0x42, 0x3b,
+	0x5a, 0x39, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, 0x2d, 0x64, 0x61, 0x2e,
+	0x64, 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61,
+	0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x70, 0x6c, 0x75, 0x67,
+	0x69, 0x6e, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x33,
 })
 
 var (
@@ -291,28 +225,23 @@ func file_gosdn_plugin_internal_plugin_internal_proto_rawDescGZIP() []byte {
 	return file_gosdn_plugin_internal_plugin_internal_proto_rawDescData
 }
 
-var file_gosdn_plugin_internal_plugin_internal_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
+var file_gosdn_plugin_internal_plugin_internal_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
 var file_gosdn_plugin_internal_plugin_internal_proto_goTypes = []any{
 	(*GetAvailablePluginsRequest)(nil),  // 0: gosdn.plugin_internal.GetAvailablePluginsRequest
 	(*GetPluginSchemaRequest)(nil),      // 1: gosdn.plugin_internal.GetPluginSchemaRequest
 	(*PluginSchemaPayload)(nil),         // 2: gosdn.plugin_internal.PluginSchemaPayload
-	(*GetAvailablePluginsResponse)(nil), // 3: gosdn.plugin_internal.GetAvailablePluginsResponse
-	(*plugin_registry.Plugin)(nil),      // 4: gosdn.plugin_registry.Plugin
-	(*plugin_registry.GetResponse)(nil), // 5: gosdn.plugin_registry.GetResponse
+	(*plugin_registry.GetResponse)(nil), // 3: gosdn.plugin_registry.GetResponse
 }
 var file_gosdn_plugin_internal_plugin_internal_proto_depIdxs = []int32{
-	4, // 0: gosdn.plugin_internal.GetAvailablePluginsResponse.plugins:type_name -> gosdn.plugin_registry.Plugin
-	0, // 1: gosdn.plugin_internal.PluginInternalService.AvailablePlugins:input_type -> gosdn.plugin_internal.GetAvailablePluginsRequest
-	1, // 2: gosdn.plugin_internal.PluginInternalService.GetPluginSchema:input_type -> gosdn.plugin_internal.GetPluginSchemaRequest
-	0, // 3: gosdn.plugin_internal.PluginInternalService.GetAvailablePlugins:input_type -> gosdn.plugin_internal.GetAvailablePluginsRequest
-	5, // 4: gosdn.plugin_internal.PluginInternalService.AvailablePlugins:output_type -> gosdn.plugin_registry.GetResponse
-	2, // 5: gosdn.plugin_internal.PluginInternalService.GetPluginSchema:output_type -> gosdn.plugin_internal.PluginSchemaPayload
-	5, // 6: gosdn.plugin_internal.PluginInternalService.GetAvailablePlugins:output_type -> gosdn.plugin_registry.GetResponse
-	4, // [4:7] is the sub-list for method output_type
-	1, // [1:4] is the sub-list for method input_type
-	1, // [1:1] is the sub-list for extension type_name
-	1, // [1:1] is the sub-list for extension extendee
-	0, // [0:1] is the sub-list for field type_name
+	0, // 0: gosdn.plugin_internal.PluginInternalService.AvailablePlugins:input_type -> gosdn.plugin_internal.GetAvailablePluginsRequest
+	1, // 1: gosdn.plugin_internal.PluginInternalService.GetPluginSchema:input_type -> gosdn.plugin_internal.GetPluginSchemaRequest
+	3, // 2: gosdn.plugin_internal.PluginInternalService.AvailablePlugins:output_type -> gosdn.plugin_registry.GetResponse
+	2, // 3: gosdn.plugin_internal.PluginInternalService.GetPluginSchema:output_type -> gosdn.plugin_internal.PluginSchemaPayload
+	2, // [2:4] is the sub-list for method output_type
+	0, // [0:2] is the sub-list for method input_type
+	0, // [0:0] is the sub-list for extension type_name
+	0, // [0:0] is the sub-list for extension extendee
+	0, // [0:0] is the sub-list for field type_name
 }
 
 func init() { file_gosdn_plugin_internal_plugin_internal_proto_init() }
@@ -326,7 +255,7 @@ func file_gosdn_plugin_internal_plugin_internal_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_plugin_internal_plugin_internal_proto_rawDesc), len(file_gosdn_plugin_internal_plugin_internal_proto_rawDesc)),
 			NumEnums:      0,
-			NumMessages:   4,
+			NumMessages:   3,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
diff --git a/api/go/gosdn/plugin-internal/plugin-internal.pb.gw.go b/api/go/gosdn/plugin-internal/plugin-internal.pb.gw.go
index 9fd179fdf723f49f88a0507a2644b04d2387d5dc..e319b9d24396172a5ec74629f2bb81e1c0bbc1e4 100644
--- a/api/go/gosdn/plugin-internal/plugin-internal.pb.gw.go
+++ b/api/go/gosdn/plugin-internal/plugin-internal.pb.gw.go
@@ -35,24 +35,25 @@ var (
 	_ = metadata.Join
 )
 
-var filter_PluginInternalService_GetAvailablePlugins_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
+var filter_PluginInternalService_AvailablePlugins_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
 
-func request_PluginInternalService_GetAvailablePlugins_0(ctx context.Context, marshaler runtime.Marshaler, client PluginInternalServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+func request_PluginInternalService_AvailablePlugins_0(ctx context.Context, marshaler runtime.Marshaler, client PluginInternalServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
 	var (
 		protoReq GetAvailablePluginsRequest
 		metadata runtime.ServerMetadata
 	)
+	io.Copy(io.Discard, req.Body)
 	if err := req.ParseForm(); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
-	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PluginInternalService_GetAvailablePlugins_0); err != nil {
+	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PluginInternalService_AvailablePlugins_0); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
-	msg, err := client.GetAvailablePlugins(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	msg, err := client.AvailablePlugins(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
 	return msg, metadata, err
 }
 
-func local_request_PluginInternalService_GetAvailablePlugins_0(ctx context.Context, marshaler runtime.Marshaler, server PluginInternalServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+func local_request_PluginInternalService_AvailablePlugins_0(ctx context.Context, marshaler runtime.Marshaler, server PluginInternalServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
 	var (
 		protoReq GetAvailablePluginsRequest
 		metadata runtime.ServerMetadata
@@ -60,10 +61,10 @@ func local_request_PluginInternalService_GetAvailablePlugins_0(ctx context.Conte
 	if err := req.ParseForm(); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
-	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PluginInternalService_GetAvailablePlugins_0); err != nil {
+	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PluginInternalService_AvailablePlugins_0); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
-	msg, err := server.GetAvailablePlugins(ctx, &protoReq)
+	msg, err := server.AvailablePlugins(ctx, &protoReq)
 	return msg, metadata, err
 }
 
@@ -73,25 +74,25 @@ func local_request_PluginInternalService_GetAvailablePlugins_0(ctx context.Conte
 // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterPluginInternalServiceHandlerFromEndpoint instead.
 // GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call.
 func RegisterPluginInternalServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server PluginInternalServiceServer) error {
-	mux.Handle(http.MethodGet, pattern_PluginInternalService_GetAvailablePlugins_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+	mux.Handle(http.MethodGet, pattern_PluginInternalService_AvailablePlugins_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 		ctx, cancel := context.WithCancel(req.Context())
 		defer cancel()
 		var stream runtime.ServerTransportStream
 		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
-		annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.plugin_internal.PluginInternalService/GetAvailablePlugins", runtime.WithHTTPPathPattern("/plugins"))
+		annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.plugin_internal.PluginInternalService/AvailablePlugins", runtime.WithHTTPPathPattern("/plugins"))
 		if err != nil {
 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
 			return
 		}
-		resp, md, err := local_request_PluginInternalService_GetAvailablePlugins_0(annotatedContext, inboundMarshaler, server, req, pathParams)
+		resp, md, err := local_request_PluginInternalService_AvailablePlugins_0(annotatedContext, inboundMarshaler, server, req, pathParams)
 		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
 		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
 		if err != nil {
 			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
 			return
 		}
-		forward_PluginInternalService_GetAvailablePlugins_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+		forward_PluginInternalService_AvailablePlugins_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
 	})
 
 	return nil
@@ -133,30 +134,30 @@ func RegisterPluginInternalServiceHandler(ctx context.Context, mux *runtime.Serv
 // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
 // "PluginInternalServiceClient" to call the correct interceptors. This client ignores the HTTP middlewares.
 func RegisterPluginInternalServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client PluginInternalServiceClient) error {
-	mux.Handle(http.MethodGet, pattern_PluginInternalService_GetAvailablePlugins_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+	mux.Handle(http.MethodGet, pattern_PluginInternalService_AvailablePlugins_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 		ctx, cancel := context.WithCancel(req.Context())
 		defer cancel()
 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
-		annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.plugin_internal.PluginInternalService/GetAvailablePlugins", runtime.WithHTTPPathPattern("/plugins"))
+		annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.plugin_internal.PluginInternalService/AvailablePlugins", runtime.WithHTTPPathPattern("/plugins"))
 		if err != nil {
 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
 			return
 		}
-		resp, md, err := request_PluginInternalService_GetAvailablePlugins_0(annotatedContext, inboundMarshaler, client, req, pathParams)
+		resp, md, err := request_PluginInternalService_AvailablePlugins_0(annotatedContext, inboundMarshaler, client, req, pathParams)
 		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
 		if err != nil {
 			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
 			return
 		}
-		forward_PluginInternalService_GetAvailablePlugins_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+		forward_PluginInternalService_AvailablePlugins_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
 	})
 	return nil
 }
 
 var (
-	pattern_PluginInternalService_GetAvailablePlugins_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"plugins"}, ""))
+	pattern_PluginInternalService_AvailablePlugins_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"plugins"}, ""))
 )
 
 var (
-	forward_PluginInternalService_GetAvailablePlugins_0 = runtime.ForwardResponseMessage
+	forward_PluginInternalService_AvailablePlugins_0 = runtime.ForwardResponseMessage
 )
diff --git a/api/go/gosdn/plugin-internal/plugin-internal_grpc.pb.go b/api/go/gosdn/plugin-internal/plugin-internal_grpc.pb.go
index 31b9539de4e7ef651500495fdea440a919ccb43c..eaa452aa3746a888fadffccf2db1bc902fa42ad0 100644
--- a/api/go/gosdn/plugin-internal/plugin-internal_grpc.pb.go
+++ b/api/go/gosdn/plugin-internal/plugin-internal_grpc.pb.go
@@ -20,9 +20,8 @@ import (
 const _ = grpc.SupportPackageIsVersion9
 
 const (
-	PluginInternalService_AvailablePlugins_FullMethodName    = "/gosdn.plugin_internal.PluginInternalService/AvailablePlugins"
-	PluginInternalService_GetPluginSchema_FullMethodName     = "/gosdn.plugin_internal.PluginInternalService/GetPluginSchema"
-	PluginInternalService_GetAvailablePlugins_FullMethodName = "/gosdn.plugin_internal.PluginInternalService/GetAvailablePlugins"
+	PluginInternalService_AvailablePlugins_FullMethodName = "/gosdn.plugin_internal.PluginInternalService/AvailablePlugins"
+	PluginInternalService_GetPluginSchema_FullMethodName  = "/gosdn.plugin_internal.PluginInternalService/GetPluginSchema"
 )
 
 // PluginInternalServiceClient is the client API for PluginInternalService service.
@@ -31,7 +30,6 @@ const (
 type PluginInternalServiceClient interface {
 	AvailablePlugins(ctx context.Context, in *GetAvailablePluginsRequest, opts ...grpc.CallOption) (*plugin_registry.GetResponse, error)
 	GetPluginSchema(ctx context.Context, in *GetPluginSchemaRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[PluginSchemaPayload], error)
-	GetAvailablePlugins(ctx context.Context, in *GetAvailablePluginsRequest, opts ...grpc.CallOption) (*plugin_registry.GetResponse, error)
 }
 
 type pluginInternalServiceClient struct {
@@ -71,23 +69,12 @@ func (c *pluginInternalServiceClient) GetPluginSchema(ctx context.Context, in *G
 // This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
 type PluginInternalService_GetPluginSchemaClient = grpc.ServerStreamingClient[PluginSchemaPayload]
 
-func (c *pluginInternalServiceClient) GetAvailablePlugins(ctx context.Context, in *GetAvailablePluginsRequest, opts ...grpc.CallOption) (*plugin_registry.GetResponse, error) {
-	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
-	out := new(plugin_registry.GetResponse)
-	err := c.cc.Invoke(ctx, PluginInternalService_GetAvailablePlugins_FullMethodName, in, out, cOpts...)
-	if err != nil {
-		return nil, err
-	}
-	return out, nil
-}
-
 // PluginInternalServiceServer is the server API for PluginInternalService service.
 // All implementations must embed UnimplementedPluginInternalServiceServer
 // for forward compatibility.
 type PluginInternalServiceServer interface {
 	AvailablePlugins(context.Context, *GetAvailablePluginsRequest) (*plugin_registry.GetResponse, error)
 	GetPluginSchema(*GetPluginSchemaRequest, grpc.ServerStreamingServer[PluginSchemaPayload]) error
-	GetAvailablePlugins(context.Context, *GetAvailablePluginsRequest) (*plugin_registry.GetResponse, error)
 	mustEmbedUnimplementedPluginInternalServiceServer()
 }
 
@@ -104,9 +91,6 @@ func (UnimplementedPluginInternalServiceServer) AvailablePlugins(context.Context
 func (UnimplementedPluginInternalServiceServer) GetPluginSchema(*GetPluginSchemaRequest, grpc.ServerStreamingServer[PluginSchemaPayload]) error {
 	return status.Errorf(codes.Unimplemented, "method GetPluginSchema not implemented")
 }
-func (UnimplementedPluginInternalServiceServer) GetAvailablePlugins(context.Context, *GetAvailablePluginsRequest) (*plugin_registry.GetResponse, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method GetAvailablePlugins not implemented")
-}
 func (UnimplementedPluginInternalServiceServer) mustEmbedUnimplementedPluginInternalServiceServer() {}
 func (UnimplementedPluginInternalServiceServer) testEmbeddedByValue()                               {}
 
@@ -157,24 +141,6 @@ func _PluginInternalService_GetPluginSchema_Handler(srv interface{}, stream grpc
 // This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
 type PluginInternalService_GetPluginSchemaServer = grpc.ServerStreamingServer[PluginSchemaPayload]
 
-func _PluginInternalService_GetAvailablePlugins_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(GetAvailablePluginsRequest)
-	if err := dec(in); err != nil {
-		return nil, err
-	}
-	if interceptor == nil {
-		return srv.(PluginInternalServiceServer).GetAvailablePlugins(ctx, in)
-	}
-	info := &grpc.UnaryServerInfo{
-		Server:     srv,
-		FullMethod: PluginInternalService_GetAvailablePlugins_FullMethodName,
-	}
-	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(PluginInternalServiceServer).GetAvailablePlugins(ctx, req.(*GetAvailablePluginsRequest))
-	}
-	return interceptor(ctx, in, info, handler)
-}
-
 // PluginInternalService_ServiceDesc is the grpc.ServiceDesc for PluginInternalService service.
 // It's only intended for direct use with grpc.RegisterService,
 // and not to be introspected or modified (even as a copy)
@@ -186,10 +152,6 @@ var PluginInternalService_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "AvailablePlugins",
 			Handler:    _PluginInternalService_AvailablePlugins_Handler,
 		},
-		{
-			MethodName: "GetAvailablePlugins",
-			Handler:    _PluginInternalService_GetAvailablePlugins_Handler,
-		},
 	},
 	Streams: []grpc.StreamDesc{
 		{
diff --git a/api/go/gosdn/plugin-registry/plugin-registry.pb.go b/api/go/gosdn/plugin-registry/plugin-registry.pb.go
index ed68537218fbe0112b7c14dec3f405d098a9b766..66ded0daf823c6a2fce376802e0b921e2e38ffd8 100644
--- a/api/go/gosdn/plugin-registry/plugin-registry.pb.go
+++ b/api/go/gosdn/plugin-registry/plugin-registry.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/plugin-registry/plugin-registry.proto
 
diff --git a/api/go/gosdn/plugin/plugin.pb.go b/api/go/gosdn/plugin/plugin.pb.go
index 27342526733a8ba07017b3c75ae81af91103d5d6..9f4ca7edd51023d60ad2816b4a619ff24f1b9235 100644
--- a/api/go/gosdn/plugin/plugin.pb.go
+++ b/api/go/gosdn/plugin/plugin.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/plugin/plugin.proto
 
diff --git a/api/go/gosdn/pnd/pnd.pb.go b/api/go/gosdn/pnd/pnd.pb.go
index 71b33fdd0938f6b0da016056817d5d4cf610e276..8d056e2d81b948501b50219ebe3fa7236d748c71 100644
--- a/api/go/gosdn/pnd/pnd.pb.go
+++ b/api/go/gosdn/pnd/pnd.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/pnd/pnd.proto
 
diff --git a/api/go/gosdn/pnd/pnd.pb.gw.go b/api/go/gosdn/pnd/pnd.pb.gw.go
index 7ea08d765b8a059ce77ecde55d9b8130e8de0c5d..f24e132ebe7286cbd4936f5b82f4fd71d41f38fa 100644
--- a/api/go/gosdn/pnd/pnd.pb.gw.go
+++ b/api/go/gosdn/pnd/pnd.pb.gw.go
@@ -43,6 +43,7 @@ func request_PndService_GetPnd_0(ctx context.Context, marshaler runtime.Marshale
 		metadata runtime.ServerMetadata
 		err      error
 	)
+	io.Copy(io.Discard, req.Body)
 	val, ok := pathParams["pid"]
 	if !ok {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid")
@@ -92,6 +93,7 @@ func request_PndService_GetPndList_0(ctx context.Context, marshaler runtime.Mars
 		protoReq GetPndListRequest
 		metadata runtime.ServerMetadata
 	)
+	io.Copy(io.Discard, req.Body)
 	if err := req.ParseForm(); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
@@ -149,6 +151,7 @@ func request_PndService_DeletePnd_0(ctx context.Context, marshaler runtime.Marsh
 		metadata runtime.ServerMetadata
 		err      error
 	)
+	io.Copy(io.Discard, req.Body)
 	val, ok := pathParams["pid"]
 	if !ok {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid")
diff --git a/api/go/gosdn/rbac/rbac.pb.go b/api/go/gosdn/rbac/rbac.pb.go
index 29e570c590d71fcdddf038d7c32bb70fc51d7feb..619331c55ff42c6d156d5ffd8d32f008dec02d91 100644
--- a/api/go/gosdn/rbac/rbac.pb.go
+++ b/api/go/gosdn/rbac/rbac.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/rbac/rbac.proto
 
diff --git a/api/go/gosdn/rbac/rbac.pb.gw.go b/api/go/gosdn/rbac/rbac.pb.gw.go
index 6a89867f048017c68a001f27a26b56a88bd04787..529d8c78d35696220037731e49935c49fa16f42e 100644
--- a/api/go/gosdn/rbac/rbac.pb.gw.go
+++ b/api/go/gosdn/rbac/rbac.pb.gw.go
@@ -67,6 +67,7 @@ func request_AuthService_Logout_0(ctx context.Context, marshaler runtime.Marshal
 		metadata runtime.ServerMetadata
 		err      error
 	)
+	io.Copy(io.Discard, req.Body)
 	val, ok := pathParams["username"]
 	if !ok {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "username")
diff --git a/api/go/gosdn/rbac/role.pb.go b/api/go/gosdn/rbac/role.pb.go
index 66c89c2f788f9fbcfd1b9dde7deec3ad70a002f5..d8ed4796b9757b5e575fd69d7f9378bf8c7670dd 100644
--- a/api/go/gosdn/rbac/role.pb.go
+++ b/api/go/gosdn/rbac/role.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/rbac/role.proto
 
diff --git a/api/go/gosdn/rbac/role.pb.gw.go b/api/go/gosdn/rbac/role.pb.gw.go
index a30fb131d0f59e25d35c58fb4b23b9885fb110d5..e77d968ec32f2e271aa8363c47065abc438eed20 100644
--- a/api/go/gosdn/rbac/role.pb.gw.go
+++ b/api/go/gosdn/rbac/role.pb.gw.go
@@ -66,6 +66,7 @@ func request_RoleService_GetRole_0(ctx context.Context, marshaler runtime.Marsha
 		protoReq GetRoleRequest
 		metadata runtime.ServerMetadata
 	)
+	io.Copy(io.Discard, req.Body)
 	if err := req.ParseForm(); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
@@ -98,6 +99,7 @@ func request_RoleService_GetRoles_0(ctx context.Context, marshaler runtime.Marsh
 		protoReq GetRolesRequest
 		metadata runtime.ServerMetadata
 	)
+	io.Copy(io.Discard, req.Body)
 	if err := req.ParseForm(); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
@@ -154,6 +156,7 @@ func request_RoleService_DeletePermissionsForRole_0(ctx context.Context, marshal
 		protoReq DeletePermissionsForRoleRequest
 		metadata runtime.ServerMetadata
 	)
+	io.Copy(io.Discard, req.Body)
 	if err := req.ParseForm(); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
@@ -186,6 +189,7 @@ func request_RoleService_DeleteRoles_0(ctx context.Context, marshaler runtime.Ma
 		protoReq DeleteRolesRequest
 		metadata runtime.ServerMetadata
 	)
+	io.Copy(io.Discard, req.Body)
 	if err := req.ParseForm(); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
diff --git a/api/go/gosdn/rbac/user.pb.go b/api/go/gosdn/rbac/user.pb.go
index 6c413ce8c63e0b7898c44ea9347a02742cc96022..b134dea8dcd846d514ff39988cbc93645df4e249 100644
--- a/api/go/gosdn/rbac/user.pb.go
+++ b/api/go/gosdn/rbac/user.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/rbac/user.proto
 
diff --git a/api/go/gosdn/rbac/user.pb.gw.go b/api/go/gosdn/rbac/user.pb.gw.go
index ebe07c3c0ae0161aa45525dd231d67c5efb01338..36d72ee8b12c0049a73ae5ae2d4e5e243c9644f3 100644
--- a/api/go/gosdn/rbac/user.pb.gw.go
+++ b/api/go/gosdn/rbac/user.pb.gw.go
@@ -66,6 +66,7 @@ func request_UserService_GetUser_0(ctx context.Context, marshaler runtime.Marsha
 		protoReq GetUserRequest
 		metadata runtime.ServerMetadata
 	)
+	io.Copy(io.Discard, req.Body)
 	if err := req.ParseForm(); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
@@ -98,6 +99,7 @@ func request_UserService_GetUsers_0(ctx context.Context, marshaler runtime.Marsh
 		protoReq GetUsersRequest
 		metadata runtime.ServerMetadata
 	)
+	io.Copy(io.Discard, req.Body)
 	if err := req.ParseForm(); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
@@ -154,6 +156,7 @@ func request_UserService_DeleteUsers_0(ctx context.Context, marshaler runtime.Ma
 		protoReq DeleteUsersRequest
 		metadata runtime.ServerMetadata
 	)
+	io.Copy(io.Discard, req.Body)
 	if err := req.ParseForm(); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
diff --git a/api/go/gosdn/southbound/southbound.pb.go b/api/go/gosdn/southbound/southbound.pb.go
index ea26197dcfdc2814025fee4c77220fc1ba856c20..045cbcd9bc748682e14af44587b8830817487c8d 100644
--- a/api/go/gosdn/southbound/southbound.pb.go
+++ b/api/go/gosdn/southbound/southbound.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/southbound/southbound.proto
 
diff --git a/api/go/gosdn/subscriptionmanagement/subscriptionmanagement.pb.go b/api/go/gosdn/subscriptionmanagement/subscriptionmanagement.pb.go
index 6bfb0e28a24cd09f5e36a27b70c8e65d77f06fb4..80e99f1c346a2abb6771996339fa1a74c4dc5b2c 100644
--- a/api/go/gosdn/subscriptionmanagement/subscriptionmanagement.pb.go
+++ b/api/go/gosdn/subscriptionmanagement/subscriptionmanagement.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/subscriptionmanagement/subscriptionmanagement.proto
 
diff --git a/api/go/gosdn/subscriptionmanagement/subscriptionmanagement.pb.gw.go b/api/go/gosdn/subscriptionmanagement/subscriptionmanagement.pb.gw.go
index 40aebfa6eef4249c891936f8ee3fcd7278707692..4c9ccd9a2ceb5af9cf16dd5cb0a468aed49cbfad 100644
--- a/api/go/gosdn/subscriptionmanagement/subscriptionmanagement.pb.gw.go
+++ b/api/go/gosdn/subscriptionmanagement/subscriptionmanagement.pb.gw.go
@@ -42,6 +42,7 @@ func request_SubscriptionManagementService_GetAll_0(ctx context.Context, marshal
 		protoReq GetAllRequest
 		metadata runtime.ServerMetadata
 	)
+	io.Copy(io.Discard, req.Body)
 	if err := req.ParseForm(); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
@@ -75,6 +76,7 @@ func request_SubscriptionManagementService_Get_0(ctx context.Context, marshaler
 		metadata runtime.ServerMetadata
 		err      error
 	)
+	io.Copy(io.Discard, req.Body)
 	val, ok := pathParams["subid"]
 	if !ok {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "subid")
@@ -125,6 +127,7 @@ func request_SubscriptionManagementService_Delete_0(ctx context.Context, marshal
 		metadata runtime.ServerMetadata
 		err      error
 	)
+	io.Copy(io.Discard, req.Body)
 	val, ok := pathParams["subid"]
 	if !ok {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "subid")
@@ -216,6 +219,7 @@ func request_SubscriptionManagementService_ResetAllSubscriptions_0(ctx context.C
 		protoReq ResetAllSubscriptionsRequest
 		metadata runtime.ServerMetadata
 	)
+	io.Copy(io.Discard, req.Body)
 	if err := req.ParseForm(); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
diff --git a/api/go/gosdn/topology/link.pb.go b/api/go/gosdn/topology/link.pb.go
index d18acbd1b6898de7f232eb2d8e17c2686c0831b4..a3822b612040c6bd16f4cffeb81d47e71887b27e 100644
--- a/api/go/gosdn/topology/link.pb.go
+++ b/api/go/gosdn/topology/link.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/topology/link.proto
 
diff --git a/api/go/gosdn/topology/node.pb.go b/api/go/gosdn/topology/node.pb.go
index d9c0e5af144917901a95cb18fae8c9f30080a1af..f985e87eb2107be7e11cad509cb5bb9af1515d5b 100644
--- a/api/go/gosdn/topology/node.pb.go
+++ b/api/go/gosdn/topology/node.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/topology/node.proto
 
diff --git a/api/go/gosdn/topology/port.pb.go b/api/go/gosdn/topology/port.pb.go
index 3834525729e16fdd2be533fbce9eed32c1af9075..536af7053a7ba6665a0fe179f385775403c3d65d 100644
--- a/api/go/gosdn/topology/port.pb.go
+++ b/api/go/gosdn/topology/port.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/topology/port.proto
 
diff --git a/api/go/gosdn/topology/route.pb.go b/api/go/gosdn/topology/route.pb.go
index f4472000e79d0d3ea76c7465f6f39dbfd0946a0f..81485b54b0c06dedb2200a327526d8fb7a9c4ab1 100644
--- a/api/go/gosdn/topology/route.pb.go
+++ b/api/go/gosdn/topology/route.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/topology/route.proto
 
diff --git a/api/go/gosdn/topology/routingTable.pb.go b/api/go/gosdn/topology/routingTable.pb.go
index d7b791f349a84ae3418f59de78bb5be625253aba..d694dcbc4b94dbbcec456a8cb12853ce4d908bbb 100644
--- a/api/go/gosdn/topology/routingTable.pb.go
+++ b/api/go/gosdn/topology/routingTable.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/topology/routingTable.proto
 
diff --git a/api/go/gosdn/topology/routingTable.pb.gw.go b/api/go/gosdn/topology/routingTable.pb.gw.go
index 4bcd1b743003bcc67b1b224e9052e369e05f1154..38438fcd94c99d1aa206df9aca7314a35ac40299 100644
--- a/api/go/gosdn/topology/routingTable.pb.gw.go
+++ b/api/go/gosdn/topology/routingTable.pb.gw.go
@@ -66,6 +66,7 @@ func request_RoutingTableService_GetRoutes_0(ctx context.Context, marshaler runt
 		protoReq GetRoutesRequest
 		metadata runtime.ServerMetadata
 	)
+	io.Copy(io.Discard, req.Body)
 	if err := req.ParseForm(); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
@@ -98,6 +99,7 @@ func request_RoutingTableService_DeleteRoute_0(ctx context.Context, marshaler ru
 		protoReq DeleteRoutesRequest
 		metadata runtime.ServerMetadata
 	)
+	io.Copy(io.Discard, req.Body)
 	if err := req.ParseForm(); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
diff --git a/api/go/gosdn/topology/topology.pb.go b/api/go/gosdn/topology/topology.pb.go
index 073a288f80b13a78e268694e66278a579844fe8a..91048f4099fb71509534718dcdfd3e9ac4b950d8 100644
--- a/api/go/gosdn/topology/topology.pb.go
+++ b/api/go/gosdn/topology/topology.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/topology/topology.proto
 
diff --git a/api/go/gosdn/topology/topology.pb.gw.go b/api/go/gosdn/topology/topology.pb.gw.go
index d4587d5046951bfc72b52e80b8b0635402ab8535..b1c32466508cc70ac10f360c6a6e8b5b746dc4e1 100644
--- a/api/go/gosdn/topology/topology.pb.gw.go
+++ b/api/go/gosdn/topology/topology.pb.gw.go
@@ -66,6 +66,7 @@ func request_TopologyService_GetTopology_0(ctx context.Context, marshaler runtim
 		protoReq GetTopologyRequest
 		metadata runtime.ServerMetadata
 	)
+	io.Copy(io.Discard, req.Body)
 	if err := req.ParseForm(); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
@@ -122,6 +123,7 @@ func request_TopologyService_DeleteLink_0(ctx context.Context, marshaler runtime
 		protoReq DeleteLinkRequest
 		metadata runtime.ServerMetadata
 	)
+	io.Copy(io.Discard, req.Body)
 	if err := req.ParseForm(); err != nil {
 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 	}
diff --git a/api/go/gosdn/transport/transport.pb.go b/api/go/gosdn/transport/transport.pb.go
index 22768e44c662bd29f5bb747370864bb485389e5f..c81ab65063703d8407d6095ed79596ba0f64bf48 100644
--- a/api/go/gosdn/transport/transport.pb.go
+++ b/api/go/gosdn/transport/transport.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.36.4
+// 	protoc-gen-go v1.36.5
 // 	protoc        (unknown)
 // source: gosdn/transport/transport.proto
 
diff --git a/api/openapiv2/gosdn_northbound.swagger.json b/api/openapiv2/gosdn_northbound.swagger.json
index a000de65c354fb96bb867d8c2867925b103d319a..d5a7d045d9724cc1ea00bdba9da3ae6a36ebdc52 100644
--- a/api/openapiv2/gosdn_northbound.swagger.json
+++ b/api/openapiv2/gosdn_northbound.swagger.json
@@ -711,7 +711,7 @@
     },
     "/plugins": {
       "get": {
-        "operationId": "PluginInternalService_GetAvailablePlugins",
+        "operationId": "PluginInternalService_AvailablePlugins",
         "responses": {
           "200": {
             "description": "A successful response.",
diff --git a/api/proto/gosdn/plugin-internal/plugin-internal.proto b/api/proto/gosdn/plugin-internal/plugin-internal.proto
index 70ad2e22fc69b93035e186520f7a04218bad6483..21fb8663b967f3632d5613b8e8866e903f1792f4 100644
--- a/api/proto/gosdn/plugin-internal/plugin-internal.proto
+++ b/api/proto/gosdn/plugin-internal/plugin-internal.proto
@@ -10,11 +10,10 @@ import "google/api/annotations.proto";
 option go_package = "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-internal";
 
 service PluginInternalService {
-  rpc AvailablePlugins(GetAvailablePluginsRequest) returns (gosdn.plugin_registry.GetResponse);
-  rpc GetPluginSchema(GetPluginSchemaRequest) returns (stream PluginSchemaPayload);
-  rpc GetAvailablePlugins(GetAvailablePluginsRequest) returns (gosdn.plugin_registry.GetResponse) {
+  rpc AvailablePlugins(GetAvailablePluginsRequest) returns (gosdn.plugin_registry.GetResponse){
     option (google.api.http) = {get: "/plugins"};
-}
+  };
+  rpc GetPluginSchema(GetPluginSchemaRequest) returns (stream PluginSchemaPayload);
 }
 
 message GetAvailablePluginsRequest {
@@ -29,8 +28,3 @@ message GetPluginSchemaRequest {
 message PluginSchemaPayload {
   bytes chunk = 1;
 }
-
-message GetAvailablePluginsResponse {
-  int64 timestamp = 1; // Timestamp in nanoseconds since Epoch.
-  repeated gosdn.plugin_registry.Plugin plugins = 2;
-}
\ No newline at end of file
diff --git a/controller/northbound/server/plugin.go b/controller/northbound/server/plugin.go
index 25f4b3cff9a262d3420ad5766b8da8c5b9cf025e..3338520da281bf8817f39f7134ac4c6c141b6368 100644
--- a/controller/northbound/server/plugin.go
+++ b/controller/northbound/server/plugin.go
@@ -55,21 +55,6 @@ func (pis *PluginInternalServer) AvailablePlugins(ctx context.Context, request *
 	return pis.pluginRegistryClient.GetAll(ctx, getAllRequest)
 }
 
-func (pis *PluginInternalServer) GetAvailablePlugins(ctx context.Context, request *pipb.GetAvailablePluginsRequest) (*rpb.GetResponse, error) {
-	ctx, cancel := context.WithTimeout(ctx, time.Minute*1)
-	defer cancel()
-
-	if err := pis.protoValidator.Validate(request); err != nil {
-		return nil, status.Errorf(codes.Aborted, "%v", err)
-	}
-
-	getAllRequest := &rpb.GetAllRequest{
-		Timestamp: time.Now().UnixNano(),
-	}
-
-	return pis.pluginRegistryClient.GetAll(ctx, getAllRequest)
-}
-
 func (pis *PluginInternalServer) GetPluginSchema(request *pipb.GetPluginSchemaRequest, stream pipb.PluginInternalService_GetPluginSchemaServer) error {
 	labels := prometheus.Labels{"service": "plugin", "rpc": "get plugin schema"}
 	start := metrics.StartHook(labels, grpcRequestsTotal)